NEWS
Piko 5.5 Wechselrichter (alte Firmware) auslesen
-
Hallo,
bisher hatte ich o.g. Thema per Script erledigt mit einem js.modul "cheerio". Dieses läuft aber nicht mehr (warum weiß ich nicht).
Nun habe ich das Script erfolgreich umgeschrieben. Die Werte werden ausgelesen per regex (hier nochmals Danke an homoran; ohne ihn hätte ich den regex nicht gebacken bekommen).Die Objekte müsst ihr logischerweise manuell anlegen; oder per nachfolgendem Script:
// Photovoltaik ------------------------------------------------------------------------------------------------------------- createState('javascript.0.Status.Photovoltaik.Leistung_aktuell', 0, {type: 'number',name: 'Leistung aktuell',min: 0,role: 'per Script'}); createState('javascript.0.Status.Photovoltaik.Tagesleistung', 0, {type: 'number',name: 'Tagesleistung',min: 0,role: 'per Script'}); createState('javascript.0.Status.Photovoltaik.Leistung_gesamt', 0, {type: 'number',name: 'Leistung gesamt',min: 0,role: 'per Script'}); createState('javascript.0.Status.Photovoltaik.Leistung_Strang1', 0, {type: 'number',name: 'Leistung Strang 1',min: 0,role: 'per Script'}); createState('javascript.0.Status.Photovoltaik.Leistung_Strang2', 0, {type: 'number',name: 'Leistung Strang 2',min: 0,role: 'value'});
Diese einmalig in ein Script kopieren, starten und fertig.
Und nun das eigentliche Script. Eure Zugangswerte müsst ihr natürlich angleichen. Das Script fragt die Werte alle 5 Minuten ab (siehe Schedule). Könnt ihr natürlich ändern.
// Photovoltaik: Piko 5.5 Anlage (alte Firmware) // Danke an homoran für den regex // @bahnuhr; 03/2019 Dieter Müller //Variaben var idaktuell = 'javascript.0.Status.Photovoltaik.Leistung_aktuell'; var idTag = 'javascript.0.Status.Photovoltaik.Tagesleistung'; var idall = 'javascript.0.Status.Photovoltaik.Leistung_gesamt'; var idP1 = 'javascript.0.Status.Photovoltaik.Leistung_Strang1'; var idP2 = 'javascript.0.Status.Photovoltaik.Leistung_Strang2'; var NameAnlage = 'xxx'; // Nutzername der Photovoltaik-Anlage var PassAnlage = 'xxx'; // Password der Photovoltaik-Anlage var IPAnlage = '192.168.xxx.xx'; // IP der Photovoltaik-Anlage var logging = false; var request = require('request'); function Piko() { if (logging) log("Piko 5.5 auslesen"); var results = []; request('http://' + NameAnlage + ':' + PassAnlage +'@' + IPAnlage, function (error, response, body) { var d = body.toString(); var reg = /#FFFFFF">[^\d]+([^<]+)/g var z = reg.exec(d); while(z != null) { if (isNaN(z[1])) { if (logging) log("keine Zahl= "+ z[1]); z[1] = 0; } else { if (logging) log("Zahl= "+ z[1]); parseFloat(z[1]); } results[results.length] = z[1]; z = reg.exec(d); } if (logging) log("results= "+ results); // Werte zuordnen var pwr = results[0]; // Energie aktuell in W var day = results[2]; // Tagesenergie in kWh var all = results[1]; // Gesamtenergie in kWh var v1 = results[3]; // PV Generator Nr. 1 - Spannung in V var i1 = results[5]; // PV Generator Nr. 1 - Strom in A var p1 = parseInt(v1 * i1); var v2 = results[7]; // PV Generator Nr. 2 - Spannung in V var i2 = results[9]; // PV Generator Nr. 2 - Strom in A var p2 = parseInt(v2 * i2); log("Leistung aktuell= " + pwr + " W"); log("Tagesleistung= " + day + " kWh"); log("Leistung gesamt= " + all + " kWh"); log("Leistung Strang 1= " + p1 + " W"); log("Leistung Strang 2= " + p2 + " W"); setState(idaktuell, parseFloat(pwr)); setState(idTag, parseFloat(day)); setState(idall, parseFloat(all)); setState(idP1, parseFloat(p1)); setState(idP2, parseFloat(p2)); }); } schedule("2,7,12,17,22,27,32,37,42,47,52,57 * * * *", function () { log ("Auslöser: Schedule"); Piko(); }); schedule("3 0 * * *", function () { // Variablen löschen um 00:03 Uhr setState('javascript.0.Status.Photovoltaik.Tagesleistung', 0); });
Geht bestimmt auch kürzer; oder schöner im js.Stil. Aber es läuft.
mfg