Hallo Heinz-Jörg,
sry. für die späte Rückmeldung. Hoffe, es ist noch aktuell. Wenn die Daten schonmal im iobroker sind, ist das dann relativ einfach.
1. Mach ein komplettes Backup von iobroker (wirklich die Dateien im Verzeichnis) und der openWB
2. Dein iobroker muss mit der openWB "telefonieren" können. Ich nutze dazu den Adapter mqtt Broker/Client.
Der wird wie hier eingerichtet, deine IP der openWB rein und die gewünschten Topics ändern - oder auch nicht. Abonniere aber nicht alle Topics. Bringt außer Systemlast und einem potentiellen zerschießen der Config in der openWB gar nix. Nun noch einfach das als .txt speichern und danach kann dieser Code direkt in der Instanz (oben rechts das kleine Symbol unter dem Fragezeichen) importiert werden:
Code: Alles auswählen
{
"type": "client",
"clientId": "",
"bind": "0.0.0.0",
"port": 1883,
"ssl": false,
"rejectUnauthorized": false,
"user": "",
"pass": "",
"url": "HIER DIE IP DER openWB",
"patterns": "openWB/SmartHome/#,openWB/Verbraucher/#,openWB/chargepoint/#,openWB/lp/#,openWB/set/#,openWB/vehicle/#",
"onchange": true,
"publishAllOnStart": false,
"debug": false,
"publish": "mqtt.0.*",
"certPublic": "",
"certPrivate": "",
"certChained": "",
"prefix": "",
"forceCleanSession": "no",
"sendAckToo": false,
"sendStateObject": false,
"webSocket": true,
"maxTopicLength": 100,
"publishOnSubscribe": true,
"extraSet": false,
"sendOnStartInterval": 2000,
"sendInterval": 10,
"keepalive": 1000,
"reconnectPeriod": 10,
"connectTimeout": 30,
"persistent": false,
"defaultQoS": "0",
"retain": false,
"retransmitInterval": 2000,
"retransmitCount": 10,
"storeClientsTime": 1440,
"removePrefix": "",
"ignoreNewObjects": false,
"noRetain": false,
"allBinaries": false
}
Damit sind die Topics dann schonmal verfügbar. Wenn nicht, dann mit dem Windows Programm mqtt explorer mal alle benötigten an die WB publishen, der iobroker liest mit. Du findest die entsprechenden Topics auf der Konfigurationsseite von mqtt Zähler, mqtt Batterie und mqtt Wechselrichter in der openWB.
3. im nächsten Schritt installierst du den javaScript Adapter (wenn noch nicht geschehen) und erstellst ein kleines Script. Kannst auch in Blockly machen. In meinem Beispiel musst du natürlich aufpassen, dass du die richtigen Objekte ausgewählt hast (in meinem Beispiel kommen von dort die PV Daten). Ich lese bei mir über den Modbus aus und gebe es als Zahl bzw. auch gleich als Arrray nach json konvertiert wieder an mqtt weiter (Gleiches muss dann noch für EVU und Batterie passieren).
Neues Blockly anlegen und diesen Code reinkopieren, entsprechend anpassen:
Code: Alles auswählen
<xml xmlns="https://developers.google.com/blockly/xml">
<variables>
<variable id="*=j=B!6!AAeS]}A]_z.`">PV-Dachleistung</variable>
</variables>
<block type="schedule" id="A@R+ekSfixFJ7_2xi+@2" x="12" y="4938">
<field name="SCHEDULE">*/3 * * * * *</field>
<statement name="STATEMENT">
<block type="variables_set" id="jP~3fLI]63(]d3GyGp?5">
<field name="VAR" id="*=j=B!6!AAeS]}A]_z.`">PV-Dachleistung</field>
<value name="VALUE">
<block type="math_arithmetic" id="8/zZ}+/l#dgzuNFwEudZ">
<field name="OP">ADD</field>
<value name="A">
<shadow type="math_number" id="{`6}PC!gzk^f:-%6Gx;s">
<field name="NUM">1</field>
</shadow>
<block type="math_arithmetic" id="HPg4@rwan4(}vVS];,`K">
<field name="OP">MULTIPLY</field>
<value name="A">
<shadow type="math_number" id="tyh?iN:XN-C:O,1~rJ:/">
<field name="NUM">1</field>
</shadow>
<block type="get_value" id="?nz5K)d/zR=RpV0=)Uu:">
<field name="ATTR">val</field>
<field name="OID">modbus.0.holdingRegisters.40083_I_AC_Power</field>
</block>
</value>
<value name="B">
<shadow type="math_number" id="8a`IPFLc=oC54By3mT8T">
<field name="NUM">10</field>
</shadow>
<block type="math_single" id="^At!-Duvk`.1j]~Tqj-B">
<field name="OP">POW10</field>
<value name="NUM">
<shadow type="math_number" id="ik%,]Tre/lzlJ-(;^I6P">
<field name="NUM">9</field>
</shadow>
<block type="get_value" id="T%94GtN83f7}3!c6o*`g">
<field name="ATTR">val</field>
<field name="OID">modbus.0.holdingRegisters.40084_I_AC_Power_SF</field>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="B">
<shadow type="math_number" id="dDg37hSAUDjVC5vuEm_M">
<field name="NUM">1</field>
</shadow>
<block type="get_value" id="Yh*$wXfh*3,!/JBFWrA/">
<field name="ATTR">val</field>
<field name="OID">modbus.0.holdingRegisters.57716_Ladeleistung_Batterie</field>
</block>
</value>
</block>
</value>
<next>
<block type="control_ex" id="ZiF4-d3u)[z=gGX5-w,z">
<field name="TYPE">false</field>
<field name="CLEAR_RUNNING">FALSE</field>
<value name="OID">
<shadow type="field_oid" id="he-{P4y(baCH3Z`n=Yki">
<field name="oid">mqtt.0.openWB.set.pv.1.get.power</field>
</shadow>
</value>
<value name="VALUE">
<shadow type="logic_boolean" id="/8xMqM,d6S=OTd:(UnKy">
<field name="BOOL">TRUE</field>
</shadow>
<block type="convert_tonumber" id="X6m]9IVE-+Oa~?1/Q;;E">
<value name="VALUE">
<block type="math_arithmetic" id="$j~@S@ikKOMyfoS+XP~c">
<field name="OP">MULTIPLY</field>
<value name="A">
<shadow type="math_number" id="7TcOk/;J~enzv:s+d?m~">
<field name="NUM">1</field>
</shadow>
<block type="variables_get" id="}Yrbew*qri{ry4[NiWo@">
<field name="VAR" id="*=j=B!6!AAeS]}A]_z.`">PV-Dachleistung</field>
</block>
</value>
<value name="B">
<shadow type="math_number" id="6L!x6o+=Oh]GnYOEK3T)">
<field name="NUM">-1</field>
</shadow>
</value>
</block>
</value>
</block>
</value>
<value name="DELAY_MS">
<shadow type="math_number" id="gpEhStKwrP@T2F:)z8tQ">
<field name="NUM">0</field>
</shadow>
</value>
<next>
<block type="control_ex" id="YB)Xt}G.?_L)E%$){+{d">
<field name="TYPE">false</field>
<field name="CLEAR_RUNNING">FALSE</field>
<value name="OID">
<shadow type="field_oid" id=",8)x,/_f%gAg7vpa])3V">
<field name="oid">mqtt.0.openWB.set.pv.get.exported</field>
</shadow>
</value>
<value name="VALUE">
<shadow type="logic_boolean" id="DL,raWVF^A=te+P{1Y]{">
<field name="BOOL">TRUE</field>
</shadow>
<block type="convert_tonumber" id="^54:LSQ1]tVg$W,w*Fe=">
<value name="VALUE">
<block type="get_value" id="[O[B2@G6v;VV-trz}|Sg">
<field name="ATTR">val</field>
<field name="OID">modbus.0.holdingRegisters.40093_I_AC_Energy_WH</field>
</block>
</value>
</block>
</value>
<value name="DELAY_MS">
<shadow type="math_number" id="j@`|Si{v3Q532q`)3(ZK">
<field name="NUM">0</field>
</shadow>
</value>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</xml>
Hoffe, das hilft dir weiter. Damit fütterst du nun schonmal die openWB mit den Daten vom Wechselrichter.
LG Max