NEWS
Status vom Kostal Wechselrichter auslesen?
-
Nur durch austausch des Kommunikationsboards
Gruß
Rainer
-
Könntest du mir auf die Sprünge helfen die Werte vom PIKO mit Parser auszulesen?
Ich komme mit den regex noch nicht wirklich klar. Ausgangsleistung zb? Den Status habe ich mit Hilfe von dem anderen Thread hinbekommen, leider hängt es an den Werten.
-
Gerne,
bin im Moment unterwegs, und zu Hause habe ich einen neuen kostal, so dass ich nicht weiß, ob ich die alten regex noch habe.
Kannst du bitte in der Zwischenzeit das webui öffnen und den Quelltext dazu hier in code und spoiler tags posten,?
Alternativ mal im Forum suchen , da könnten die regex auch irgendwo stehen.
Gruß
Rainer
-
Klar. Bitte
! <title>PV Webserver</title>
! <form method="post" action="">
! | |
| |
! PIKO 5.5
! S_Power (220)
! | |
! | |
! * * *! ! ! AC-Leistung ! Energie ! aktuell ! 1392 W ! Gesamtenergie ! 33695 kWh ! ! ! Tagesenergie ! 2.06 kWh ! Status ! Einspeisen MPP ! ! * * *
! ! ! PV-Generator ! Ausgangsleistung ! <u>String 1</u> ! <u>L1</u> ! Spannung ! 649 V ! Spannung ! 232 V ! Strom ! 1.17 A ! Leistung ! 467 W ! <u>String 2</u> ! <u>L2</u> ! Spannung ! 613 V ! Spannung ! 232 V ! Strom ! 1.14 A ! Leistung ! 461 W ! <u>String 3</u> ! <u>L3</u> ! Spannung ! 0 ! V ! Spannung ! 232 V ! Strom ! 0.00 ! A ! Leistung ! 464 W ! ! * * *
! |
| |
! |
! | | RS485 Kommunikation |
| |
| | Wechselrichter |
| |
! * * *
! | |
| |
! Historie
!
! Infoseite |
! Einstellungen | |
! </form> -
Welche Werte willst du denn haben?
Status:
Status.*\n.*\n(.+)<\/td>\n
Leistung aktuell
aktuell.*\n.*\n(\d*)
Gesamtenergie:
Gesamtenergie.*\n.*\n(\d*)
Tagesenergie:
Tagesenergie.*\n.*\n(\d*\.\d*)
Alles nur mit den Werten in aus dem Quelltext getestet!
Viele Werte erhältst du auch mit:
#FFFFFF">\n(\d*)<
Du musst dann nur im Parser über die Änderung des Wertes bei "Num" das xte Ergebnis ausgeben lassen. (Achtung 0=1.Ergebnis)
Gruß
Rainer
-
Vielen Dank für deine schnelle Anwort, nur leider kommen dort keine Werte bei mir raus.
Die ip ist korrekt, da ich den Status korrekt angezeigt bekomme…
Status aber mit :
(?:\s+([a-zA-Z äöüÄÖÜ]+))
-
Ich kann es leider nicht mehr testen.
Gruß
Rainer
-
Kleines Update:
Die Werte werden nun ausgelesen- aber nicht in die dazugehörigen Objekte geschrieben. Im Parser Adapter werden die richtigen Werte angezeigt, wenn ich auf den „Schraubenschlüssel“ drücke. Also unten im Ergebnis steht alles korrekt. Die Objekte bleiben aber leer- sprich Parser schreibt das Ergebnis nicht in die dazugehörigen Objekte, die Parser selbst erstellt.
Woran liegt’s?
-
Bitte Screenshot von der Konfiguration der abfragen
im Parser adapter
Gruß
Rainer
-
Ich klinke mich hier auch mal ein.
Bekomme mittlerweile auch die Werte im Schraubenschlüssel Symbol, aber leider nicht in den Objekten.
Auch unter regex101 wird das Ergebnis angezeigt.
Sollte eigendlich nur mit einer iOBroker Einstellung zu tun haben oder?
Rollen und Typ hab ich alle Kombinationen durchprobiert. Keine Anzeige.
Ich denke es liegt evtl. noch an den Leerzeichen vor dem jeweiligen Wert? (Bild)
Angezeigt wird's im Schraubenschlüssel Symbol und unter regex101 wenn ich das eingebe:
#FFFFFF">\n(..\d*)
Aber wie gesagt in den Objekten nicht. Kann mir hier jemand beim Code helfen so das es auch iOBroker kapiert?
6001_ohne_titel2.jpeg
6001_3.jpeg -
-
habs nun selber geschafft…
-
Hallo
Ich habe es auch soweit hinbekommen, jedoch - wie schon bekannt - werden keine Werte im Objekt angezeigt bzw. abgefüllt!?
Jemand eine Lösung hierzu? Denn wenn ich keine Werte im Objekt habe, kann ich diese auch nicht für die Visualisierung nutzen.
Danke und Gruss
Vazi
-
Hallo
Ich habe es auch soweit hinbekommen, jedoch - wie schon bekannt - werden keine Werte im Objekt angezeigt bzw. abgefüllt!?
Jemand eine Lösung hierzu? Denn wenn ich keine Werte im Objekt habe, kann ich diese auch nicht für die Visualisierung nutzen.
Danke und Gruss
Vazi `
Habe den "Fehler" gefunden…!!
Die Werte sind ja unter javascirpt.0 aufgeführt! Von dort kann ich die Werte nun ja für alles mögliche holen.
-
Kann mir vielleicht nochmal jemand sagen bzw. helfen warum der Wert zwar in den Einstellungen angezeigt, aber nicht in das entsprechende Objekt übernommen wird?
Ich bekomme leider als Quality device error 0x44 zurück. Die Fehlermeldung besagt wohl, dass die Nummer oder der String nicht gefunden werden konnte.
Ich habe einen Piko 5.5 mit der "alten" Oberfläche ohne JSON API. Deshalb gehe ich davon aus, dass ich das Script nicht nutzen kann/muss und somit auch nicht unter der Javascript Instanz nach den Werten suchen muss
-
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