NEWS
Status vom Kostal Wechselrichter auslesen?
-
Ich benutze folgendes Script:
/* Photovoltaik: Piko 5.5 Anlage Diese Script stammt aus dem Homematic Forum. Von wem weiß ich nicht mehr. Lief bei mir als ccu.io.Script einwandfrei. Dieses Script habe ich nun auf iobroker umgeschrieben. @bahnuhr 02.01.2017 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 = 'x'; // Password der Photovoltaik-Anlage var IPAnlage = '192.168.xxx.xx'; // IP der Photovoltaik-Anlage var logging = false; function Piko() { var cheerio = require('cheerio'); var request = require('request'); if (logging) log("Piko 5.5 auslesen"); //http://SN-Login:WGrZMkb@192.168.243.75 request('http://' + NameAnlage + ':' + PassAnlage +'@' + IPAnlage, function (error, response, body) { $ = cheerio.load(body); var d = $("td"); var pwr = parseFloat(d.eq(14).text().trim()); // Energie aktuell in W var day = parseFloat(d.eq(26).text().trim()); // Tagesenergie in kWh var all = parseFloat(d.eq(17).text().trim()); // Gesamtenergie in kWh var v1 = d.eq(56).text().trim(); // PV Generator Nr. 1 - Spannung in V var i1 = d.eq(65).text().trim(); // PV Generator Nr. 1 - Strom in A var p1 = parseInt(v1 * i1); var v2 = d.eq(82).text().trim(); // PV Generator Nr. 1 - Spannung in V var i2 = d.eq(91).text().trim(); // PV Generator Nr. 1 - Strom in A var p2 = parseInt(v2 * i2); if (isNaN(pwr)) pwr = 0; if (isNaN(p1)) p1 = 0; if (isNaN(p2)) p2 = 0; if (logging) log("Leistung aktuell= " + pwr); if (logging) log("Tagesleistung= " + day); if (logging) log("Leistung gesamt= " + all); if (logging) log("Leistung Strang 1= " + p1); if (logging) log("Leistung Strang 2= " + p2); setState(idaktuell, pwr); setState(idTag, day); setState(idall, all); setState(idP1, p1); setState(idP2, 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); });
-
Variablen manuell anlegen
-
benutzernamen, password, ip anpassen
-
cheerio unter js eintragen.
dann klappts.
mfg
Dieter
-
-
Hi,
ich habe einen Piko 7.0 mit der UI Version 6.20 und FW 5.42 welchen ich gerne mit iobroker auslesen möchte.
Ich habe hier schon einige Beiträge gelesen und verschiedene Scripte probiert. Allerdings funktionieren diese bei mir nicht da diese wohl alle für 5.36 und älter sind.
Hat jemand von euch schon ein Script das mit einer neueren Version funktioniert?
Viele Grüße
Yoschi
-
Probier das mal:
// Ausleseskript Wechselrichter Kostal Piko ab Firmware v05.31 (12.10.2015) //Variable //Leistungswerte ID_DCEingangGesamt = 33556736; // in W ID_Ausgangsleistung = 67109120; // in W ID_Eigenverbrauch = 83888128; // in W //Status ID_Status = 16780032; // 0:Off //Statistik - Tag ID_Ertrag_d = 251658754; // in Wh ID_Hausverbrauch_d = 251659010; // in Wh ID_Eigenverbrauch_d = 251659266; // in Wh ID_Eigenverbrauchsquote_d = 251659278; // in % ID_Autarkiegrad_d = 251659279; // in % //Statistik - Gesamt ID_Ertrag_G = 251658753; // in kWh ID_Hausverbrauch_G = 251659009; // in kWh ID_Eigenverbrauch_G = 251659265; // in kWh ID_Eigenverbrauchsquote_G = 251659280; // in % ID_Autarkiegrad_G = 251659281; // in % ID_Betriebszeit = 251658496; // in h //Momentanwerte - PV Genertor ID_DC1Spannung = 33555202; // in V ID_DC1Strom = 33555201; // in A ID_DC1Leistung = 33555203; // in W ID_DC2Spannung = 33555458; // in V ID_DC2Strom = 33555457; // in A ID_DC2Leistung = 33555459; // in W //Momentanwerte Haus ID_HausverbrauchSolar = 83886336; // in W ID_HausverbrauchBatterie = 83886592; // in W ID_HausverbrauchNetz = 83886848; // in W ID_HausverbrauchPhase1 = 83887106; // in W ID_HausverbrauchPhase2 = 83887362; // in W ID_HausverbrauchPhase3 = 83887618; // in W //Netz Netzparameter ID_NetzAusgangLeistung = 67109120; // in W ID_NetzFrequenz = 67110400; // in Hz ID_NetzCosPhi = 67110656; //Netz Phase 1 ID_P1Spannung = 67109378; // in V ID_P1Strom = 67109377; // in A ID_P1Leistung = 67109379; // in W //Netz Phase 2 ID_P2Spannung = 67109634; // in V ID_P2Strom = 67109633; // in A ID_P2Leistung = 67109635; // in W //Netz Phase 3 ID_P3Spannung = 67109890; // in V ID_P3Strom = 67109889; // in A ID_P3Leistung = 67109891; // in W var IPAnlage = '192.168.123.456/api/dxs.json'; // IP der Photovoltaik-Anlage createState('Messwerte.0.Solaranlage.Momentanwerte.Leistung_AC_aktuell', 0); createState('Messwerte.0.Solaranlage.Summenwerte.Autarkiegrad_d',0); createState('Messwerte.0.Solaranlage.Summenwerte.Autarkiegrad_G',0); createState('Messwerte.0.Solaranlage.Summenwerte.Betriebszeit',0); createState('Messwerte.0.Solaranlage.Momentanwerte.Leistung_DC_aktuell',0); createState('Messwerte.0.Solaranlage.Momentanwerte.Eigenverbrauch',0); createState('Messwerte.0.Solaranlage.Summenwerte.Eigenverbrauch_d'); createState('Messwerte.0.Solaranlage.Summenwerte.Eigenverbrauch_G', 0); createState('Messwerte.0.Solaranlage.Summenwerte.Eigenverbrauchsquote_d', 0); createState('Messwerte.0.Solaranlage.Summenwerte.Eigenverbrauchsquote_G', 0); createState('Messwerte.0.Solaranlage.Summenwerte.Tagesertrag', 0); createState('Messwerte.0.Solaranlage.Summenwerte.Gesamtertrag', 0); createState('Messwerte.0.Solaranlage.Summenwerte.Hausverbrauch_d', 0); createState('Messwerte.0.Solaranlage.Summenwerte.Hausverbrauch_G', 0); createState('Messwerte.0.Solaranlage.Momentanwerte.P1Spannung'); createState('Messwerte.0.Solaranlage.Momentanwerte.P2Spannung'); createState('Messwerte.0.Solaranlage.Momentanwerte.P1Strom'); createState('Messwerte.0.Solaranlage.Momentanwerte.P2Strom'); createState('Messwerte.0.Solaranlage.Momentanwerte.P1Leistung'); createState('Messwerte.0.Solaranlage.Momentanwerte.P2Leistung'); var logging = false; var request = require('request'); function Piko() { if (logging) log("Piko 5.5 auslesen"); request('http://' + IPAnlage + '?dxsEntries=' + ID_DCEingangGesamt + '&dxsEntries=' + ID_Ausgangsleistung + '&dxsEntries=' + ID_Eigenverbrauch + '&dxsEntries=' + ID_Eigenverbrauch_d + '&dxsEntries=' + ID_Eigenverbrauch_G + '&dxsEntries=' + ID_Eigenverbrauchsquote_d + '&dxsEntries=' + ID_Eigenverbrauchsquote_G + '&dxsEntries=' + ID_Ertrag_d + '&dxsEntries=' + ID_Ertrag_G + '&dxsEntries=' + ID_Hausverbrauch_d + '&dxsEntries=' + ID_Hausverbrauch_G + '&dxsEntries=' + ID_Autarkiegrad_G + '&dxsEntries=' + ID_Autarkiegrad_d + '&dxsEntries=' + ID_Betriebszeit + '&dxsEntries=' + ID_P1Spannung + '&dxsEntries=' + ID_P2Spannung + '&dxsEntries=' + ID_P1Strom + '&dxsEntries=' + ID_P2Strom + '&dxsEntries=' + ID_P1Leistung + '&dxsEntries=' + ID_P2Leistung + '&dxsEntries=' + ID_Status + '&dxsEntries=' + ID_DC1Leistung + '&dxsEntries=' + ID_DC2Leistung, function (error, response, body) { if(!error && response.statusCode ==200) { if(logging) log(body); var result = JSON.parse(body).dxsEntries; setState('Messwerte.0.Solaranlage.Momentanwerte.Leistung_DC_aktuell', result[0].value, true); setState('Messwerte.0.Solaranlage.Momentanwerte.Leistung_AC_aktuell', result[1].value, true); setState('Messwerte.0.Solaranlage.Momentanwerte.Eigenverbrauch', result[2].value); setState('Messwerte.0.Solaranlage.Summenwerte.Eigenverbrauch_d', result[3].value); setState('Messwerte.0.Solaranlage.Summenwerte.Eigenverbrauch_G', result[4].value); setState('Messwerte.0.Solaranlage.Summenwerte.Eigenverbrauchsquote_d', result[5].value); setState('Messwerte.0.Solaranlage.Summenwerte.Eigenverbrauchsquote_G', result[6].value); setState('Messwerte.0.Solaranlage.Summenwerte.Tagesertrag', result[7].value, true); setState('Messwerte.0.Solaranlage.Summenwerte.Gesamtertrag', result[8].value, true); setState('Messwerte.0.Solaranlage.Summenwerte.Hausverbrauch_d', result[9].value); setState('Messwerte.0.Solaranlage.Summenwerte.Hausverbrauch_G', result[10].value); setState('Messwerte.0.Solaranlage.Summenwerte.Autarkiegrad_G', result[11].value); setState('Messwerte.0.Solaranlage.Summenwerte.Autarkiegrad_d', result[12].value); setState('Messwerte.0.Solaranlage.Summenwerte.Betriebszeit', result[13].value, true); setState('Messwerte.0.Solaranlage.Momentanwerte.P1Spannung', result[14].value, true); setState('Messwerte.0.Solaranlage.Momentanwerte.P2Spannung', result[15].value, true); setState('Messwerte.0.Solaranlage.Momentanwerte.P1Strom', result[16].value, true); setState('Messwerte.0.Solaranlage.Momentanwerte.P2Strom', result[17].value, true); setState('Messwerte.0.Solaranlage.Momentanwerte.P1Leistung', result[18].value, true); setState('Messwerte.0.Solaranlage.Momentanwerte.P2Leistung', result[19].value, true); setState('Messwerte.0.Solaranlage.Momentanwerte.Status', result[20].value, true); setState('Messwerte.0.Solaranlage.Momentanwerte.Leistung_String1', result[21].value, true); setState('Messwerte.0.Solaranlage.Momentanwerte.Leistung_String2', result[22].value, true); } else { log("Fehler: " + error + " bei Abfrage von: " + url, "warn"); } }); } schedule("*/10 * 5-23 * * *", Piko);
IP anpassen und ggf. Schedule. im Moment wird zwischen 5:00 und 23:59 alle 10 Sekunden geparst
Gruß
rainer
-
Hi,
vielen Dank funktioniert auf anhieb. Weist du bis zu welcher Version vom Piko das Script laufen sollte? Also FW und UI Version? Würde nämlich auch gerne updaten wenn das Script danach noch geht
Viele Grüße
Yoschi
-
Weist du bis zu welcher Version vom Piko das Script laufen sollte? `
Nö!ich denke aber, dass es da kein Problem gibt.
Der große unterschied vor und nach der 5.31 liegt darin, dass vorher HTML-Seiten existierten, die geparst werden konnten, und danach alles mit java läuft.
Gruß
Rainer
-
Danke für dein Feedback.
Mir ist gerade noch aufgefallen das im Script selbst die Variablen für P3 (dritte Phase) angelegt ist. Aber das Script diese nicht ausliest.
Ich hatte mein Script um die jeweiligen P3 Zeilen erweitert, aber leider kommen dann für den Part nicht die richtigen werte raus. Ein Wert wird auch gar nicht erst ausgelesen.
ID_P1Spannung = 67109378; // in V ID_P1Strom = 67109377; // in A ID_P1Leistung = 67109379; // in W //Netz Phase 2 ID_P2Spannung = 67109634; // in V ID_P2Strom = 67109633; // in A ID_P2Leistung = 67109635; // in W //Netz Phase 3 ID_P3Spannung = 67109890; // in V ID_P3Strom = 67109889; // in A ID_P3Leistung = 67109891; // in W
-
Guten Morgen,
funktioniert das eigentlich auch bei einem Kostal PLENTICORE plus?
Ich würde das gerne mit Batteriespeicher kaufen, ein System sollte aber unbedingt an ioBroker angebunden werden
-
Plenticore Plus kannst Du ganz einfach über den Modbus Adapter auslesen.
Grüße,
Loop
-
Hallo zusammen,
trotz Code
(?:\s+([a-zA-Z äöüÄÖÜ]+))
wird mir bei Störung immer nur St angezeigt.
Rolle -> Wert
Typ -> String
Alles ander Finktioniert ohne Probleme
hat jemand eine Idee?
-
Kann mir hier jemand die modbus Adapter Einstellungen für ein Plenticore Plus 5.5 mit Firmware 1.30 erklären oder als Screenshot zeigen.
Habe die IP, Port und GeräteID eingetragen, sonst noch nichts weiter. Die Instanz bleibt aber gelb. Im Log steht "Serial is not available", habe aber TCP gewählt. -
@bahnuhr
Hallo Dieter,
ich versuche mich grad an dem skript, bin aber noch seeeeeeeeehr neu in dem ganzen Thema.
Was meinst du mit Cheerio unter JS eintragen?
Und die Variablen kann ich in einen Ordner anlegen den ich z.B. Wechselrichter nenne? -
@Spooky99 sagte in Status vom Kostal Wechselrichter auslesen?:
@bahnuhr
Hallo Dieter,
ich versuche mich grad an dem skript, bin aber noch seeeeeeeeehr neu in dem ganzen Thema.
Was meinst du mit Cheerio unter JS eintragen?
Und die Variablen kann ich in einen Ordner anlegen den ich z.B. Wechselrichter nenne?cheerio klappt nicht mehr.
Musste das Script wie folgt ä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 = 'SN-Login'; // Nutzername der Photovoltaik-Anlage var PassAnlage = 'xxx'; // Password der Photovoltaik-Anlage var IPAnlage = '192.168.xxx.xxx'; // IP der Photovoltaik-Anlage var logging = false; var request = require('request'); function Piko() { log("Piko 5.5 auslesen"); var results = []; request('http://' + NameAnlage + ':' + PassAnlage +'@' + IPAnlage, function (error, response, body) { var d = body.toString(); if (logging) log (d); 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); if (logging) log("Leistung aktuell= " + pwr + " W"); if (logging) log("Tagesleistung= " + day + " kWh"); if (logging) log("Leistung gesamt= " + all + " kWh"); if (logging) log("Leistung Strang 1= " + p1 + " W"); if (logging) 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); });
-
@bahnuhr ok werde ich gleich mal übernehmen...
ich tue mich noch schwer mit den Variablen anlegen, hättest du da vielleicht ein BIld wie das bei dir ausschaut? Ich bin echt unbeholfen -
@Spooky99 sagte in Status vom Kostal Wechselrichter auslesen?:
Variablen anlegen,
mit folgendem 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'});
-
und bei den Objekten siehts dann so aus:
-
und meine Darstellung in vis:
-
und die Darstellung in flot:
Aber das kannst du ja machen wie du möchtest.
-
ARGH WIE GEIL IST DAS DENN??????
Vielen vielen Dank!!! WIe ich das aufbereite muss ich mal sehen aber das ist ja der Hammer!
Da muss ich wohl doch noch nen Volkshochschulkurs belegen;-) -
@Spooky99 sagte in Status vom Kostal Wechselrichter auslesen?:
ARGH WIE GEIL IST DAS DENN??????
Vielen vielen Dank!!! WIe ich das aufbereite muss ich mal sehen aber das ist ja der Hammer!
Da muss ich wohl doch noch nen Volkshochschulkurs belegen;-)wenns gefällt dann positiv vooten.
-
und irgendwann hab ich auch raus wie ich in das runde Anzeigending 1000 2000 3000 usw. stehen habe irgendwie unterteilt der das noch falsch...