Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Einsteigerfragen
    4. Payload von Timestamp in Node Red weitergeben, wenn

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Payload von Timestamp in Node Red weitergeben, wenn

    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      DerKlotz last edited by

      Hallo Leute,
      erst einmal Hallo von meiner Seite. Habe mich gerade angemeldet, weil ich mich gerade mit Node Red als Neuling beschäftige.
      Ich würde gerne wissen, wie ich den Payload eines Timestamp weitergebe, wenn ein Schalter (für mindestens 30s) betätigt ist.

      Ich stelle es mir folgendermaßen vor. Ich sende msg.payload aus der Timestamp und msg.payload aus dem Schalter (0 oder 1) in eine Function Node. Dort würde ich die beiden Payloads addieren. Wenn der addierte Payload > msg.payload timestamp, dann payload vom Timestamp weiterleiten, wenn Ergebnis = msg.payload, dann nicht weiterleiten.
      Habe das in dem Bild unten versucht in der Node zu beschreiben. Habe nur keine Ahnung, wie ich beide eingehenden Payloads in der Node abfrage... oder gibts einfachere Wege?

      Danke euch

      Leistung nur auslesen bei Schalter on2.png Leistung nur auslesen bei Schalter on1.png

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

        @derklotz Das klingt mir wieder alles viel zu umständlich. Was willst Du denn wirklich erreichen?
        Anstelle von Berechnungen bietet sich wahrscheinlich eher eine Trigger Node an. Ansonsten hilft es nicht wenn Du unterschiedliche Nachrichtenobjekte vergleichen willst, dann musst Du das halt im Kontext machen. Wenn Du gerne programmierst anstelle von Nodes zu verwenden, dann kannst Du im Node-Kontext speichern.

        Aber wie gesagt - beschreibe lieber mal was Du willst. Wenn es wie gesagt nur darum geht einen Schalter mindestens 30s gedrückt zu halten - geht das ohne Programmiererei.

        a55edabb-5e14-4293-ab06-4375f8f3637f-image.png

        [{"id":"433ff2482e3cc569","type":"inject","z":"289f539dcc33814e","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"Schalter","payload":"1","payloadType":"num","x":380,"y":6660,"wires":[["3a372a1586bddb3c"]]},{"id":"692168f2633654fa","type":"inject","z":"289f539dcc33814e","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"Schalter","payload":"0","payloadType":"num","x":380,"y":6620,"wires":[["3a372a1586bddb3c"]]},{"id":"3a372a1586bddb3c","type":"trigger","z":"289f539dcc33814e","name":"","op1":"","op2":"1","op1type":"nul","op2type":"num","duration":"30","extend":false,"overrideDelay":false,"units":"s","reset":"0","bytopic":"all","topic":"topic","outputs":1,"x":570,"y":6640,"wires":[["21f45f719235899b"]]},{"id":"21f45f719235899b","type":"debug","z":"289f539dcc33814e","name":"Schalte wenn 30s eins","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":800,"y":6640,"wires":[]}]
        

        Wenn also der Schalter für mind. 30s eine 1 sendet (also ohne eine 0 zu senden) - dann wird eine 1 getriggert. Wenn vorher eine 0 gesendet wird, wird nichts gesendet. Die Verlängerung kann man auch ausschalten - so wie es jetzt ist, verlängert jeder neue Trigger die 30s Pause.

        6552faf4-13f7-4f99-bdef-3b35c45fbfb3-image.png

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

          @mickym
          Ich habe ein eher untypisches Balkonkraftwerk mit Speicher.
          Grundfunktion ist bis jetzt: Alle 15s wird die gerade vom Haus bezogene Leistung meines Shelly 3EM erfragt und in einer Function Node mit der aktuellen Wechselrichterleistung verglichen. Ist die Differenz zwischen bezogener Leistung und Wechselrichterleistung > 20W wird der Wechselrichter bis zu seiner Maxleistung nachgeführt oder herunter getaktet.
          Ich habe systembedingt gerade ein Problem wenn der Speicher nahezu voll ist. Dann kommt es zu einem Zustand wo kurzzeitig über 60V am Wechselrichtereingang anliegen und diesen dann abschalten. Ab da gerät das System ins Überschwingen.
          Nun habe ich mir überlegt ein Relais, das vorm Wechselrichter liegt den WR vor Erreichen der problematischen Spannung abzuschalten, den Code anzuhalten und nach 1h wieder anzuschalten.
          Irgendwie kommt die Functionnode manchmal aus dem Tritt (keine Änderung WR mehr), wenn ich manuell das Relais ausschalte und wieder anschalte. Deswegen die Überlegung die Node nicht mehr alle 15s abzufragen und die WR Leistung so zu lassen.
          Hoffe es ist erstmal verständlich... wie gesagt bin ein Neuling

          Hier die Berechnung fürn WR

          ``//get previous value, if it does not exist use 300
          var maxPower = 600;
          const prevLevel = context.get('prevLevel') || 300;
          const incomingLevel = msg.payload;

          // if next level is above maxPower, limit to maxPower

          let nextLevel = incomingLevel + prevLevel;
          if (nextLevel > maxPower) {
          nextLevel = maxPower;
          }

          // No output if change is less than 20

          const levelTest = Math.abs(nextLevel - prevLevel);
          if (levelTest < 20) {
          msg = null;
          node.status({ fill: "yellow", shape: "ring", text: "Änderung < 20" });
          }

          // Change above 20, store value and send new level

          else {
          context.set('prevLevel', nextLevel);
          msg.payload = nextLevel;
          node.status({ fill: "green", shape: "dot", text: "neue Leistung " + nextLevel });
          }

          if (nextLevel > maxPower) {
          msg = null;
          node.status({ fill: "red", shape: "dot", text: "Inverterlimit reached" });
          }

          return (msg);`
          code_text

          D mickym 2 Replies Last reply Reply Quote 0
          • D
            DerKlotz @DerKlotz last edited by

            @derklotz Leistung nur auslesen bei Schalter on3.png

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

              @derklotz Du musst wenn den Code in CodeTags packen oder den Flow exportieren.

              Die Frage ist trotzdem willst Du mit herkömmlicher Programmierung und function NOdes Dein Problem lösen oder willst Du lieber NodeRed als grafisches Tool verwenden, um Dich auf die Logik zu konzentrieren?

              Wenn Du das letzteres versuchen willst, dann versuchen wir mal Deine Progammlogik ohne function Nodes abzubilden - ansonsten, wie gesagt kannst Du programmieren - dann musst Du halt deine Timestamps in den function NOde Kontext speichern und abprüfen von welcher Node sie kommen und deshalb mit einem topic die Quelle definieren. Sprich Du musst zumindest in Deiner InjectNode - diesen timestamp als Quelle definieren. Aber wie gesagt - Du programmierst zu viel anstelle die Macht der Nodes zu nutzen.

              Wenn Du was hier als Code oder einen Export hier einstellst musst Du aufpassen dass Du nicht die Begrenzungen der CodeTags löschst.

              Code-Tags.gif

              Sprich die 3 linksgerichteten Hochkommas müssen erhalten bleiben.

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

                Aber gut - wenn Du es so machen willst, wie Du vor hast und deine Timestamps unterscheiden willst musst Du halt eine Nachricht mit einem Topic identifizieren und diese abspeichern.

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

                  @mickym Hallo und danke für die Antwort.
                  Ich würde dann gerne Node Red als grafisches Tool nutzen... wie gesagt bringe nicht viel Erfahrung mit.

                  Nehmen wir folgendes an:

                  • Alle 15s soll der aktuelle Leistungswert meines Shelly 3EM und der aktuell gesetzte Leistungswert Wechselrichter (per MQTT) ausgelesen werden
                  • nun soll der gesetzte Leistungswert WR vom Leistungswert Shelly subtrahiert werden. Ist das Ergebnis positiv soll der Wechselrichter um die Differenz zum gesetzten Leistungswert erhöht werden (bis zum einstellbaren MaxWert = 600W). Ist das Ergebnis negativ, dann soll der WR um die Differenz herunter getaktet werden. Ist die Differenz kleiner 20W soll keine WR Änderung greifen

                  Welche Nodes muss ich benutzen?
                  Ich komme auf Inject (Timestamp), Current State (Shelly), MQTT (gesetzte WR Leistung), MQTT (WR Leistung setzen), Debugnodes,
                  Welche Nodes für die Berechnung notwendig sind??? Habe noch nicht so viele Nodes genutzt und bin gerade auf der Arbeit. Somit kein Zugriff auf mein Node Red

                  Danke!

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

                    Wie gesagt, Du kannst das auch nach Deiner Methode machen, wenn Du lieber programmierst - ich hab Dir ja gesagt, wie Du die Timestamps auseinanderhalten kannst.

                    So falls Du es als aber anders machen willst, dann schau Dir doch mal diesen Thread an - da hab ich gerade so was ähnliches gemacht: https://forum.iobroker.net/post/1146168

                    Folgende Fragen stellen sich mir, wenn Du von vorn beginnen willst:

                    Alle 15s soll der aktuelle Leistungswert meines Shelly 3EM und der aktuell gesetzte Leistungswert Wechselrichter (per MQTT) ausgelesen werden

                    Pollen finde ich in der Regel die ineffizienteste Methode - da hier ein System belastet wird, egal ob sich ein Wert geändert hat oder nicht. Ich bin deshalb ein Freund davon, dass man das Gerät triggern lassen soll - also den Shelly 3EM. Sollte dieser seltener als 15s neu triggern - dann entlastest Du Dein System, da sich der Wert ja nicht geändert hat, triggert der Shelly häufiger und würde Dein System überlasten, so kannst Du mit einer delay Node die zusätzlichen Nachrichten einfach ignorieren und die Nachrichtenrate begrenzen, wie in dem verlinkten Thread gezeigt .

                    nun soll der gesetzte Leistungswert WR vom Leistungswert Shelly subtrahiert werden. Ist das Ergebnis positiv soll der Wechselrichter um die Differenz zum gesetzten Leistungswert erhöht werden (bis zum einstellbaren MaxWert = 600W). Ist das Ergebnis negativ, dann soll der WR um die Differenz herunter getaktet werden. Ist die Differenz kleiner 20W soll keine WR Änderung greifen

                    Den von Dir wie auc immer gesetzten Leitsungswert speicherst Du nun in einer Flowvariablen. Den kannst Du wenn der Shelly triggert dann subtrahieren und mittels eine switch Node filtern oder verzeweigen.

                    Mit Inject-Nodes kannst Du sicherlich pollen - wenn die erste Methode nicht geht oder einfach den Flow mit eigenen Werten triggern um zu schauen, ob das gemacht wird, was Du willst. Debug Node kannst Du immer verwenden, um zu sehen bis zu welcher Node alles in Ordnung ist. Du kannst die ja auch temperär deaktivieren.
                    Change Node sind die mächtigsten Nodes, da du damit die payloads veränderst und mit JSONATA eine sehr mächtige Bibliothek hast. Nur falls das nicht ausreicht, kannst Du mit function NOdes - Javascript programmieren. In der Regel ist JSONATA aber mehr als ausreichend und auch wenn man da Übung braucht - sparst Du Dir eine Menge Codeschreiberei.
                    HIer ein Link über das try Fenster kann man den Code gleich ausprobieren: https://docs.jsonata.org/overview

                    Diese Bibliothek erreichst Du über das J in diversen NOdes über die Selektion des Datentyps.

                    5f702d50-dc41-4867-8352-ec2eccebe93c-image.png

                    Wie gesagt lass uns klein anfangen:

                    1. Willst Du wirklich pollen oder kann der Shelly sich selbst melden?
                    2. Setze den Leistungswert über ein Dashboard oder auch über ein selbsterstelltes mqtt topic?
                    D 1 Reply Last reply Reply Quote 0
                    • D
                      DerKlotz @mickym last edited by DerKlotz

                      @mickym Moin,
                      habe herausgefunden, dass

                      1. der Shelly bei jedem Change sendet... also gerne auch 2x innerhalb einer Sekunde.
                      2. der Leistungswert kann über ein MQTT topic ausgelesen werden

                      Lassen wir also den Shelly triggern und ich setze ein Delay dazwischen. Das hat schon mal geklappt.

                      "Den von Dir wie auc immer gesetzten Leitsungswert speicherst Du nun in einer Flowvariablen. Den kannst Du wenn der Shelly triggert dann subtrahieren und mittels eine switch Node filtern oder verzeweigen."
                      Welche Node nutze ich dazu? Brauche einen Anstoß. Habe mir eben JSONATA angesehen... für heute zuviel für mich. Werde jetzt mal den Kopf abschalten.

                      Danke so weit

                      P.S.: hier meine Anfänge

                      [{"id":"0a2aa4f87f5956e4","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"30fd91557c3ad1cf","type":"debug","z":"0a2aa4f87f5956e4","name":"debug 47","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":780,"y":60,"wires":[]},{"id":"d6ce58048ac7cd9f","type":"mqtt out","z":"0a2aa4f87f5956e4","name":"WR Leistung setzen","topic":"hms800/xxxxxxx/cmd/limit_persistent_absolute","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"d0d69da0d3c24301","x":800,"y":200,"wires":[]},{"id":"6df252da2441f7af","type":"mqtt in","z":"0a2aa4f87f5956e4","name":"WR Leistung einlesen","topic":"hms800/xxxxxxx/status/limit_absolute","qos":"2","datatype":"auto-detect","broker":"d0d69da0d3c24301","nl":false,"rap":true,"rh":0,"inputs":0,"x":120,"y":160,"wires":[[]]},{"id":"ea4ad0f18e32f4d5","type":"server-state-changed","z":"0a2aa4f87f5956e4","name":"Shelly 3EM","server":"6d6a06a0.fdabd8","version":5,"outputs":1,"exposeAsEntityConfig":"","entityId":"sensor.shellypro3em_34987a471964_total_active_power","entityIdType":"exact","outputInitially":false,"stateType":"num","ifState":"","ifStateType":"str","ifStateOperator":"is","outputOnlyOnStateChange":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":110,"y":60,"wires":[["f25c860fb81cefcd"]]},{"id":"f25c860fb81cefcd","type":"delay","z":"0a2aa4f87f5956e4","name":"Alle 10s","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"10","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":280,"y":60,"wires":[[]]},{"id":"d0d69da0d3c24301","type":"mqtt-broker","name":"","broker":"192.168.10.9","port":"1883","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"autoUnsubscribe":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"6d6a06a0.fdabd8","type":"server","name":"Home Assistant","addon":true}]
                      
                      mickym 1 Reply Last reply Reply Quote 0
                      • mickym
                        mickym Most Active @DerKlotz last edited by

                        Na das ist doch schon mal ein Anfang. Da ich die Node nicht habe mit der Du Deinen Shelly ausliest - behelfe ich mir mal mit einer Inject Node.

                        Bei der Delay Node musst Du nicht nur die Nachrichtenrate begrenzen, sondern auch alle Zwischennachrichten löschen, sonst platzt die Node - oder Du hast plötzlich Speicherschwund. 😉

                        e2d162cf-72e6-45e8-b80a-eb34e2fac2dc-image.png

                        Ich versuche nun mal das umzusetzen:

                        nun soll der gesetzte Leistungswert WR vom Leistungswert Shelly subtrahiert werden. Ist das Ergebnis positiv soll der Wechselrichter um die Differenz zum gesetzten Leistungswert erhöht werden (bis zum einstellbaren MaxWert = 600W). Ist das Ergebnis negativ, dann soll der WR um die Differenz herunter getaktet werden. Ist die Differenz kleiner 20W soll keine WR Änderung greifen.

                        Ich kenne mich mit der Regelung fachlich nicht aus - aber hab mal versucht - das in etwa nach Deinem Text umzusetzen - aber vielleicht musst Du die Parameter anders setzen - aber für Dich zum Nachvollziehen sollte es gehen:

                        ad2b9429-0d50-44c9-ab50-f07b6687738b-image.png

                        Hier zum Import:

                        [{"id":"30fd91557c3ad1cf","type":"debug","z":"0a2aa4f87f5956e4","name":" Leistungswert WR vom Leistungswert Shelly subtrahiert ","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":850,"y":240,"wires":[]},{"id":"d6ce58048ac7cd9f","type":"mqtt out","z":"0a2aa4f87f5956e4","name":"WR Leistung setzen","topic":"hms800/xxxxxxx/cmd/limit_persistent_absolute","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"d0d69da0d3c24301","x":1260,"y":380,"wires":[]},{"id":"6df252da2441f7af","type":"mqtt in","z":"0a2aa4f87f5956e4","name":"WR Leistung einlesen","topic":"hms800/xxxxxxx/status/limit_absolute","qos":"2","datatype":"auto-detect","broker":"d0d69da0d3c24301","nl":false,"rap":true,"rh":0,"inputs":0,"x":280,"y":40,"wires":[["700ad65a80712a81"]]},{"id":"f25c860fb81cefcd","type":"delay","z":"0a2aa4f87f5956e4","name":"Alle 10s","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"10","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"allowrate":false,"outputs":1,"x":300,"y":300,"wires":[["5b65c71b22e6d9a0"]]},{"id":"3dfb5574e0a45da7","type":"inject","z":"0a2aa4f87f5956e4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"Shelly","payload":"2000","payloadType":"num","x":150,"y":300,"wires":[["f25c860fb81cefcd"]]},{"id":"eb19d4b6b25f5c4d","type":"inject","z":"0a2aa4f87f5956e4","name":"Leistungs setzen","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"400","payloadType":"num","x":260,"y":100,"wires":[["700ad65a80712a81"]]},{"id":"700ad65a80712a81","type":"change","z":"0a2aa4f87f5956e4","name":"","rules":[{"t":"set","p":"leistung","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":510,"y":100,"wires":[["fd9d579d05a98a0f"]]},{"id":"5b65c71b22e6d9a0","type":"change","z":"0a2aa4f87f5956e4","name":"Shelly - Leistung","rules":[{"t":"set","p":"leistung","pt":"msg","to":"leistung","tot":"flow"},{"t":"set","p":"payload","pt":"msg","to":"payload - leistung","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":300,"wires":[["30fd91557c3ad1cf","fd09e1ffd4a2b028"]]},{"id":"fd9d579d05a98a0f","type":"debug","z":"0a2aa4f87f5956e4","name":"aktuelles Leistungslimit","active":true,"tosidebar":false,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":750,"y":100,"wires":[]},{"id":"fd09e1ffd4a2b028","type":"switch","z":"0a2aa4f87f5956e4","name":"Überprüfung Differenz","property":"payload","propertyType":"msg","rules":[{"t":"gte","v":"0","vt":"num"},{"t":"lt","v":"0","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":720,"y":320,"wires":[["1054d22cd499f807"],["1c3c169bafcbadb0"]]},{"id":"1054d22cd499f807","type":"change","z":"0a2aa4f87f5956e4","name":"Leistungswert erhöht","rules":[{"t":"set","p":"payload","pt":"msg","to":"leistung + payload","tot":"jsonata"},{"t":"set","p":"limit","pt":"msg","to":"limit","tot":"flow"},{"t":"set","p":"payload","pt":"msg","to":"payload > limit ? limit : payload","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":960,"y":300,"wires":[["5e26fca5d51b7022"]]},{"id":"473aeb42a17ca2ad","type":"inject","z":"0a2aa4f87f5956e4","name":"Limit setzen","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"600","payloadType":"num","x":270,"y":160,"wires":[["0bd3a322dfdb068b"]]},{"id":"0bd3a322dfdb068b","type":"change","z":"0a2aa4f87f5956e4","name":"","rules":[{"t":"set","p":"limit","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":160,"wires":[["e454758d976f07d0"]]},{"id":"e454758d976f07d0","type":"debug","z":"0a2aa4f87f5956e4","name":"aktuelles Leistungslimit","active":true,"tosidebar":false,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":750,"y":160,"wires":[]},{"id":"5e26fca5d51b7022","type":"debug","z":"0a2aa4f87f5956e4","name":"Regelung","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":1220,"y":320,"wires":[]},{"id":"1c3c169bafcbadb0","type":"change","z":"0a2aa4f87f5956e4","name":"Leistungswert erniedrigt","rules":[{"t":"set","p":"payload","pt":"msg","to":"leistung + payload","tot":"jsonata"},{"t":"set","p":"payload","pt":"msg","to":"payload < 20 ? 20 : payload","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":970,"y":340,"wires":[["5e26fca5d51b7022"]]},{"id":"d0d69da0d3c24301","type":"mqtt-broker","name":"","broker":"192.168.10.9","port":"1883","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"autoUnsubscribe":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}]
                        

                        D 2 Replies Last reply Reply Quote 0
                        • D
                          DerKlotz @mickym last edited by

                          @mickym Moin,
                          du bist echt Hammer. Werde mir jetzt etwas Zeit zum Verstehen nehmen und dann sicher mit Fragen kommen, ob ich das so richtig verstanden gabe.

                          Danke nochmal

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

                            @mickym
                            Moin,
                            habe mich mit dem Code beschäftigt und möchte den erweitern. Ich würde gerne das Wechselrichterlimit erst erhöhen, wenn die gesamte PV Leistung für z.B. eine Minute größer= 1000 ist. Komme nicht weiter...

                            Danke und bis Mitte nächster Woche

                            [{"id":"5fe3fafc3c23805b","type":"server-state-changed","z":"6577016f01b55dc5","name":"MPPT 150 PV Leistung","server":"6d6a06a0.fdabd8","version":5,"outputs":1,"exposeAsEntityConfig":"","entityId":"sensor.victron150_panel_power","entityIdType":"exact","outputInitially":false,"stateType":"num","ifState":"","ifStateType":"str","ifStateOperator":"is","outputOnlyOnStateChange":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":120,"y":120,"wires":[["d773489bd7c13317"]]},{"id":"d773489bd7c13317","type":"change","z":"6577016f01b55dc5","name":"Gesamte PV Leistung","rules":[{"t":"set","p":"mppt100","pt":"msg","to":"mppt100","tot":"flow"},{"t":"set","p":"payload","pt":"msg","to":"payload + mppt100","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":360,"y":120,"wires":[["fd266835897b7237"]]},{"id":"fd266835897b7237","type":"switch","z":"6577016f01b55dc5","name":"WR Limit ","property":"payload","propertyType":"msg","rules":[{"t":"gte","v":"1000","vt":"str"},{"t":"lt","v":"1000","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":120,"y":300,"wires":[["b11a339ba591a48d"],["38c4fae285b02601"]]},{"id":"38c4fae285b02601","type":"change","z":"6577016f01b55dc5","name":"WR Limit 600","rules":[{"t":"set","p":"payload","pt":"msg","to":"600","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":320,"y":320,"wires":[["562bcb0ea54d0de5"]]},{"id":"b11a339ba591a48d","type":"change","z":"6577016f01b55dc5","name":"WR Limit 800","rules":[{"t":"set","p":"payload","pt":"msg","to":"800","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":320,"y":260,"wires":[["562bcb0ea54d0de5"]]},{"id":"562bcb0ea54d0de5","type":"change","z":"6577016f01b55dc5","name":"","rules":[{"t":"set","p":"limit","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":540,"y":320,"wires":[["7d926f82cd595d51"]]},{"id":"7d926f82cd595d51","type":"debug","z":"6577016f01b55dc5","name":"aktuelles Leistungslimit","active":true,"tosidebar":false,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":790,"y":320,"wires":[]},{"id":"3c42a6c16cc8f788","type":"inject","z":"6577016f01b55dc5","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"50","payloadType":"num","x":90,"y":20,"wires":[["3cd6a15f0d041841"]]},{"id":"3e4a0c469b44c933","type":"server-state-changed","z":"6577016f01b55dc5","name":"MPPT 100 PV Leistung","server":"6d6a06a0.fdabd8","version":5,"outputs":1,"exposeAsEntityConfig":"","entityId":"sensor.victron100_panel_voltage","entityIdType":"exact","outputInitially":false,"stateType":"num","ifState":"","ifStateType":"str","ifStateOperator":"is","outputOnlyOnStateChange":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":120,"y":60,"wires":[["3cd6a15f0d041841"]]},{"id":"3cd6a15f0d041841","type":"change","z":"6577016f01b55dc5","name":"PV Leistung MPPT 100","rules":[{"t":"set","p":"mppt100","pt":"flow","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":60,"wires":[[]]},{"id":"6d6a06a0.fdabd8","type":"server","name":"Home Assistant","addon":true}]
                            
                            1 Reply Last reply Reply Quote 0
                            • mickym
                              mickym Most Active last edited by

                              @derklotz sagte in Payload von Timestamp in Node Red weitergeben, wenn:

                              wenn die gesamte PV Leistung für z.B. eine Minute größer= 1000 ist

                              hier

                              79946fa4-f3b2-4a7a-ad74-66e90172d6da-image.png


                              [{"id":"7a67ae22ed136350","type":"inject","z":"27d9496bad8ac6c5","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"1000","payloadType":"num","x":290,"y":220,"wires":[["cf91ddd6e7ed9050"]]},{"id":"d941f8abe2f4ef78","type":"inject","z":"27d9496bad8ac6c5","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"900","payloadType":"num","x":290,"y":280,"wires":[["cf91ddd6e7ed9050"]]},{"id":"cf91ddd6e7ed9050","type":"switch","z":"27d9496bad8ac6c5","name":"","property":"payload","propertyType":"msg","rules":[{"t":"gte","v":"1000","vt":"str"},{"t":"lt","v":"1000","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":450,"y":240,"wires":[["4bd4856c8193177d"],["08e27267381bab8f"]]},{"id":"4bd4856c8193177d","type":"change","z":"27d9496bad8ac6c5","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":630,"y":220,"wires":[["1988f081e7e45569"]]},{"id":"08e27267381bab8f","type":"change","z":"27d9496bad8ac6c5","name":"","rules":[{"t":"set","p":"reset","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":620,"y":260,"wires":[["1988f081e7e45569"]]},{"id":"1988f081e7e45569","type":"trigger","z":"27d9496bad8ac6c5","name":"","op1":"","op2":"true","op1type":"nul","op2type":"bool","duration":"1","extend":false,"overrideDelay":false,"units":"min","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":830,"y":240,"wires":[["7fdca484b75d542b"]]},{"id":"7fdca484b75d542b","type":"debug","z":"27d9496bad8ac6c5","name":"länger als 1 min > 1000","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1070,"y":240,"wires":[]}]

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

                                @mickym
                                Moin,
                                haut super hin, der Rest meiner Steuerung nimmt auch allmählich finale Gestalt an. Danke an dich!

                                Etwas offtopic... Habe für die Batteriespannung eine(n) Gauge im Dashboard erstellt. Gibt es die Möglich am äußeren Rand Werte anzeigen zu lassen? Min - Max an den Enden ist klar, aber wie sieht es mit Zwischenwerten aus?

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

                                  @derklotz die aktuellen werte in der gauge werden doch in der mitte angezeigt? ansonsten in der Standardgauge gibts keine skala - auch im neuen Dashboard nicht.

                                  Das Einzige, was ich Dir als Alternative anbieten kann, sind die Steelseries Widgets - dafür habe ich ja mal einen eigenen Thread gemacht: https://forum.iobroker.net/post/634863

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

                                    @mickym
                                    Hallo,
                                    nach dem Urlaub und weiterem Programmieren, hab ich meine PV Anlage nun zum Laufen gebracht. Das ganze mit den Gauges habe ich nicht hin bekommen... allerdings schaue ich mittlerweile nicht ständig aufs Dashboard, so dass ich die Gauges auch nicht mehr weiter verfolgen möchte.

                                    Ich habe zur Zeit eine Funktion in meiner Programierung, die ich noch gerne ändern würde, aber keinen Ansatz finde.
                                    Per MQTT wird alle 20s ein Trigger vom Wechselrichter ausgelöst, der unter anderem die aktuelle Leistung des Shelly ausliest (current state node) und dann die Berechnung für den neuen Wechselrichter Wert durchführt. Nun ist es so, dass die Leistungswerte des Shelly (habe parallel eine event state node für den Shelly an einem Debug) manchmal recht wild hin und her springen und wenn nun gerade der Trigger kommt, dann ist die Berechnung "weit" weg vom Soll. Ich übertreibe jetzt mal und sage der Shelly liefert jede Sekunde einen anderen Wert.
                                    Meine Idee: Der Shelly feuert über eine event state node so viel er will, dann kommt eine smooth node und erstellt alle 5 Werte einen Mittelwert. Dieser Mittelwert wird mit dem Triggersignal an die Berechnung weitergeführt. Wurden innerhalb der 20s Triggerzeit mehrere Mittelwerte gebildet, so soll nur der letzte zur Berechnung heran gezogen werden... ist es so klar beschrieben???

                                    Danke

                                    P.S.: Habe nur die Nodes hier eingestellt, die der Veranschaulichung helfen

                                    [{"id":"ea4ad0f18e32f4d5","type":"server-state-changed","z":"0a2aa4f87f5956e4","name":"Shelly 3EM","server":"6d6a06a0.fdabd8","version":5,"outputs":1,"exposeAsEntityConfig":"","entityId":"sensor.shellypro3em_34987a471964_total_active_power","entityIdType":"exact","outputInitially":true,"stateType":"num","ifState":"","ifStateType":"str","ifStateOperator":"is","outputOnlyOnStateChange":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":90,"y":40,"wires":[["0d4451c28da95816"]]},{"id":"0d4451c28da95816","type":"smooth","z":"0a2aa4f87f5956e4","name":"","property":"payload","action":"mean","count":"5","round":"0","mult":"single","reduce":true,"x":320,"y":80,"wires":[["5df5e48eaf6c5a06","503598ccfa7b2b44"]]},{"id":"5df5e48eaf6c5a06","type":"debug","z":"0a2aa4f87f5956e4","name":"debug 51","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":800,"y":100,"wires":[]},{"id":"6df252da2441f7af","type":"mqtt in","z":"0a2aa4f87f5956e4","name":"WR Leistung einlesen","topic":"hms800/114491215971/status/limit_absolute","qos":"2","datatype":"auto-detect","broker":"d0d69da0d3c24301","nl":false,"rap":true,"rh":0,"inputs":0,"x":100,"y":220,"wires":[["f83acaa91f44f413","d7d7f106bcbb4013"]]},{"id":"f83acaa91f44f413","type":"change","z":"0a2aa4f87f5956e4","name":"WR Trigger","rules":[{"t":"set","p":"payload","pt":"msg","to":"1","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":110,"y":160,"wires":[["3d5ee0abe9f74380","e7287f2c54cb5644","1570b4d33454fcb7","589526f7921c6c0d","71a71d3999bcd289","cdaa2d9c336c2ee8","7af26ab867661b30","b7d145577407dba9"]]},{"id":"71a71d3999bcd289","type":"api-current-state","z":"0a2aa4f87f5956e4","name":"Leistung alle Phasen","server":"864f5cad6b0c1ce0","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.shellypro3em_34987a471964_total_active_power","state_type":"num","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":440,"y":160,"wires":[["f0b1139468c6c3d2","25ec3c5f853b4e6c"]]},{"id":"25ec3c5f853b4e6c","type":"trigger","z":"0a2aa4f87f5956e4","name":"","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"10","extend":false,"overrideDelay":false,"units":"ms","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":290,"y":280,"wires":[["7e4f2eb2a91c8cc8"]],"info":"Trigger setzen, weil sonst alle Zustände\r\ngleichzeitig kommen"},{"id":"f0b1139468c6c3d2","type":"ui_chart","z":"0a2aa4f87f5956e4","name":"","group":"65436f194880235a","order":1,"width":0,"height":0,"label":"Netzbezug","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"step","nodata":"","dot":false,"ymin":"-150","ymax":"150","removeOlder":"1","removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":830,"y":180,"wires":[[]]},{"id":"7e4f2eb2a91c8cc8","type":"switch","z":"0a2aa4f87f5956e4","name":"Überprüfung Differenz","property":"payload","propertyType":"msg","rules":[{"t":"gte","v":"20","vt":"num"},{"t":"lte","v":"-20","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":280,"y":360,"wires":[["59a1b7939f9ed580"],["f39428fb43c1582c"]]},{"id":"6d6a06a0.fdabd8","type":"server","name":"Home Assistant","addon":true},{"id":"d0d69da0d3c24301","type":"mqtt-broker","name":"","broker":"192.168.10.9","port":"1883","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"autoUnsubscribe":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"864f5cad6b0c1ce0","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"5","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":": ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"default","statusTimeFormat":"h:m","enableGlobalContextStore":false},{"id":"65436f194880235a","type":"ui_group","name":"Group 2","tab":"84548990a4a4f571","order":2,"disp":true,"width":"6","collapse":false,"className":""},{"id":"84548990a4a4f571","type":"ui_tab","name":"Test","icon":"dashboard","disabled":false,"hidden":false}]
                                    
                                    mickym 1 Reply Last reply Reply Quote 0
                                    • mickym
                                      mickym Most Active @DerKlotz last edited by mickym

                                      @derklotz Warum nimmst Du nicht die Standard filter Node und filterst auf das Nahbereichsband.

                                      e52c7641-96c5-4e80-bbf0-07bb13f64bd7-image.png

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

                                        @mickym
                                        Aktuell mal geschaut...
                                        folgende Werte konnte ich sehen
                                        46
                                        2
                                        55
                                        81
                                        13
                                        -31

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

                                          @derklotz Ja wie gesagt, nutze den Nahbandfilter - was ist denn ein gültiger Wert - das ist ja alles sehr gestreut. Die smooth Node bezieht halt alle Wert mit ein. Kannst ja auch nutzen - aber ich weiß nicht, ob das zielführend ist.

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

                                            @mickym
                                            Vergiss die Werte von eben, da waren einige bei, die zwischen den Rechenzyklen waren. So um 40 springt der auf jeden Fall.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            453
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            2
                                            28
                                            1987
                                            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