howto:wechselrichter_kostal_piko
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| howto:wechselrichter_kostal_piko [2016/12/11 07:56] – Interne Links korrigiert 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 ='' | + | |
| - | </ | + | |
| - | + | ||
| - | 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.1481439399.txt.gz · Zuletzt geändert: von jau