howto:wechselrichter_kostal_piko
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | |||
howto:wechselrichter_kostal_piko [2018/03/21 17:38] – code jau | howto:wechselrichter_kostal_piko [2018/04/01 16:02] (aktuell) – verschoben jau | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Wechselrichter Kostal Piko ueber Web-Interface auslesen und im volkszaehler erfassen ====== | + | === (verschobene Seite) === |
- | + | #redirect hardware:channels:solar_inverters:kostal_pico | |
- | Das Problem kennen bestimmt einige: Der Wechselrichter hat zwar meistens einen Netzwerkanschluss, | + | |
- | + | ||
- | Dann könnte das folgende PHP-Skript interessant sein. Damit habe ich meinen Wechselrichter | + | |
- | Da der WR ohnehin die aktuelle Leistung, als auch den gesamten Stromertrag über das WR-Web-Frontend anzeigt, wollte ich diese Daten alle fünf Minuten auslesen und in die Volkszähler Datenbank schreiben. | + | |
- | Zum Auslesen und Anzeigen der Messwerte benutze ich einen Raspberry Pi.Das Script htmlvz.php liest die Parameter aus der Konfigurationsdatei htmlvz.ini und schreibt die Daten über vzclient in die entsprechenden Kanäle. | + | |
- | + | ||
- | ===== Image auf Raspberry Pi installieren ===== | + | |
- | + | ||
- | Zuerst muss das Volkszähler Image installiert werden: [[raspberry_pi_image|Volkszaehler auf einem Raspberry Pi installieren]]. | + | |
- | Die korrekte Installation von vzclient überprüfen: | + | |
- | Falls < | + | |
- | < | + | |
- | Weitere Infos unter [[: | + | |
- | + | ||
- | ===== Kanäle im Frontend erstellen ===== | + | |
- | + | ||
- | Für den Wechselrichter habe ich zwei [[: | + | |
- | Kanal 1: "PV aktuelle Leistung" | + | |
- | Typ: Stromsensor | + | |
- | style: steps | + | |
- | öffentlich: | + | |
- | Farbe: black | + | |
- | aktiv: x | + | |
- | + | ||
- | Kanal 2: "PV Zählerstand" | + | |
- | Typ: Stromzaehler | + | |
- | style: steps | + | |
- | öffentlich: | + | |
- | Farbe: aqua | + | |
- | aktiv: x | + | |
- | Der zweite Kanal ist eigentlich nicht nötig. Man kann jedoch später den Zählerstand leichter auslesen. | + | |
- | + | ||
- | ===== Linux Skript zum Auslesen der Wechselrichter-Webseite ===== | + | |
- | Die Scriptdatei htmlvz.php und die Konfigurationsdatei htmlvz.ini habe ich im Homeverzeichnis des Benutzers pi abgelegt (Standardverzeichnis).Du kannst die Dateien z.B. mit dem Programm psftp auf den Raspi kopieren. | + | |
- | Die UUID des gewünschten Kanals sowie die anderen Parameter (hoffentlich selbsterklärend) trägt man anschließend die Datei htmlvz.ini ein: | + | |
- | < | + | |
- | [allgemein] | + | |
- | ; der Pfad zum Programm vzclient kann durch which vzclient ermittelt unter Linux werden | + | |
- | vzclient_pfad = '/ | + | |
- | logdatei = '/ | + | |
- | + | ||
- | [piko] | + | |
- | user = ' | + | |
- | passwort = ' | + | |
- | wechselrichter_name = ' | + | |
- | UUID_aktuelle_leistung = ' | + | |
- | UUID_gesamtenergieerzeugung ='' | + | |
- | </ | + | |
- | + | ||
- | <code php htmlvz.php> | + | |
- | <?php | + | |
- | /** | + | |
- | * Skript zum Auslesen von Kostal Piko Wechselrichter und | + | |
- | * Schreiben in die Volkszähler DB | + | |
- | * getestet mit Modell Kostal Piko 5.5 ver. 3.1 | + | |
- | * Konfig Datei htmlvz.ini muss vorher bearbeitet werden | + | |
- | * erstellt am 16.7.2013 von Karlheinz | + | |
- | * Stand: 15.09.2013 | + | |
- | */ | + | |
- | + | ||
- | $ini_file = parse_ini_file(" | + | |
- | // | + | |
- | $user = $ini_file[" | + | |
- | $pwd = $ini_file[" | + | |
- | $wr = $ini_file[" | + | |
- | $UUID_gesamt = $ini_file[" | + | |
- | $UUID_aktuell = $ini_file[" | + | |
- | $logdatei = $ini_file[" | + | |
- | if (empty($logdatei)) { | + | |
- | echo " | + | |
- | exit; | + | |
- | } | + | |
- | if (empty($wr)) { | + | |
- | echo " | + | |
- | exit; | + | |
- | } | + | |
- | $url = " | + | |
- | //echo "url: $url \n"; | + | |
- | + | ||
- | $contents = ''; | + | |
- | $handle = fopen ($url, " | + | |
- | //echo $handle; | + | |
- | + | ||
- | while (!feof($handle)) { | + | |
- | $contents .= fread($handle, | + | |
- | } | + | |
- | fclose($handle); | + | |
- | $searchtext = array(" | + | |
- | $contents = str_replace($searchtext, | + | |
- | $full = explode("</ | + | |
- | foreach ( $full as $line) { | + | |
- | $line = strip_tags(html_entity_decode($line)); | + | |
- | //echo $line; | + | |
- | + | ||
- | if ( preg_match("/ | + | |
- | {$line = str_replace(" | + | |
- | unset($line2); | + | |
- | $line2 = array_filter(explode(" | + | |
- | $line2 = array_values($line2); | + | |
- | // | + | |
- | if ($line2[1] == " | + | |
- | // | + | |
- | //add array 1 mit 0 Watt | + | |
- | $line2[5] = $line2[4]; | + | |
- | $line2[4] = $line2[3]; | + | |
- | $line2[3] = $line2[2]; | + | |
- | $line2[2] = $line2[1]; | + | |
- | $line2[1] = 0; | + | |
- | } | + | |
- | // | + | |
- | $aktuell = $line2[1]; | + | |
- | $aktuellE = $line2[2]; | + | |
- | $Gesamtenergie = $line2[4]; | + | |
- | $GesamtenergieE = $line2[5]; //Einheit von Gesamtenergie | + | |
- | //echo " | + | |
- | } | + | |
- | if ( preg_match("/ | + | |
- | //echo "$line \n"; | + | |
- | unset($line2); | + | |
- | $line2 = array_filter(explode(" | + | |
- | $line2 = array_values($line2); | + | |
- | // | + | |
- | + | ||
- | $tleistung = $line2[1]; | + | |
- | $tleistungE = $line2[2]; // Einheit von tleistung | + | |
- | //echo " | + | |
- | // | + | |
- | } | + | |
- | if ( preg_match("/ | + | |
- | { $status = trim(str_replace(" | + | |
- | //echo " | + | |
- | } | + | |
- | + | ||
- | } // foreach Ende | + | |
- | + | ||
- | // Daten mit vzclient in die DB schreiben | + | |
- | // | + | |
- | // Zusammenfassung: | + | |
- | echo date(" | + | |
- | if (isset($UUID_aktuell) && !empty($UUID_aktuell)){ | + | |
- | //echo "\n not empty UUID aktuell Zweig \n"; | + | |
- | // | + | |
- | exec($ini_file[" | + | |
- | //echo "vzrc: $vzrc \n"; | + | |
- | if ($vzrc == 0) { | + | |
- | // | + | |
- | echo " | + | |
- | } | + | |
- | else { | + | |
- | // | + | |
- | echo " | + | |
- | } | + | |
- | } | + | |
- | if (isset($UUID_gesamt) && !empty($UUID_gesamt)) { | + | |
- | //echo "not empty UUID Gesamt Zweig \n"; | + | |
- | exec($ini_file[" | + | |
- | if ($vzrc == 0) { | + | |
- | // | + | |
- | echo " | + | |
- | } | + | |
- | else { | + | |
- | // | + | |
- | echo " | + | |
- | } | + | |
- | // | + | |
- | } | + | |
- | echo date(" | + | |
- | + | ||
- | ?> | + | |
- | </ | + | |
- | + | ||
- | Das Script muss noch als ausführbar gekennzeichnet werden: | + | |
- | < | + | |
- | htmlvz ausführen: | + | |
- | < | + | |
- | 20130916222335 Erzeugung aktuell: 100 W, Gesamtenergie: | + | |
- | aktuell übertragen: | + | |
- | Gesamtenergie übertragen: | + | |
- | 20130916222337 Skriptende </ | + | |
- | + | ||
- | Eine Zusammenfassung und Übertragungsbestätigung findet sich anschliessend in der log-Datei. | + | |
- | + | ||
- | Um die Übertragung zu automatisieren, | + | |
- | Mit dem voreingestellten Editor hatte ich meine Probleme und habe deshalb den Editor auf nano umgestellt: | + | |
- | < | + | |
- | Anschliessend wird das Script alle fünf Minuten eingeplant: | + | |
- | < | + | |
- | */5 * * * * / | + | |
- | </ | + | |
- | crontab -l zeigt die Einplanung an. | + | |
- | + | ||
- | Wenn das Script bereits einige Male manuell ausgeführt wurde, kann man im VZ-Frontend die öffentlichen Kanäle anzeigen. | + | |
- | + | ||
- | Weiterführende Links: | + | |
- | [[: | + |
howto/wechselrichter_kostal_piko.txt · Zuletzt geändert: 2018/04/01 16:02 von jau