NEWS
Kaco Blueplanet NX3 10.0 Wechselrichter auslesen (JSON)
-
Hallo!
Ich bin mit ioBroker erst einige Monate am Start. Leider ist Blocky für mich völlig unverständlich und für Javascript bin ich noch zu unwissend um das allein geregelt zu bekommen. Daher meine Frage hier, ob mir jemand helfen kann.
Ich habe wie oben beschrieben einen Kaco Wechselrichter, der mir über den Aufruf einer IP/Link (http://192.168.10.214:8484/getdevdata.cgi?device=2&sn=10.0NX3**********) einen JSON Antwort gibt
flg 1 tim "20240210112416" tmp 381 fac 5002 pac 1377 sac 1377 qac 0 eto 495 etd 22 hto 110 pf 100 wan 0 err 0 vac 0 2341 1 2343 2 2343 iac 0 20 1 20 2 20 vpv 0 6085 1 3628 ipv 0 155 1 134 str []
In ROHDATEN sieht das so aus:
{"flg":1,"tim":"20240210112416","tmp":381,"fac":5002,"pac":1377,"sac":1377,"qac":0,"eto":495,"etd":22,"hto":110,"pf":100,"wan":0,"err":0,"vac":[2341,2343,2343],"iac":[20,20,20],"vpv":[6085,3628],"ipv":[155,134],"str":[]}
Mein Ansatz war jetzt gedanklich folgender, ich möchte die Werte jeweils in einen eigenen Datenpunkt ablegen (alle X Sekunden) um dann in ioBroker diese auszuwerten wie bspw PV Produktion Ja/Nein und wie viel produziert wird.
Wie könnte man das am besten realisieren? Bevorzugt würde ich javascript nutzen, da es sich für mich plausibler beim lernen verstehen lässt. Wie müsste so ein Script aussehen, was diesen Link/IP alle X Sekunden aufruft, die JSON Daten abgreift und in einen jeweiligen, eigenen Datenpunkt schreibt?
Ich habe hier schon mal ein ähnliches Script gesehen, welches aber auf MQTT setzte. Da war ich mir unsicher ob das für mich anwendbar ist.
Die weitere Verarbeitung der einzelnen Daten würde dann per ioBroker und/oder CCU3 erfolgen. Also mir geht es rein um das abholen der Daten und diese in eine art Datenbank zu schrieben.
Vielen Dank schon mal an euch für eure Hilfe.
Grüße Jörg
-
@jörg-5 sagte in Kaco Blueplanet NX3 10.0 Wechselrichter auslesen (JSON):
Wie könnte man das am besten realisieren?
du könntest es über ein Blockly über den Block "Attribut xxx von rohdaten" (zb. Attribut pac würde dir die AC Leistung liefern) in eigene Datenpunkte schreiben, oder über Aliase lösen.
-
Hi @homoran
Vielen Dank für deine Antwort.
Blocky schnalle ich absolut nicht. Bei Javascript verstehe ich wenigstens teilweise was passiert.
Bin blutiger Anfänger, aber ich kann zumindest in Scripten nachvollziehen was passiert.Kennst Du dich mit Blocky gut aus und kannst mir evtl das hier zeigen wie sich das zusammen setzt?
Viele Grüße
Jörg
-
@jörg-5 sagte in Kaco Blueplanet NX3 10.0 Wechselrichter auslesen (JSON):
Blocky schnalle ich absolut nicht. Bei Javascript verstehe ich wenigstens teilweise was passiert.
geht mir weitestgehend genauso, nur umgekehrt.
Bei JS muss dir jemand anderes helfen.
@jörg-5 sagte in Kaco Blueplanet NX3 10.0 Wechselrichter auslesen (JSON):
Kennst Du dich mit Blocky gut aus und kannst mir evtl das hier zeigen wie sich das zusammen setzt?
I'll try my very best!
landet das JSON in einem Datenpunkt?
EDIT:
Hier einmal das Grundgerüst
Statt Datenpunkt habe ich den result in eine Variable geschrieben, und anstelle in den eigenen Datenpunkt nur als debug ausgegeben
EDIT2:
Hier
musst du
- ggf. den Cron anpassen
- den URL vervollständigen
- die Variable result händisch erstellen
- einen DP für Power AC erstellt haben
- und diesen hier eintragen
EDIT3:
Dieses wäre der JS Codevar result; schedule("* * * * *", async function () { try { require("request")('http://192.168.10.214:8484/getdevdata.cgi?device=2&sn=10.0NX3**********', async function (error, response, result) { setState("Object ID", getAttr(result, 'pac'), true); }).on("error", function (e) {console.error(e);}); } catch (e) { console.error(e); } });
-
@homoran sagte: Dieses wäre der JS Code
Etwa so ohne Blockly:
schedule('*/10 * * * * *', function() { request('http://192.168.10.214:8484/getdevdata.cgi?device=2&sn=10.0NX3**********', function(error, response, result) { if(!error && result) { const obj = JSON.parse(result); setState('hm-rega.0.35000', obj.pac); // SV vom Typ "Zahl" } }); });
-
@homoran habs mal probiert, er haut mir aber die Log voll mit Fehlern und die Systemvariable PV Erzeigung "Zahl" wird nicht gefüllt...
Das scheint kein Ansatz zu sein, der den Wert "pac" in eine Systemvariable in der CCU3 schreibt.
In der Log sieht das dann so aus:
javascript.0 2024-02-10 13:54:00.180 info State value to set for "hm-rega.0.35000" has to be type "string" but received type "number" javascript.0 2024-02-10 13:54:00.163 warn at processTicksAndRejections (node:internal/process/task_queues:82:21) javascript.0 2024-02-10 13:54:00.163 warn at endReadableNT (node:internal/streams/readable:1400:12) javascript.0 2024-02-10 13:54:00.162 warn at IncomingMessage.emit (node:domain:489:12) javascript.0 2024-02-10 13:54:00.162 warn at IncomingMessage.emit (node:events:529:35) javascript.0 2024-02-10 13:54:00.162 warn at Object.onceWrapper (node:events:631:28) javascript.0 2024-02-10 13:54:00.162 warn at IncomingMessage.<anonymous> (/opt/iobroker/node_modules/request/request.js:1076:12) javascript.0 2024-02-10 13:54:00.162 warn at Request.emit (node:domain:489:12) javascript.0 2024-02-10 13:54:00.161 warn at Request.emit (node:events:517:28) javascript.0 2024-02-10 13:54:00.161 warn at Request.<anonymous> (/opt/iobroker/node_modules/request/request.js:1154:10) javascript.0 2024-02-10 13:54:00.161 warn at Request.emit (node:domain:489:12) javascript.0 2024-02-10 13:54:00.161 warn at Request.emit (node:events:517:28) javascript.0 2024-02-10 13:54:00.160 warn at Request.self.callback (/opt/iobroker/node_modules/request/request.js:185:22) javascript.0 2024-02-10 13:54:00.160 warn at Request._callback (/opt/iobroker/node_modules/iobroker.javascript/lib/request.js:27:17) javascript.0 2024-02-10 13:54:00.160 warn at script.js.PV.Erzeugung:7:7 javascript.0 2024-02-10 13:54:00.159 warn at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1740:20) javascript.0 2024-02-10 13:54:00.156 warn You are assigning a number to the state "hm-rega.0.35000" which expects a string. Please fix your code to use a string or change the state type to number. This warning might become an error in future versions.
-
@paul53 said in Kaco Blueplanet NX3 10.0 Wechselrichter auslesen (JSON):
schedule('*/10 * * * * *', function() {
Ich probiere deine Variante mal aus. Die vom @Homoran (Blocky Variante) erzeugte nur Warnungen und füllte mir nicht die Systemvariable in der CCU3.
Ich probiere deine Option mal.
-
@jörg-5 sagte: Systemvariable in der CCU3 schreibt
Die SV muss vom Typ "Zahl" sein. Habe es oben angepasst für eine SV, die unbestätigt geschrieben werden muss, damit sie an die CCU gesendet wird.
-
@jörg-5 sagte in Kaco Blueplanet NX3 10.0 Wechselrichter auslesen (JSON):
er haut mir aber die Log voll mit Fehlern und die Systemvariable PV Erzeigung "Zahl" wird nicht gefüllt...
dann hat die SysVar nicht den korrekten Typ
-
@jörg-5 sagte in Kaco Blueplanet NX3 10.0 Wechselrichter auslesen (JSON):
You are assigning a number to the state "hm-rega.0.35000" which expects a string. Please fix your code to use a string or change the state type to number.
-
@paul53 said in Kaco Blueplanet NX3 10.0 Wechselrichter auslesen (JSON):
@homoran sagte: Dieses wäre der JS Code
Etwa so ohne Blockly:
schedule('*/10 * * * * *', function() { request('http://192.168.10.214:8484/getdevdata.cgi?device=2&sn=10.0NX3**********', function(error, response, result) { if(!error && result) { const obj = JSON.parse(result); setState('hm-rega.0.35000', obj.pac); // SV vom Typ "Zahl" } }); });
Danke @paul53 dieser Ansatz hat top funktioniert!
Danke auch an Dich @Homoran für deinen vorherigen Ansatz mit Blocky.Jetzt kann ich bspw in der CCU3 und dem Zählermodul die Erzeugung gegene den Verbrauch stellen und dann zusätzliche Verbraucher wie bspw einen Heizstab ansteuern oder die Steckdose die den eBike Akku lädt.
Super lieben Dank an euch beide!
Eine Frage habe ich aber noch dazu, die Systemvariable ist die "hm-rega.0.35000" richtig? Wenn ich jetzt bspw einen weiteren Wert auslesen will, dann könnte ich den ggf anpassen und die 35000 gegen die neue Systemvariable austauschen?
Viele Grüße
Jörg
PS: Kleiner Einschub noch...
Ich erhalte immer noch die Fehler dazu:javascript.0 2024-02-10 14:08:10.076 info State value to set for "hm-rega.0.35000" has to be type "string" but received type "number" javascript.0 2024-02-10 14:08:10.067 warn at processTicksAndRejections (node:internal/process/task_queues:82:21) javascript.0 2024-02-10 14:08:10.067 warn at endReadableNT (node:internal/streams/readable:1400:12) javascript.0 2024-02-10 14:08:10.067 warn at IncomingMessage.emit (node:domain:489:12) javascript.0 2024-02-10 14:08:10.067 warn at IncomingMessage.emit (node:events:529:35) javascript.0 2024-02-10 14:08:10.066 warn at Object.onceWrapper (node:events:631:28) javascript.0 2024-02-10 14:08:10.066 warn at IncomingMessage.<anonymous> (/opt/iobroker/node_modules/request/request.js:1076:12) javascript.0 2024-02-10 14:08:10.066 warn at Request.emit (node:domain:489:12) javascript.0 2024-02-10 14:08:10.066 warn at Request.emit (node:events:517:28) javascript.0 2024-02-10 14:08:10.066 warn at Request.<anonymous> (/opt/iobroker/node_modules/request/request.js:1154:10) javascript.0 2024-02-10 14:08:10.066 warn at Request.emit (node:domain:489:12) javascript.0 2024-02-10 14:08:10.065 warn at Request.emit (node:events:517:28) javascript.0 2024-02-10 14:08:10.065 warn at Request.self.callback (/opt/iobroker/node_modules/request/request.js:185:22) javascript.0 2024-02-10 14:08:10.065 warn at Request._callback (/opt/iobroker/node_modules/iobroker.javascript/lib/request.js:27:17) javascript.0 2024-02-10 14:08:10.065 warn at script.js.PV.Erzeugung_JavaScript:9:13 javascript.0 2024-02-10 14:08:10.064 warn at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1740:20) javascript.0 2024-02-10 14:08:10.062 warn You are assigning a number to the state "hm-rega.0.35000" which expects a string. Please fix your code to use a string or change the state type to number. This warning might become an error in future versions.
-
@jörg-5 sagte in Kaco Blueplanet NX3 10.0 Wechselrichter auslesen (JSON):
die Systemvariable ist die "hm-rega.0.35000" richtig?
wie meinst du das?
die kommt doch aus driner CCU, was soll da falsch oder richtig sein?
auf jeden Fall war sie nicht@jörg-5 sagte in Kaco Blueplanet NX3 10.0 Wechselrichter auslesen (JSON):
die Systemvariable PV Erzeigung "Zahl" wird nicht gefüllt...
sondern Zeichenkette/String.
@jörg-5 sagte in Kaco Blueplanet NX3 10.0 Wechselrichter auslesen (JSON):
dann könnte ich den ggf anpassen und die 35000 gegen die neue Systemvariable austauschen?
wenn du die dafür in der CCU angelegt hast, ja
aber warum brauchst du alles in der CCU?
-
@homoran Ich habe mich evtl falsch ausgedrückt. Ich meinte damit ob die beschriebene Systemvariable diesen Namen hat und wenn ich bspw einen anderen Wert noch gern in der CCU hätte, ich dann bspw diesen Namen anpassen muss. War für mich eher eine Verständnisfrage dazu.
Zeichenkette, okay. Ich hatte das als Zahl angenommen, da man die vergleichen kann. Habe es jetzt auf Zeichenkette umgestellt.
Warum ich die Werte in der CCU haben möchte liegt daran, das ich in der CCU per Program mehrere Zustände abfrage von Aktoren und dem Stromzähler und daraus inkl Wetter und Helligkeit errechne wie viel Strom nach Verbrauch im Haus noch über sein könnte um entsprechend die Verbraucher zuschalten zu können, die nur bei ausreichender PV Erzeugung geschaltet sein sollen.
Im ioBroker werde ich den Wert vermutlich weiter nutzen, aber in der CCU läuft der eigentliche Prozess. Also mit Abfrage des aktuellen Stromverbrauch aus dem Stromzähler.
Evtl. noch interessant für euch zu wissen, das ich noch einen zweiten Wechselrichter habe, der sich aber nich auslesen lässt. ich muss daher den Wert den ich erhalte umrechnen auf die Fläsche der PV um einen kompletten Ertrag kummulieren zu können.
Ob das am Ende funktioniert, weiss ich noch nicht. Da arbeite ich noch dran.
-
@jörg-5 sagte: Ich erhalte immer noch die Fehler dazu:
Wenn es ein String sein soll, dann hänge die Maßeinheit dran:
setState('hm-rega.0.35000', obj.pac + ' W'); setState('hm-rega.0.35001', obj.fac / 100 + ' Hz');
Damit kann man aber nicht rechnen. Ändere es besser in der CCU in Typ "Zahl" und starte anschließend die Instanz neu.
-
@jörg-5 bevor wir hier alle aneinander vorbeireden
Der Name einer SysVar ist eigentlich irrelevant, sollte aber den Inhalt immer klar definieren
Der Typ muss jedoch Zahl sein, wenn du damit rechnen willst.Für jeden Wert mit dem du rechnen willst, btürauchst du eine SysVar vom Typ Zahl auf der CCU.
zeig doch mal die Einstellungen davon
-
@paul53 said in Kaco Blueplanet NX3 10.0 Wechselrichter auslesen (JSON):
@jörg-5 sagte: Ich erhalte immer noch die Fehler dazu:
Wenn es ein String sein soll, dann hänge die Maßeinheit dran:
setState('hm-rega.0.35000', obj.pac + ' W'); setState('hm-rega.0.35001', obj.fac + ' W');
Damit kann man aber nicht rechnen. Ändere es besser in der CCU in Typ "Zahl" und starte anschließend die Instanz neu.
Da hat sich ein Fehler eingeschlichen. fac it die Spannung. 499 Volt. Und die Strings sind in pac/sac zusammen gefasst.
Der andere Wechselrichter hat ähnliche Werte aktuell. -
@jörg-5 sagte in Kaco Blueplanet NX3 10.0 Wechselrichter auslesen (JSON):
fac it die Spannung. 499 Volt.
eher nicht, wahrscheinlich die frequency mit 49.9Hz
-
@jörg-5 sagte: fac it die Spannung
Ich habe keine Ahnung, was die Kürzel bedeuten. Sollte nur als Beispiel dienen.
-
@homoran said in Kaco Blueplanet NX3 10.0 Wechselrichter auslesen (JSON):
@jörg-5 sagte in Kaco Blueplanet NX3 10.0 Wechselrichter auslesen (JSON):
fac it die Spannung. 499 Volt.
eher nicht, wahrscheinlich die frequency mit 49.9Hz
Ja, stimmt! Vor lauter Zahlen nicht erkannt...
-
@paul53 said in Kaco Blueplanet NX3 10.0 Wechselrichter auslesen (JSON):
@jörg-5 sagte: fac it die Spannung
Ich habe keine Ahnung, was die Kürzel bedeuten. Sollte nur als Beispiel dienen.
Ich hatte kurz überlegt noch einen anderen Wert auszulesen, aber so wie es ursprünglich war, funktioniert es bis auf die vielen Warnungen ganz hervorragend!
So sieht das übrigens in der App des Herstellers aus:
Nur um euch mal einen Einblick zu geben... Ist ja evtl interessant das zu wissen.