Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Node-Red
  5. [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write)

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.2k

[HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write)

Geplant Angeheftet Gesperrt Verschoben Node-Red
574 Beiträge 110 Kommentatoren 223.2k Aufrufe 108 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • Christof LewandowskiC Offline
    Christof LewandowskiC Offline
    Christof Lewandowski
    schrieb am zuletzt editiert von
    #327

    @mickym und @Spexx

    Mega, vielen Dank!

    Da kommen wir der Sache doch schon sehr sehr viel näher :)

    Habs jetzt mal auf meine Daten angepasst und läuft! Werde jetzt mal beobachten, ob und wie viele Timeouts ich nun bekomme.

    Eine Frage hätte ich noch bzgl. des Schedules. Der Intervall steht auf alle 3 Minuten. Dann gibts da noch ne Verzögerung von 1 bzw. 2 Minuten (im Flow von @Spexx )? Wie darf man das verstehen?

    1 Antwort Letzte Antwort
    0
    • S Offline
      S Offline
      Spexx
      schrieb am zuletzt editiert von
      #328

      @mickym
      Ist schon eine Weile her als ich das gemacht habe. Ganz verstanden habe ich es noch nicht, könntest du mal ein Beispiel erstellen?
      Vermutlich wird das dann nicht gehen, wenn die Werte noch eine zusätzliche Umrechnung benötigen (wie z.B. die Uhrzeit) oder wenn ich bei einigen Werten direkt noch ein Text hinterlege, z.B. beim "Device Status"? Dennoch würde mich dein Vorschlag interessieren.

      @Christof-Lewandowski
      Ja der Trigger kommt alle 3 min. Beim Auslösen des Triggers wird der 1. Block abgefragt, 1 min später dann der 2. Block und 2 min später dann der 3. Block. Dann geht es wieder von vorne los, es wird somit jede Minute eine Abfrage über Modbus gestartet (jeder Block selbst hat dann ein Abfrageintervall von 3 min).

      Hintergrund des hohen Abfrageintervall war bei mir, dass ich ansonsten Probleme mit FusionSolar habe... Wenn ich etwas ändern möchte, z.B. AC laden aktivieren, dann klappt das meistens erst nach mehrmaligen versuchen, weil FS und meine Modbus Anfrage sich wohl in die Quere kommen!?

      Ich bin aber schon am überlegen wie man das anpassen könnte. Ich hätte gerne einzelne Werte im 10-Sekundentakt.
      Aktuell habe ich eine Kaskade (zwei WR + Luna) über einen SDongle. Hat jemand Erfahrung damit, ob das mit dem Abfrageintervall besser wird, wenn man die Kaskade trennen würde und zwei SDongle nimmt?

      mickymM 1 Antwort Letzte Antwort
      0
      • S Spexx

        @mickym
        Ist schon eine Weile her als ich das gemacht habe. Ganz verstanden habe ich es noch nicht, könntest du mal ein Beispiel erstellen?
        Vermutlich wird das dann nicht gehen, wenn die Werte noch eine zusätzliche Umrechnung benötigen (wie z.B. die Uhrzeit) oder wenn ich bei einigen Werten direkt noch ein Text hinterlege, z.B. beim "Device Status"? Dennoch würde mich dein Vorschlag interessieren.

        @Christof-Lewandowski
        Ja der Trigger kommt alle 3 min. Beim Auslösen des Triggers wird der 1. Block abgefragt, 1 min später dann der 2. Block und 2 min später dann der 3. Block. Dann geht es wieder von vorne los, es wird somit jede Minute eine Abfrage über Modbus gestartet (jeder Block selbst hat dann ein Abfrageintervall von 3 min).

        Hintergrund des hohen Abfrageintervall war bei mir, dass ich ansonsten Probleme mit FusionSolar habe... Wenn ich etwas ändern möchte, z.B. AC laden aktivieren, dann klappt das meistens erst nach mehrmaligen versuchen, weil FS und meine Modbus Anfrage sich wohl in die Quere kommen!?

        Ich bin aber schon am überlegen wie man das anpassen könnte. Ich hätte gerne einzelne Werte im 10-Sekundentakt.
        Aktuell habe ich eine Kaskade (zwei WR + Luna) über einen SDongle. Hat jemand Erfahrung damit, ob das mit dem Abfrageintervall besser wird, wenn man die Kaskade trennen würde und zwei SDongle nimmt?

        mickymM Online
        mickymM Online
        mickym
        Most Active
        schrieb am zuletzt editiert von mickym
        #329

        @spexx sagte in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):

        @mickym
        Ist schon eine Weile her als ich das gemacht habe. Ganz verstanden habe ich es noch nicht, könntest du mal ein Beispiel erstellen?
        Vermutlich wird das dann nicht gehen, wenn die Werte noch eine zusätzliche Umrechnung benötigen (wie z.B. die Uhrzeit) oder wenn ich bei einigen Werten direkt noch ein Text hinterlege, z.B. beim "Device Status"? Dennoch würde mich dein Vorschlag interessieren.

        So ich habe mich mal ein paar Stunden hingesetzt und - klar da musste ich selbst bissi rumprobieren - wie folgt vereinfacht.

        Ich habe kein Modbus - deswegen habe ich einfach einen Forumstext genommen und nur die Bytes die ggf. modifiziert werden müssen zum Testen entsprechend angepasst.

        So ich habe mal Deinen ersten Kasten "Inverter" vereinfacht!!

        f6d2a5b9-7cfb-4151-b3f7-c3043a68c909-image.png

        Der ganze "gelbe Kasten" schrumpft also auf den "grünen Kasten" - ohne dass Du was an Funktionalität einbüßt.

        Grundsätzlich ist es meist nicht sinnvoll die Werte als beschreibbar zu exportieren - auch wenn du value genommen hast. Aber kann man machen (muss man in meiner Lösung nur umstellen, dann werden alle neu angelegten States beschreibbar). Die Werte sind natürlich Käse - ich habe nur darauf geachtet, dass bei der Zeit was sinnvolles rauskommt und beim Device-Status.

        df483728-403b-448a-9dea-2bb204613f0e-image.png

        Letztlich hast Du ein paar nette Formatierungen eingebaut - wie den State-Name und State-Units. Ich habe das jeweils in einer eigenen Change Node abgefüttert - da das ja im Grunde optional ist.

        So nun zur Erläuterung der Vereinfachungen und dem Flow im Detail:

        411c5bcf-25fe-4912-865d-ddf3041c0b4a-image.png

        Kernpunkt ist, dass Du den Namen in der Parser-Node bereits so benennst wie die States später heißen sollen - da diese zum Topic werden:

        e93cb396-cb4a-4fb6-99e8-8d55e113bdf0-image.png

        Das Aufsplitten in einzene Ausgänge habe ich also nicht gemacht (kein fan out).
        Die Namen - sollten den State Namen entsprechen, diese werden vorerst zum topic
        Den Device Status habe ich als Hexstring ausgeben lassen - muss man nicht - aber Du hast in Deiner function Node mit Hex-Strings gearbeitet, deswegen habe ich es auch gemacht - wobei ich aber die Buffer Node umrechnen lasse.

        Die Units in den States, die Du ja gesetzt hast, werden in der 1. Change Node gesetzt. Den StateName noch solange der topic unmodifiziert aus der Parser Node rauskommt. 1. und 2. Change Node kann man natürlich in eine Change Node zusammenfassen - das dient hier nur der Demonstration.

        Vermutlich wird das dann nicht gehen, wenn die Werte noch eine zusätzliche Umrechnung benötigen (wie z.B. die Uhrzeit) oder wenn ich bei einigen Werten direkt noch ein Text hinterlege, z.B. beim "Device Status"? Dennoch würde mich dein Vorschlag interessieren.

        Wie Du siehst geht es - man fischt halt die Nachrichten über das topic raus, die man noch modifizieren möchte (s. switch Node).

        20309921-ae5d-472b-847f-bc81ce2e43c2-image.png

        Die anderen lässt man durchflutschen und macht halt nichts mehr.

        Es wurde bewusst auf Javascript und function Nodes verzichtet und alles mit JSONATA gemacht - da dies halt weniger Code-Schreiberei ist und in meinen Augen sehr elegant - auch wenn man sich da erst reinfuchsen muss.

        Zu Schluss wird halt das Topic um den ganzen Pfad erweitert, um die States in die richtigen Datenpunkte zu schreiben:

        e2adc0ec-cfb0-404a-8750-5e00d263a2d9-image.png

        Also easy. Und somit ist nur noch eine iobroker-Out nötig und wie gesagt - ich würde die States auf Read-Only setzen - kannst natürlich auch ändern.

        10f75299-5fc3-409f-9130-d59088fb16ea-image.png

        Alles andere wird ja in den Nachrichtenobjekten selbst gesetzt.

        Hier der Flow zum Import:

        [
           {
               "id": "187f146e9658409a",
               "type": "group",
               "z": "36ae66b997d3bee8",
               "name": "",
               "style": {
                   "fill": "#c8e7a7",
                   "label": true
               },
               "nodes": [
                   "edfdca52ca7f0d8a",
                   "414b4356cc4c622b",
                   "6cf086b9713a9b3d",
                   "753144f2c7358152",
                   "74d62c6e47c82658",
                   "18444517a9d36abf",
                   "743bef30d8285fdf",
                   "0e2fe1da994834de",
                   "b5fc699345857877",
                   "1f1bd3a1581a9f81",
                   "9b1f05bf2ae4f784",
                   "b64fb4eb6b1bc30a",
                   "73ecc2c7d5e95344",
                   "f8256c61491a7672"
               ],
               "x": 94,
               "y": 2539,
               "w": 1752,
               "h": 202
           },
           {
               "id": "edfdca52ca7f0d8a",
               "type": "buffer-parser",
               "z": "36ae66b997d3bee8",
               "g": "187f146e9658409a",
               "name": "Inverter",
               "data": "payload",
               "dataType": "msg",
               "specification": "spec",
               "specificationType": "ui",
               "items": [
                   {
                       "type": "int16be",
                       "name": "PV1_voltage",
                       "offset": 0,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/10",
                       "mask": ""
                   },
                   {
                       "type": "int16be",
                       "name": "PV1_current",
                       "offset": 2,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/100",
                       "mask": ""
                   },
                   {
                       "type": "int16be",
                       "name": "PV2_voltage",
                       "offset": 4,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/10",
                       "mask": ""
                   },
                   {
                       "type": "int16be",
                       "name": "PV2_current",
                       "offset": 6,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/100",
                       "mask": ""
                   },
                   {
                       "type": "int32be",
                       "name": "Input_power",
                       "offset": 96,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/1000",
                       "mask": ""
                   },
                   {
                       "type": "uint16be",
                       "name": "Line_voltage_between_phases_A_and_B",
                       "offset": 100,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/10",
                       "mask": ""
                   },
                   {
                       "type": "uint16be",
                       "name": "Line_voltage_between_phases_B_and_C",
                       "offset": 102,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/10",
                       "mask": ""
                   },
                   {
                       "type": "uint16be",
                       "name": "Line_voltage_between_phases_C_and_A",
                       "offset": 104,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/10",
                       "mask": ""
                   },
                   {
                       "type": "uint16be",
                       "name": "Phase_A_voltage",
                       "offset": 106,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/10",
                       "mask": ""
                   },
                   {
                       "type": "uint16be",
                       "name": "Phase_B_voltage",
                       "offset": 108,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/10",
                       "mask": ""
                   },
                   {
                       "type": "uint16be",
                       "name": "Phase_C_voltage",
                       "offset": 110,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/10",
                       "mask": ""
                   },
                   {
                       "type": "int32be",
                       "name": "Phase_A_current",
                       "offset": 112,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/1000",
                       "mask": ""
                   },
                   {
                       "type": "int32be",
                       "name": "Phase_B_current",
                       "offset": 116,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/1000",
                       "mask": ""
                   },
                   {
                       "type": "int32be",
                       "name": "Phase_C_current",
                       "offset": 120,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/1000",
                       "mask": ""
                   },
                   {
                       "type": "int32be",
                       "name": "Peak_active_power_of_current_day",
                       "offset": 124,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/1000",
                       "mask": ""
                   },
                   {
                       "type": "int32be",
                       "name": "Active_power",
                       "offset": 128,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "1",
                       "mask": ""
                   },
                   {
                       "type": "int32be",
                       "name": "Reactive_power",
                       "offset": 132,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/1000",
                       "mask": ""
                   },
                   {
                       "type": "int16be",
                       "name": "Power_factor",
                       "offset": 136,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/1000",
                       "mask": ""
                   },
                   {
                       "type": "uint16be",
                       "name": "Grid_frequency",
                       "offset": 138,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/100",
                       "mask": ""
                   },
                   {
                       "type": "uint16be",
                       "name": "Efficiency",
                       "offset": 140,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/100",
                       "mask": ""
                   },
                   {
                       "type": "int16be",
                       "name": "Internal_temperature",
                       "offset": 142,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/10",
                       "mask": ""
                   },
                   {
                       "type": "uint16be",
                       "name": "Insulation_resistance",
                       "offset": 144,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/1000",
                       "mask": ""
                   },
                   {
                       "type": "hex",
                       "name": "Device_status",
                       "offset": 146,
                       "length": 2,
                       "offsetbit": 0,
                       "scale": "1",
                       "mask": ""
                   },
                   {
                       "type": "uint16be",
                       "name": "Fault_code",
                       "offset": 148,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "1",
                       "mask": ""
                   },
                   {
                       "type": "uint32be",
                       "name": "Startup_time",
                       "offset": 150,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "1",
                       "mask": ""
                   },
                   {
                       "type": "uint32be",
                       "name": "Shutdown_time",
                       "offset": 154,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "1",
                       "mask": ""
                   },
                   {
                       "type": "uint32be",
                       "name": "Accumulated_energy_yield",
                       "offset": 180,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/100",
                       "mask": ""
                   },
                   {
                       "type": "uint32be",
                       "name": "Daily_energy_yield",
                       "offset": 196,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "/100",
                       "mask": ""
                   }
               ],
               "swap1": "",
               "swap2": "",
               "swap3": "",
               "swap1Type": "swap",
               "swap2Type": "swap",
               "swap3Type": "swap",
               "msgProperty": "payload",
               "msgPropertyType": "str",
               "resultType": "value",
               "resultTypeType": "return",
               "multipleResult": true,
               "fanOutMultipleResult": false,
               "setTopic": true,
               "outputs": 1,
               "x": 340,
               "y": 2640,
               "wires": [
                   [
                       "753144f2c7358152"
                   ]
               ]
           },
           {
               "id": "414b4356cc4c622b",
               "type": "inject",
               "z": "36ae66b997d3bee8",
               "g": "187f146e9658409a",
               "name": "",
               "props": [
                   {
                       "p": "payload"
                   }
               ],
               "repeat": "",
               "crontab": "",
               "once": false,
               "onceDelay": 0.1,
               "topic": "",
               "payload": "[64,109,105,99,107,121,109,13,10,73,115,116,32,115,99,104,111,110,32,101,105,110,101,32,87,101,105,108,101,32,104,101,114,32,97,108,115,32,105,99,104,32,100,97,115,32,103,101,109,97,99,104,116,32,104,97,98,101,46,32,71,97,110,122,32,118,101,114,115,116,97,110,100,101,110,32,104,97,98,101,32,105,99,104,32,101,115,32,110,111,99,104,32,110,105,99,104,116,44,32,107,195,182,110,110,116,101,115,116,32,100,117,32,109,97,108,32,101,105,110,32,66,101,105,115,112,105,101,108,32,101,114,115,116,101,108,108,101,110,63,13,10,86,101,114,109,2,2,108,105,100,150,242,52,255,255,255,255,100,97,115,32,100,97,110,110,32,110,105,99,104,116,32,103,101,104,101,110,44,32,119,101,110,110,32,100,105,101,32,87,101,114,116,101,32,110,111,99,104,32,101,105,110,101,32,122,117,115,195,164,116,122,108,105,99,104,101,32,85,109,114,101,99,104,110,117,110,103,32,98,101,110,195,182,116,105,103,101,110,32,40,119,105,101,32,122,46,66,46,32,100,105,101,32,85,104,114,122,101,105,116,41,32,111,100,101,114,32,119,101,110,110,32,105,99,104,32,98,101,105,32,101,105,110,105,103,101,110,32,87,101,114,116,101,110,32,100,105,114,101,107,116,32,110,111,99,104,32,101,105,110,32,84,101,120,116,32,104,105,110,116,101,114,108,101,103,101,44,32,122,46,66,46,32,98,101,105,109,32,34,68,101,118,105,99,101,32,83,116,97,116,117,115,34,63,32,68,101,110,110,111,99,104,32,119,195,188,114,100,101,32,109,105,99,104,32,100,101,105,110,32,86,111,114,115,99,104,108,97,103,32,105,110,116,101,114,101,115,115,105,101,114,101,110,46]",
               "payloadType": "bin",
               "x": 190,
               "y": 2640,
               "wires": [
                   [
                       "edfdca52ca7f0d8a",
                       "6cf086b9713a9b3d"
                   ]
               ]
           },
           {
               "id": "6cf086b9713a9b3d",
               "type": "debug",
               "z": "36ae66b997d3bee8",
               "g": "187f146e9658409a",
               "name": "dummy Buffer",
               "active": true,
               "tosidebar": true,
               "console": false,
               "tostatus": false,
               "complete": "payload",
               "targetType": "msg",
               "statusVal": "",
               "statusType": "auto",
               "x": 360,
               "y": 2580,
               "wires": []
           },
           {
               "id": "753144f2c7358152",
               "type": "change",
               "z": "36ae66b997d3bee8",
               "g": "187f146e9658409a",
               "name": "",
               "rules": [
                   {
                       "t": "set",
                       "p": "stateUnit",
                       "pt": "msg",
                       "to": "[\t   {\"topic\":\"PV1_voltage\",\"unit\":\"V\"},\t   {\"topic\":\"PV1_current\",\"unit\":\"A\"},\t   {\"topic\":\"PV2_voltage\",\"unit\":\"V\"},\t   {\"topic\":\"PV2_current\",\"unit\":\"A\"},\t   {\"topic\":\"Input_power\",\"unit\":\"kW\"},\t   {\t       \"topic\":\"Line_voltage_between_phases_A_and_B\",\t       \"unit\":\"V\"\t   },\t   {\t       \"topic\":\"Line_voltage_between_phases_B_and_C\",\t       \"unit\":\"V\"\t   },\t   {\t       \"topic\":\"Line_voltage_between_phases_C_and_A\",\t       \"unit\":\"V\"\t   },\t   {\"topic\":\"Phase_A_voltage\",\"unit\":\"V\"},\t   {\"topic\":\"Phase_B_voltage\",\"unit\":\"V\"},\t   {\"topic\":\"Phase_C_voltage\",\"unit\":\"V\"},\t   {\"topic\":\"Phase_A_current\",\"unit\":\"A\"},\t   {\"topic\":\"Phase_B_current\",\"unit\":\"A\"},\t   {\"topic\":\"Phase_C_current\",\"unit\":\"A\"},\t   {\t       \"topic\":\"Peak_active_power_of_current_day\",\t       \"unit\":\"kW\"\t   },\t   {\"topic\":\"Active_power\",\"unit\":\"W\"},\t   {\"topic\":\"Reactive_power\",\"unit\":\"kVar\"},\t   {\"topic\":\"Grid_frequency\",\"unit\":\"Hz\"},\t   {\"topic\":\"Efficiency\",\"unit\":\"%\"},\t   {\t       \"topic\":\"Internal_temperature\",\t       \"unit\":\"°C\"\t   },\t   {\t       \"topic\":\"Insulation_resistance\",\t       \"unit\":\"MΩ\"\t   },\t  \t   {\t       \"topic\":\"Accumulated_energy_yield\",\t       \"unit\":\"kWh\"\t   },\t   {\t       \"topic\":\"Daily_energy_yield\",\t       \"unit\":\"kWh\"\t   }\t   ].$[topic=$$.topic].unit",
                       "tot": "jsonata"
                   }
               ],
               "action": "",
               "property": "",
               "from": "",
               "to": "",
               "reg": false,
               "x": 530,
               "y": 2640,
               "wires": [
                   [
                       "1f1bd3a1581a9f81"
                   ]
               ]
           },
           {
               "id": "74d62c6e47c82658",
               "type": "switch",
               "z": "36ae66b997d3bee8",
               "g": "187f146e9658409a",
               "name": "",
               "property": "topic",
               "propertyType": "msg",
               "rules": [
                   {
                       "t": "eq",
                       "v": "Device_status",
                       "vt": "str"
                   },
                   {
                       "t": "eq",
                       "v": "Startup_time",
                       "vt": "str"
                   },
                   {
                       "t": "eq",
                       "v": "Shutdown_time",
                       "vt": "str"
                   },
                   {
                       "t": "else"
                   }
               ],
               "checkall": "true",
               "repair": false,
               "outputs": 4,
               "x": 950,
               "y": 2640,
               "wires": [
                   [
                       "0e2fe1da994834de"
                   ],
                   [
                       "743bef30d8285fdf"
                   ],
                   [
                       "18444517a9d36abf"
                   ],
                   [
                       "b5fc699345857877"
                   ]
               ]
           },
           {
               "id": "18444517a9d36abf",
               "type": "change",
               "z": "36ae66b997d3bee8",
               "g": "187f146e9658409a",
               "name": "setze payload Shutdown_time",
               "rules": [
                   {
                       "t": "set",
                       "p": "payload",
                       "pt": "msg",
                       "to": "$formatBase(payload, 16) = 'ffffffff' ? '---' : $moment(payload*1000).locale(\"de\").utc().format('kk:mm [Uhr] (dddd, DD.MM.YYYY)')",
                       "tot": "jsonata"
                   }
               ],
               "action": "",
               "property": "",
               "from": "",
               "to": "",
               "reg": false,
               "x": 1210,
               "y": 2660,
               "wires": [
                   [
                       "f8256c61491a7672"
                   ]
               ]
           },
           {
               "id": "743bef30d8285fdf",
               "type": "change",
               "z": "36ae66b997d3bee8",
               "g": "187f146e9658409a",
               "name": "setze payload Start_time",
               "rules": [
                   {
                       "t": "set",
                       "p": "payload",
                       "pt": "msg",
                       "to": "$formatBase(payload, 16) = 'ffffffff' ? '---' : $moment(payload*1000).locale(\"de\").utc().format('kk:mm [Uhr] (dddd, DD.MM.YYYY)')",
                       "tot": "jsonata"
                   }
               ],
               "action": "",
               "property": "",
               "from": "",
               "to": "",
               "reg": false,
               "x": 1190,
               "y": 2620,
               "wires": [
                   [
                       "f8256c61491a7672"
                   ]
               ]
           },
           {
               "id": "0e2fe1da994834de",
               "type": "change",
               "z": "36ae66b997d3bee8",
               "g": "187f146e9658409a",
               "name": "setze payload Device_status",
               "rules": [
                   {
                       "t": "set",
                       "p": "payload",
                       "pt": "msg",
                       "to": "(\t   $status := [\t       {\t           \"code\": \"0000\",\t           \"text\": \"Standby: initializing\"\t  },\t       {\t           \"code\": \"0001\",\t           \"text\": \"Standby: detecting insulation resistance\"\t  },\t       {\t           \"code\": \"0002\",\t           \"text\": \"Standby: detecting irradiation\"\t  },\t       {\t           \"code\": \"0003\",\t           \"text\": \"Standby: drid detecting\"\t  },\t       {\t           \"code\": \"0100\",\t           \"text\": \"Starting\"\t  },\t       {\t           \"code\": \"0200\",\t           \"text\": \"On-grid\"\t  },\t       {\t           \"code\": \"0201\",\t           \"text\": \"Grid connection: power limited\"\t  },\t       {\t           \"code\": \"0202\",\t           \"text\": \"Grid connection: self-derating\"\t  },\t       {\t           \"code\": \"0203\",\t           \"text\": \"Off-grid Running\"\t  },\t       {\t           \"code\": \"0300\",\t           \"text\": \"Shutdown: fault\"\t  },\t       {\t           \"code\": \"0301\",\t           \"text\": \"Shutdown: command\"\t  },\t       {\t           \"code\": \"0302\",\t           \"text\": \"Shutdown: OVGR\"\t  },\t       {\t           \"code\": \"0303\",\t           \"text\": \"Shutdown: communication disconnected\"\t  },\t       {\t           \"code\": \"0304\",\t           \"text\": \"Shutdown: power limited\"\t  },\t       {\t           \"code\": \"0305\",\t           \"text\": \"Shutdown: manual startup required\"\t  },\t       {\t           \"code\": \"0306\",\t           \"text\": \"Shutdown: DC switches disconnected\"\t  },\t       {\t           \"code\": \"0307\",\t           \"text\": \"Shutdown: rapid cutoff\"\t  },\t       {\t           \"code\": \"0308\",\t           \"text\": \"Shutdown: input underpower\"\t  },\t       {\t           \"code\": \"0401\",\t           \"text\": \"Grid scheduling: cosφ-P curve\"\t  },\t       {\t           \"code\": \"0402\",\t           \"text\": \"Grid scheduling: Q-U curve\"\t  },\t       {\t           \"code\": \"0403\",\t           \"text\": \"Grid scheduling: PF-U curve\"\t  },\t       {\t           \"code\": \"0404\",\t           \"text\": \"Grid scheduling: dry contact\"\t  },\t       {\t           \"code\": \"0405\",\t           \"text\": \"Grid scheduling: Q-P curve\"\t  },\t       {\t           \"code\": \"0500\",\t           \"text\": \"Spot-check ready\"\t  },\t       {\t           \"code\": \"0501\",\t           \"text\": \"Spot-checking\"\t  },\t       {\t           \"code\": \"0600\",\t           \"text\": \"Inspecting\"\t  },\t       {\t           \"code\": \"0700\",\t           \"text\": \"AFCI self check\"\t  },\t       {\t           \"code\": \"0800\",\t           \"text\": \"I-V scanning\"\t  },\t       {\t           \"code\": \"0900\",\t           \"text\": \"DC input detection\"\t  },\t       {\t           \"code\": \"0A00\",\t           \"text\": \"Running: off-grid charging\"\t  },\t       {\t           \"code\": \"A000\",\t           \"text\": \"Standby: no irradiation\"\t  }\t];\t   $status[code=$$.payload] ? $status[code=$$.payload].text : 'shed unknown sensor'\t)",
                       "tot": "jsonata"
                   }
               ],
               "action": "",
               "property": "",
               "from": "",
               "to": "",
               "reg": false,
               "x": 1200,
               "y": 2580,
               "wires": [
                   [
                       "f8256c61491a7672"
                   ]
               ]
           },
           {
               "id": "b5fc699345857877",
               "type": "change",
               "z": "36ae66b997d3bee8",
               "g": "187f146e9658409a",
               "name": "No Change",
               "rules": [],
               "action": "",
               "property": "",
               "from": "",
               "to": "",
               "reg": false,
               "x": 1230,
               "y": 2700,
               "wires": [
                   [
                       "f8256c61491a7672"
                   ]
               ]
           },
           {
               "id": "1f1bd3a1581a9f81",
               "type": "change",
               "z": "36ae66b997d3bee8",
               "g": "187f146e9658409a",
               "name": "",
               "rules": [
                   {
                       "t": "set",
                       "p": "stateName",
                       "pt": "msg",
                       "to": "topic",
                       "tot": "msg"
                   }
               ],
               "action": "",
               "property": "",
               "from": "",
               "to": "",
               "reg": false,
               "x": 760,
               "y": 2640,
               "wires": [
                   [
                       "74d62c6e47c82658"
                   ]
               ]
           },
           {
               "id": "9b1f05bf2ae4f784",
               "type": "change",
               "z": "36ae66b997d3bee8",
               "g": "187f146e9658409a",
               "name": "",
               "rules": [
                   {
                       "t": "set",
                       "p": "topic",
                       "pt": "msg",
                       "to": "'0_userdata.0.Photovoltaik.Huawei.Inverter1.' & topic",
                       "tot": "jsonata"
                   }
               ],
               "action": "",
               "property": "",
               "from": "",
               "to": "",
               "reg": false,
               "x": 1520,
               "y": 2660,
               "wires": [
                   [
                       "b64fb4eb6b1bc30a",
                       "73ecc2c7d5e95344"
                   ]
               ]
           },
           {
               "id": "b64fb4eb6b1bc30a",
               "type": "debug",
               "z": "36ae66b997d3bee8",
               "g": "187f146e9658409a",
               "name": "Data Stage 1",
               "active": false,
               "tosidebar": true,
               "console": false,
               "tostatus": false,
               "complete": "true",
               "targetType": "full",
               "statusVal": "",
               "statusType": "auto",
               "x": 1730,
               "y": 2600,
               "wires": []
           },
           {
               "id": "73ecc2c7d5e95344",
               "type": "ioBroker out",
               "z": "36ae66b997d3bee8",
               "g": "187f146e9658409a",
               "name": "",
               "topic": "",
               "ack": "true",
               "autoCreate": "true",
               "stateName": "",
               "role": "",
               "payloadType": "",
               "readonly": "true",
               "stateUnit": "",
               "stateMin": "",
               "stateMax": "",
               "x": 1720,
               "y": 2660,
               "wires": []
           },
           {
               "id": "f8256c61491a7672",
               "type": "junction",
               "z": "36ae66b997d3bee8",
               "g": "187f146e9658409a",
               "x": 1400,
               "y": 2660,
               "wires": [
                   [
                       "9b1f05bf2ae4f784"
                   ]
               ]
           }
        ]
        

        Die Change Nodes sind glaube auch von allgemeinem Interesse - weil sie zeigen, wie schön und schnell man mit JSONATA über "Übersetzungsobjekte" eine payload anpassen kann.

        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

        M 1 Antwort Letzte Antwort
        0
        • S Offline
          S Offline
          Spexx
          schrieb am zuletzt editiert von
          #330

          @mickym
          Wow vielen Dank, dass du dir extra so viel Mühe gemacht hast. Ich stimme dir zu, das ist bei dir nun wesentlich kompakter und man erspart sich das Anlegen jeder einzelner Datenpunkte. Mir ist damals nichts besseres eingefallen wie man auf die "fan out" verzichten kann, von daher habe ich wieder etwas dazugelernt :)
          Es ist im Gegenzug dafür aber auch etwas schwieriger zu verstehen bzw. nachzuvollziehen, insbesondere für Node-Red Anfänger. Von daher bin ich mir noch nicht sicher, ob ich meinen Flow noch einmal überarbeiten werde, da er grundsätzlich ja auch problemlos funktioniert.

          Trotzdem danke noch einmal.

          1 Antwort Letzte Antwort
          0
          • V Offline
            V Offline
            virFortis
            schrieb am zuletzt editiert von
            #331

            Ich wollte mich einfach nur bedanken. Habe mein Wechselrichter seit Anfang der Woche aktiv und habe mit der Anleitung wirklich von 0 auf alles Installiert und eingerichtet bekommen und habe nun die Werte im ioBroker!
            DANKE

            B 1 Antwort Letzte Antwort
            0
            • V virFortis

              Ich wollte mich einfach nur bedanken. Habe mein Wechselrichter seit Anfang der Woche aktiv und habe mit der Anleitung wirklich von 0 auf alles Installiert und eingerichtet bekommen und habe nun die Werte im ioBroker!
              DANKE

              B Online
              B Online
              badsnoopy667
              schrieb am zuletzt editiert von
              #332

              Hallo @virfortis,
              freut mich, dass es funktioniert hat! Viel Spaß mit Deiner PV-Anlage!

              V 1 Antwort Letzte Antwort
              0
              • B badsnoopy667

                Hallo @virfortis,
                freut mich, dass es funktioniert hat! Viel Spaß mit Deiner PV-Anlage!

                V Offline
                V Offline
                virFortis
                schrieb am zuletzt editiert von
                #333

                @badsnoopy667 Vielen Dank. Was mir noch fehlt sind die Statistik Informationen die man so schön in der App oder auch im Web sieht. e5e6e5a0-d298-4ed7-8823-c62348fc36d3-image.png
                Leider scheint es ja weder über den Modbus noch über die API die Werte zu geben. Dazu habe ich hier im Forum das folgende Bild gefunden:
                02a7db1a-748c-430c-bbe0-cf589ee0a405-1688225894755-562698cb-619b-4a1c-82c1-3ff5968a0e11-grafik.png

                Gibt's eigentlich eine Möglichkeit in Node-red direkt zwei Knoten zu addieren?

                Habe weiter oben gelesen, dass der aktuelle Hausverbrauch z.b. gemittelt über 20 Sekunden gebildet werden muss weil die Abfragezeitpunkte unterschiedlich sind. -> Vllt könnte man das umgehen in dem man in Node-Red den Calculator verwenden könnte um zu sagen Adresse A - Adresse B = Wert xyz?

                mickymM 1 Antwort Letzte Antwort
                0
                • V virFortis

                  @badsnoopy667 Vielen Dank. Was mir noch fehlt sind die Statistik Informationen die man so schön in der App oder auch im Web sieht. e5e6e5a0-d298-4ed7-8823-c62348fc36d3-image.png
                  Leider scheint es ja weder über den Modbus noch über die API die Werte zu geben. Dazu habe ich hier im Forum das folgende Bild gefunden:
                  02a7db1a-748c-430c-bbe0-cf589ee0a405-1688225894755-562698cb-619b-4a1c-82c1-3ff5968a0e11-grafik.png

                  Gibt's eigentlich eine Möglichkeit in Node-red direkt zwei Knoten zu addieren?

                  Habe weiter oben gelesen, dass der aktuelle Hausverbrauch z.b. gemittelt über 20 Sekunden gebildet werden muss weil die Abfragezeitpunkte unterschiedlich sind. -> Vllt könnte man das umgehen in dem man in Node-Red den Calculator verwenden könnte um zu sagen Adresse A - Adresse B = Wert xyz?

                  mickymM Online
                  mickymM Online
                  mickym
                  Most Active
                  schrieb am zuletzt editiert von
                  #334

                  @virfortis Du kannst mit Node-Red alles rechnen - Du musst nur beides in einem Nachrichtenobjekt haben. Entweder speicherst Du eine Komponente im Kontext oder falls die Daten immer zusammen aktualisiert werden, dann über die JOIN Node in einem Objekt speichern. Ich hab das schon x Mal hier im NodeRed Forum gezeigt.

                  Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                  1 Antwort Letzte Antwort
                  0
                  • R Offline
                    R Offline
                    rascal
                    schrieb am zuletzt editiert von
                    #335

                    Hallo,
                    bin neu bei dem Thema, ich habe den am Anfang vorgestellten Flow importiert und angepasst, es funktioniert soweit (über den Modbus Adapter bekomme ich überhaupt keine Verbindung)

                    Es tauchen laufend Fehlermeldungen auf:

                    node-red.0
                    2023-07-06 10:22:24.195	warn	6 Jul 10:22:24 - [warn] [modbus-getter:37113] Getter -> Inject while node is not ready for input.
                    
                    node-red.0
                    2023-07-06 10:22:19.192	warn	6 Jul 10:22:19 - [warn] [modbus-getter:37113] Getter -> Inject while node is not ready for input.
                    
                    node-red.0
                    2023-07-06 10:22:16.930	warn	6 Jul 10:22:16 - [warn] [modbus-getter:30000] Getter -> Inject while node is not ready for input.
                    
                    node-red.0
                    2023-07-06 10:22:14.192	warn	6 Jul 10:22:14 - [warn] [modbus-getter:37113] Getter -> Inject while node is not ready for input.
                    

                    Es gibt auch immer wieder stundenweise Aussetzer bei der Abfrage, dann kommen wieder Daten.
                    Weiters legt mir der Flow nicht alle Datenpunkte an.
                    Screenshot 2023-07-06 104331.png

                    Habe ich irgendwo was übersehen beim Anpassen?
                    Warum legt er mir ein paar Datenpunkte an und den Rest nicht?

                    Noch eine Frage: ich habe mittlerweile 3 in Foren vorgeschlagen RS485/USB Adapter hier herumliegen, bekomme aber keine Daten über den Modbus Adapter. Am Inverter habe ich die Kabel an 2 u 4 angeschlossen da 1 u 3 schon belegt ist.
                    Soweit ich das herausgelesen habe, sollte das egal sein.

                    V 1 Antwort Letzte Antwort
                    0
                    • M Offline
                      M Offline
                      Marcel 4
                      schrieb am zuletzt editiert von
                      #336

                      @rascal Hallo,
                      ich bin neu in diesem Forum und wollte mal nachdem ich auch fast verzweifelt bin eine Lösung bringen.
                      Ich habe einen Modbus Rs485/Netzwerk Adapter benutzt.
                      Am Sun 2000 nicht den Dongle benutzen. Direkt in die Buchsen 1 und 3.
                      Im Iobroker den Modbus Adapter benutzen.
                      Bei Allgemein Tcp, IP Adresse, Port (502),Geräte ID 1
                      Holding Register eintragen. I rechten Feld Abfrage abhaken.
                      Fertig
                      Gruß Marcel

                      R 1 Antwort Letzte Antwort
                      0
                      • R rascal

                        Hallo,
                        bin neu bei dem Thema, ich habe den am Anfang vorgestellten Flow importiert und angepasst, es funktioniert soweit (über den Modbus Adapter bekomme ich überhaupt keine Verbindung)

                        Es tauchen laufend Fehlermeldungen auf:

                        node-red.0
                        2023-07-06 10:22:24.195	warn	6 Jul 10:22:24 - [warn] [modbus-getter:37113] Getter -> Inject while node is not ready for input.
                        
                        node-red.0
                        2023-07-06 10:22:19.192	warn	6 Jul 10:22:19 - [warn] [modbus-getter:37113] Getter -> Inject while node is not ready for input.
                        
                        node-red.0
                        2023-07-06 10:22:16.930	warn	6 Jul 10:22:16 - [warn] [modbus-getter:30000] Getter -> Inject while node is not ready for input.
                        
                        node-red.0
                        2023-07-06 10:22:14.192	warn	6 Jul 10:22:14 - [warn] [modbus-getter:37113] Getter -> Inject while node is not ready for input.
                        

                        Es gibt auch immer wieder stundenweise Aussetzer bei der Abfrage, dann kommen wieder Daten.
                        Weiters legt mir der Flow nicht alle Datenpunkte an.
                        Screenshot 2023-07-06 104331.png

                        Habe ich irgendwo was übersehen beim Anpassen?
                        Warum legt er mir ein paar Datenpunkte an und den Rest nicht?

                        Noch eine Frage: ich habe mittlerweile 3 in Foren vorgeschlagen RS485/USB Adapter hier herumliegen, bekomme aber keine Daten über den Modbus Adapter. Am Inverter habe ich die Kabel an 2 u 4 angeschlossen da 1 u 3 schon belegt ist.
                        Soweit ich das herausgelesen habe, sollte das egal sein.

                        V Offline
                        V Offline
                        virFortis
                        schrieb am zuletzt editiert von
                        #337

                        @rascal schau Mal ob einzelne Datenpunkte deaktiviert sind (grau). Ansonsten gibt's hier einen anderen flow, der auch ein paar mehre ausgibt und sogar berechnet. Allerdings ist da auch ein kleiner Fehler für das ein DP falsch eingestellt ist.

                        Ist hier zu finden:
                        Tts_482 13. Juni 2023, 14:28
                        @exel flows.json

                        R 1 Antwort Letzte Antwort
                        0
                        • M Marcel 4

                          @rascal Hallo,
                          ich bin neu in diesem Forum und wollte mal nachdem ich auch fast verzweifelt bin eine Lösung bringen.
                          Ich habe einen Modbus Rs485/Netzwerk Adapter benutzt.
                          Am Sun 2000 nicht den Dongle benutzen. Direkt in die Buchsen 1 und 3.
                          Im Iobroker den Modbus Adapter benutzen.
                          Bei Allgemein Tcp, IP Adresse, Port (502),Geräte ID 1
                          Holding Register eintragen. I rechten Feld Abfrage abhaken.
                          Fertig
                          Gruß Marcel

                          R Offline
                          R Offline
                          rascal
                          schrieb am zuletzt editiert von rascal
                          #338

                          @marcel-4
                          Danke für die Info.
                          Dann muss ich 3 Kabel auf die Ports 1+3 legen...
                          Ich habe jetzt einmal das aktuelle Node-Red flow eingespielt und schaue mir das an, bevor ich es über die RS485 nochmals versuche.

                          @virFortis auch dir Danke.
                          Flow funktioniert soweit gut

                          1 Antwort Letzte Antwort
                          0
                          • P Offline
                            P Offline
                            Praktiker
                            schrieb am zuletzt editiert von
                            #339

                            Hallo Huawei Freunde,
                            ich habe seit Donnerstag endlich meine Anlage laufen, und gleich mit dem Flow aus dem 1. Beitrag genutzt. Sieht eigentlich gut aus, habe schöne Werte. Allerdings gibt es hier Nachts ein paar unplausible Werte die mir meine Statistik echt versauen.
                            Hat hier jemand evtl. ein ähnliches Problem, und evtl. eine Lösung oder zumindest einen Ansatz?
                            Grüße Praktiker
                            Screenshot 2023-07-08 092349.png Screenshot 2023-07-09 115057.png

                            1 Antwort Letzte Antwort
                            0
                            • V virFortis

                              @rascal schau Mal ob einzelne Datenpunkte deaktiviert sind (grau). Ansonsten gibt's hier einen anderen flow, der auch ein paar mehre ausgibt und sogar berechnet. Allerdings ist da auch ein kleiner Fehler für das ein DP falsch eingestellt ist.

                              Ist hier zu finden:
                              Tts_482 13. Juni 2023, 14:28
                              @exel flows.json

                              R Offline
                              R Offline
                              rascal
                              schrieb am zuletzt editiert von
                              #340

                              @virfortis
                              Hallo, ich habe noch eine Frage zum Flow:
                              der Dongle.Load_power wird ca. alle 9 Minuten abgefragt, kann man für diesen Datenpunkt die Abfragezeit verkürzen?

                              V 1 Antwort Letzte Antwort
                              0
                              • R rascal

                                @virfortis
                                Hallo, ich habe noch eine Frage zum Flow:
                                der Dongle.Load_power wird ca. alle 9 Minuten abgefragt, kann man für diesen Datenpunkt die Abfragezeit verkürzen?

                                V Offline
                                V Offline
                                virFortis
                                schrieb am zuletzt editiert von
                                #341

                                @rascal sagte in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):

                                @virfortis
                                Hallo, ich habe noch eine Frage zum Flow:
                                der Dongle.Load_power wird ca. alle 9 Minuten abgefragt, kann man für diesen Datenpunkt die Abfragezeit verkürzen?

                                Ich habe da einfach die Abfrage vom flow aus dem ersten Beitrag genommen da sind unten 5 Werte die alle 3 Sekunden abgefragt werden. Und dem flow hinzugefügt.
                                Andere Lösung habe ich noch nicht gefunden.

                                1 Antwort Letzte Antwort
                                0
                                • B badsnoopy667

                                  Achtung: Verbindung mit Modbus Adapter klappt nicht, node-red klappt.

                                  Hier eine Anleitung um den SUN2000 Wechselrichter incl. Batterie und Power Meter per node-red auszulesen und Werte zu schreiben:

                                  1. Wechselrichter korrekt konfigurieren:
                                  Im Wechselrichter muss die Konfiguration per Modbus (TCP) aktiviert sein. Das kann der Installateur direkt erledigen. Alternativ lädt man sich die SUN2000 App auf's Handy und verbindet sich damit über das WLAN des Wechselrichters (also davorstehend im Keller) mit dem WR und stellt das ein. (Unter Kommunikationseinstellungen glaube ich, die Menüs sind ziemlich unübersichtlich mMn.)
                                  Zum Login in die App als Installateur braucht man ein Passwort: 00000a
                                  Eventuell braucht man zum Verbinden auf das WLAN des Wechselrichters auch ein Passwort: Changeme

                                  2. Node-Red installieren und Flow importieren:
                                  Man muss im ioBroker node-red installieren. Außerdem muss man in node-red noch drei zusätzliche NPM Module installieren (geht bei den Instanzeinstellungen):
                                  • node-red-contrib-calc
                                  • node-red-contrib-buffer-parser
                                  • node-red-contrib-modbus

                                  Hat man das erledigt, kann man diesen Flow importieren:

                                  Huawei_SUN2000_node_red_flow_read_write_2023-11.txt

                                  Achtung, weil das hier schon ein paar Mal zu Problemen geführt hat: Man muss die Client-ID in allen Modbus-Nodes korrekt eintragen. Bei mir steht da 2, weil mein Wechselrichter schonmal getauscht wurde. Das muss überall auf den richtigen Wert (meistens 1) geändert werden damit Daten kommen!
                                  Nachdem man den Flow importiert hat muss man ganz rechts im Menü unter "Globale-Konfigurations-Nodes" beim modbus-client noch die IP Adresse vom Wechselrichter und wieder die richtige Client-ID (typischerweise 1) eintragen. (Port ist 502)

                                  3. Hinweise:
                                  Dann sollte die Verbindung eigentlich schon funktionieren. Bei mir war dann noch das Problem, das node-red gemeckert hat, dass die Objekte in iobroker nicht existieren in die er schreiben will.
                                  Um das zu fixen habe ich im Flow alle Output-Nodes (die graublauen Boxen rechts) einmal doppeltgeklickt und dort bei "Auto-create --> Create states if not exist" ausgewählt. Dann kann man noch die Einheit und den Typ festlegen und dann werden die States automatisch beim ersten Lesen angelegt. Hierfür ist es erforderlich, dass in den node-red Instanzeinstellungen noch der Hacken bei "Erstellung von Fremd-Objekten zulassen" aktiviert wird.
                                  Zusätzlich habe ich noch den Wert "Readonly --> Object is writeable" gesetzt. K.a. ob das nötig ist, aber ich hatte den Eindruck, dass die Werte sonst nicht korrekt aktualisiert werden.

                                  Zum Nachlesen gibt es hier noch die Huawei SUN2000 Modbus Register Übersicht:
                                  Solar Inverter Modbus Interface Definitions V5.pdf (Stand 2023)
                                  Im Flow werden die wichtigsten Größen aber schon abgefragt.

                                  4. Modbus-Register schreiben:
                                  Man kann auch Register schreiben! Damit kann man z.B. die Batterie-Entladung auf 0W setzen wenn das eAuto lädt. Damit entlädt sich die Batterie dann nicht unnötig, wenn man das Auto mit Netzstrom lädt im Winter oder Nachts.
                                  Man kann auch TOU (Zeitgesteuertes Laden) aktivieren. Damit kann man wenn man Tibber oder Awattar nutzt zu den günstigen Stunden den Akku aufladen. Um die günstigsten Stunden auszulesen gibt es hier im Forum entsprechende Skripte.

                                  4.1 Zeitgesteuertes Laden korrekt konfigurieren und schreiben:
                                  • AC-Laden muss auf 1 stehen (Register 47087). Kann auch mMn permanent auf 1 bleiben.
                                  • Battery Working Mode (Register 47086) kann zwischen 2 (Maximaler Eigenverbrauch) und 5 (TOU, zeitgesteuert Laden) umgestellt werden.
                                  • Man definiert dann in der Huawei FusionSolar App unter Geräte - Dongle - Parametereinstellungen (die 4 Punkte oben rechts) einfach eine Zeit von 0:00 bis 23:59 jeden Tag "laden" (also den ganzen Tag). Dafür muss die Batterie auf TOU (5) gestellt sein.
                                  • Sobald man jetzt per Modbus das Register 47086 von 2 auf 5 umschaltet, fängt die Batterie aus dem Netz an zu laden.
                                  • Maximaler Ladestrom kann über Register 47075 eingestellt werden.
                                  • Stellt man den Working Mode wieder zurück auf 2, hört das Netzladen auf und die Batterie verhält sich wieder "normal".

                                  Die nötigen ioBroker Datenpunkte muss man noch anlegen. Also zB. Battery_Max_Charge_Power_SET oder Workingmode_Change.

                                  5. Weiteres
                                  5.1 Mehrere Wechselrichter abfragen

                                  Es gibt noch weitere Möglichkeiten den Flow aufzubauen. Man kann mehrere Adressbereiche auf einmal abfragen, das ist ggf. etwas effizienter. Den Flow dazu habe ich aber nicht getestet:

                                  Flow mit Multi-Abfrage

                                  Außerdem enthält der Flow ein Beispiel für die Abfrage mehrerer Wechselrichter in Kaskade. Im Prinzip muss man nur die korrekten IDs pro Wechselrichter eintragen und nicht zu viele Register abfragen, sonst kommen keine Daten mehr. Damit lassen sich auch 3 Wechselrichter (oder ggf. sogar mehr) in einem Flow abfragen.

                                  5.2 Aktuelle Firmware / Modbus Interface Definitions
                                  Hier noch ein Link zu den aktuellen Firmware Versionen:
                                  SUN2000 Firmware

                                  Vielen Dank an alle, die den Input geliefert haben!
                                  Ich hoffe es hilf, wenn ich es hier einmal zusammengefasst habe.

                                  D Offline
                                  D Offline
                                  dasbernd
                                  schrieb am zuletzt editiert von
                                  #342

                                  @badsnoopy667
                                  @badsnoopy667
                                  Danke für den flow! Leider funktioniert er nicht mit den modbus-getter. Tausche ich diese gegen modbus-read aus, bekomme ich die Register korrekt in den Objekten angezeigt. Jetzt will ich ungern alles ummodeln. Eine Idee woran das liegen könnte ?
                                  Die modbus-getter sind niemals aktiv, obwohl ich alles richtig eingestellt habe.
                                  Vorab, danke für die Hilfe.

                                  1 Antwort Letzte Antwort
                                  0
                                  • D Offline
                                    D Offline
                                    Doom.86
                                    schrieb am zuletzt editiert von
                                    #343

                                    Hat es eigentlich schon jemand geschafft die start und Ende uhrzeit im time of use betriebsmodus über modbus einzustellen? Laut Dokumentation ist es das register 47255 mit type bytes und quantity 43.
                                    Ich beiße mir daran die Zähne aus und komme einfach nicht voran. Ich würde das gerne mit einem nodered flow machen.
                                    Hintergrund ist, durch den stromanbieter tibber möchte ich in den Wintermonaten gezielt den Speicher zu den günstigen Zeiten laden. Die günstigsten Zeiten habe ich schon in iobroker als datenpunkte und werden täglich berechnet. Auch schon umgerechnet in Minuten.

                                    Bei mir hackt es wirklich nur noch daran, wie ich diese mit über modbus schreiben kann.

                                    Christof LewandowskiC 1 Antwort Letzte Antwort
                                    0
                                    • mickymM mickym

                                      @firebowl Wenn Du meinen Flow nicht nimmst - mache eine JSON Node vor die iobroker-Out Node - die stringifiziert Dein Objekt wieder zu einem String.

                                      Jens16J Offline
                                      Jens16J Offline
                                      Jens16
                                      schrieb am zuletzt editiert von
                                      #344

                                      @mickym sagte in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):

                                      @firebowl Wenn Du meinen Flow nicht nimmst - mache eine JSON Node vor die iobroker-Out Node - die stringifiziert Dein Objekt wieder zu einem String.

                                      Hallo mickym,
                                      wo finde ich deinen Flow

                                      mfg Jens

                                      mickymM 1 Antwort Letzte Antwort
                                      0
                                      • Jens16J Jens16

                                        @mickym sagte in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):

                                        @firebowl Wenn Du meinen Flow nicht nimmst - mache eine JSON Node vor die iobroker-Out Node - die stringifiziert Dein Objekt wieder zu einem String.

                                        Hallo mickym,
                                        wo finde ich deinen Flow

                                        mfg Jens

                                        mickymM Online
                                        mickymM Online
                                        mickym
                                        Most Active
                                        schrieb am zuletzt editiert von
                                        #345

                                        @jens16 sagte in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):

                                        @mickym sagte in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):

                                        @firebowl Wenn Du meinen Flow nicht nimmst - mache eine JSON Node vor die iobroker-Out Node - die stringifiziert Dein Objekt wieder zu einem String.

                                        Hallo mickym,
                                        wo finde ich deinen Flow

                                        mfg Jens

                                        Wenn Du ein Objekt hast und in einzelne Datenpunkte schreiben möchtest, dann kannst Du diesen Flow hier nehmen:
                                        https://forum.iobroker.net/topic/43856/json-oder-javascript-objekt-in-iobroker-datenpunkte-zerlegen

                                        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                                        Jens16J 1 Antwort Letzte Antwort
                                        0
                                        • mickymM mickym

                                          @jens16 sagte in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):

                                          @mickym sagte in [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write):

                                          @firebowl Wenn Du meinen Flow nicht nimmst - mache eine JSON Node vor die iobroker-Out Node - die stringifiziert Dein Objekt wieder zu einem String.

                                          Hallo mickym,
                                          wo finde ich deinen Flow

                                          mfg Jens

                                          Wenn Du ein Objekt hast und in einzelne Datenpunkte schreiben möchtest, dann kannst Du diesen Flow hier nehmen:
                                          https://forum.iobroker.net/topic/43856/json-oder-javascript-objekt-in-iobroker-datenpunkte-zerlegen

                                          Jens16J Offline
                                          Jens16J Offline
                                          Jens16
                                          schrieb am zuletzt editiert von
                                          #346

                                          @mickym

                                          Vielen Dank für die schnelle Antwort

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          783

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe