howto:emh_pv-anlage
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungNächste ÜberarbeitungBeide Seiten der Revision | ||
howto:emh_pv-anlage [2017/05/15 22:55] – Frontend-Verzeichnis geändert jau | howto:emh_pv-anlage [2019/09/02 11:02] – virtuelle Kanäle statt direktverbrauch.php jau | ||
---|---|---|---|
Zeile 19: | Zeile 19: | ||
====== Installation der Volkszähler Software ====== | ====== Installation der Volkszähler Software ====== | ||
- | Installation wie im [[software: | + | Installation wie im [[software: |
====== Installation von libsml und vzlogger ====== | ====== Installation von libsml und vzlogger ====== | ||
Zeile 54: | Zeile 54: | ||
Davon interessiert uns **ID_SERIAL_SHORT=0061E011**. Das ist die Seriennummer des Lesekopfes. Das wiederholt man für den zweiten Lesekopf, der unter "/ | Davon interessiert uns **ID_SERIAL_SHORT=0061E011**. Das ist die Seriennummer des Lesekopfes. Das wiederholt man für den zweiten Lesekopf, der unter "/ | ||
- | Man erstellt jetzt eine Datei “/ | + | Man erstellt jetzt eine Datei '' |
- | < | + | < |
SUBSYSTEM==" | SUBSYSTEM==" | ||
SUBSYSTEM==" | SUBSYSTEM==" | ||
Zeile 69: | Zeile 69: | ||
</ | </ | ||
- | bringt das udev System dazu die neue Regel anzuwenden und die beiden sym. Links anzulegen. Die beiden Leseköpfe sind ab sofort immer unter "/ | + | bringt das udev System dazu die neue Regel anzuwenden und die beiden sym. Links anzulegen. Die beiden Leseköpfe sind ab sofort immer unter '' |
< | < | ||
Zeile 84: | Zeile 84: | ||
Wir brauchen insgesamt sieben Stück. Vier mit Leistungswerten und drei Zählerständen. Bei allen Kanälen: Style " | Wir brauchen insgesamt sieben Stück. Vier mit Leistungswerten und drei Zählerständen. Bei allen Kanälen: Style " | ||
- | * Kanal 1: Direktverbrauch, | + | * Kanal 1: Haus 1.8.0 (Bezug +A), Typ El. Energie (Zählerstände), |
- | * Kanal 2: Gesamtverbrauch, | + | * Kanal 2: Haus 16.7.0 (Leistung), Typ El. Energie (Leistungswerte) |
- | * Kanal 3: Haus 1.8.0 (Bezug +A), Typ El. Energie (Zählerstände), | + | * Kanal 3: Haus 2.8.0 (Lieferung -A), Typ El. Energie (Zählerstände), |
- | * Kanal 4: Haus 16.7.0 (Leistung), Typ El. Energie (Leistungswerte) | + | * Kanal 4: PV 2.7.0 (Leistung), Typ StomEl. Energie (Leistungswerte)sensor |
- | * Kanal 5: Haus 2.8.0 (Lieferung -A), Typ El. Energie (Zählerstände), | + | * Kanal 5: PV 2.8.1 (Erzeugung -A), Typ El. Energie (Zählerstände), |
- | * Kanal 6: PV 2.7.0 (Leistung), Typ StomEl. Energie (Leistungswerte)sensor | + | |
- | * Kanal 7: PV 2.8.1 (Erzeugung -A), Typ El. Energie (Zählerstände), | + | |
{{: | {{: | ||
Zeile 99: | Zeile 97: | ||
====== vzlogger konfigurieren ====== | ====== vzlogger konfigurieren ====== | ||
- | Kommen wir nun zum vzlogger. | + | Kommen wir nun zum vzlogger. |
- | + | ||
- | < | + | |
- | /** | + | |
- | * vzlogger configuration | + | |
- | * | + | |
- | * use proper encoded JSON with javascript comments | + | |
- | * | + | |
- | * take a look at the wiki for detailed information: | + | |
- | * http:// | + | |
- | */ | + | |
+ | <code base vzlogger.conf> | ||
{ | { | ||
" | " | ||
Zeile 136: | Zeile 125: | ||
]} | ]} | ||
- | </file> | + | </code> |
Wenn wir jetzt | Wenn wir jetzt | ||
< | < | ||
- | sudo systemctl start vzlogger | + | vzlogger |
</ | </ | ||
Zeile 184: | Zeile 173: | ||
</ | </ | ||
- | Nun sehen wir alle OBIS-Kennzahlen die unsere Zähler ausgeben. mtr0 ist der Zähler an / | + | Nun sehen wir alle OBIS-Kennzahlen die unsere Zähler ausgeben. mtr0 ist der Zähler an '' |
- | Nun kann man die korrekte / | + | Nun kann man die korrekte |
Vom Zweirichtungszähler | Vom Zweirichtungszähler | ||
Zeile 199: | Zeile 188: | ||
* 2.8.1 = Wirkarbeit Lieferung -A | * 2.8.1 = Wirkarbeit Lieferung -A | ||
- | Nun, das sind fünf Kanäle, die aus den Zählern in der Datenbank landen, warum aber wurden sieben Kanäle angelegt? Dazu kommen wir später. Geduld! | + | Nun, das sind fünf Kanäle, die aus den Zählern in der Datenbank landen. |
Die restlichen OBIS-Kennzahlen, | Die restlichen OBIS-Kennzahlen, | ||
Zeile 213: | Zeile 202: | ||
{{: | {{: | ||
- | <file> | + | <code base vzlogger.conf> |
- | /** | + | |
- | * vzlogger | + | |
- | * | + | |
- | * use proper encoded JSON with javascript comments | + | |
- | * | + | |
- | * take a look at the wiki for detailed information: | + | |
- | * http://wiki.volkszaehler.org/ | + | |
- | */ | + | |
{ | { | ||
" | " | ||
Zeile 269: | Zeile 249: | ||
} | } | ||
]} | ]} | ||
- | </file> | + | </code> |
- | Speichern als "/ | + | Speichern als '' |
< | < | ||
Zeile 280: | Zeile 260: | ||
<note warning> | <note warning> | ||
- | ====== | + | ====== Gesamt- und Direktverbrauch ====== |
Nun ist neben dem Bezug und der Lieferung auch der Gesamt- und Direktverbrauch von Interesse. Diese Werte können jedoch nicht aus den Zählern ausgelesen werde. Sie können nur durch Berechnung ermittelt werden. | Nun ist neben dem Bezug und der Lieferung auch der Gesamt- und Direktverbrauch von Interesse. Diese Werte können jedoch nicht aus den Zählern ausgelesen werde. Sie können nur durch Berechnung ermittelt werden. | ||
+ | * Direktverbrauch = Erzeugung - Lieferung | ||
* Gesamtverbrauch = Bezug + Erzeugung - Lieferung | * Gesamtverbrauch = Bezug + Erzeugung - Lieferung | ||
- | * Direktverbrauch = Erzeugung - Lieferung | ||
+ | Da alle für die Berechnung notwendigen Werte vorliegen erstellt man 2 virtuelle Kanäle vom Typ " | ||
- | Da alle für die Berechnung notwendigen Werte vorliegen erstellt man ein Script (gefunden im [[http:// | + | {{:software:frontends:frontend: |
- | + | ||
- | Damit das Script funktioniert, | + | |
- | < | + | |
- | sudo apt-get install php5-curl | + | |
- | </ | + | |
- | + | ||
- | Folgendes Script z.B. als / | + | |
- | + | ||
- | < | + | |
- | <?php | + | |
- | $urlBase=' | + | |
- | $uuIds=array( ' | + | |
- | ' | + | |
- | ' | + | |
- | ); | + | |
- | + | ||
- | $uuIdTarget=array(' | + | |
- | ' | + | |
- | ); | + | |
- | + | ||
- | $urlEnd=' | + | |
- | + | ||
- | function curl_file_get_contents($URL) | + | |
- | | + | |
- | $c = curl_init(); | + | |
- | curl_setopt($c, | + | |
- | curl_setopt($c, | + | |
- | $contents = curl_exec($c); | + | |
- | curl_close($c); | + | |
- | + | ||
- | if ($contents) return $contents; | + | |
- | else return FALSE; | + | |
- | } // function curl_get_file_contents | + | |
- | + | ||
- | function getTimestamp() | + | |
- | $seconds = microtime(true); | + | |
- | return round( ($seconds * 1000) ); | + | |
- | } | + | |
- | + | ||
- | for ($i=1; $i<5 ; $i++) { | + | |
- | $minTimestamp = getTimestamp(); | + | |
- | $maxTimestamp = $minTimestamp; | + | |
- | foreach($uuIds as $index=> | + | |
- | $url=$urlBase . $value . $urlEnd; | + | |
- | $content = curl_file_get_contents($url); | + | |
- | $content=json_decode($content); | + | |
- | if (!empty($content-> | + | |
- | + | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | } else { | + | |
- | $lastValue=0; | + | |
- | } // if | + | |
- | echo " | + | |
- | + | ||
- | $values[$index]=$lastValue; | + | |
- | } // foreach | + | |
- | + | ||
- | $diffGV= $values[' | + | |
- | echo " | + | |
- | $timestamp = round($minTimestamp + ( ($maxTimestamp - $minTimestamp) / 2 )); | + | |
- | $linkGV=$urlBase . $uuIdTarget[' | + | |
- | $dummy=curl_file_get_contents($linkGV); | + | |
- | echo " | + | |
- | + | ||
- | $diffDV= $values[' | + | |
- | echo " | + | |
- | if ($diffDV> | + | |
- | $linkDV=$urlBase | + | |
- | $dummy=curl_file_get_contents($linkDV); | + | |
- | echo " | + | |
- | | + | |
- | sleep(15); | + | |
- | } // for | + | |
- | ?> | + | |
- | </ | + | |
- | + | ||
- | Zum testen mit | + | |
- | + | ||
- | < | + | |
- | # php / | + | |
- | </ | + | |
- | + | ||
- | aufrufen. Die Ausgabe sollte dann so aussehen. Jeweils 4 mal mit 15 s Pause. | + | |
- | + | ||
- | < | + | |
- | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / Bezug: 653.358 | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | < | + | |
- | </ | + | |
- | + | ||
- | Fehlt nur noch der Crontab Eintrag. Unbedingt als letzte Zeile eine Leerzeile machen. Sonst funktioniert Cron nicht. | + | |
- | + | ||
- | < | + | |
- | # crontab -e | + | |
- | + | ||
- | MAILTO="" | + | |
- | * * * * * / | + | |
- | # Hinter diesem Text noch eine Leerzeile einfuegen, sonst funktioniert cron nicht! | + | |
- | + | ||
- | </ | + | |
+ | * Kanal 6: | ||
+ | * Einheit: W | ||
+ | * Regel: val(in1) - val(in2) | ||
+ | * Eingang 1: UUID von Kanal 5 (PV 2.8.1) | ||
+ | * Eingang 2: UUID von Kanal 3 (Haus 2.8.0) | ||
+ | * Kanal 7: | ||
+ | * Einheit: W | ||
+ | * Regel: val(in1) + val(in2) - val(in3) | ||
+ | * Eingang 1: UUID von Kanal 1 (Haus 1.8.0) | ||
+ | * Eingang 2: UUID von Kanal 5 (PV 2.8.1) | ||
+ | * Eingang 3: UUID von Kanal 3 (Haus 2.8.0) | ||
====== Ergebnis der Bemühungen ====== | ====== Ergebnis der Bemühungen ====== | ||
- | Wurde alles korrekt eingerichtet, | + | Wurde alles korrekt eingerichtet, |
{{: | {{: | ||
- | Danke für die Aufmerksamkeit. | + | Wer es optisch mag kann in den Kanal-Eigenschaften den Füllgrad |
- | + | ||
- | Hier noch ein kleines Tuning an der Darstellung. [[http:// | + | |
{{: | {{: |
howto/emh_pv-anlage.txt · Zuletzt geändert: 2022/04/21 20:29 von jau