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. Huawei Wechselrichter und Wallbox abfrage über Modus?

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Huawei Wechselrichter und Wallbox abfrage über Modus?

    This topic has been deleted. Only users with topic management privileges can see it.
    • mickym
      mickym Most Active @HomeWolf last edited by mickym

      @homewolf Das Problem ist, dass die Register nur mit Integerwerten arbeitet und nicht mit Floats. Solange Du also 1499 eingibst hast Du kein Problem. Aber 1,499 ist eben nicht darstellbar sondern wird als Integer behandelt.

      Was diese Zeile macht

      watts[0]=msg.payload.toFixed(0) * 10;
      

      ist folgendes. Wenn Du 1.499 eingibst - wird das ganze gerundet ohne Dezimalstellen (toFixed(0)). Also auf 1 und dann mit 10 mulitpliziert.

      Bei 1499 gibts keine Kommastellen und es wird einfach mit 10 multipiziert. also 14990. Deshalb kommt da 149,90 kW raus.

      Wenn wir also 1,49kw haben wollen bzw. 1,5 kW also 1,499 auf 2 Kommastellen gerundet dann müssen wir 150 eingeben. Trotzdem werden wir ggf. Probleme bekommen. Aber ich versuchs mal mit 150 - Also 1499/1000 auf 2 Kommastellen gerundet und dann *100 - Allerdings komme ich mit dem Array noch nicht klar.

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

        So ich weiß zwar nicht warum bei Dir das Integer nun le und nicht be ist aber so müsste die Umrechnung funktionieren:

        ad822607-bef4-483f-a2ca-99184a811d41-image.png

        [
           {
               "id": "495d7f363e304f9d",
               "type": "buffer-parser",
               "z": "f9e28c9cf87b10de",
               "name": "",
               "data": "payload",
               "dataType": "msg",
               "specification": "spec",
               "specificationType": "ui",
               "items": [
                   {
                       "type": "uint16le",
                       "name": "item1",
                       "offset": 0,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "1",
                       "mask": ""
                   },
                   {
                       "type": "uint16le",
                       "name": "item2",
                       "offset": 2,
                       "length": 1,
                       "offsetbit": 0,
                       "scale": "1",
                       "mask": ""
                   }
               ],
               "swap1": "",
               "swap2": "",
               "swap3": "",
               "swap1Type": "swap",
               "swap2Type": "swap",
               "swap3Type": "swap",
               "msgProperty": "payload",
               "msgPropertyType": "str",
               "resultType": "value",
               "resultTypeType": "return",
               "multipleResult": false,
               "fanOutMultipleResult": false,
               "setTopic": true,
               "outputs": 1,
               "x": 1350,
               "y": 980,
               "wires": [
                   [
                       "009c970f692bf59f"
                   ]
               ]
           },
           {
               "id": "c326ce521b2cc006",
               "type": "change",
               "z": "f9e28c9cf87b10de",
               "name": "Watt => Kilowatt",
               "rules": [
                   {
                       "t": "set",
                       "p": "payload",
                       "pt": "msg",
                       "to": "$round(payload / 1000,2)*100",
                       "tot": "jsonata"
                   }
               ],
               "action": "",
               "property": "",
               "from": "",
               "to": "",
               "reg": false,
               "x": 960,
               "y": 980,
               "wires": [
                   [
                       "9fc019d1c2bc52cc"
                   ]
               ]
           },
           {
               "id": "9fc019d1c2bc52cc",
               "type": "buffer-maker",
               "z": "f9e28c9cf87b10de",
               "name": "",
               "specification": "spec",
               "specificationType": "ui",
               "items": [
                   {
                       "name": "item1",
                       "type": "int32le",
                       "length": 1,
                       "dataType": "msg",
                       "data": "payload"
                   }
               ],
               "swap1": "",
               "swap2": "",
               "swap3": "",
               "swap1Type": "swap",
               "swap2Type": "swap",
               "swap3Type": "swap",
               "msgProperty": "payload",
               "msgPropertyType": "str",
               "x": 1170,
               "y": 980,
               "wires": [
                   [
                       "495d7f363e304f9d"
                   ]
               ]
           }
        ]
        

        Die 3 Nodes zwischen die iobroker Node und die Modbus Node klemmen. Warum das eine le und das andere be ist - keine Ahnung vielleicht ist das Hardwareabhängig.

        Sprich die Nachkommastellen werden automatisch von der Hardware auf 2 Nachkommastellen fix interpretiert.

        Die Summierungsfunktion ist für mich Schwachsinn. Da musst Du meines Erachtens mal schauen, ob das überhaupt Sinn macht.

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

          @mickym

          klappt super... danke dir... musste nur change aus der 100 eine 10 machen, da er sonst bei 1230 W 123,0 übergeben hat, also 12,3 kW - Übergeben muss er aber ja 12,0 also 1,2 kw. Eine Frage hätte ich noch, haben wir auch die Möglichkeit, dass er 12,3 übergibt? Also das der Zähler 1,23 kw übergeben bekommt und nicht 1,20 kw ... die 30 W hat zwar keinerlei ausgefragt, bei der Regelung, ging mehr mir um die Optik 😄 und das Verständnis.

          $round(payload / 1000,2)*10
          

          Ja die Summieren ist für die aktuelle Leistung zu übergeben, damit die Wallbox entscheiden kann, was Sie nun macht.
          Also es kann ja sein, dass W 1 -3,00 KW ist, aber W 2 1,5 KW und W 3 1,5KW ist, da die Wallbox bei -1,4 kW anfängt zu laden, würde Sie jetzt Laden, da wenn keine gesamt W vorhanden ist, Sie immer nur W 1 betrachtet. aber W gesamt wäre ja 0 kw. gibt es denn noch eine andere Version die Werte zu addieren? Ich mein ich kann das auch in meiner Homematic direkt addieren lassen und den Wert übergeben, aber mir geht es ja auch darum möglichst viel in Node Red zu verstehen.

          mickym 2 Replies Last reply Reply Quote 0
          • mickym
            mickym Most Active @HomeWolf last edited by mickym

            @homewolf So mal langsam wie berechnest Du was? ich dachte das Teil macht aus 123 eine 1,23 kW. Wie schaut denn jetzt Deine Formel aus in der Change Node?

            5c98bc45-61d8-4777-aae3-85160288ea86-image.png

            Eine Frage hätte ich noch, haben wir auch die Möglichkeit, dass er 12,3 übergibt?

            Nochmal Modbus verarbeitet nur ganze Zahlen und keine Floats. Wenn er aus 123 nicht 1,23 macht, was ich eigentlich dachte - dann verstehe ich das ganze Ding nicht mehr.

            Wenn Du aus meiner Formel hinten nur *10 machst, dann steht da nicht mehr 123 sondern 12,3 und das GEHT nicht - da KEINE Ganzzahl.

            Deine ursprüngliche Funktion:

            watts[0]=msg.payload.toFixed(0) * 10; hat auch nichts anderes gemacht. Dieser Teil

            msg.payload.toFixed(0) 
            

            erzeugt nur GANZZahlen also 0 Dezimalkommastellen.

            Somit würde das Teil nur EINE Dezimalkommastelle verstehen. Dann würde ich die Formel in der Change Node aber anders umbauen, dass sie noch verständlich ist.

            $round(payload / 1000,1)*10
            

            so wird die errechnete kW auf 1 Nachkommastelle gerundet und dann mal 10 genommen. Wenn Du einfach nur mal 10 anstelle mal 100 nimmst, dann wird alles hinten einfach abgeschnitten aber nicht mehr ordnungsgemäß gerundet.

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

              @homewolf sagte in Huawei Wechselrichter und Wallbox abfrage über Modus?:

              Ja die Summieren ist für die aktuelle Leistung zu übergeben, damit die Wallbox entscheiden kann, was Sie nun macht.
              Also es kann ja sein, dass W 1 -3,00 KW ist, aber W 2 1,5 KW und W 3 1,5KW ist, da die Wallbox bei -1,4 kW anfängt zu laden, würde Sie jetzt Laden, da wenn keine gesamt W vorhanden ist, Sie immer nur W 1 betrachtet. aber W gesamt wäre ja 0 kw. gibt es denn noch eine andere Version die Werte zu addieren? Ich mein ich kann das auch in meiner Homematic direkt addieren lassen und den Wert übergeben, aber mir geht es ja auch darum möglichst viel in Node Red zu verstehen.

              So erst mal aus Deinem ursprünglichen Flow - diese beiden Set Nodes machen exakt das gleiche - weshalb sie unsinnig sind.

              54d668e4-d803-4aaf-9110-3bb95dca130f-image.png

              Der einzige Unterschied ist, dass die ursprüngliche payload in die Flowvariable twatts anstelle von watts geschrieben wird. Und die Summe wurde dann aus twatts in der 1 verwendet. Das Teil hat also im 1. Teil überhaupt nichts aufsummiert, sondern nur den Ursprungswert in eine Flowvariable geschrieben. Diese wurde aber später nie verwendet - ich sehe sie nicht?

              965d4dcd-3e9b-4b91-b419-2954671ac1d3-image.png

              Ich verstehe dass nun zwar und finde es mit den function Nodes nicht besonders elegant - aber dann ist es am wirklich am Einfachsten, was wir bereits hatten. Du rechnest die Watt in kW um, musst aber mit den Ungenauigkeiten leben.

              Dann war das doch gar nicht so schlecht:

              c66874ed-3729-4abc-a7b0-5c36eb3ffe58-image.png

              Genauer wirst Du es kaum hinbekommen. Weil nur 1 Kommastelle akzeptiert wird.
              Wie gesagt man kann das auch alles ohne function Nodes lösen, aber dadurch wird es ja nicht genauer.

              Also einfach wieder nur durch 1000 rechnen. Die Change Nodes kannst Du dann entweder mit payload/1000 belassen oder Du änderst halt deine function Nodes, wo du alle eingehenden payloads teilen musst. Dann ist aber die Lösung mit der Change Node sicher einfacher. Die aktuellen Werte siehst Du übrigens immer im Kontextfenster:

              ef2876cc-c4cf-4190-b6bc-cecc89c9e96b-image.png

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

                @mickym ook, dann muss ich mit der Differenz einfach leben.

                er macht aus 1234 W ->12,0 und das wird an Modbus übergeben und im gerate sind das dann 1,2 kw.

                Ich verzweifele noch an dieser Wallbox. Alle Daten werden laut Huawei Portal an die Wallbox übertragen. Heute Mittag, als dann genug sonne da war, hat die Wallbox sich auch wie erhofft eingeschaltet, aber leider immer nur für 20 Sekunden und dann geht sie wieder aus. und wieder an usw. Also Sie die Daten immer nur kurz bekommen würde und danach wieder Leistungen von 0 KW

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

                  @homewolf hänge einfach Debug nodes hinter die Funktion Nodes und lass die Ausgabe ins iobroker Log schreiben. Dann siehst Du was in due Modbus Nodes geschrieben wird.

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

                    @mickym
                    da kommt immer das gleich, von der Seite aus sieht es gut aus..

                    14.8.2023, 19:30:27node: debug 3
                    hm-rega.0.32538 : msg.payload : array[2]
                    [ 65485, 65535 ]
                    

                    Gibt es eine Möglichkeit, bei Modbus mit zu hören? Also Überlegung war, die Wallbox wie eigentlich vorgesehen an den Wechselrichter zu hängen und dann zu schauen, welche register die Wallbox abfragt, nicht das irgend ein Register der Wallbox fehlt. oder kann ich sogar schon so sehen, wann die Wallbox bei Node Red an Registern anfragt?

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

                      @mickym Du kannst doch debug nodes an die Modbus Nodes - also an den Ausgang dran hängen und die payload ins iobroker log schreiben

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

                        @mickym

                        ok die debug hinter das Modbus Nodes bekomme ich hin, aber wie mach ich das andere 😄 ?

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

                          @homewolf Wenn Du nicht in das Debug Fenster sondern in das iobroker Log schreiben willst, dann schreibst Du in die Systemkonsole.

                          09770651-28ae-49db-97ac-5bbab4b47239-image.png

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

                            @mickym

                            kommt immer genau das gleiche raus, bin jetzt mal hingegangen und habe das Register auch selbst in Node Red abgefragt, aber immer der gleiche Wert... ohne die Wallbox wartet auf irgend ein Register, dass ihr fehlt. Aber wie bekomme ich das raus, Huawei hat noch keine Modbus Beschreibung von der Wallbox

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

                              @homewolf Ja da kann ich Dir leider nicht helfen. Ich hab Dir ja schon mal gesagt ich habe keine Hardware, die Modbus versteht. Ich kann Dir nur bei der Logik innerhalb von NodeRed versuchen zu helfen, aber ich habe keine Ahnung zu irgendeiner Hardware.

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

                                Hat immer noch keiner die Modbus Register der Wallbox herausgefunden ?

                                1 Reply Last reply Reply Quote 0
                                • First post
                                  Last post

                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                874
                                Online

                                31.6k
                                Users

                                79.5k
                                Topics

                                1.3m
                                Posts

                                3
                                65
                                3509
                                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