Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. [HowTo] Huawei SUN2000 WR Modbus mit node-red (read + write)

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

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

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      ple @leonundjulie last edited by

      @leonundjulie
      Puh, ist schon ein wenig her bei mir. Hier mal mein aktueller Flow.
      Wie du schon erkannt hast, habe ich für den oberen Teil die Adressen direkt vom Dongle genommen, mit der neusten Software kann man die auch schneller abfragen.
      Der untere Teil betrifft nur den Inverter, da musst du die passenden Strings wählen. Kann sein, dass dein WR andere verwendet.
      Meine Hardware besteht aus KTL30-m3, powersensor und dongle.

      flows (1).json

      1 Reply Last reply Reply Quote 0
      • J
        Joogibaer last edited by

        Hallo zusammen,

        hat einer eine Idee warum auf einmal, meine active Last, also mein Hausverbrauch (32080) identisch ist mit der Dachproduktion? Das war vorher nie so 😞

        Danke für Eure Ideen 🙂

        bfd6fb81-ee9e-4184-a806-80d81149259e-image.png

        B 1 Reply Last reply Reply Quote 0
        • B
          badsnoopy667 @Joogibaer last edited by badsnoopy667

          @joogibaer
          Ich glaube der Fehler liegt in der Annahme, das "Active Power" der Hausverbrauch wäre. Das ist definitiv nicht so. Den Hausverbrauch muss man sich selber berechnen. Kann Dir gerade nicht genau sagen, was "Active Power" dann sein soll, aber ich glaube das ist eher das, was gerade über den Wechselrichter läuft. Also nachts dann auch das, was aus der Batterie kommt.
          Bei mir sind die beiden Werte aktuell auch gleich. Ich speise ein. Sobald die Batterie ge- oder entladen wird, sind die beiden Werte nicht mehr gleich.
          Ich habe weiter oben mein Blockly Skript zur Berechnung des Verbrauchs gepostet. Ist etwas komplizierter, aber guck Dir das mal an.

          active_power.png

          Hab jetzt nochmal nachgesehen, aber ohne Gewähr:

          PV-Erzeugung = Active Power Inverter + Battery Power
          Hausverbrauch = Active Power Inverter - Active Power Meter
          Netzbezug/Einspeisung = Active Power Meter (Vorzeichen beachten!)

          S 1 Reply Last reply Reply Quote 0
          • S
            SvenH75 @badsnoopy667 last edited by

            @badsnoopy667 Hallo, ich hab das gleiche…… bin der Meinung, bis vor ein paar Tagen war aktiv Power der Hausverbrauch ( verbrauchte Leistung)…….

            B 1 Reply Last reply Reply Quote 0
            • B
              badsnoopy667 @SvenH75 last edited by

              @svenh75
              Solange scheiß Wetter ist und man nicht Einspeist, kommt das ja auch ungefähr hin. 😂

              1 Reply Last reply Reply Quote 0
              • A
                Agent.Til last edited by

                hallo zusammen,
                hat schon jemand schon eine möglichkeit gefunden die optimierer auszulesen?
                ich meine damit die nicht die anzahl, sondern die daten der einzelnen optimierer.
                hintergrund: ich habe ost- und westseite (je 6 module) sowie die fassade (8 module) an einem string und würde nun gern die erträge pro seite errechnen.
                für sachdienliche hilfe wäre ich sehr, sehr dankbar.
                Til

                1 Reply Last reply Reply Quote 0
                • exel
                  exel last edited by

                  Hallo, ich teste gerade Solaranzeige und die Variante alles über iobroker und Node-Red zu realisieren.

                  In Solaranzeige wird mir der Gesamtwert Import und Export in kWh angezeigt. (Also der Gesamtwert seit Inbetriebnahme des SmartMeter).
                  Ich habe zig unterschiedl. Dokumente von Huawei über Interface Definitions durchgelesen. Finde aber einfach die Adresse nicht.

                  Hat jemand zufällig eine Idee? Die Werte sind für mich ausschlaggebend für eine sinnvolle Auswertung.

                  T 2 Replies Last reply Reply Quote 0
                  • T
                    ts_482 @exel last edited by

                    @exel Energie Export müsste 37119 sein, ich hab da auch schon was fertiges mit NodeRed. Habe ich mir damals auch von jemand geben lassen.

                    1 Reply Last reply Reply Quote 0
                    • T
                      ts_482 @exel last edited by

                      @exel flows.json

                      exel 1 Reply Last reply Reply Quote 0
                      • exel
                        exel @ts_482 last edited by

                        @ts_482 Vielen Dank. Das sieht gut aus.

                        1 Reply Last reply Reply Quote 0
                        • S
                          Spexx last edited by Spexx

                          Weiss jemand, mit welchem Register ich den oberen SOC schreiben kann?
                          Ich habe es mit dem Register 47101 probiert, nennt sich Target SOC. Das klappt aber nicht. Blöderweise habe ich den ursprünglichen Wert zuvor nicht ausgelesen, jetzt weiss ich nicht was das Register bewirkt und welcher Wert da reingehört...

                          Könnte mal jemand das Register 47101 auslesen und mir mitteilen, was da drin steht?

                          Edit:
                          Hat sich erledigt. Target SOC ist wohl für das erzwungene Laden/Entladen. Den SOC kann man über das Register 47081 schreiben.

                          1 Reply Last reply Reply Quote 0
                          • Christof Lewandowski
                            Christof Lewandowski @mickym last edited by

                            @mickym Sorry für die späte Rückmeldung. Musste erst den zweiten Teil meiner PV Anlage fertig bauen und war dann im Urlaub 🙂

                            Ich meine bspw. sowas:
                            a1240415-5ff0-4302-a529-a4e826e687e9-image.png

                            Hier werden die Adressen 32016-32019 einzeln ausgelesen und in die dazugehörigen Datenpunkte geschrieben.
                            Wie würde man es denn realisieren, dass die vier Adressen gleichzeitig ausgelesen und dann in die jeweiligen Datenpunkte geschrieben werden?

                            Dein verlinkter Thread ist für mich wie bömische Dörfer 😄

                            mickym 1 Reply Last reply Reply Quote 0
                            • mickym
                              mickym Most Active @Christof Lewandowski last edited by mickym

                              @christof-lewandowski Na ja ich kenne jetzt das Modbus nicht im Detail und es läuft ja auch. Aber man könnte ggf. den Verkehr oder die Anfragen vermindern indem man halt einmal die Adressen von 32016 bis 32019 ausliest und dann mit dem Bufferparser in 4 einzelne Nachrichten ausgeben lässt, wobei man ggf. sogar gleich das topic setzen könnte. Um das mit dir auszuprobieren müsste ich sehen, was Du in dem Flow machst und ob Du selbst mit der modbus Node alle Adressen aufeinmal auslesen kannst. ich glaube das geht, dass man angeben kann wieviel ausgelesen werden soll.

                              Exportiere halt mal den ausgewählten Schnipsel und poste mir mal was eine Modbus Node mit allen 4 Registern aufeinmal ausspukt hier in Code Tags, dann kann ich das mit einer Inject Node nachstellen.

                              Wie gesagt wenn Du Deine Anlage in größeren Blöcken abfragst, minimierst Du Netzwerktraffic und die Systeme im Allgemeinen.

                              1 Reply Last reply Reply Quote 0
                              • S
                                Spexx last edited by

                                @Christof-Lewandowski
                                Ich frage drei größere Adressbereiche ab, das wird dann über einen Buffer-Parser ausgewertet und alle Werte in einzelne Datenpunkte geschrieben. Ich denke im Prinzip das was du suchst, anbei der Flow.
                                Zwischen den Abfragen habe ich aktuell eine Minute Verzögerung, das Abfrageintervall kann man sicher auch noch runtersetzen, läuft so aber bereits seit Wochen problemlos.

                                2023-06-23_20h10_28.png
                                2023-06-23_20h20_26.png
                                flows.json

                                L 1 Reply Last reply Reply Quote 0
                                • S
                                  Spexx last edited by

                                  Noch einmal kurz zusammengefasst, wie ein Adressbereich / mehrere Register auf einmal ausgelesen werden können.

                                  Man legt im Read-Befehl das Start-Register fest und zudem auch die Länge bzw. die Anzahl der Register. Hier im Bespiel das Register 32016 bis 32114. Jedes Register hat eine Länge von 2, d.h. die Anzahl beträgt somit 100:
                                  2023-06-23_20h38_34.png

                                  Über ein Buffer-Parser kann man dann die empfangenen Werte auswerten. Hierbei muss einerseits das Offset der einzelnen Werte definiert werden (es können auch Werte übersprungen werden falls diese nicht relevant sind). Zudem kann auch direkt der Umrechnungsfaktor festgelegt werden. Die Ausgabewerte können dann in einzelne Datenpunkte geschrieben werden:
                                  2023-06-23_20h41_57.png

                                  Anbei ein Beispiel-Flow, in welchem der WR in einem Block ausgelesen (32016-32114) wird sowie die Batterie/Smartmeter in einem weiteren Block (37000-37123).
                                  2023-06-23_20h52_10.png
                                  b303d536-401c-449c-97bc-2f1adae466aa-image.png
                                  7a8fc812-c7eb-4b7d-8388-a26d446cf5a1-image.png

                                  flows.json

                                  mickym 1 Reply Last reply Reply Quote 0
                                  • mickym
                                    mickym Most Active @Spexx last edited by

                                    @spexx Eine Verbesserung und wesentliche Vereinfachung habe ich aber. 😉

                                    Du kannst in dem Bufferparser set topic ankreuzt und im Namen gleich den richtigen Pfad zum Datenpunkt eingibst und nicht was beschreibendes - dann ist das bereits das topic und Du brauchst das fan Out nicht und kannst alles in eine iobroker - OUT Node schreiben. Dann ist der Flow viel übersichtlicher.

                                    1 Reply Last reply Reply Quote 0
                                    • Christof Lewandowski
                                      Christof Lewandowski last edited by

                                      @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 Reply Last reply Reply Quote 0
                                      • S
                                        Spexx last edited by

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

                                        mickym 1 Reply Last reply Reply Quote 0
                                        • mickym
                                          mickym Most Active @Spexx last edited by 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 1 Reply Last reply Reply Quote 0
                                          • S
                                            Spexx last edited by

                                            @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 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            1.1k
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            110
                                            573
                                            176282
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo