Skip to content
  • 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
  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.1k

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

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

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

Geplant Angeheftet Gesperrt Verschoben Node-Red
574 Beiträge 110 Kommentatoren 223.0k 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.
  • J joeysch

    @cksoft
    Hast du einen Intervall laufen?
    659e41ad-7e72-48b3-8996-5bf517d3c5b0-image.png
    Am Anfang ein Input Node das alle x Sekunden sendet.

    FragMikeF Offline
    FragMikeF Offline
    FragMike
    schrieb am zuletzt editiert von FragMike
    #509

    Vom WR habe ich heute als Sonne schien noch ein paar mehr Daten bekommen, aber die dtu schreibt nur Nullen.

    1 Antwort Letzte Antwort
    0
    • J joeysch

      @cksoft
      Hast du einen Intervall laufen?
      659e41ad-7e72-48b3-8996-5bf517d3c5b0-image.png
      Am Anfang ein Input Node das alle x Sekunden sendet.

      C Offline
      C Offline
      cksoft
      schrieb am zuletzt editiert von
      #510

      @joeysch

      Danke für die Antwort.
      Ja schon. Irgendwann hatte ich das Problem wieder hingefummelt. Keine Ahnung, für mich hat sich nichts geändert, ich hatte auch nichts geändert, als es nicht mehr ging.

      1 Antwort Letzte Antwort
      0
      • FragMikeF FragMike

        Hallo zusammen
        ich habe es tatsächlich geschafft, mich mit mit der Huawei PV zu verbinden. Das Modell vom Inverter wird schon einmal ausgegeben. Insofern müssen ja IP und ID ( in meinem Fall 1) stimmen. Ich habe 2 WR.
        Die DTU liefert mir allerdings bei dem Register 37113 nur eine 0
        auch die anderen Werte wie Frequenz oder Grid Voltage der Phasen liefert eine 0
        Jemand ne Idee, woran es liegen könnte?
        Oder Stimmen die Register nicht mehr.....oder liegt es evtl daran, dass ich 2 WR habe?
        P.s. wenn ich in dem flow oben beim Node Model eine 2 als ID eintrage, spuckt er mir das selbe WR Modell aus....obwohl ich einen 8ktl und einen 6 ktl habe

        9173b80b-2551-4249-9261-157bb8545fb1-image.png

        D Offline
        D Offline
        Doom.86
        schrieb am zuletzt editiert von
        #511

        @fragmike Hallo Mike,
        Ich habe auch zwei Wechselrichter. Bei mir muss ich für den Wechselrichter eins, die ID:1 eintragen. Auf dem Wechselrichter hängt auch mein dtu und meine Luna, also bei denen auch die ID:1
        Bei dem 2. Wechselrichter lese ich nur den WEchselrichter selber aus. sind die selben register und die selbe IP-Adresse, allerdings mit der Unit ID:2.

        Schau mal bei deinen Nodes durch ob die daten richtig hinterlegt sind. Evtl. sind es bei dir auch andere ID Nummern. Bei dem tread ersteller ist es, wenn ich es noch richtig im Kopf habe, durch einen Wechselrichtertausch die ID:2 und die ID:1 gibt es bei ihm gar nicht mehr.

        FragMikeF 1 Antwort Letzte Antwort
        0
        • D Doom.86

          @fragmike Hallo Mike,
          Ich habe auch zwei Wechselrichter. Bei mir muss ich für den Wechselrichter eins, die ID:1 eintragen. Auf dem Wechselrichter hängt auch mein dtu und meine Luna, also bei denen auch die ID:1
          Bei dem 2. Wechselrichter lese ich nur den WEchselrichter selber aus. sind die selben register und die selbe IP-Adresse, allerdings mit der Unit ID:2.

          Schau mal bei deinen Nodes durch ob die daten richtig hinterlegt sind. Evtl. sind es bei dir auch andere ID Nummern. Bei dem tread ersteller ist es, wenn ich es noch richtig im Kopf habe, durch einen Wechselrichtertausch die ID:2 und die ID:1 gibt es bei ihm gar nicht mehr.

          FragMikeF Offline
          FragMikeF Offline
          FragMike
          schrieb am zuletzt editiert von
          #512

          @doom-86 danke für deine Info. Die IP habe ich nicht geändert. Sollte ja immer die von dongle sein, soweit ich das verstanden habe. Bei den IDs habe ich schon mal alles von 0-4 in der node (und auch nur dort)probiert. Ansonsten habe ich nichts geändert.

          FragMikeF 1 Antwort Letzte Antwort
          0
          • mickymM mickym

            @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.

            M Offline
            M Offline
            MaGe
            schrieb am zuletzt editiert von
            #513

            @mickym, den von dir aufgezeigten Ansatz finde ich sehr interessant und würde diesen gerne verwenden.

            Nur leider verstehe ich nicht wie du von den Modbus-Adressen auf die Bytes im Node inject kommst. :man-shrugging:
            Könntest du dies bitte an den beiden ersten Werten im buffer-parser (PV1_voltage und PV1_current) mit den Adressen 32016 und 32017 erklären?

            Jetzt wünsche ich allen aber erstmal einen guten Rutsch ins neue Jahr.

            mickymM 1 Antwort Letzte Antwort
            0
            • M MaGe

              @mickym, den von dir aufgezeigten Ansatz finde ich sehr interessant und würde diesen gerne verwenden.

              Nur leider verstehe ich nicht wie du von den Modbus-Adressen auf die Bytes im Node inject kommst. :man-shrugging:
              Könntest du dies bitte an den beiden ersten Werten im buffer-parser (PV1_voltage und PV1_current) mit den Adressen 32016 und 32017 erklären?

              Jetzt wünsche ich allen aber erstmal einen guten Rutsch ins neue Jahr.

              mickymM Offline
              mickymM Offline
              mickym
              Most Active
              schrieb am zuletzt editiert von
              #514

              @mage Nun wenn Du Dir den buffer mal als String im debug Fenster anschaust, dann steht da nur Schmarrn drin. 😉

              Den Buffer muss Dir schon Deine getter-Node liefern. Mein Ansatz beginnt da, wie die buffer Node dieser Puffer interpretiert.

              Also vergiss den Inhalt der Inject Node selbst.

              Wie Du mehrere Register ausliest, und also die 3 großen Blöcke machst oder diese sogar in einen Buffer abfrägst hat @Spexx ja beschrieben. Dieser Puffer wird nur mit meinem Ansatz anders aufbereitet, als dann zig-Ausgänge zu haben und diese einzeln zu schreiben.

              Wie Du also x-Bytes aufeinmal in einen Puffer ausliest wurde hier beschrieben:
              https://forum.iobroker.net/post/1007480

              Für die Interpretation der Bytes hat ja mal 2 Tabellen mit angehängt, das musst Du ggf. in eigener Doku nachlesen.

              Für dieses Jahr mache ich aber auch erst mal Schluß hier und wünsche Dir und allen Lesern auch einen guten Rutsch. Antwort also bei Bedarf erst nächstes Jahr. 😉

              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
              • 6 Offline
                6 Offline
                652145
                schrieb am zuletzt editiert von 652145
                #515

                Hallo Zusammen,

                Gibt es die Möglichkeit, die Wirkleistung auf den einzelnen Phasen (Grid) auszulesen, wenn ja, auf welche Register?

                Die einzelnen Spannungen und die einzelnen Ströme bekommen ich auf den Register:

                37101 - Grid voltage Phase 1 [V]
                37103 - Grid voltage Phase 2 [V]
                37105 - Grid voltage Phase 3 [V]

                37107 - Grid current Phase 1 [A]
                37109 - Grid current Phase 2 [A]
                37111 - Grid current Phase 3 [A]

                Habe die Regiester inzwischen gefunden:

                37132 - Phase A ActivePower

                37134 - Phase B ActivePower

                37136 - Phase C ActivePower

                1 Antwort Letzte Antwort
                0
                • mickymM mickym

                  @mage Nun wenn Du Dir den buffer mal als String im debug Fenster anschaust, dann steht da nur Schmarrn drin. 😉

                  Den Buffer muss Dir schon Deine getter-Node liefern. Mein Ansatz beginnt da, wie die buffer Node dieser Puffer interpretiert.

                  Also vergiss den Inhalt der Inject Node selbst.

                  Wie Du mehrere Register ausliest, und also die 3 großen Blöcke machst oder diese sogar in einen Buffer abfrägst hat @Spexx ja beschrieben. Dieser Puffer wird nur mit meinem Ansatz anders aufbereitet, als dann zig-Ausgänge zu haben und diese einzeln zu schreiben.

                  Wie Du also x-Bytes aufeinmal in einen Puffer ausliest wurde hier beschrieben:
                  https://forum.iobroker.net/post/1007480

                  Für die Interpretation der Bytes hat ja mal 2 Tabellen mit angehängt, das musst Du ggf. in eigener Doku nachlesen.

                  Für dieses Jahr mache ich aber auch erst mal Schluß hier und wünsche Dir und allen Lesern auch einen guten Rutsch. Antwort also bei Bedarf erst nächstes Jahr. 😉

                  M Offline
                  M Offline
                  MaGe
                  schrieb am zuletzt editiert von MaGe
                  #516

                  @mickym, vielen lieben Dank. Da lag ich wohl komplett daneben. 🙂

                  Ich habe die Abfrage mal für die Adressen vom Dongle erstellt.
                  bsp.json

                  Die Abfrage funktioniert auch.
                  09d43645-bfbf-453f-86e5-b97221a84bca-grafik.png

                  Nur verstehe ich nicht weshalb bei der Load_power und Total_Battery_power so große Werte ausgegeben werden.

                  Laut der Doku ist der Faktor der Gleiche.
                  674545f1-9a3d-4454-aa1e-f0402e452bf9-grafik.png

                  Bei der einzelnen Abfrage bekomme ich die Werte richtig angezeigt.
                  bsp2.json
                  0553d1bc-bca8-40a3-a075-6af8c2b4c4c2-grafik.png

                  mickymM 1 Antwort Letzte Antwort
                  0
                  • M MaGe

                    @mickym, vielen lieben Dank. Da lag ich wohl komplett daneben. 🙂

                    Ich habe die Abfrage mal für die Adressen vom Dongle erstellt.
                    bsp.json

                    Die Abfrage funktioniert auch.
                    09d43645-bfbf-453f-86e5-b97221a84bca-grafik.png

                    Nur verstehe ich nicht weshalb bei der Load_power und Total_Battery_power so große Werte ausgegeben werden.

                    Laut der Doku ist der Faktor der Gleiche.
                    674545f1-9a3d-4454-aa1e-f0402e452bf9-grafik.png

                    Bei der einzelnen Abfrage bekomme ich die Werte richtig angezeigt.
                    bsp2.json
                    0553d1bc-bca8-40a3-a075-6af8c2b4c4c2-grafik.png

                    mickymM Offline
                    mickymM Offline
                    mickym
                    Most Active
                    schrieb am zuletzt editiert von mickym
                    #517

                    @mage

                    Grundsätzlich solltest nichts in den Node-Red adapter reinschrieben, sondern immer unter 0_userdata.0

                    9ab37556-db84-4d05-8384-31e9b1940dbf-image.png

                    Ich denke ich habe Deinen Fehler gefunden:

                    bde89a7b-3b41-4f15-b0ff-54f688c72789-image.png

                    Wenn Du Dir meinen Flow anschaust - dann sind 32bit Zahlen 4 Bytes groß und nicht 2 Bytes. Bei Deinen Registern mag 2 stimmen - weil die immer in Modbus glaub jedes Register aus 2 Bytes besteht (als 16 bit) und nicht ein Byte - also müsstest Du den Offset neu berechnen.

                    Probiere es also mal bei Deiner Sammelabfrage mit dieser Buffer Node:

                    [
                       {
                           "id": "55661601dff750a4",
                           "type": "buffer-parser",
                           "z": "00c7a07c321a2bc1",
                           "name": "",
                           "data": "payload",
                           "dataType": "msg",
                           "specification": "spec",
                           "specificationType": "ui",
                           "items": [
                               {
                                   "type": "uint32be",
                                   "name": "Total_Input_power",
                                   "offset": 0,
                                   "length": 1,
                                   "offsetbit": 0,
                                   "scale": "/1000",
                                   "mask": ""
                               },
                               {
                                   "type": "uint32be",
                                   "name": "Load_power",
                                   "offset": 4,
                                   "length": 1,
                                   "offsetbit": 0,
                                   "scale": "/1000",
                                   "mask": ""
                               },
                               {
                                   "type": "int32be",
                                   "name": "Grid_power",
                                   "offset": 8,
                                   "length": 1,
                                   "offsetbit": 0,
                                   "scale": "/1000",
                                   "mask": ""
                               },
                               {
                                   "type": "int32be",
                                   "name": "Total_Battery_power",
                                   "offset": 12,
                                   "length": 1,
                                   "offsetbit": 0,
                                   "scale": "/1000",
                                   "mask": ""
                               },
                               {
                                   "type": "int32be",
                                   "name": "Total_Active_power",
                                   "offset": 16,
                                   "length": 1,
                                   "offsetbit": 0,
                                   "scale": "/1000",
                                   "mask": ""
                               }
                           ],
                           "swap1": "",
                           "swap2": "",
                           "swap3": "",
                           "swap1Type": "swap",
                           "swap2Type": "swap",
                           "swap3Type": "swap",
                           "msgProperty": "payload",
                           "msgPropertyType": "str",
                           "resultType": "value",
                           "resultTypeType": "output",
                           "multipleResult": true,
                           "fanOutMultipleResult": false,
                           "setTopic": true,
                           "outputs": 1,
                           "x": 380,
                           "y": 240,
                           "wires": [
                               [
                                   "f69401eb16129112"
                               ]
                           ]
                       }
                    ]
                    

                    Wenn die Buffer-Node verwendest:

                    f6c2acc2-5942-494d-b3fb-45d6a74093e4-image.png

                    Dann sollten alle 32 Bit Zahlen die korrekten Byte Offset von 4 enthalten. Also Register im Modbus (16 bit) - Offset im Bufferparse 1 Byte (8 bit)

                    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
                    • mickymM mickym

                      @mage

                      Grundsätzlich solltest nichts in den Node-Red adapter reinschrieben, sondern immer unter 0_userdata.0

                      9ab37556-db84-4d05-8384-31e9b1940dbf-image.png

                      Ich denke ich habe Deinen Fehler gefunden:

                      bde89a7b-3b41-4f15-b0ff-54f688c72789-image.png

                      Wenn Du Dir meinen Flow anschaust - dann sind 32bit Zahlen 4 Bytes groß und nicht 2 Bytes. Bei Deinen Registern mag 2 stimmen - weil die immer in Modbus glaub jedes Register aus 2 Bytes besteht (als 16 bit) und nicht ein Byte - also müsstest Du den Offset neu berechnen.

                      Probiere es also mal bei Deiner Sammelabfrage mit dieser Buffer Node:

                      [
                         {
                             "id": "55661601dff750a4",
                             "type": "buffer-parser",
                             "z": "00c7a07c321a2bc1",
                             "name": "",
                             "data": "payload",
                             "dataType": "msg",
                             "specification": "spec",
                             "specificationType": "ui",
                             "items": [
                                 {
                                     "type": "uint32be",
                                     "name": "Total_Input_power",
                                     "offset": 0,
                                     "length": 1,
                                     "offsetbit": 0,
                                     "scale": "/1000",
                                     "mask": ""
                                 },
                                 {
                                     "type": "uint32be",
                                     "name": "Load_power",
                                     "offset": 4,
                                     "length": 1,
                                     "offsetbit": 0,
                                     "scale": "/1000",
                                     "mask": ""
                                 },
                                 {
                                     "type": "int32be",
                                     "name": "Grid_power",
                                     "offset": 8,
                                     "length": 1,
                                     "offsetbit": 0,
                                     "scale": "/1000",
                                     "mask": ""
                                 },
                                 {
                                     "type": "int32be",
                                     "name": "Total_Battery_power",
                                     "offset": 12,
                                     "length": 1,
                                     "offsetbit": 0,
                                     "scale": "/1000",
                                     "mask": ""
                                 },
                                 {
                                     "type": "int32be",
                                     "name": "Total_Active_power",
                                     "offset": 16,
                                     "length": 1,
                                     "offsetbit": 0,
                                     "scale": "/1000",
                                     "mask": ""
                                 }
                             ],
                             "swap1": "",
                             "swap2": "",
                             "swap3": "",
                             "swap1Type": "swap",
                             "swap2Type": "swap",
                             "swap3Type": "swap",
                             "msgProperty": "payload",
                             "msgPropertyType": "str",
                             "resultType": "value",
                             "resultTypeType": "output",
                             "multipleResult": true,
                             "fanOutMultipleResult": false,
                             "setTopic": true,
                             "outputs": 1,
                             "x": 380,
                             "y": 240,
                             "wires": [
                                 [
                                     "f69401eb16129112"
                                 ]
                             ]
                         }
                      ]
                      

                      Wenn die Buffer-Node verwendest:

                      f6c2acc2-5942-494d-b3fb-45d6a74093e4-image.png

                      Dann sollten alle 32 Bit Zahlen die korrekten Byte Offset von 4 enthalten. Also Register im Modbus (16 bit) - Offset im Bufferparse 1 Byte (8 bit)

                      M Offline
                      M Offline
                      MaGe
                      schrieb am zuletzt editiert von
                      #518

                      @mickym, vielen Dank. Es lag tatsächlich am Offset. Den Pfad habe ich auch geändert.

                      Jetzt habe ich gerade versucht, den nächsten Block anzuhängen. Muss ich dabei irgendwas beachten, was ich übersehen habe? Es werden beim zweiten Block keine Werte ausgegeben.

                      6720854a-beec-4b63-8ba0-4436a405d47f-grafik.png

                      bsp3.json

                      mickymM 1 Antwort Letzte Antwort
                      0
                      • M MaGe

                        @mickym, vielen Dank. Es lag tatsächlich am Offset. Den Pfad habe ich auch geändert.

                        Jetzt habe ich gerade versucht, den nächsten Block anzuhängen. Muss ich dabei irgendwas beachten, was ich übersehen habe? Es werden beim zweiten Block keine Werte ausgegeben.

                        6720854a-beec-4b63-8ba0-4436a405d47f-grafik.png

                        bsp3.json

                        mickymM Offline
                        mickymM Offline
                        mickym
                        Most Active
                        schrieb am zuletzt editiert von mickym
                        #519

                        @mage das kann ich nicht beantworten- schaut aber erst mal so aus, als ob da die Node noch nicht bereit ist- warum liest man aber nicht alles auf einmal aus? Das würde den Bus viel weniger belasten? Du kannst wieder eine Delay dazwischen hängen, aber warum liest man nicht 100 Register auf einmal? Oder halt mit einer debug node schauen, wo die Nachricht verschluckt wird.

                        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
                        • mickymM mickym

                          @mage das kann ich nicht beantworten- schaut aber erst mal so aus, als ob da die Node noch nicht bereit ist- warum liest man aber nicht alles auf einmal aus? Das würde den Bus viel weniger belasten? Du kannst wieder eine Delay dazwischen hängen, aber warum liest man nicht 100 Register auf einmal? Oder halt mit einer debug node schauen, wo die Nachricht verschluckt wird.

                          M Offline
                          M Offline
                          MaGe
                          schrieb am zuletzt editiert von
                          #520

                          @mickym, es wird folgende Fehlermeldung ausgegeben:

                          "Error: Modbus exception 2: Illegal data address (register not supported by device)"

                          Die Adressen sind aber richtig? :man-shrugging:
                          f92f3902-1874-43e6-b968-ce7cba5687c6-grafik.png

                          bsp4.json

                          mickymM 1 Antwort Letzte Antwort
                          0
                          • M MaGe

                            @mickym, es wird folgende Fehlermeldung ausgegeben:

                            "Error: Modbus exception 2: Illegal data address (register not supported by device)"

                            Die Adressen sind aber richtig? :man-shrugging:
                            f92f3902-1874-43e6-b968-ce7cba5687c6-grafik.png

                            bsp4.json

                            mickymM Offline
                            mickymM Offline
                            mickym
                            Most Active
                            schrieb am zuletzt editiert von
                            #521

                            @mage wie gesagt, alles was Möbus selbst angeht, da kann ich nicht helfen. Ich würde halt mal versuchen, alles auf einmal auszulesen. Kann doch sein, dass der bus überfordert ist. Oder mach eine Delay Node dazwischen. Aber lieber 100 Register auf einmal, als 10 mal 10. prüfe halt, ob es geht, wenn du nur die untere triggerst. Wenn das geht, dann weißt du, dass der Bus noch nicht in der Lage war, weitere Anfragen zu verkraften.

                            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
                            • mickymM mickym

                              @mage wie gesagt, alles was Möbus selbst angeht, da kann ich nicht helfen. Ich würde halt mal versuchen, alles auf einmal auszulesen. Kann doch sein, dass der bus überfordert ist. Oder mach eine Delay Node dazwischen. Aber lieber 100 Register auf einmal, als 10 mal 10. prüfe halt, ob es geht, wenn du nur die untere triggerst. Wenn das geht, dann weißt du, dass der Bus noch nicht in der Lage war, weitere Anfragen zu verkraften.

                              M Offline
                              M Offline
                              MaGe
                              schrieb am zuletzt editiert von
                              #522

                              @mickym, nun habe ich den Fehler endlich gefunden. 🙂
                              Der Dongle hat die ID:100 und der Inverter, der Meter und die Batterie die ID:1.
                              Und wenn man überall die ID:100 setzt, kann es ja auch nicht gehen.
                              Jetzt funktioniert es wie es soll.

                              Gibt es eigentlich bei Node-Red eine Möglichkeit die Last eines flows im Bus zu messen?
                              Dann könnte ich meinen ersten flow (Einzelabfrage) mit dem jetzigen flow (Blockabfrage) vergleichen.
                              Und bei Notwendigkeit das von dir angesprochene zusammenfassen weiterer Blöcke noch umsetzen.

                              mickymM 1 Antwort Letzte Antwort
                              0
                              • M MaGe

                                @mickym, nun habe ich den Fehler endlich gefunden. 🙂
                                Der Dongle hat die ID:100 und der Inverter, der Meter und die Batterie die ID:1.
                                Und wenn man überall die ID:100 setzt, kann es ja auch nicht gehen.
                                Jetzt funktioniert es wie es soll.

                                Gibt es eigentlich bei Node-Red eine Möglichkeit die Last eines flows im Bus zu messen?
                                Dann könnte ich meinen ersten flow (Einzelabfrage) mit dem jetzigen flow (Blockabfrage) vergleichen.
                                Und bei Notwendigkeit das von dir angesprochene zusammenfassen weiterer Blöcke noch umsetzen.

                                mickymM Offline
                                mickymM Offline
                                mickym
                                Most Active
                                schrieb am zuletzt editiert von
                                #523

                                @mage Nein - bzw. ist das keine Funktion von NodeRed an sich. Die ganzen Nodes, die in NodeRed mit Hardware sprechen - basieren entweder auf Standardkommunikationsmethoden, APIs der Hersteller, die entweder direkt oder über NodeJS Bibliotheken angesprochen werden. Trotzdem ist es immer ein Overhead - wenn ich mehrere kleine Abfragen mache, als eine große - weil dann nicht jedesmal neue Anforderungen übertragen werden müssen - das ist ja bei Datenbankabfragen in der Regel auch so. Allerdings dauern größere Abfragen eher länger.

                                Im Prinzip würde ich die Größe der Abfrage von der nötigen Aktualität der Daten abhängig machen. Daten, die sich häufig ändern und die unbedingt aktuelle sein müssen, sollte man in kleinen Stücken dafür öfters abfragen, während andere Teile in größeren Zeitabständen und dafür in größeren Blöcken abgerufen werden sollten. Ich kenn mich mit den Modbus Nodes nicht aus - generell ist die Frage ob man pollt oder lieber bei Änderungen triggern lässt.

                                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
                                • FragMikeF FragMike

                                  @doom-86 danke für deine Info. Die IP habe ich nicht geändert. Sollte ja immer die von dongle sein, soweit ich das verstanden habe. Bei den IDs habe ich schon mal alles von 0-4 in der node (und auch nur dort)probiert. Ansonsten habe ich nichts geändert.

                                  FragMikeF Offline
                                  FragMikeF Offline
                                  FragMike
                                  schrieb am zuletzt editiert von
                                  #524

                                  ich habe die ID im "neuen Webportal" selber ausfindig machen können. Ging auch ohne Installateur Zugang. Der zweite WR hat bei mir die ID 16. Darunter finde ich auch nun den "Meter"

                                  Bekomme nun entsprechend Werte.

                                  1 Antwort Letzte Antwort
                                  0
                                  • B Online
                                    B Online
                                    bolliy
                                    Developer
                                    schrieb am zuletzt editiert von
                                    #525

                                    Ich habe gerade den Adapter sun2000 in der Version 0.1.3 hier https://github.com/bolliy/ioBroker.sun2000 veröffentlicht. Der Adapter ist ebenfalls auch auf https://www.npmjs.com/package/iobroker.sun2000 deployed.
                                    Kann mit max. 5 Wechselrichtern betrieben werden!

                                    Changelog:
                                    • display the data from PV strings (#27)
                                    • optimize the timing of interval loop
                                    • improved handling of read timeouts from more then 2 inverters

                                    Über Tests und euer Feedback freue mich sehr freuen.
                                    Eure Anmerkungen könnt ihr auch gerne hier https://forum.iobroker.net/topic/71768/test-adapter-sun2000-huawei-wechselrichter-per-modbus oder https://github.com/bolliy/ioBroker.sun2000/issues posten.
                                    LG Stephan

                                    1 Antwort Letzte Antwort
                                    0
                                    • M Offline
                                      M Offline
                                      micklafisch
                                      schrieb am zuletzt editiert von
                                      #526

                                      Hallo,
                                      ich setze für meinen Huawei das oben gepostete NodeRed ein (zugegeben habe ich von NodeRed keinerlei Ahnung und mich bisher nur sehr spärlich darum gekümmert).

                                      Leider kommt es immer wieder vor, dass der Wert für "Accumulated_Energy_Yield" irre Sprünge macht und mir damit das Sourceanalytix zerstört. Hier ein Auszug vom parallel per historie geloggten DP:

                                      17.1.2024 11:03:27.590;31710.56;true;node-red.0
                                      17.1.2024 11:17:05.292;31710.56;true;node-red.0
                                      17.1.2024 11:17:45.018;31710.57;true;node-red.0
                                      17.1.2024 11:24:01.366;31710.57;true;node-red.0
                                      17.1.2024 11:25:40.496;2669977.62;true;node-red.0
                                      17.1.2024 11:26:46.486;31710.57;true;node-red.0
                                      17.1.2024 11:57:11.041;31710.57;true;node-red.0
                                      17.1.2024 11:57:23.566;31710.58;true;node-red.0
                                      17.1.2024 12:20:41.719;31710.58;true;node-red.0
                                      

                                      Kann ein derartiger unplausibler Wert bereits im NodeRed Flow abgefangen werden (z.B. wenn der neue Wert im Vergleich zum alten Wert höher ist als "200" dann nicht speichern)?

                                      mickymM 1 Antwort Letzte Antwort
                                      0
                                      • M micklafisch

                                        Hallo,
                                        ich setze für meinen Huawei das oben gepostete NodeRed ein (zugegeben habe ich von NodeRed keinerlei Ahnung und mich bisher nur sehr spärlich darum gekümmert).

                                        Leider kommt es immer wieder vor, dass der Wert für "Accumulated_Energy_Yield" irre Sprünge macht und mir damit das Sourceanalytix zerstört. Hier ein Auszug vom parallel per historie geloggten DP:

                                        17.1.2024 11:03:27.590;31710.56;true;node-red.0
                                        17.1.2024 11:17:05.292;31710.56;true;node-red.0
                                        17.1.2024 11:17:45.018;31710.57;true;node-red.0
                                        17.1.2024 11:24:01.366;31710.57;true;node-red.0
                                        17.1.2024 11:25:40.496;2669977.62;true;node-red.0
                                        17.1.2024 11:26:46.486;31710.57;true;node-red.0
                                        17.1.2024 11:57:11.041;31710.57;true;node-red.0
                                        17.1.2024 11:57:23.566;31710.58;true;node-red.0
                                        17.1.2024 12:20:41.719;31710.58;true;node-red.0
                                        

                                        Kann ein derartiger unplausibler Wert bereits im NodeRed Flow abgefangen werden (z.B. wenn der neue Wert im Vergleich zum alten Wert höher ist als "200" dann nicht speichern)?

                                        mickymM Offline
                                        mickymM Offline
                                        mickym
                                        Most Active
                                        schrieb am zuletzt editiert von
                                        #527

                                        @micklafisch Du kannst entweder mit einer switch node - absolute Werte ausfiltern oder Du nimmst eine filter node, damit kannst Du Sprünge generell ausschalten. Die kannst Du im Nahbandmodus betreiben um zu große Sprünge auszufiltern. Lies halt die Hilfe durch. Hier der entsprechende Auszug.

                                        In den Nahband-Modies werden die Eingangswerte geblockt, wenn die Wertänderung größer oder größer-gleich ist als ± des Bandes um den voherigen Wert. Dies ist beispielsweise nützlich, um Ausreißer eines fehlerhaften Sensors zu ignorieren.

                                        In den Totband und Nahband-Modies müssen die Eingangswerte analysierbare (parseable) Zahlenwerte sein und beide unterstützen auch % (prozentuale Angabe), d.h. der Node sendet nur, wenn der Eingangswert mehr als x% vom vorherigen Wert abweicht.

                                        Die Totband- und Nahband-Modies erlauben den Vergleich entweder gegen den letzten gültigen Ausgangswert, dieses zum Ignorieren von Werten außerhalb des gültigen Bereichs, oder gegen den des vorherigen Eingangswertes, welches den Sollwert rücksetzt, was einen allmähligen Drift (Totband) oder einen eine schrittweise Veränderung (Nahband) ermöglicht.

                                        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
                                        1
                                        • M Offline
                                          M Offline
                                          marcelinho
                                          schrieb am zuletzt editiert von
                                          #528

                                          Hallo zusammen,
                                          hat jemand in Verbindung mit dem Speicher Luna2000 die richtigen Werte hinbekommen ?„Daily Energy Yield“zeigt mir seit dem Speicher falsche Werte an. Die App stimmt nicht mit dem in NodeRed überein.
                                          Desweiteren kann mir jemand vielleicht helfen, wie ich dem Wechslrichter sage, wenn ich das Auto mit einer Wallbox laden möchte, dass er nicht die Batterie entläd? Habe eine Zappi Wallbox die Überschuss laden kann und möchte nicht dass Sie an die Batterie geht. Oder wenn möglich dann als Beispiel wenn Batterie zwischen 100% bis 70% kompensiere eine Wolke wenn nicht genug PV Energie kommt mit der Batterie wenn unter 70% beziehe Netzbezug. Vielleicht mit einem Blockly.
                                          Dankbar über jeden Tipp bzw. Hilfe.

                                          Grüße

                                          C 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

                                          371

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

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

                                          • Du hast noch kein Konto? Registrieren

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