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 [2018/01/25 15:23] – code jau | howto:emh_pv-anlage [2019/09/02 11:02] – virtuelle Kanäle statt direktverbrauch.php jau | ||
---|---|---|---|
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 132: | Zeile 130: | ||
< | < | ||
- | sudo systemctl start vzlogger | + | vzlogger |
</ | </ | ||
Zeile 190: | 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 262: | 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 ''/ | + | |
- | + | ||
- | <code php direktverbrauch.php> | + | |
- | <?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 ====== |
howto/emh_pv-anlage.txt · Zuletzt geändert: 2022/04/21 20:29 von jau