NEWS
Wallbox, PV mit openWB in iobroker einbinden
-
@wolfirr ich habe für meinen fronius Wechselrichter Blockly geschreiben, die den Hausverbrauch, Netzbezug, Autarkie und Eigenverbrauch in eigene Datenpunkte raus schreiben.
Woran scheitert es? Du musst die entsprechenden Datenpunkte in 0.Userdata anlegen (am Besten mit Einheit). Dann erstellst du ein Blockly mit Trigger Wertänderung oder einem Cron (zb alle 3s) auf den Entsprechenden Wert den du zur Weiterberechnung benötigst. Der Rest ist simple Mathematik.
Meinst du sowas?
<block xmlns="https://developers.google.com/blockly/xml" type="on" id="0Cp6~c)1g?,Ve]1GwJUO" x="263" y="-187"> <field name="OID">Object ID</field> <field name="CONDITION">ne</field> <field name="ACK_CONDITION"></field> <statement name="STATEMENT"> <block type="variables_set" id="r(mDZAgW6Bl,wmg2![{W"> <field name="VAR" id="vN$csYNld]Pb3aq2^Q;r">Ausgangsleistung</field> <value name="VALUE"> <block type="get_value" id="6njxLNiqNt~PIE[iR2:O"> <field name="ATTR">val</field> <field name="OID">ID auswählen</field> </block> </value> <next> <block type="variables_set" id="QY719@jweoZDuLdj5xr="> <field name="VAR" id=":Wc/S!2[*TD%:`^}B-FC">Addiert</field> <value name="VALUE"> <block type="math_arithmetic" id="_/Ef#s)pJ(-l)Yguv?Lz"> <field name="OP">ADD</field> <value name="A"> <shadow type="math_number" id="ZetU#(;4?S@5/N+5g3Hv"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="YMZAAjH,H*UqB[-_XeC2"> <field name="VAR" id="vN$csYNld]Pb3aq2^Q;r">Ausgangsleistung</field> </block> </value> <value name="B"> <shadow type="math_number" id="2ORcyiH3}C1N^Tl4IYCb"> <field name="NUM">1</field> </shadow> <block type="on_source" id="1OiK{r`_Mhd[%h@ar@74"> <field name="ATTR">state.val</field> </block> </value> </block> </value> <next> <block type="variables_set" id="[V0kRKflo2cUU,r/JvXp"> <field name="VAR" id=":Wc/S!2[*TD%:`^}B-FC">Addiert</field> <value name="VALUE"> <block type="math_arithmetic" id="0=u/]0vpk[C[uF$B34Sp"> <field name="OP">MULTIPLY</field> <value name="A"> <shadow type="math_number" id="B-o,=GhlSy(`Gi3#}}-]"> <field name="NUM">1</field> </shadow> <block type="variables_get" id="}V]+[7QF-p#S@;hzCz=}"> <field name="VAR" id=":Wc/S!2[*TD%:`^}B-FC">Addiert</field> </block> </value> <value name="B"> <shadow type="math_number" id="t9a}qdePM9S%V_m1+qTG"> <field name="NUM">-1</field> </shadow> </value> </block> </value> <next> <block type="update" id="LsqyqLF-+[k(_SM+sS5?"> <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation> <field name="OID">Object ID</field> <field name="WITH_DELAY">FALSE</field> <value name="VALUE"> <block type="variables_get" id="O]q|iWc662}`n(xF2Dl0"> <field name="VAR" id=":Wc/S!2[*TD%:`^}B-FC">Addiert</field> </block> </value> </block> </next> </block> </next> </block> </next> </block> </statement> </block>
-
Danke @mading!
Das mit dem Anlegen des lokalen Datenpunkts ist wohl der wichtige Punkt für mich. Da muss ich mich noch einmal etwas einlesen, hat aber geholfen.
Grüße
Wolfirr -
@wolfirr du kannst auch Blockly dafür verwenden. Einmalig ausführen reicht. Am Besten legst du unter 0_userdata.0 einen Ordner je Bereich an, da noch einiges dazu kommen kann.
Bei mir sieht es als Beispiel so aus:
<block xmlns="https://developers.google.com/blockly/xml" type="create" id="@*7aXYReA;^u7ccg^?fc" x="-687" y="-135"> <field name="NAME">0_userdata.0.EigeneDatenpunkte.MinimaleRaumtemperatur</field> <value name="VALUE"> <block type="text" id="D)q9N%ag2=-L1Cn2RJ|p"> <field name="TEXT">0</field> </block> </value> <value name="COMMON"> <block type="text" id="B,LYkW^q0HfMDRk.L/eb"> <field name="TEXT">{ "type": "number", "min": 0, "max": 100, "unit": "°C" }</field> </block> </value> </block>
-
@mading Danke!
Nur noch die Frage, wenn ich den Ordner manuell anlege, ist es besser diese Userdatenordner und -punkte im Expertenmodus oder Usermodus anzulegen?
Und wenn schon Datenpunkte ganz unten am Ende der Objekt ID Liste angelegt wurden, weil ich empfangene Daten in einer FHEM Telnet Integration für die InfluxDB aktiviert hatte, wie bekomme ich die dann in die angelegte Userdata Ordnerstruktur?
Ich seh schon, da fehlt mir noch sehr viel Verständnis für die iobroker Tiefen. Nur wo fange ich an diese zu lernen? -
@wolfirr du musst die Datenpunkte, die keine Ordner sind, im Expertenmodus anlegen. Alle Ordner , die du in meinem Screenshot siehst, habe ich mir angelegt. Es steht dir frei, das so zu strukturieren, wie du es brauchst
@wolfirr sagte in Wallbox, PV mit openWB in iobroker einbinden:
Und wenn schon Datenpunkte ganz unten am Ende der Objekt ID Liste angelegt wurden, weil ich empfangene Daten in einer FHEM Telnet Integration für die InfluxDB aktiviert hatte, wie bekomme ich die dann in die angelegte Userdata Ordnerstruktur?
Ich verstehe nicht, was du damit meinst.
-
@mading Danke sehr, das hilft schon mal. Denn den Unterschied ob im Expertenmodus oder nicht, habe ich in der Docu noch nicht gefunden oder bin noch nicht so weit vorgedrungen.
In dem angehängten Bild sieht man und die Datenpunkte am Ende der Objektordner und ich weiß nicht, wie die entstanden sind und wie ich rausfinde, wo die erzeugt wurden? Ich finde nur eine 'Löschen' Funktion, wenn drauf gehe?![0_1704197272127_Bildschirmfoto von 2024-01-02 13-05-41.png](Uploading 100%) -
@wolfirr das Bild fehlt
-
@mading bin ich noch zu kurz dabei, dass ich keins hochladen kann?
-
@wolfirr klapp' mal 0_Userdata auf. Das ist der Bereich, der für deine eigenen Datenpunkte gedacht ist. Alle anderen Ordner beinhalten Datenpunkte der jeweiligen Adapter.
Hast du die SN Datenpunkte angelegt? Vermutlich hast du den Pfad nicht korrekt angegeben bzw. bevor dur auf Hinzufügen (+) Klickst, nicht auf 0_userdata geklickt.
- die 0 Anklicken unter 0_Userdata
- In den Expertenmodus gehen
- Einen Ordner (z.B. EigeneDatenpunkte) anlegen (das oberste Feld beim Anlegen zeigt dir, wo der Ordner/ Datenpunkt in der Hierarchie angelegt wird):
- Danach sollte unter 0_userdata.0 dein neuer Ordner auftauchen
Wenn du darunter Datenpunkte oder Ordner anlegen willst, musst du in den Expertenmodus. Wenn du die "0" unter 0_userdata angeklickt hast, und möchtest unter EigeneDatenpunkte einen Datenpunkt anlegen, musst du im Bereicht Name noch den Ordner (EigeneDatenpunkte) vor dem Namen des Ordners angeben:
Einfach den Ordner im Namen-Feld mit einem Punkt vom Datenpunkte Namen trennen.
Ich hoffe, das war veständlich.
-
@mading Danke!
Die SN Datenpunkte hatte ich nicht wissentlich angelegt, hab sie jetzt einfach mal gelöscht.
Wie ich eigene Datenpunkte anlege hatte ich oben gelernt, wichtig deine Bemerkung, dass ich sie im Expertenmodus anlegen muss.
Nun muss ich mir noch mehr Docu und Anleitungen reinziehen, damit ich die richtigen und nicht zu dumme Fragen stellen kann. -
Hallo Forum, jetzt hätte ich noch eine Frage, die mir in der Docu nicht klar wird. Dort steht bei 'Blockly for Dummies' dass:
'ACHTUNG: Scripte - egal welcher Art - gehören nur in sehr seltenen Ausnahmefällen in den Ordner "global". Du solltest Dir eine sinnvolle Ordnerstruktur - im Normalfall unterhalb von "common" - ausdenken.'Soll es heißen, dass die Scripte 'in' oder 'unter' 'common' angelegt werden sollen?
Bei mir sieht es nun 'unter' so aus, siehe Bild.
Danke für eure Hilfe -
@wolfirr richtig, den Expertenmodus brauchst du da nicht und siehst den global Ordner dann auch nicht
-
@mading Danke, aber ich hab mich vielleicht nicht präzise genug ausgedrückt. Ich wollte wissen, ob ich die Scripte IM Ordner 'common' oder UNTERHALB des Ordners anlegen soll?
Ok, ich mach das nicht im Expertenmodus, das war wohl ein Fehler.
Heute hatte ich bei Sonne endlich die Möglichkeit die Scripte zu testen und sie tun leider nicht, was ich will. Also es werden keine Datenpunkte gefüllt oder angelegt und damit auch nichts sinnvolles an die openWB per mqtt geschickt.
Da muss ich wohl noch weiter üben, weil ich auch nicht herausgefunden habe, woran es liegt. -
@wolfirr unterhalb, leg‘ einfach deine eigene Ordnerstruktur an.
-
@mading endlich konnte ich bei Sonnenschein den Speicher mal wieder richtig betreiben und das Blockly nochmal laufen lassen und testen. Dabei ist mir folgender Debug ausgegeben worden und ich weiß nicht, wo der Fehler liegen kann?
Danke im VorausDebug Output:
15.2.2024, 12:55:39.788 [info ]: javascript.0 (1832412) Start javascript script.js.Speicher.SN103 15.2.2024, 12:55:39.871 [info ]: javascript.0 (1832412) script.js.Speicher.SN103: schedule(cron=* * * * *) 15.2.2024, 12:55:39.873 [info ]: javascript.0 (1832412) script.js.Speicher.SN103: getState(id=fhem.0.ESS_Minutenwerte.03_Battery_to_Household_in_W, timerId=undefined) => {"val":0,"ack":true,"ts":1707994275680,"q":0,"from":"system.adapter.fhem.0","user":"system.user.admin","lc":1707994275680} 15.2.2024, 12:55:39.873 [info ]: javascript.0 (1832412) script.js.Speicher.SN103: getState(id=fhem.0.ESS_Minutenwerte.03_Battery_to_Household_in_W, timerId=undefined) => {"val":0,"ack":true,"ts":1707994275680,"q":0,"from":"system.adapter.fhem.0","user":"system.user.admin","lc":1707994275680} 15.2.2024, 12:55:39.874 [info ]: javascript.0 (1832412) script.js.Speicher.SN103: getState(id=fhem.0.ESS_Minutenwerte.05_PV_to_Battery_in_W, timerId=undefined) => {"val":1963,"ack":true,"ts":1707998056473,"q":0,"from":"system.adapter.fhem.0","user":"system.user.admin","lc":1707998056473} 15.2.2024, 12:55:39.875 [error]: javascript.0 (1832412) script.js.Speicher.SN103 Error by subscription (trigger): Wrong ID of type boolean or number. 15.2.2024, 12:55:39.875 [info ]: javascript.0 (1832412) script.js.Speicher.SN103: registered 0 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions 15.2.2024, 12:56:00.049 [info ]: javascript.0 (1832412) script.js.Speicher.SN103: getObject(id=fhem.0.ESS_Minutenwerte.03_Battery_to_Household_in_W, enumName=undefined) => {"_id":"fhem.0.ESS_Minutenwerte.03_Battery_to_Household_in_W","type":"state","common":{"name":"ESS_Minutenwerte 03_Battery_to_Household_in_W","type":"number","role":"value","read":true,"write":false,"custom":{"influxdb.0":{"enabled":true,"storageType":"Number","aliasId":"","debounceTime":0,"blockTime":0,"changesOnly":true,"changesRelogInterval":0,"changesMinDelta":0,"ignoreBelowNumber":"","disableSkippedValueLogging":false,"enableDebugLogs":false,"debounce":1000}}},"native":{"Name":"ESS_Minutenwerte","Attribute":"03_Battery_to_Household_in_W","Readings":true,"type":"number","role":"value"},"value":{"val":"0"},"from":"system.adapter.influxdb.0","user":"system.user.admin","ts":1704876495776} 15.2.2024, 12:56:00.050 [info ]: javascript.0 (1832412) script.js.Speicher.SN103: getState(id=fhem.0.ESS_Minutenwerte.05_PV_to_Battery_in_W, timerId=undefined) => {"val":1963,"ack":true,"ts":1707998056473,"q":0,"from":"system.adapter.fhem.0","user":"system.user.admin","lc":1707998056473} 15.2.2024, 12:56:00.051 [info ]: javascript.0 (1832412) script.js.Speicher.SN103: getState(id=fhem.0.ESS_Minutenwerte.05_PV_to_Battery_in_W, timerId=undefined) => {"val":1963,"ack":true,"ts":1707998056473,"q":0,"from":"system.adapter.fhem.0","user":"system.user.admin","lc":1707998056473} 15.2.2024, 12:56:00.052 [info ]: javascript.0 (1832412) script.js.Speicher.SN103: setForeignState(id=0_userdata.0.eigeneDatenpunkte.Caterva.SN103.LeistungSN103, state={"val":-1963,"ack":true,"ts":1707998160052,"q":0,"from":"system.adapter.javascript.0","lc":1707998160052,"c":"script.js.Speicher.SN103"}) 15.2.2024, 12:56:00.053 [warn ]: javascript.0 (1832412) script.js.Speicher.SN103: setForeignState(id=0_userdata.0.eigeneDatenpunkte.Caterva.SN103.LeistungSN103, state={"val":-1963,"ack":true,"ts":1707998160052,"q":0,"from":"system.adapter.javascript.0","lc":1707998160052,"c":"script.js.Speicher.SN103"}) - wurde nicht ausgeführt, während der Debug-Modus aktiv ist 15.2.2024, 12:56:00.055 [info ]: javascript.0 (1832412) script.js.Speicher.SN103: sendTo(instance=mqtt.0, cmd=sendMessage2Client, msg={"topic":"openWB/set/houseBattery/W","message":"0","retain":true}, hasCallback=true) 15.2.2024, 12:56:00.058 [info ]: javascript.0 (1832412) script.js.Speicher.SN103: getState(id=fhem.0.ESS_Minutenwerte.01_SoC_in_Pct, timerId=undefined) => {"val":70,"ack":true,"ts":1707997876082,"q":0,"from":"system.adapter.fhem.0","user":"system.user.admin","lc":1707997876082} 15.2.2024, 12:56:00.059 [info ]: javascript.0 (1832412) script.js.Speicher.SN103: sendTo(instance=mqtt.0, cmd=sendMessage2Client, msg={"topic":"openWB/set/houseBattery/%Soc","message":70,"retain":true}, hasCallback=true) 15.2.2024, 12:56:20.056 [error]: javascript.0 (1832412) script.js.Speicher.SN103: timeout 15.2.2024, 12:56:20.058 [error]: javascript.0 (1832412) script.js.Speicher.SN103: timeout 15.2.2024, 12:57:00.052 [info ]: javascript.0 (1832412) script.js.Speicher.SN103: getObject(id=fhem.0.ESS_Minutenwerte.03_Battery_to_Household_in_W, enumName=undefined) => {"_id":"fhem.0.ESS_Minutenwerte.03_Battery_to_Household_in_W","type":"state","common":{"name":"ESS_Minutenwerte 03_Battery_to_Household_in_W","type":"number","role":"value","read":true,"write":false,"custom":{"influxdb.0":{"enabled":true,"storageType":"Number","aliasId":"","debounceTime":0,"blockTime":0,"changesOnly":true,"changesRelogInterval":0,"changesMinDelta":0,"ignoreBelowNumber":"","disableSkippedValueLogging":false,"enableDebugLogs":false,"debounce":1000}}},"native":{"Name":"ESS_Minutenwerte","Attribute":"03_Battery_to_Household_in_W","Readings":true,"type":"number","role":"value"},"value":{"val":"0"},"from":"system.adapter.influxdb.0","user":"system.user.admin","ts":1704876495776}
-
@wolfirr
Es gibt wohl ein Problem mit 1832412) script.js.Speicher.SN103 Error by subscription (trigger): Wrong ID of type boolean or number.Was ist das für ein DP?
-
@mading Hallo Mading, auf was referenziert die '1832412'? Finde dazu keinen Zusammenhang. Habe noch sehen, dass da ein verstecktes Blockly war, dass ich nicht gesehen hatte. Nachdem ich es entfernt habe, kommt nur noch der Timeout:
21:49:00.568 info javascript.0 (1832412) Start javascript script.js.Speicher.SN103 21:49:00.783 info javascript.0 (1832412) script.js.Speicher.SN103: schedule(cron=* * * * *) 21:49:00.784 info javascript.0 (1832412) script.js.Speicher.SN103: registered 0 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions 21:50:00.056 info javascript.0 (1832412) script.js.Speicher.SN103: getState(id=fhem.0.ESS_Minutenwerte.03_Battery_to_Household_in_W, timerId=undefined) => {"val":0,"ack":true,"ts":1708103715789,"q":0,"from":"system.adapter.fhem.0","user":"system.user.admin","lc":1708103715789} 21:50:00.057 info javascript.0 (1832412) script.js.Speicher.SN103: getState(id=fhem.0.ESS_Minutenwerte.05_PV_to_Battery_in_W, timerId=undefined) => {"val":0,"ack":true,"ts":1708094176184,"q":0,"from":"system.adapter.fhem.0","user":"system.user.admin","lc":1708094176184} 21:50:00.059 info javascript.0 (1832412) script.js.Speicher.SN103: sendTo(instance=mqtt.0, cmd=sendMessage2Client, msg={"topic":"openWB/set/houseBattery/W","message":"0","retain":true}, hasCallback=true) 21:50:00.061 info javascript.0 (1832412) script.js.Speicher.SN103: getState(id=fhem.0.ESS_Minutenwerte.01_SoC_in_Pct, timerId=undefined) => {"val":13,"ack":true,"ts":1708103895547,"q":0,"from":"system.adapter.fhem.0","user":"system.user.admin","lc":1708103895547} 21:50:00.065 info javascript.0 (1832412) script.js.Speicher.SN103: sendTo(instance=mqtt.0, cmd=sendMessage2Client, msg={"topic":"openWB/set/houseBattery/%Soc","message":13,"retain":true}, hasCallback=true) 21:50:20.060 error javascript.0 (1832412) script.js.Speicher.SN103: timeout 21:50:20.065 error javascript.0 (1832412) script.js.Speicher.SN103: timeout 21:51:00.044 info javascript.0 (1832412) script.js.Speicher.SN103: getState(id=fhem.0.ESS_Minutenwerte.03_Battery_to_Household_in_W, timerId=undefined) => {"val":0,"ack":true,"ts":1708103715789,"q":0,"from":"system.adapter.fhem.0","user":"system.user.admin","lc":1708103715789} 21:51:00.045 info javascript.0 (1832412) script.js.Speicher.SN103: getState(id=fhem.0.ESS_Minutenwerte.05_PV_to_Battery_in_W, timerId=undefined) => {"val":0,"ack":true,"ts":1708094176184,"q":0,"from":"system.adapter.fhem.0","user":"system.user.admin","lc":1708094176184} 21:51:00.047 info javascript.0 (1832412) script.js.Speicher.SN103: sendTo(instance=mqtt.0, cmd=sendMessage2Client, msg={"topic":"openWB/set/houseBattery/W","message":"0","retain":true}, hasCallback=true) 21:51:00.048 info javascript.0 (1832412) script.js.Speicher.SN103: getState(id=fhem.0.ESS_Minutenwerte.01_SoC_in_Pct, timerId=undefined) => {"val":13,"ack":true,"ts":1708103895547,"q":0,"from":"system.adapter.fhem.0","user":"system.user.admin","lc":1708103895547} 21:51:00.049 info javascript.0 (1832412) script.js.Speicher.SN103: sendTo(instance=mqtt.0, cmd=sendMessage2Client, msg={"topic":"openWB/set/houseBattery/%Soc","message":13,"retain":true}, hasCallback=true) 21:51:20.047 error javascript.0 (1832412) script.js.Speicher.SN103: timeout 21:51:20.049 error javascript.0 (1832412) script.js.Speicher.SN103: timeout 21:52:00.040 info javascript.0 (1832412) script.js.Speicher.SN103: getState(id=fhem.0.ESS_Minutenwerte.03_Battery_to_Household_in_W, timerId=undefined) => {"val":0,"ack":true,"ts":1708103715789,"q":0,"from":"system.adapter.fhem.0","user":"system.user.admin","lc":1708103715789} 21:52:00.040 info javascript.0 (1832412) script.js.Speicher.SN103: getState(id=fhem.0.ESS_Minutenwerte.05_PV_to_Battery_in_W, timerId=undefined) => {"val":0,"ack":true,"ts":1708094176184,"q":0,"from":"system.adapter.fhem.0","user":"system.user.admin","lc":1708094176184} 21:52:00.042 info javascript.0 (1832412) script.js.Speicher.SN103: sendTo(instance=mqtt.0, cmd=sendMessage2Client, msg={"topic":"openWB/set/houseBattery/W","message":"0","retain":true}, hasCallback=true) 21:52:00.043 info javascript.0 (1832412) script.js.Speicher.SN103: getState(id=fhem.0.ESS_Minutenwerte.01_SoC_in_Pct, timerId=undefined) => {"val":13,"ack":true,"ts":1708103895547,"q":0,"from":"system.adapter.fhem.0","user":"system.user.admin","lc":1708103895547} 21:52:00.044 info javascript.0 (1832412) script.js.Speicher.SN103: sendTo(instance=mqtt.0, cmd=sendMessage2Client, msg={"topic":"openWB/set/houseBattery/%Soc","message":13,"retain":true}, hasCallback=true)
Danke
Wolfirr -
@wolfirr schwer zu sagen. Wie oft schickst du Updates an den Speicher oder fragst ihn ab? Wie ist der Speicher angebunden (WLan/ LAN)?
-
@mading Danke soweit, ich hab noch ein paar Änderungen und Tests durchgeführt, dann die openWB auf V2 upgedated. Jetzt kommen die Daten an der openWB an und werden auch richtig angezeigt. Hoffe, dass nun auch das PV-Überschussladen richtig funktioniert.
In der V1.9 openWB war anscheinend ein Fehler mit MQTT, da ich immer Schwierigkeiten hatte den Topic richtig zu bezeichnen und die Schreibweise der houseBattery irgendwie nicht korrekt erkannt wurde.
Die Gerätschaften sind alle per LAN angeschlossen, da bei mir das WLAN schwierig ist mit dauerhafter Verbindung in die verschiedenen Gebäude.Herzlichen Dank an eure Unterstützung!
Wenn jemand Fragen hat, wie man iobroker mit openWB V2.0 anbindet, jetzt hab ich etwas Erfahrung sammel dürfen und kann vielleicht auch helfen.
Wolfirr! -
@wolfirr
Hallo wolfirr,ich bin leider nicht sehr erfahren mit MQTT. Ich bin ebenfalls mit dem iobroker unterwegs und möchte Daten meiner openWB mit dem Softwarestand 2.1.4 auslesen.
Dazu habe ich den mqtt-client als Adapter heruntergeladen und die ip-Adresse der openWB eingetragen, siehe den Screenshot.
Leider bekomme ich aber keine Daten unter den Objekten eingelesen. Mir ist allerdings auch nicht klar, wer als MQTT-Broker agiert. Muss ich dazu erst noch einen MQTT-Broker installieren, oder übernimmt das bereits die openWB? Muss in der openWB die Brücke aktiviert werden? Welche Funktion hat diese Brücke?
Herzliche Dank im Voraus, vielleicht kannst Du mir dazu ein paar Infos geben?