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. 2 Werte Subtrtahieren in Node Red

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    2 Werte Subtrtahieren in Node Red

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      siporax @geschild last edited by siporax

      @geschild said in 2 Werte Subtrtahieren in Node Red:

      @siporax Verstehe ich dich richtig: Du hast einen Teich, dessen Technik entweder übers Netz, gemessen mit SonOff-Pow, versorgt wird oder bei Netzausfall über eine Wechselrichter. Wie wird die Leistung des Wechselrichters gemessen?

      Über eine fritz dect Steckdose wird der Wechselrichter gemessen
      und der Teich über Sonoff Pow
      Wie im Beispiel im Bild oben zu sehen ist.
      983 Watt kommen vom Wechselrichter und nach Teichabzug gehen noch 780 Watt in die Batterie.
      Damit ist der Verbraucht real vom Teich 203 Watt und diesen Wert will ich immer sehen mit oder ohne Wechselrichter.

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

        @siporax Werte kommen an aber werden nicht gerechnet habe da ein fehler drin denke ich.

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

          @siporax 2.JPG

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

            @siporax 3.JPG

            So habe ich das gemacht mit dem Rechnen.

            geschild 1 Reply Last reply Reply Quote 0
            • geschild
              geschild @siporax last edited by

              @siporax TeichMinus.jpg Sieht es etwa so aus?
              Du möchtest rechnen: POW - Fritz = Teichverbrauch real ?
              Bzw. wissen: Wann hat der Teich mehr verbraucht, als der Wechselrichter liefert und wieviel ?

              S 1 Reply Last reply Reply Quote 0
              • S
                siporax @geschild last edited by siporax

                @geschild Teich jat mehr verbrauch z.b im Winter in der Nacht usw.ist verschieden.
                Kann man keine Regel erstellen wenn du das meinst.
                Daher wollte ich es einfach immer so rechnen:
                Pow minus Fritz Dect
                Da dieses rgebnis immer der Verbrauch vom Teich ergibt.
                Ob er 400 oder 800 Watt er ausgibt.
                Nachts gibt er wenn die Batterie leer ist auch einfach auch mal 0 Watt ab.
                Soltte doch gehen oder lieg ich falsch?

                geschild 1 Reply Last reply Reply Quote 0
                • geschild
                  geschild @siporax last edited by

                  @siporax Der Verbrauch vom Teich wird doch über den POW gemessen!

                  S 1 Reply Last reply Reply Quote 0
                  • S
                    siporax @geschild last edited by siporax

                    @geschild ja wird er aber der kann nur in eine Richtung zählen.
                    Sollange der Wechselrichter aus ist geht das prima.
                    Wenn er sich einschaltet zählt er den wert dazu und ich sehe mein realen verbrauch nicht mehr.

                    geschild 1 Reply Last reply Reply Quote 0
                    • geschild
                      geschild @siporax last edited by

                      @siporax Was ist an meiner Zeichnung falsch ?

                      S 1 Reply Last reply Reply Quote 0
                      • S
                        siporax @geschild last edited by siporax

                        @geschild könnten wir um uns um die Rechnung kümmern und nicht warum,bitte.
                        Den das Ergebnis ist das was ich brauche 🙂

                        geschild 1 Reply Last reply Reply Quote 0
                        • geschild
                          geschild @siporax last edited by

                          @siporax TeichMinusDP.jpg TeichMinus.jpg teichminus.txt

                          S 1 Reply Last reply Reply Quote 0
                          • S
                            siporax @geschild last edited by siporax

                            @geschild said in 2 Werte Subtrtahieren in Node Red:

                            @siporax TeichMinusDP.jpg TeichMinus.jpg teichminus.txt

                            Ich habes mal versucht damit.
                            Werte kommen an nur errechnet wird nichts bisher.
                            Denke die Ordnerstruktur im Broker muss dazu genau so aussehen,
                            einfach diese neu zu zuordnen geht nicht so einfach.

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

                              @siporax wie ich schon mehrfach erklärt habe, rechnet man über einen Kontext oder sammelt alles in einem Nachrichtenobjekt. Was steht denn in Deiner function Node drin. Welcher deiner beiden Werte soll den triggern? Vorher wurde doch schon mit get nodes gearbeitet.

                              So wird das NIE funktionieren- und vielleicht kann sich einer ja mal überlegen warum.

                              Wenn ich das so lese muss doch nur der Verbrauch triggern und davon wird der Wechselrichterwert abgezogen. Dafür benötigt man keine 2 trigger und auch keine function Node.

                              Übrigens wenn ihr hier ein Flow einstellt, dann nur zwischen CodeTags und dann verspoilern.. sonst kann niemand damit was anfangen.

                              Code-Tags.gif

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

                                @siporax
                                Das wurde doch unten alles schon mal richtig dargestellt. Wie gesagt 2 mal triggern bringt nichts - die Werte treffen sich nie,

                                38d80c1e-eb7d-4e18-9bf0-053ab817cbc4-image.png

                                Hier zum Import (verspoilert und in CodeTags):

                                [
                                   {
                                       "id": "1abbb3ad15f02df1",
                                       "type": "ioBroker in",
                                       "z": "289f539dcc33814e",
                                       "name": "Teich-Pow",
                                       "topic": "sonoff.0.Teich-Verbrauch.ENERGY_Power",
                                       "payloadType": "value",
                                       "onlyack": "",
                                       "func": "all",
                                       "gap": "",
                                       "fireOnStart": "false",
                                       "outFormat": "MQTT",
                                       "x": 2440,
                                       "y": 4320,
                                       "wires": [
                                           [
                                               "db726a38cace8780"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "db726a38cace8780",
                                       "type": "ioBroker get",
                                       "z": "289f539dcc33814e",
                                       "name": "WR-Fritz",
                                       "topic": "fritzdect.0.DECT_116570079058.power",
                                       "attrname": "wr",
                                       "payloadType": "value",
                                       "errOnInvalidState": "nothing",
                                       "x": 2600,
                                       "y": 4320,
                                       "wires": [
                                           [
                                               "5a663fa76121848c"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "5a663fa76121848c",
                                       "type": "change",
                                       "z": "289f539dcc33814e",
                                       "name": "TeichPow - WR",
                                       "rules": [
                                           {
                                               "t": "set",
                                               "p": "payload",
                                               "pt": "msg",
                                               "to": "payload - wr",
                                               "tot": "jsonata"
                                           }
                                       ],
                                       "action": "",
                                       "property": "",
                                       "from": "",
                                       "to": "",
                                       "reg": false,
                                       "x": 2780,
                                       "y": 4320,
                                       "wires": [
                                           [
                                               "086dd9b2dd01f025"
                                           ]
                                       ]
                                   },
                                   {
                                       "id": "086dd9b2dd01f025",
                                       "type": "ioBroker out",
                                       "z": "289f539dcc33814e",
                                       "name": "Realer_Teichverbrauch",
                                       "topic": "0_userdata.0.Node_Red_Realer_Teichverbrauch",
                                       "ack": "true",
                                       "autoCreate": "false",
                                       "stateName": "",
                                       "role": "",
                                       "payloadType": "",
                                       "readonly": "",
                                       "stateUnit": "",
                                       "stateMin": "",
                                       "stateMax": "",
                                       "x": 3010,
                                       "y": 4320,
                                       "wires": []
                                   }
                                ]
                                

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

                                  @mickym

                                  Deine Lösung ist eleganter als meine. Chapeau. Bin mehr in script als in nodered zu Hause.
                                  Bitte deshalb um Nachhilfe, wie deine Lösung funktioniert, wo erfolgt die Subtraktion (Doppelklick auf den change hat mich nicht weiter gebracht).


                                  Noch in eigener Sache:

                                  Deinen Kommentar zu meinem Ergebnis möchte ich nicht unkommentiert zu Kenntnis nehmen.

                                  "Übrigens wenn ihr hier ein Flow einstellt, dann nur zwischen CodeTags und dann verspoilern.. sonst kann niemand damit was anfangen."
                                  Einfach die .txt öffnen, STRG-A, STRG-C, in NodeRed importieren. Feddich

                                  "Was steht denn in Deiner function Node drin"
                                  Importieren, Doppelklick auf node, lesen.

                                  "So wird das NIE funktionieren- und vielleicht kann sich einer ja mal überlegen warum."
                                  Doch, es funktioniert (sonst hätte ich es nicht gepostet) - und vielleicht kann sich einer ja mal überlegen warum.

                                  mickym 2 Replies Last reply Reply Quote 0
                                  • geschild
                                    geschild @siporax last edited by

                                    @siporax Genau, du müsstest den Flow und function an deine Datenstruktur anpassen. Nimm die Lösung von @mickym, die ist einfacher.

                                    Habe leider bis jetzt nicht kapiert wie deine Elektrostruktur aussieht. Kleine Skizze ? Nur damit ich wieder ruhig schlafen kann.

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

                                      @geschild Nun wichtig ist folgendes zu verstehen. Ich baue es mal mit eigenen DP nach:

                                      Am Besten ist sowas wenn man sich immer das komplette Nachrichtenobjekt ausgeben lässt:

                                      2eb0bf98-c45f-4e5d-a979-2f435894cdac-image.png

                                      Die payload stammt von der iobroker-IN Node und ist der Ausgangstrigger. Grün markiert.

                                      Wichtig ist, wie bereits ja unten beschrieben, dass Du nun den 2. Wert den Du Dir ins Nachrichtenobjekt ein anderes Attribut zuweist, sonst überschreibst Du, falls Du in der get Node das Attribut payload belässt, Dir mit der get Node den originalen payload aus der iobroker-IN Node.

                                      Ich habe den Inhalt des Wechselrichters in das Nachrichtenattribut wr geschrieben. Siehe gesamtes Nachrichtenobjekt. Gelb markiert.

                                      Nun habe ich BEIDE Werte in EINEM Nachrichtenobjekt.

                                      Die Subtraktion findet einfach in der Change Node mit JSONATA statt: https://docs.jsonata.org/overview

                                      Dies mächtige Bibliothek kann man in verschiedenen Nodes einfach über das GROSSE J nutzen (gibts auch in Switch, Change, JOIN - in vielen Nodes):

                                      984aafd4-8d95-42b8-a830-e2ec1caea508-image.png

                                      Damit kann ich über die Nachrichteneigenschaft eine neue payload setzen in dem ich die Differenz der ursprünglichen payload - wr bilde. Also von der payload hier 80 - wr hier 50 abziehe und dann als Ergebnis als neue payload 30 ausgebe.

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

                                        @geschild sagte in 2 Werte Subtrtahieren in Node Red:

                                        Übrigens wenn ihr hier ein Flow einstellt, dann nur zwischen CodeTags und dann verspoilern.. sonst kann niemand damit was anfangen."
                                        Einfach die .txt öffnen, STRG-A, STRG-C, in NodeRed importieren. Feddich

                                        Das ist halt einfach umständlicher als wenn ich den Spoiler aufmache - auf SelectAll klicke und dann in die Zwischenablage kopiere. 😉

                                        Ich habs auch nicht gefunden. Wie gesagt - Deine Lösung KANN nur funktionieren, wenn Du in der function Node mit dem Node-Kontext arbeitet.

                                        Falls nicht

                                        985b1efa-4501-4b22-b6d1-ec6dff8cd4ea-image.png

                                        werden sich die beide Nachrichten aus den aus den iobroker-IN Nachrichten NIE treffen. Ich kenne den Code wie gesagt nicht - ich seh das Ergebnis aber Du wirst dann wohl mit dem Node-Kontext gearbeitet haben.

                                        var wr = context.get('Wechselrichter')  || 0
                                        

                                        oder so ähnlich, 😉 dann musst halt das topic abfragen und dann ggf. neu setzen - also ich weiß schon wie es geht. 😉 - Nur ich bin kein Freund des Codierens wenn es nicht sein muss. 😉 - Dann macht man die visuelle Darstellung wieder kaputt. Im Prinzip kannst Du ganze Flows in eine function Node packen. 😉

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

                                          @mickym Danke, wieder was dazugelernt. Ja ich habe mit context gearbeitet.

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

                                            @geschild Deine Lösung hat den Vorteil, wenn der Verbrauch nicht triggert, dass dann der Wert sofort angepasst wird. Sollte also auch der Wechelrichter triggern müsste man den Verbrauch extra auslesen und dann brauchst Du ein paar mehr Nodes. Insofern hat Deine Lösung durchaus seine Berechtigung, wenn der Verbrauch nicht oft genug triggert.

                                            In diesem Fall würde sich meine Lösung wie folgt "verkomplizieren":

                                            aa47d0e8-e584-47c3-8105-3a01aa4ed54e-image.png

                                            [
                                               {
                                                   "id": "1abbb3ad15f02df1",
                                                   "type": "ioBroker in",
                                                   "z": "7e6af0015415146d",
                                                   "name": "Teich-Pow",
                                                   "topic": "0_userdata.0.Test.sensor1.power",
                                                   "payloadType": "value",
                                                   "onlyack": "",
                                                   "func": "all",
                                                   "gap": "",
                                                   "fireOnStart": "false",
                                                   "outFormat": "MQTT",
                                                   "x": 3460,
                                                   "y": 160,
                                                   "wires": [
                                                       [
                                                           "02a17f5119c5ddeb"
                                                       ]
                                                   ]
                                               },
                                               {
                                                   "id": "db726a38cace8780",
                                                   "type": "ioBroker get",
                                                   "z": "7e6af0015415146d",
                                                   "name": "WR-Fritz",
                                                   "topic": "0_userdata.0.Test.sensor2.power",
                                                   "attrname": "wr",
                                                   "payloadType": "value",
                                                   "errOnInvalidState": "nothing",
                                                   "x": 3860,
                                                   "y": 160,
                                                   "wires": [
                                                       [
                                                           "5a663fa76121848c"
                                                       ]
                                                   ]
                                               },
                                               {
                                                   "id": "5a663fa76121848c",
                                                   "type": "change",
                                                   "z": "7e6af0015415146d",
                                                   "name": "TeichPow - WR",
                                                   "rules": [
                                                       {
                                                           "t": "set",
                                                           "p": "payload",
                                                           "pt": "msg",
                                                           "to": "verbrauch - wr",
                                                           "tot": "jsonata"
                                                       }
                                                   ],
                                                   "action": "",
                                                   "property": "",
                                                   "from": "",
                                                   "to": "",
                                                   "reg": false,
                                                   "x": 4040,
                                                   "y": 200,
                                                   "wires": [
                                                       [
                                                           "086dd9b2dd01f025",
                                                           "9300e05f3c9f9870"
                                                       ]
                                                   ]
                                               },
                                               {
                                                   "id": "086dd9b2dd01f025",
                                                   "type": "ioBroker out",
                                                   "z": "7e6af0015415146d",
                                                   "d": true,
                                                   "name": "Realer_Teichverbrauch",
                                                   "topic": "0_userdata.0.Node_Red_Realer_Teichverbrauch",
                                                   "ack": "true",
                                                   "autoCreate": "false",
                                                   "stateName": "",
                                                   "role": "",
                                                   "payloadType": "",
                                                   "readonly": "",
                                                   "stateUnit": "",
                                                   "stateMin": "",
                                                   "stateMax": "",
                                                   "x": 4290,
                                                   "y": 240,
                                                   "wires": []
                                               },
                                               {
                                                   "id": "9300e05f3c9f9870",
                                                   "type": "debug",
                                                   "z": "7e6af0015415146d",
                                                   "name": "Ergebnis nur payload",
                                                   "active": true,
                                                   "tosidebar": true,
                                                   "console": false,
                                                   "tostatus": false,
                                                   "complete": "payload",
                                                   "targetType": "msg",
                                                   "statusVal": "",
                                                   "statusType": "auto",
                                                   "x": 4280,
                                                   "y": 200,
                                                   "wires": []
                                               },
                                               {
                                                   "id": "02a17f5119c5ddeb",
                                                   "type": "change",
                                                   "z": "7e6af0015415146d",
                                                   "name": "",
                                                   "rules": [
                                                       {
                                                           "t": "move",
                                                           "p": "payload",
                                                           "pt": "msg",
                                                           "to": "verbrauch",
                                                           "tot": "msg"
                                                       }
                                                   ],
                                                   "action": "",
                                                   "property": "",
                                                   "from": "",
                                                   "to": "",
                                                   "reg": false,
                                                   "x": 3660,
                                                   "y": 160,
                                                   "wires": [
                                                       [
                                                           "db726a38cace8780"
                                                       ]
                                                   ]
                                               },
                                               {
                                                   "id": "253e024afd9346ec",
                                                   "type": "ioBroker in",
                                                   "z": "7e6af0015415146d",
                                                   "name": "WR-Fritz",
                                                   "topic": "0_userdata.0.Test.sensor2.power",
                                                   "payloadType": "value",
                                                   "onlyack": "",
                                                   "func": "all",
                                                   "gap": "",
                                                   "fireOnStart": "false",
                                                   "outFormat": "MQTT",
                                                   "x": 3460,
                                                   "y": 240,
                                                   "wires": [
                                                       [
                                                           "3cece316d856fc0e"
                                                       ]
                                                   ]
                                               },
                                               {
                                                   "id": "157517622c425fcd",
                                                   "type": "ioBroker get",
                                                   "z": "7e6af0015415146d",
                                                   "name": "Teich-Pow",
                                                   "topic": "0_userdata.0.Test.sensor1.power",
                                                   "attrname": "verbrauch",
                                                   "payloadType": "value",
                                                   "errOnInvalidState": "nothing",
                                                   "x": 3870,
                                                   "y": 240,
                                                   "wires": [
                                                       [
                                                           "5a663fa76121848c"
                                                       ]
                                                   ]
                                               },
                                               {
                                                   "id": "3cece316d856fc0e",
                                                   "type": "change",
                                                   "z": "7e6af0015415146d",
                                                   "name": "",
                                                   "rules": [
                                                       {
                                                           "t": "move",
                                                           "p": "payload",
                                                           "pt": "msg",
                                                           "to": "wr",
                                                           "tot": "msg"
                                                       }
                                                   ],
                                                   "action": "",
                                                   "property": "",
                                                   "from": "",
                                                   "to": "",
                                                   "reg": false,
                                                   "x": 3660,
                                                   "y": 240,
                                                   "wires": [
                                                       [
                                                           "157517622c425fcd"
                                                       ]
                                                   ]
                                               }
                                            ]
                                            

                                            In diesem Fall muss man nur sicherstellen, dass immer die richtige Nachrichteneigenschaften gesetzt werden. Deshalb wird die payload dann auf die entsprechende Nachrichteneigenschaft bei den iobroker-IN Nodes nachträglich gesetzt und in den get-Nodes direkt:

                                            f65f9388-1fd2-47d0-800b-0a5e990f2cc9-image.png

                                            Das heißt es existiert zum Zeitpunkt der Subtraktion keine payload (deshalb undefined) im Debug Fenster.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            569
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            3
                                            60
                                            2618
                                            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