Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Node-Red
  5. Einfache Funktion - Wertüberwachung mit 2 Verzögerungszeiten

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    355

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.6k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.5k

Einfache Funktion - Wertüberwachung mit 2 Verzögerungszeiten

Geplant Angeheftet Gesperrt Verschoben Node-Red
48 Beiträge 2 Kommentatoren 3.0k Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • I Offline
    I Offline
    I0Br0ker
    schrieb am zuletzt editiert von I0Br0ker
    #1

    Hallo Zusammen ,
    ich bin schon Tage am basteln.
    Eigentlich möchte ich eine für mich erstmal einfach klingende Funktion realisieren.
    Ich scheitere aber an folgendem:

    Ich möchte einen Messwert ( der auch sauber rein kommt ) überwachen.
    Größer -50 und kleiner -300 soll überwacht werden für beide Werte soll eine einstellbare Verzögerung ablaufen.
    Die Verzögerung soll aber nicht aufaddiert werden sondern neu gestartet sobald der Wert aus dem entsprechenden Range war. Es soll nur einmal ein true oder ein false also Ausgang generiert werden.
    Es darf erst wieder ein true kommen wenn der aktuelle wert auf false steht und umgekehrt.

    Das ganze soll einen Verbraucher starten , aufgrund von Daten des Netzzählers.
    Wie gesagt der Messwert kommt sauber an.
    Die Funktion schiebt aber mehrere True und mehrere false raus.
    Auch verhält sie sich für micht nicht ganz nachvollziehbar mit den Zeiten ich glaube
    die laufen nicht sauber ab :-(

    Weiss jemand woran das liegen kann ?

    DANKE

    // Holen der Grenzwerte und Zeitintervalle aus temporären Kontext-Variablen
    var upperLimit = context.get('upperLimit') || -50;  // Standardwert -50
    var lowerLimit = context.get('lowerLimit') || -300;   // Standardwert -300
    var timeUpper = context.get('timeUpper') || 60000;  // Standardwert 60 Sekunden (60000 ms)
    var timeLower = context.get('timeLower') || 80000;  // Standardwert 80 Sekunden (80000 ms)
    
    var currentValue = msg.payload;
    var startTime = context.get('startTime') || 0;
    var state = context.get('state') || '';
    var sent = context.get('sent') || '';  // Track if we have sent true or false
    var currentTime = Date.now();
    
    // Überprüfen, ob der Wert unter dem unteren Grenzwert liegt (für true)
    if (currentValue < lowerLimit) {
        // Wenn der Wert unter dem unteren Grenzwert liegt, prüfe, ob der Zustand "underLowerLimit" ist
        if (state !== 'underLowerLimit') {
            state = 'underLowerLimit';
            startTime = currentTime;  // Zurücksetzen des Startzeitpunkts, wenn der Zustand geändert wird
            // sent wird nur zurückgesetzt, wenn noch nicht 'true' gesendet wurde
            context.set('sent', sent !== 'true' ? '' : sent);
        }
        // Wenn der Wert für die definierte Zeit unter dem unteren Grenzwert bleibt und noch keine Nachricht gesendet wurde
        if (currentTime - startTime >= timeLower && sent !== 'true' && sent !== 'switching') {
            // Es wird nur 'true' gesendet, wenn vorher 'false' gesendet wurde
            if (sent === 'false' || sent === '') {
                msg.payload = true;  // Sende true (bei Wert unter Grenzwert)
                context.set('sent', 'true');  // Markiere, dass true gesendet wurde
                return msg;
            }
        }
    }
    
    // Überprüfen, ob der Wert über dem oberen Grenzwert liegt (für false)
    if (currentValue > upperLimit) {
        // Wenn der Wert über dem oberen Grenzwert liegt, prüfe, ob der Zustand "overUpperLimit" ist
        if (state !== 'overUpperLimit') {
            state = 'overUpperLimit';
            startTime = currentTime;  // Zurücksetzen des Startzeitpunkts, wenn der Zustand geändert wird
            // sent wird nur zurückgesetzt, wenn noch nicht 'false' gesendet wurde
            context.set('sent', sent !== 'false' ? '' : sent);
        }
        // Wenn der Wert für die definierte Zeit über dem oberen Grenzwert bleibt und noch keine Nachricht gesendet wurde
        if (currentTime - startTime >= timeUpper && sent !== 'false' && sent !== 'switching') {
            // Es wird nur 'false' gesendet, wenn vorher 'true' gesendet wurde
            if (sent === 'true' || sent === '') {
                msg.payload = false;  // Sende false (bei Wert über Grenzwert)
                context.set('sent', 'false');  // Markiere, dass false gesendet wurde
                return msg;
            }
        }
    }
    
    // Wenn der Wert weder unter dem unteren Grenzwert noch über dem oberen Grenzwert liegt,
    // aber der Zustand schon gesetzt ist, dann den Zustand und den Startzeitpunkt zurücksetzen.
    if (currentValue >= lowerLimit && currentValue <= upperLimit) {
        if (state !== 'normal') {
            state = 'normal';
            startTime = currentTime;  // Timer zurücksetzen, wenn der Wert wieder im normalen Bereich liegt
            context.set('sent', '');  // Zurücksetzen, um zu verhindern, dass fälschlicherweise eine Nachricht gesendet wird
        }
    }
    
    // Aktualisiere den Zustand und die Startzeit im Kontext
    context.set('state', state);
    context.set('startTime', startTime);
    
    return null;  // Keine Nachricht senden, wenn die Bedingungen nicht erfüllt sind
    
    mickymM 1 Antwort Letzte Antwort
    0
    • I I0Br0ker

      Hallo Zusammen ,
      ich bin schon Tage am basteln.
      Eigentlich möchte ich eine für mich erstmal einfach klingende Funktion realisieren.
      Ich scheitere aber an folgendem:

      Ich möchte einen Messwert ( der auch sauber rein kommt ) überwachen.
      Größer -50 und kleiner -300 soll überwacht werden für beide Werte soll eine einstellbare Verzögerung ablaufen.
      Die Verzögerung soll aber nicht aufaddiert werden sondern neu gestartet sobald der Wert aus dem entsprechenden Range war. Es soll nur einmal ein true oder ein false also Ausgang generiert werden.
      Es darf erst wieder ein true kommen wenn der aktuelle wert auf false steht und umgekehrt.

      Das ganze soll einen Verbraucher starten , aufgrund von Daten des Netzzählers.
      Wie gesagt der Messwert kommt sauber an.
      Die Funktion schiebt aber mehrere True und mehrere false raus.
      Auch verhält sie sich für micht nicht ganz nachvollziehbar mit den Zeiten ich glaube
      die laufen nicht sauber ab :-(

      Weiss jemand woran das liegen kann ?

      DANKE

      // Holen der Grenzwerte und Zeitintervalle aus temporären Kontext-Variablen
      var upperLimit = context.get('upperLimit') || -50;  // Standardwert -50
      var lowerLimit = context.get('lowerLimit') || -300;   // Standardwert -300
      var timeUpper = context.get('timeUpper') || 60000;  // Standardwert 60 Sekunden (60000 ms)
      var timeLower = context.get('timeLower') || 80000;  // Standardwert 80 Sekunden (80000 ms)
      
      var currentValue = msg.payload;
      var startTime = context.get('startTime') || 0;
      var state = context.get('state') || '';
      var sent = context.get('sent') || '';  // Track if we have sent true or false
      var currentTime = Date.now();
      
      // Überprüfen, ob der Wert unter dem unteren Grenzwert liegt (für true)
      if (currentValue < lowerLimit) {
          // Wenn der Wert unter dem unteren Grenzwert liegt, prüfe, ob der Zustand "underLowerLimit" ist
          if (state !== 'underLowerLimit') {
              state = 'underLowerLimit';
              startTime = currentTime;  // Zurücksetzen des Startzeitpunkts, wenn der Zustand geändert wird
              // sent wird nur zurückgesetzt, wenn noch nicht 'true' gesendet wurde
              context.set('sent', sent !== 'true' ? '' : sent);
          }
          // Wenn der Wert für die definierte Zeit unter dem unteren Grenzwert bleibt und noch keine Nachricht gesendet wurde
          if (currentTime - startTime >= timeLower && sent !== 'true' && sent !== 'switching') {
              // Es wird nur 'true' gesendet, wenn vorher 'false' gesendet wurde
              if (sent === 'false' || sent === '') {
                  msg.payload = true;  // Sende true (bei Wert unter Grenzwert)
                  context.set('sent', 'true');  // Markiere, dass true gesendet wurde
                  return msg;
              }
          }
      }
      
      // Überprüfen, ob der Wert über dem oberen Grenzwert liegt (für false)
      if (currentValue > upperLimit) {
          // Wenn der Wert über dem oberen Grenzwert liegt, prüfe, ob der Zustand "overUpperLimit" ist
          if (state !== 'overUpperLimit') {
              state = 'overUpperLimit';
              startTime = currentTime;  // Zurücksetzen des Startzeitpunkts, wenn der Zustand geändert wird
              // sent wird nur zurückgesetzt, wenn noch nicht 'false' gesendet wurde
              context.set('sent', sent !== 'false' ? '' : sent);
          }
          // Wenn der Wert für die definierte Zeit über dem oberen Grenzwert bleibt und noch keine Nachricht gesendet wurde
          if (currentTime - startTime >= timeUpper && sent !== 'false' && sent !== 'switching') {
              // Es wird nur 'false' gesendet, wenn vorher 'true' gesendet wurde
              if (sent === 'true' || sent === '') {
                  msg.payload = false;  // Sende false (bei Wert über Grenzwert)
                  context.set('sent', 'false');  // Markiere, dass false gesendet wurde
                  return msg;
              }
          }
      }
      
      // Wenn der Wert weder unter dem unteren Grenzwert noch über dem oberen Grenzwert liegt,
      // aber der Zustand schon gesetzt ist, dann den Zustand und den Startzeitpunkt zurücksetzen.
      if (currentValue >= lowerLimit && currentValue <= upperLimit) {
          if (state !== 'normal') {
              state = 'normal';
              startTime = currentTime;  // Timer zurücksetzen, wenn der Wert wieder im normalen Bereich liegt
              context.set('sent', '');  // Zurücksetzen, um zu verhindern, dass fälschlicherweise eine Nachricht gesendet wird
          }
      }
      
      // Aktualisiere den Zustand und die Startzeit im Kontext
      context.set('state', state);
      context.set('startTime', startTime);
      
      return null;  // Keine Nachricht senden, wenn die Bedingungen nicht erfüllt sind
      
      mickymM Offline
      mickymM Offline
      mickym
      Most Active
      schrieb am zuletzt editiert von mickym
      #2

      @i0br0ker Ich kann es Dir nicht sagen - ich frage mich nur, warum Du NodeRed benutzt, wenn Du dann eh alles codierst.

      So musst Du halt mit node.warn Nachrichten versuchen, ob Deine Logik funktioniert. NodeRed spielt aber gerade seine Stärken aus, in dem man diese ganzen Teilschritte in einem Flow packt und nicht die ganze Logik in Javascript programmiert.
      Und ich gebe zu, dass mir die Logik durch den Code nachzuvollziehen, im Moment zu mühsam ist. Auch zum Debuggen ist es wesentlich einfacher vorhandene Nodes zu nutzen - als das alles selbst zu programmieren.

      Wenn Du nicht weißt, wie man einen Flow erstellt, um Deine Logik abzubilden, dann helfe ich Dir gerne, aber mich durch JS Code zu wurschteln - da findest Du sicher andere Leute, die gerne programmieren wollen.

      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

      I 1 Antwort Letzte Antwort
      0
      • mickymM mickym

        @i0br0ker Ich kann es Dir nicht sagen - ich frage mich nur, warum Du NodeRed benutzt, wenn Du dann eh alles codierst.

        So musst Du halt mit node.warn Nachrichten versuchen, ob Deine Logik funktioniert. NodeRed spielt aber gerade seine Stärken aus, in dem man diese ganzen Teilschritte in einem Flow packt und nicht die ganze Logik in Javascript programmiert.
        Und ich gebe zu, dass mir die Logik durch den Code nachzuvollziehen, im Moment zu mühsam ist. Auch zum Debuggen ist es wesentlich einfacher vorhandene Nodes zu nutzen - als das alles selbst zu programmieren.

        Wenn Du nicht weißt, wie man einen Flow erstellt, um Deine Logik abzubilden, dann helfe ich Dir gerne, aber mich durch JS Code zu wurschteln - da findest Du sicher andere Leute, die gerne programmieren wollen.

        I Offline
        I Offline
        I0Br0ker
        schrieb am zuletzt editiert von
        #3

        @mickym Hi danke für das feedback ... ja ich hab versucht die ganzen Bausteine da mit Linien zu verbinden ;-)
        Aber da hab ich noch weniger hin bekommen .. da sendet der da massenweise daten durch :-)
        Das ist nicht meine Welt .. aber leider läuft auf dem Victron Wechselrichter nur das Node Red und ich dachte mir diese
        Funktion dürfte relativ schnell programmiert sein .. aber ich sitz da schon Tage dran und komm nicht weiter ...
        Die Zeit Verzögerungen in Node Red machen einfach nicht das was ich möchte .

        mickymM 1 Antwort Letzte Antwort
        0
        • I I0Br0ker

          @mickym Hi danke für das feedback ... ja ich hab versucht die ganzen Bausteine da mit Linien zu verbinden ;-)
          Aber da hab ich noch weniger hin bekommen .. da sendet der da massenweise daten durch :-)
          Das ist nicht meine Welt .. aber leider läuft auf dem Victron Wechselrichter nur das Node Red und ich dachte mir diese
          Funktion dürfte relativ schnell programmiert sein .. aber ich sitz da schon Tage dran und komm nicht weiter ...
          Die Zeit Verzögerungen in Node Red machen einfach nicht das was ich möchte .

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

          @i0br0ker Wie gesagt - Du kannst ja selbst mit Inject Nodes triggern, um so verschiedene Szenarien zu simulieren. In den Code kannst Du über node.warn Meldungen im Debugfenster ausgeben.
          Ansonsten wenn Du dieses Tool halt richtig nutzen willst, dann würde ich mich schon der Nodes bedienen und nicht Programmcode schreiben.
          In manchen Situationen braucht man function Nodes aber wie gesagt auch wenn Du Deinen Code prüfen willst, dann würde ich halt mit Inject nodes die Situation zu simulieren und Dir das Ergebnis anzuschauen.

          Sprich wenn deine Timer nicht funktionieren und Du das programmieren möchtest, dann musst Du halt genau beschreiben, was Du erwartest. Ich kann ja nur Deine function Node importieren und versuchen das nachzustellen - sinnvoller ist es halt dich in diese tolle Welt einzuarbeiten. Wie gesagt ich helfe Dir gerne aber dann sollten wir das mit Inject Nodes simulieren.

          Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

          1 Antwort Letzte Antwort
          0
          • mickymM Offline
            mickymM Offline
            mickym
            Most Active
            schrieb am zuletzt editiert von mickym
            #5

            Schau mal Folgendes.

            Für eine fixe Verzögerung gibt es die delay Node. Wenn Du Dir die Hilfe kannst Du Dir das anpassen.

            c1f536a7-a154-444c-b97a-80b0bef96f20-image.png

            Die Verzögerung soll aber nicht aufaddiert werden sondern neu gestartet sobald der Wert aus dem entsprechenden Range war. Es soll nur einmal ein true oder ein false also Ausgang generiert werden.

            Standardmässig wird jede Nachricht um einen fixen Zeitanteil verzögert, wenn Du also willst, dass die Verzögerung mit jeder Nachricht neu gestartet werden soll, dann musst Du vor jede Nachricht eine eigene Nachricht mit msg.reset setzen.

            Für sowas nutzt man dann eine function Node.

            59db1dc5-0571-4e1e-94f3-229112d84f94-image.png

            Damit wird immer ein reset gesendet, bevor die payload gesendet wird. In dem Fall auch über delay noch mit einer variablen Verzögerung.

            6d4c035f-b7d5-4410-9c01-caaa15ac8626-image.png
            Schau mal ob der Flow das macht, was Du bzgl. Verzögerung macht, was Du willst, in dem Du die Inject Node nach Belieben betätigst.

            Hier mal zum Import:

            [
               {
                   "id": "54ed90461dae1c43",
                   "type": "inject",
                   "z": "7e6af0015415146d",
                   "name": "",
                   "props": [
                       {
                           "p": "payload"
                       }
                   ],
                   "repeat": "",
                   "crontab": "",
                   "once": false,
                   "onceDelay": 0.1,
                   "topic": "",
                   "payload": "",
                   "payloadType": "date",
                   "x": 420,
                   "y": 5940,
                   "wires": [
                       [
                           "33a67b09b9a7084a"
                       ]
                   ]
               },
               {
                   "id": "33a67b09b9a7084a",
                   "type": "change",
                   "z": "7e6af0015415146d",
                   "name": "",
                   "rules": [
                       {
                           "t": "set",
                           "p": "payload",
                           "pt": "msg",
                           "to": "$moment()",
                           "tot": "jsonata"
                       }
                   ],
                   "action": "",
                   "property": "",
                   "from": "",
                   "to": "",
                   "reg": false,
                   "x": 610,
                   "y": 5940,
                   "wires": [
                       [
                           "3282cb800bf771f8"
                       ]
                   ]
               },
               {
                   "id": "011458825e7a9c69",
                   "type": "delay",
                   "z": "7e6af0015415146d",
                   "name": "",
                   "pauseType": "delayv",
                   "timeout": "5",
                   "timeoutUnits": "seconds",
                   "rate": "1",
                   "nbRateUnits": "1",
                   "rateUnits": "second",
                   "randomFirst": "1",
                   "randomLast": "5",
                   "randomUnits": "seconds",
                   "drop": false,
                   "allowrate": false,
                   "outputs": 1,
                   "x": 1040,
                   "y": 5940,
                   "wires": [
                       [
                           "8947663b9726d70e"
                       ]
                   ]
               },
               {
                   "id": "3282cb800bf771f8",
                   "type": "function",
                   "z": "7e6af0015415146d",
                   "name": "Mehrere Nachrichten",
                   "func": "var msg1 = { reset: true};\nvar msg2 = { delay: 30000, payload: msg.payload};\nreturn [[msg1,msg2]];",
                   "outputs": 1,
                   "timeout": 0,
                   "noerr": 0,
                   "initialize": "",
                   "finalize": "",
                   "libs": [],
                   "x": 840,
                   "y": 5940,
                   "wires": [
                       [
                           "011458825e7a9c69"
                       ]
                   ]
               },
               {
                   "id": "8947663b9726d70e",
                   "type": "debug",
                   "z": "7e6af0015415146d",
                   "name": "Nachricht",
                   "active": true,
                   "tosidebar": true,
                   "console": false,
                   "tostatus": false,
                   "complete": "true",
                   "targetType": "full",
                   "statusVal": "",
                   "statusType": "auto",
                   "x": 1200,
                   "y": 5940,
                   "wires": []
               }
            ]
            

            Größer -50 und kleiner -300 soll überwacht werden für beide Werte soll eine einstellbare Verzögerung ablaufen.

            Dazu lenkt man den Nachrichtenstrom einfach über eine switch Node an 2 verschiedene Ausgänge.

            Es darf erst wieder ein true kommen wenn der aktuelle wert auf false steht und umgekehrt.

            Das kannst Du über eine function Node machen oder einfach über den Flow Kontext und einer Switch Node filtern.

            Der Vorteil von NodeRed - ist, dass Du jederzeit eine Debug Node an jede Stelle des Flows machen kannst und somit genau siehst, ob Deine Logik wie erwartet funktioniert.

            Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

            I 1 Antwort Letzte Antwort
            0
            • mickymM mickym

              Schau mal Folgendes.

              Für eine fixe Verzögerung gibt es die delay Node. Wenn Du Dir die Hilfe kannst Du Dir das anpassen.

              c1f536a7-a154-444c-b97a-80b0bef96f20-image.png

              Die Verzögerung soll aber nicht aufaddiert werden sondern neu gestartet sobald der Wert aus dem entsprechenden Range war. Es soll nur einmal ein true oder ein false also Ausgang generiert werden.

              Standardmässig wird jede Nachricht um einen fixen Zeitanteil verzögert, wenn Du also willst, dass die Verzögerung mit jeder Nachricht neu gestartet werden soll, dann musst Du vor jede Nachricht eine eigene Nachricht mit msg.reset setzen.

              Für sowas nutzt man dann eine function Node.

              59db1dc5-0571-4e1e-94f3-229112d84f94-image.png

              Damit wird immer ein reset gesendet, bevor die payload gesendet wird. In dem Fall auch über delay noch mit einer variablen Verzögerung.

              6d4c035f-b7d5-4410-9c01-caaa15ac8626-image.png
              Schau mal ob der Flow das macht, was Du bzgl. Verzögerung macht, was Du willst, in dem Du die Inject Node nach Belieben betätigst.

              Hier mal zum Import:

              [
                 {
                     "id": "54ed90461dae1c43",
                     "type": "inject",
                     "z": "7e6af0015415146d",
                     "name": "",
                     "props": [
                         {
                             "p": "payload"
                         }
                     ],
                     "repeat": "",
                     "crontab": "",
                     "once": false,
                     "onceDelay": 0.1,
                     "topic": "",
                     "payload": "",
                     "payloadType": "date",
                     "x": 420,
                     "y": 5940,
                     "wires": [
                         [
                             "33a67b09b9a7084a"
                         ]
                     ]
                 },
                 {
                     "id": "33a67b09b9a7084a",
                     "type": "change",
                     "z": "7e6af0015415146d",
                     "name": "",
                     "rules": [
                         {
                             "t": "set",
                             "p": "payload",
                             "pt": "msg",
                             "to": "$moment()",
                             "tot": "jsonata"
                         }
                     ],
                     "action": "",
                     "property": "",
                     "from": "",
                     "to": "",
                     "reg": false,
                     "x": 610,
                     "y": 5940,
                     "wires": [
                         [
                             "3282cb800bf771f8"
                         ]
                     ]
                 },
                 {
                     "id": "011458825e7a9c69",
                     "type": "delay",
                     "z": "7e6af0015415146d",
                     "name": "",
                     "pauseType": "delayv",
                     "timeout": "5",
                     "timeoutUnits": "seconds",
                     "rate": "1",
                     "nbRateUnits": "1",
                     "rateUnits": "second",
                     "randomFirst": "1",
                     "randomLast": "5",
                     "randomUnits": "seconds",
                     "drop": false,
                     "allowrate": false,
                     "outputs": 1,
                     "x": 1040,
                     "y": 5940,
                     "wires": [
                         [
                             "8947663b9726d70e"
                         ]
                     ]
                 },
                 {
                     "id": "3282cb800bf771f8",
                     "type": "function",
                     "z": "7e6af0015415146d",
                     "name": "Mehrere Nachrichten",
                     "func": "var msg1 = { reset: true};\nvar msg2 = { delay: 30000, payload: msg.payload};\nreturn [[msg1,msg2]];",
                     "outputs": 1,
                     "timeout": 0,
                     "noerr": 0,
                     "initialize": "",
                     "finalize": "",
                     "libs": [],
                     "x": 840,
                     "y": 5940,
                     "wires": [
                         [
                             "011458825e7a9c69"
                         ]
                     ]
                 },
                 {
                     "id": "8947663b9726d70e",
                     "type": "debug",
                     "z": "7e6af0015415146d",
                     "name": "Nachricht",
                     "active": true,
                     "tosidebar": true,
                     "console": false,
                     "tostatus": false,
                     "complete": "true",
                     "targetType": "full",
                     "statusVal": "",
                     "statusType": "auto",
                     "x": 1200,
                     "y": 5940,
                     "wires": []
                 }
              ]
              

              Größer -50 und kleiner -300 soll überwacht werden für beide Werte soll eine einstellbare Verzögerung ablaufen.

              Dazu lenkt man den Nachrichtenstrom einfach über eine switch Node an 2 verschiedene Ausgänge.

              Es darf erst wieder ein true kommen wenn der aktuelle wert auf false steht und umgekehrt.

              Das kannst Du über eine function Node machen oder einfach über den Flow Kontext und einer Switch Node filtern.

              Der Vorteil von NodeRed - ist, dass Du jederzeit eine Debug Node an jede Stelle des Flows machen kannst und somit genau siehst, ob Deine Logik wie erwartet funktioniert.

              I Offline
              I Offline
              I0Br0ker
              schrieb am zuletzt editiert von I0Br0ker
              #6

              @mickym hi vielen Dank für deine Ausführungen .. ich hab den code mal importiert ... zum testen.
              Wenn ich injecte kommt nach 30 sek der payload raus .. wenn ich weiter injecte wird er neu gestartet ok und nach dem letzten klick eben läuft die zeit ... das muss ich nun abstrahieren für meine Anwendung ..
              Ich hab einen Einspeisewert der schwankt angenommen ständig
              wenn der länger als Zeit X kleiner -300 ist soll true resultieren .. wenn er jedoch länger als Zeit X größer -50 ist soll ein false resultieren. Das ganze müsste gegenseitig verriegelt sein , sodass halt das false nur kommt wenn das true aktiv ist und umgekehrt.

              Das ist meine Datenbasis
              da schwirrt alle paar sekunden ein Wert ein

              [
                  {
                      "id": "50ee6e8eb5c5f3a8",
                      "type": "mqtt in",
                      "z": "42d8e26124256b59",
                      "name": "Netzübergabe",
                      "topic": "openWB/evu/W",
                      "qos": "2",
                      "datatype": "auto-detect",
                      "broker": "baede69d4c21ead9",
                      "nl": false,
                      "rap": true,
                      "rh": 0,
                      "inputs": 0,
                      "x": 150,
                      "y": 280,
                      "wires": [
                          [
                              "8f78648a1939bd66"
                          ]
                      ]
                  },
                  {
                      "id": "71f9943a7d86393c",
                      "type": "victron-input-system",
                      "z": "42d8e26124256b59",
                      "service": "com.victronenergy.system/0",
                      "path": "/Ac/ConsumptionOnOutput/L1/Power",
                      "serviceObj": {
                          "service": "com.victronenergy.system/0",
                          "name": "Venus system"
                      },
                      "pathObj": {
                          "path": "/Ac/ConsumptionOnOutput/L1/Power",
                          "type": "float",
                          "name": "Power on output of inverter/charger, L1 (W)"
                      },
                      "initial": "",
                      "name": "",
                      "onlyChanges": false,
                      "x": 290,
                      "y": 340,
                      "wires": [
                          [
                              "8f78648a1939bd66"
                          ]
                      ]
                  },
                  {
                      "id": "8f78648a1939bd66",
                      "type": "function",
                      "z": "42d8e26124256b59",
                      "name": "Berechnung Einschaltbedingung",
                      "func": "if (msg.topic === \"openWB/evu/W\") context.set(\"netz\",msg.payload);\nif (msg.topic === \"Venus system - Power on output of inverter/charger, L1 (W)\") context.set(\"verbrauchAC\",msg.payload);\nif (msg.topic === \"Venus system - VE.Bus charge power (W)\") context.set(\"verbrauchDC\",msg.payload);\n\nvar netz = context.get(\"netz\") || 0;\nvar verbrauchAC = context.get(\"verbrauchAC\") || 0;\nvar verbrauchDC = context.get(\"verbrauchDC\") || 0;\n\n// Wenn Wert C negativ ist, addiere A und B, sonst gebe nur B aus\nif (verbrauchDC < 0) {\n    msg.payload = netz + verbrauchAC; // A + B wird ausgegeben\n} else {\n    msg.payload = netz; // Nur B wird ausgegeben\n}\n\nmsg.topic = \"NETZberechnung\";\nreturn msg;",
                      "outputs": 1,
                      "timeout": 0,
                      "noerr": 0,
                      "initialize": "",
                      "finalize": "",
                      "libs": [],
                      "x": 710,
                      "y": 260,
                      "wires": [
                          []
                      ]
                  },
                  {
                      "id": "5a65949a3ab516bd",
                      "type": "victron-input-system",
                      "z": "42d8e26124256b59",
                      "service": "com.victronenergy.system/0",
                      "path": "/Dc/Vebus/Power",
                      "serviceObj": {
                          "service": "com.victronenergy.system/0",
                          "name": "Venus system"
                      },
                      "pathObj": {
                          "path": "/Dc/Vebus/Power",
                          "type": "float",
                          "name": "VE.Bus charge power (W)"
                      },
                      "name": "",
                      "onlyChanges": false,
                      "x": 240,
                      "y": 400,
                      "wires": [
                          [
                              "8f78648a1939bd66"
                          ]
                      ]
                  },
                  {
                      "id": "baede69d4c21ead9",
                      "type": "mqtt-broker",
                      "name": "",
                      "broker": "192.168.123.14",
                      "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": ""
                  }
              ]
              
              mickymM 1 Antwort Letzte Antwort
              0
              • I I0Br0ker

                @mickym hi vielen Dank für deine Ausführungen .. ich hab den code mal importiert ... zum testen.
                Wenn ich injecte kommt nach 30 sek der payload raus .. wenn ich weiter injecte wird er neu gestartet ok und nach dem letzten klick eben läuft die zeit ... das muss ich nun abstrahieren für meine Anwendung ..
                Ich hab einen Einspeisewert der schwankt angenommen ständig
                wenn der länger als Zeit X kleiner -300 ist soll true resultieren .. wenn er jedoch länger als Zeit X größer -50 ist soll ein false resultieren. Das ganze müsste gegenseitig verriegelt sein , sodass halt das false nur kommt wenn das true aktiv ist und umgekehrt.

                Das ist meine Datenbasis
                da schwirrt alle paar sekunden ein Wert ein

                [
                    {
                        "id": "50ee6e8eb5c5f3a8",
                        "type": "mqtt in",
                        "z": "42d8e26124256b59",
                        "name": "Netzübergabe",
                        "topic": "openWB/evu/W",
                        "qos": "2",
                        "datatype": "auto-detect",
                        "broker": "baede69d4c21ead9",
                        "nl": false,
                        "rap": true,
                        "rh": 0,
                        "inputs": 0,
                        "x": 150,
                        "y": 280,
                        "wires": [
                            [
                                "8f78648a1939bd66"
                            ]
                        ]
                    },
                    {
                        "id": "71f9943a7d86393c",
                        "type": "victron-input-system",
                        "z": "42d8e26124256b59",
                        "service": "com.victronenergy.system/0",
                        "path": "/Ac/ConsumptionOnOutput/L1/Power",
                        "serviceObj": {
                            "service": "com.victronenergy.system/0",
                            "name": "Venus system"
                        },
                        "pathObj": {
                            "path": "/Ac/ConsumptionOnOutput/L1/Power",
                            "type": "float",
                            "name": "Power on output of inverter/charger, L1 (W)"
                        },
                        "initial": "",
                        "name": "",
                        "onlyChanges": false,
                        "x": 290,
                        "y": 340,
                        "wires": [
                            [
                                "8f78648a1939bd66"
                            ]
                        ]
                    },
                    {
                        "id": "8f78648a1939bd66",
                        "type": "function",
                        "z": "42d8e26124256b59",
                        "name": "Berechnung Einschaltbedingung",
                        "func": "if (msg.topic === \"openWB/evu/W\") context.set(\"netz\",msg.payload);\nif (msg.topic === \"Venus system - Power on output of inverter/charger, L1 (W)\") context.set(\"verbrauchAC\",msg.payload);\nif (msg.topic === \"Venus system - VE.Bus charge power (W)\") context.set(\"verbrauchDC\",msg.payload);\n\nvar netz = context.get(\"netz\") || 0;\nvar verbrauchAC = context.get(\"verbrauchAC\") || 0;\nvar verbrauchDC = context.get(\"verbrauchDC\") || 0;\n\n// Wenn Wert C negativ ist, addiere A und B, sonst gebe nur B aus\nif (verbrauchDC < 0) {\n    msg.payload = netz + verbrauchAC; // A + B wird ausgegeben\n} else {\n    msg.payload = netz; // Nur B wird ausgegeben\n}\n\nmsg.topic = \"NETZberechnung\";\nreturn msg;",
                        "outputs": 1,
                        "timeout": 0,
                        "noerr": 0,
                        "initialize": "",
                        "finalize": "",
                        "libs": [],
                        "x": 710,
                        "y": 260,
                        "wires": [
                            []
                        ]
                    },
                    {
                        "id": "5a65949a3ab516bd",
                        "type": "victron-input-system",
                        "z": "42d8e26124256b59",
                        "service": "com.victronenergy.system/0",
                        "path": "/Dc/Vebus/Power",
                        "serviceObj": {
                            "service": "com.victronenergy.system/0",
                            "name": "Venus system"
                        },
                        "pathObj": {
                            "path": "/Dc/Vebus/Power",
                            "type": "float",
                            "name": "VE.Bus charge power (W)"
                        },
                        "name": "",
                        "onlyChanges": false,
                        "x": 240,
                        "y": 400,
                        "wires": [
                            [
                                "8f78648a1939bd66"
                            ]
                        ]
                    },
                    {
                        "id": "baede69d4c21ead9",
                        "type": "mqtt-broker",
                        "name": "",
                        "broker": "192.168.123.14",
                        "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": ""
                    }
                ]
                
                mickymM Offline
                mickymM Offline
                mickym
                Most Active
                schrieb am zuletzt editiert von
                #7

                @i0br0ker Ja ich habe weder ein Victron system noch habe ich Deine mqtt topics - also kann ich mit Dir nur zusammen die Logik entwickeln.

                Ich hab einen Einspeisewert der schwankt angenommen ständig

                wenn der länger als Zeit X kleiner -300 ist soll true resultieren .. wenn er jedoch länger als Zeit X größer -50 ist soll ein false resultieren. Das ganze müsste gegenseitig verriegelt sein , sodass halt das false nur kommt wenn das true aktiv ist und umgekehrt.

                In diesem Fall würde ich nicht mit einer delay Node sondern einer trigger Node arbeiten. Ich werde also mal einen Flow entwerfen, in dem ich mit Inject Nodes den Wert -350, -200 und -30 in einen Flow injiziere.

                Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                I 1 Antwort Letzte Antwort
                0
                • mickymM mickym

                  @i0br0ker Ja ich habe weder ein Victron system noch habe ich Deine mqtt topics - also kann ich mit Dir nur zusammen die Logik entwickeln.

                  Ich hab einen Einspeisewert der schwankt angenommen ständig

                  wenn der länger als Zeit X kleiner -300 ist soll true resultieren .. wenn er jedoch länger als Zeit X größer -50 ist soll ein false resultieren. Das ganze müsste gegenseitig verriegelt sein , sodass halt das false nur kommt wenn das true aktiv ist und umgekehrt.

                  In diesem Fall würde ich nicht mit einer delay Node sondern einer trigger Node arbeiten. Ich werde also mal einen Flow entwerfen, in dem ich mit Inject Nodes den Wert -350, -200 und -30 in einen Flow injiziere.

                  I Offline
                  I Offline
                  I0Br0ker
                  schrieb am zuletzt editiert von
                  #8

                  @mickym
                  44f61d5b-aae6-441d-aeb2-d45a738111b3-image.png

                  hab sowas gerade mal gemacht
                  die Verzögerung müsste genau umgekehrt sein ... das heisst der wert müsst für zeit x ständig getriggert werden damit er auslöst

                  mickymM 2 Antworten Letzte Antwort
                  0
                  • I I0Br0ker

                    @mickym
                    44f61d5b-aae6-441d-aeb2-d45a738111b3-image.png

                    hab sowas gerade mal gemacht
                    die Verzögerung müsste genau umgekehrt sein ... das heisst der wert müsst für zeit x ständig getriggert werden damit er auslöst

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

                    @i0br0ker Ja deswegen ist das mit der delay Node falsch - ich entwerfe Dir einen komplett anderen Flow.

                    Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                    1 Antwort Letzte Antwort
                    0
                    • I I0Br0ker

                      @mickym
                      44f61d5b-aae6-441d-aeb2-d45a738111b3-image.png

                      hab sowas gerade mal gemacht
                      die Verzögerung müsste genau umgekehrt sein ... das heisst der wert müsst für zeit x ständig getriggert werden damit er auslöst

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

                      @i0br0ker Ich gehe mal davon aus, dass wenn zwischen -50 und -300 kommt, dann soll der timer immer zurückgesetzt werden.

                      Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                      I 1 Antwort Letzte Antwort
                      0
                      • mickymM mickym

                        @i0br0ker Ich gehe mal davon aus, dass wenn zwischen -50 und -300 kommt, dann soll der timer immer zurückgesetzt werden.

                        I Offline
                        I Offline
                        I0Br0ker
                        schrieb am zuletzt editiert von
                        #11

                        @mickym hmm .. ja genau sollte so sein ... heisst wenn die einspeisung länger weg fällt ( zeit X) also der wert angenommen 0 ist muss er false schalten und wenn er länger als zeit X einspeist also -400 muss true schalten - das ganze sollte die ganze zeit hin und her korrespondieren und nichts doppelt passieren.

                        mickymM 2 Antworten Letzte Antwort
                        0
                        • I I0Br0ker

                          @mickym hmm .. ja genau sollte so sein ... heisst wenn die einspeisung länger weg fällt ( zeit X) also der wert angenommen 0 ist muss er false schalten und wenn er länger als zeit X einspeist also -400 muss true schalten - das ganze sollte die ganze zeit hin und her korrespondieren und nichts doppelt passieren.

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

                          @i0br0ker sagte in Einfache Funktion - Wertüberwachung mit 2 Verzögerungszeiten:

                          @mickym hmm .. ja genau sollte so sein ... heisst wenn die einspeisung länger weg fällt ( zeit X) also der wert angenommen 0 ist muss er false schalten und wenn er länger als zeit X einspeist also -400 muss true schalten - das ganze sollte die ganze zeit hin und her korrespondieren und nichts doppelt passieren.

                          Du kannst es gleich probieren - einen kleinen Moment noch.

                          Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                          1 Antwort Letzte Antwort
                          0
                          • I I0Br0ker

                            @mickym hmm .. ja genau sollte so sein ... heisst wenn die einspeisung länger weg fällt ( zeit X) also der wert angenommen 0 ist muss er false schalten und wenn er länger als zeit X einspeist also -400 muss true schalten - das ganze sollte die ganze zeit hin und her korrespondieren und nichts doppelt passieren.

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

                            @i0br0ker So dann schau mal, ob das so tut wie Du willst. Mit den Inject Nodes simulierst Du den Eingang.

                            a4f75b06-0471-4aa5-9602-ca39403df482-image.png

                            Am Anfang den delay setzen mit der Inject Node. Später kannst Du den Flow kontext dann selbst modifizieren.

                            Hier der Import:

                            [
                               {
                                   "id": "8972f29413316dc1",
                                   "type": "inject",
                                   "z": "7e6af0015415146d",
                                   "name": "",
                                   "props": [
                                       {
                                           "p": "payload"
                                       }
                                   ],
                                   "repeat": "",
                                   "crontab": "",
                                   "once": false,
                                   "onceDelay": 0.1,
                                   "topic": "",
                                   "payload": "-30",
                                   "payloadType": "num",
                                   "x": 450,
                                   "y": 5860,
                                   "wires": [
                                       [
                                           "9b209f29c21641c6"
                                       ]
                                   ]
                               },
                               {
                                   "id": "e50652f7162ed6da",
                                   "type": "inject",
                                   "z": "7e6af0015415146d",
                                   "name": "",
                                   "props": [
                                       {
                                           "p": "payload"
                                       }
                                   ],
                                   "repeat": "",
                                   "crontab": "",
                                   "once": false,
                                   "onceDelay": 0.1,
                                   "topic": "",
                                   "payload": "-350",
                                   "payloadType": "num",
                                   "x": 450,
                                   "y": 5940,
                                   "wires": [
                                       [
                                           "9b209f29c21641c6"
                                       ]
                                   ]
                               },
                               {
                                   "id": "77c6c23ac0772aa9",
                                   "type": "inject",
                                   "z": "7e6af0015415146d",
                                   "name": "",
                                   "props": [
                                       {
                                           "p": "payload"
                                       }
                                   ],
                                   "repeat": "",
                                   "crontab": "",
                                   "once": false,
                                   "onceDelay": 0.1,
                                   "topic": "",
                                   "payload": "-200",
                                   "payloadType": "num",
                                   "x": 450,
                                   "y": 5900,
                                   "wires": [
                                       [
                                           "9b209f29c21641c6"
                                       ]
                                   ]
                               },
                               {
                                   "id": "0402aac07958ca2c",
                                   "type": "switch",
                                   "z": "7e6af0015415146d",
                                   "name": "",
                                   "property": "payload",
                                   "propertyType": "msg",
                                   "rules": [
                                       {
                                           "t": "gt",
                                           "v": "-50",
                                           "vt": "num"
                                       },
                                       {
                                           "t": "btwn",
                                           "v": "-50",
                                           "vt": "num",
                                           "v2": "-300",
                                           "v2t": "num"
                                       },
                                       {
                                           "t": "lt",
                                           "v": "-300",
                                           "vt": "num"
                                       }
                                   ],
                                   "checkall": "true",
                                   "repair": false,
                                   "outputs": 3,
                                   "x": 870,
                                   "y": 5900,
                                   "wires": [
                                       [
                                           "7860f28bf6fe2804",
                                           "b7ecb11349870ed5"
                                       ],
                                       [
                                           "42c12c93c04b4f40"
                                       ],
                                       [
                                           "6d8bb6be3f2d5841",
                                           "d6138d31e266df4c"
                                       ]
                                   ]
                               },
                               {
                                   "id": "2d70ea83b0bd5f82",
                                   "type": "inject",
                                   "z": "7e6af0015415146d",
                                   "name": "setze delay",
                                   "props": [
                                       {
                                           "p": "payload"
                                       }
                                   ],
                                   "repeat": "",
                                   "crontab": "",
                                   "once": true,
                                   "onceDelay": 0.1,
                                   "topic": "",
                                   "payload": "60000",
                                   "payloadType": "num",
                                   "x": 450,
                                   "y": 5780,
                                   "wires": [
                                       [
                                           "56a671fce5d2c2c2"
                                       ]
                                   ]
                               },
                               {
                                   "id": "b7ecb11349870ed5",
                                   "type": "trigger",
                                   "z": "7e6af0015415146d",
                                   "name": "setze false",
                                   "op1": "",
                                   "op2": "false",
                                   "op1type": "nul",
                                   "op2type": "bool",
                                   "duration": "250",
                                   "extend": false,
                                   "overrideDelay": true,
                                   "units": "ms",
                                   "reset": "",
                                   "bytopic": "all",
                                   "topic": "topic",
                                   "outputs": 1,
                                   "x": 1310,
                                   "y": 5840,
                                   "wires": [
                                       [
                                           "29944a7145d256a8"
                                       ]
                                   ]
                               },
                               {
                                   "id": "56a671fce5d2c2c2",
                                   "type": "change",
                                   "z": "7e6af0015415146d",
                                   "name": "",
                                   "rules": [
                                       {
                                           "t": "set",
                                           "p": "delay",
                                           "pt": "flow",
                                           "to": "payload",
                                           "tot": "msg"
                                       }
                                   ],
                                   "action": "",
                                   "property": "",
                                   "from": "",
                                   "to": "",
                                   "reg": false,
                                   "x": 640,
                                   "y": 5780,
                                   "wires": [
                                       []
                                   ]
                               },
                               {
                                   "id": "d6138d31e266df4c",
                                   "type": "trigger",
                                   "z": "7e6af0015415146d",
                                   "name": "setze true",
                                   "op1": "",
                                   "op2": "true",
                                   "op1type": "nul",
                                   "op2type": "bool",
                                   "duration": "250",
                                   "extend": false,
                                   "overrideDelay": true,
                                   "units": "ms",
                                   "reset": "",
                                   "bytopic": "all",
                                   "topic": "topic",
                                   "outputs": 1,
                                   "x": 1300,
                                   "y": 5960,
                                   "wires": [
                                       [
                                           "29944a7145d256a8"
                                       ]
                                   ]
                               },
                               {
                                   "id": "7860f28bf6fe2804",
                                   "type": "change",
                                   "z": "7e6af0015415146d",
                                   "name": "",
                                   "rules": [
                                       {
                                           "t": "set",
                                           "p": "reset",
                                           "pt": "msg",
                                           "to": "true",
                                           "tot": "bool"
                                       }
                                   ],
                                   "action": "",
                                   "property": "",
                                   "from": "",
                                   "to": "",
                                   "reg": false,
                                   "x": 1060,
                                   "y": 5820,
                                   "wires": [
                                       [
                                           "d6138d31e266df4c"
                                       ]
                                   ]
                               },
                               {
                                   "id": "42c12c93c04b4f40",
                                   "type": "change",
                                   "z": "7e6af0015415146d",
                                   "name": "",
                                   "rules": [
                                       {
                                           "t": "set",
                                           "p": "reset",
                                           "pt": "msg",
                                           "to": "true",
                                           "tot": "bool"
                                       }
                                   ],
                                   "action": "",
                                   "property": "",
                                   "from": "",
                                   "to": "",
                                   "reg": false,
                                   "x": 1060,
                                   "y": 5900,
                                   "wires": [
                                       [
                                           "b7ecb11349870ed5",
                                           "d6138d31e266df4c"
                                       ]
                                   ]
                               },
                               {
                                   "id": "6d8bb6be3f2d5841",
                                   "type": "change",
                                   "z": "7e6af0015415146d",
                                   "name": "",
                                   "rules": [
                                       {
                                           "t": "set",
                                           "p": "reset",
                                           "pt": "msg",
                                           "to": "true",
                                           "tot": "bool"
                                       }
                                   ],
                                   "action": "",
                                   "property": "",
                                   "from": "",
                                   "to": "",
                                   "reg": false,
                                   "x": 1060,
                                   "y": 5980,
                                   "wires": [
                                       [
                                           "b7ecb11349870ed5"
                                       ]
                                   ]
                               },
                               {
                                   "id": "29944a7145d256a8",
                                   "type": "rbe",
                                   "z": "7e6af0015415146d",
                                   "name": "",
                                   "func": "rbe",
                                   "gap": "",
                                   "start": "",
                                   "inout": "out",
                                   "septopics": false,
                                   "property": "payload",
                                   "topi": "topic",
                                   "x": 1510,
                                   "y": 5900,
                                   "wires": [
                                       [
                                           "51806c75fef81d44"
                                       ]
                                   ]
                               },
                               {
                                   "id": "51806c75fef81d44",
                                   "type": "debug",
                                   "z": "7e6af0015415146d",
                                   "name": "Ergebnis",
                                   "active": true,
                                   "tosidebar": true,
                                   "console": false,
                                   "tostatus": false,
                                   "complete": "payload",
                                   "targetType": "msg",
                                   "statusVal": "",
                                   "statusType": "auto",
                                   "x": 1680,
                                   "y": 5900,
                                   "wires": []
                               },
                               {
                                   "id": "b89e7ecfd4414cc6",
                                   "type": "change",
                                   "z": "7e6af0015415146d",
                                   "name": "",
                                   "rules": [
                                       {
                                           "t": "set",
                                           "p": "delay",
                                           "pt": "msg",
                                           "to": "delay",
                                           "tot": "flow"
                                       }
                                   ],
                                   "action": "",
                                   "property": "",
                                   "from": "",
                                   "to": "",
                                   "reg": false,
                                   "x": 680,
                                   "y": 5900,
                                   "wires": [
                                       [
                                           "0402aac07958ca2c"
                                       ]
                                   ]
                               },
                               {
                                   "id": "9b209f29c21641c6",
                                   "type": "junction",
                                   "z": "7e6af0015415146d",
                                   "x": 560,
                                   "y": 5900,
                                   "wires": [
                                       [
                                           "b89e7ecfd4414cc6"
                                       ]
                                   ]
                               }
                            ]
                            

                            Wie Du siehst ohne function Nodes und ohne eine Zeile Code zu schreiben. ;)

                            Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                            I 1 Antwort Letzte Antwort
                            0
                            • mickymM mickym

                              @i0br0ker So dann schau mal, ob das so tut wie Du willst. Mit den Inject Nodes simulierst Du den Eingang.

                              a4f75b06-0471-4aa5-9602-ca39403df482-image.png

                              Am Anfang den delay setzen mit der Inject Node. Später kannst Du den Flow kontext dann selbst modifizieren.

                              Hier der Import:

                              [
                                 {
                                     "id": "8972f29413316dc1",
                                     "type": "inject",
                                     "z": "7e6af0015415146d",
                                     "name": "",
                                     "props": [
                                         {
                                             "p": "payload"
                                         }
                                     ],
                                     "repeat": "",
                                     "crontab": "",
                                     "once": false,
                                     "onceDelay": 0.1,
                                     "topic": "",
                                     "payload": "-30",
                                     "payloadType": "num",
                                     "x": 450,
                                     "y": 5860,
                                     "wires": [
                                         [
                                             "9b209f29c21641c6"
                                         ]
                                     ]
                                 },
                                 {
                                     "id": "e50652f7162ed6da",
                                     "type": "inject",
                                     "z": "7e6af0015415146d",
                                     "name": "",
                                     "props": [
                                         {
                                             "p": "payload"
                                         }
                                     ],
                                     "repeat": "",
                                     "crontab": "",
                                     "once": false,
                                     "onceDelay": 0.1,
                                     "topic": "",
                                     "payload": "-350",
                                     "payloadType": "num",
                                     "x": 450,
                                     "y": 5940,
                                     "wires": [
                                         [
                                             "9b209f29c21641c6"
                                         ]
                                     ]
                                 },
                                 {
                                     "id": "77c6c23ac0772aa9",
                                     "type": "inject",
                                     "z": "7e6af0015415146d",
                                     "name": "",
                                     "props": [
                                         {
                                             "p": "payload"
                                         }
                                     ],
                                     "repeat": "",
                                     "crontab": "",
                                     "once": false,
                                     "onceDelay": 0.1,
                                     "topic": "",
                                     "payload": "-200",
                                     "payloadType": "num",
                                     "x": 450,
                                     "y": 5900,
                                     "wires": [
                                         [
                                             "9b209f29c21641c6"
                                         ]
                                     ]
                                 },
                                 {
                                     "id": "0402aac07958ca2c",
                                     "type": "switch",
                                     "z": "7e6af0015415146d",
                                     "name": "",
                                     "property": "payload",
                                     "propertyType": "msg",
                                     "rules": [
                                         {
                                             "t": "gt",
                                             "v": "-50",
                                             "vt": "num"
                                         },
                                         {
                                             "t": "btwn",
                                             "v": "-50",
                                             "vt": "num",
                                             "v2": "-300",
                                             "v2t": "num"
                                         },
                                         {
                                             "t": "lt",
                                             "v": "-300",
                                             "vt": "num"
                                         }
                                     ],
                                     "checkall": "true",
                                     "repair": false,
                                     "outputs": 3,
                                     "x": 870,
                                     "y": 5900,
                                     "wires": [
                                         [
                                             "7860f28bf6fe2804",
                                             "b7ecb11349870ed5"
                                         ],
                                         [
                                             "42c12c93c04b4f40"
                                         ],
                                         [
                                             "6d8bb6be3f2d5841",
                                             "d6138d31e266df4c"
                                         ]
                                     ]
                                 },
                                 {
                                     "id": "2d70ea83b0bd5f82",
                                     "type": "inject",
                                     "z": "7e6af0015415146d",
                                     "name": "setze delay",
                                     "props": [
                                         {
                                             "p": "payload"
                                         }
                                     ],
                                     "repeat": "",
                                     "crontab": "",
                                     "once": true,
                                     "onceDelay": 0.1,
                                     "topic": "",
                                     "payload": "60000",
                                     "payloadType": "num",
                                     "x": 450,
                                     "y": 5780,
                                     "wires": [
                                         [
                                             "56a671fce5d2c2c2"
                                         ]
                                     ]
                                 },
                                 {
                                     "id": "b7ecb11349870ed5",
                                     "type": "trigger",
                                     "z": "7e6af0015415146d",
                                     "name": "setze false",
                                     "op1": "",
                                     "op2": "false",
                                     "op1type": "nul",
                                     "op2type": "bool",
                                     "duration": "250",
                                     "extend": false,
                                     "overrideDelay": true,
                                     "units": "ms",
                                     "reset": "",
                                     "bytopic": "all",
                                     "topic": "topic",
                                     "outputs": 1,
                                     "x": 1310,
                                     "y": 5840,
                                     "wires": [
                                         [
                                             "29944a7145d256a8"
                                         ]
                                     ]
                                 },
                                 {
                                     "id": "56a671fce5d2c2c2",
                                     "type": "change",
                                     "z": "7e6af0015415146d",
                                     "name": "",
                                     "rules": [
                                         {
                                             "t": "set",
                                             "p": "delay",
                                             "pt": "flow",
                                             "to": "payload",
                                             "tot": "msg"
                                         }
                                     ],
                                     "action": "",
                                     "property": "",
                                     "from": "",
                                     "to": "",
                                     "reg": false,
                                     "x": 640,
                                     "y": 5780,
                                     "wires": [
                                         []
                                     ]
                                 },
                                 {
                                     "id": "d6138d31e266df4c",
                                     "type": "trigger",
                                     "z": "7e6af0015415146d",
                                     "name": "setze true",
                                     "op1": "",
                                     "op2": "true",
                                     "op1type": "nul",
                                     "op2type": "bool",
                                     "duration": "250",
                                     "extend": false,
                                     "overrideDelay": true,
                                     "units": "ms",
                                     "reset": "",
                                     "bytopic": "all",
                                     "topic": "topic",
                                     "outputs": 1,
                                     "x": 1300,
                                     "y": 5960,
                                     "wires": [
                                         [
                                             "29944a7145d256a8"
                                         ]
                                     ]
                                 },
                                 {
                                     "id": "7860f28bf6fe2804",
                                     "type": "change",
                                     "z": "7e6af0015415146d",
                                     "name": "",
                                     "rules": [
                                         {
                                             "t": "set",
                                             "p": "reset",
                                             "pt": "msg",
                                             "to": "true",
                                             "tot": "bool"
                                         }
                                     ],
                                     "action": "",
                                     "property": "",
                                     "from": "",
                                     "to": "",
                                     "reg": false,
                                     "x": 1060,
                                     "y": 5820,
                                     "wires": [
                                         [
                                             "d6138d31e266df4c"
                                         ]
                                     ]
                                 },
                                 {
                                     "id": "42c12c93c04b4f40",
                                     "type": "change",
                                     "z": "7e6af0015415146d",
                                     "name": "",
                                     "rules": [
                                         {
                                             "t": "set",
                                             "p": "reset",
                                             "pt": "msg",
                                             "to": "true",
                                             "tot": "bool"
                                         }
                                     ],
                                     "action": "",
                                     "property": "",
                                     "from": "",
                                     "to": "",
                                     "reg": false,
                                     "x": 1060,
                                     "y": 5900,
                                     "wires": [
                                         [
                                             "b7ecb11349870ed5",
                                             "d6138d31e266df4c"
                                         ]
                                     ]
                                 },
                                 {
                                     "id": "6d8bb6be3f2d5841",
                                     "type": "change",
                                     "z": "7e6af0015415146d",
                                     "name": "",
                                     "rules": [
                                         {
                                             "t": "set",
                                             "p": "reset",
                                             "pt": "msg",
                                             "to": "true",
                                             "tot": "bool"
                                         }
                                     ],
                                     "action": "",
                                     "property": "",
                                     "from": "",
                                     "to": "",
                                     "reg": false,
                                     "x": 1060,
                                     "y": 5980,
                                     "wires": [
                                         [
                                             "b7ecb11349870ed5"
                                         ]
                                     ]
                                 },
                                 {
                                     "id": "29944a7145d256a8",
                                     "type": "rbe",
                                     "z": "7e6af0015415146d",
                                     "name": "",
                                     "func": "rbe",
                                     "gap": "",
                                     "start": "",
                                     "inout": "out",
                                     "septopics": false,
                                     "property": "payload",
                                     "topi": "topic",
                                     "x": 1510,
                                     "y": 5900,
                                     "wires": [
                                         [
                                             "51806c75fef81d44"
                                         ]
                                     ]
                                 },
                                 {
                                     "id": "51806c75fef81d44",
                                     "type": "debug",
                                     "z": "7e6af0015415146d",
                                     "name": "Ergebnis",
                                     "active": true,
                                     "tosidebar": true,
                                     "console": false,
                                     "tostatus": false,
                                     "complete": "payload",
                                     "targetType": "msg",
                                     "statusVal": "",
                                     "statusType": "auto",
                                     "x": 1680,
                                     "y": 5900,
                                     "wires": []
                                 },
                                 {
                                     "id": "b89e7ecfd4414cc6",
                                     "type": "change",
                                     "z": "7e6af0015415146d",
                                     "name": "",
                                     "rules": [
                                         {
                                             "t": "set",
                                             "p": "delay",
                                             "pt": "msg",
                                             "to": "delay",
                                             "tot": "flow"
                                         }
                                     ],
                                     "action": "",
                                     "property": "",
                                     "from": "",
                                     "to": "",
                                     "reg": false,
                                     "x": 680,
                                     "y": 5900,
                                     "wires": [
                                         [
                                             "0402aac07958ca2c"
                                         ]
                                     ]
                                 },
                                 {
                                     "id": "9b209f29c21641c6",
                                     "type": "junction",
                                     "z": "7e6af0015415146d",
                                     "x": 560,
                                     "y": 5900,
                                     "wires": [
                                         [
                                             "b89e7ecfd4414cc6"
                                         ]
                                     ]
                                 }
                              ]
                              

                              Wie Du siehst ohne function Nodes und ohne eine Zeile Code zu schreiben. ;)

                              I Offline
                              I Offline
                              I0Br0ker
                              schrieb am zuletzt editiert von
                              #14

                              @mickym krasses Konstrukt ;-) aber es scheint zu passen .. gut ich brauch halt 2 versch. Verzögerungen aber die kann ich ja hard rein coden in den trigger ...
                              Ich werde es morgen live testen wenn die Sonne scheint ;-)

                              DANKE an der Stelle schonmal für die Hilfe und deine Zeit

                              mickymM 1 Antwort Letzte Antwort
                              0
                              • I I0Br0ker

                                @mickym krasses Konstrukt ;-) aber es scheint zu passen .. gut ich brauch halt 2 versch. Verzögerungen aber die kann ich ja hard rein coden in den trigger ...
                                Ich werde es morgen live testen wenn die Sonne scheint ;-)

                                DANKE an der Stelle schonmal für die Hilfe und deine Zeit

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

                                @i0br0ker Du kannst den msg.delay auch an die unterschiedlichen Ausgänge setzen - dann brauchst die flow Variable nicht. Kommt halt darauf an, wie Du es modifizieren willst. Aber wie Du siehst ist es sehr transparent und man kann an jeder Node prüfen, ob die Logik funktioniert und muss sich nicht durch Code quälen.

                                Ja oder einfach in die trigger Nodes eintragen - das ist am einfachsten und dann kannst Dir den flow Kontext sparen. Wenn Du die Verzögerung direkt in die trigger Node einträgst, dann kannst Du diese Nodes wegschmeißen

                                e8337bed-253b-4463-97bc-684defc5527d-image.png

                                Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                                1 Antwort Letzte Antwort
                                0
                                • I Offline
                                  I Offline
                                  I0Br0ker
                                  schrieb am zuletzt editiert von I0Br0ker
                                  #16

                                  Darf ich an dem Thema nochmal anknüpfen ;-)
                                  Ich bin gerade am testen und habe noch folgendes Problem.
                                  Ich bekomme von 3 quellen Werte mit unterschiedlichen datenraten.
                                  Ich würde diese 3 Quellen gerne zeitgleich in eine Funktion einspeisen, die eine Berechnung macht.
                                  Alles was ich bisher versucht habe funktioniert nicht wirklich ( Begrenzung der Nachrichten ) .. weil dann zufällig nur einzelne Quellen übertragen werden.

                                  Die Berechnung ist folgende:

                                  //if (msg.topic === "openWB/evu/W") context.set("netz",msg.payload);
                                  if (msg.topic === "Einspeisung") context.set("netz",msg.payload);
                                  if (msg.topic === "Venus system - Power on output of inverter/charger, L1 (W)") context.set("verbrauchAC",msg.payload);
                                  if (msg.topic === "Venus system - VE.Bus charge power (W)") context.set("verbrauchDC",msg.payload);
                                  
                                  
                                  var netz = context.get("netz") || 0;
                                  var verbrauchAC = context.get("verbrauchAC") || 0;
                                  var verbrauchDC = context.get("verbrauchDC") || 0;
                                  
                                  // Wenn Wert C negativ ist, addiere A und B, sonst gebe nur B aus
                                  if (verbrauchDC < 0) {
                                      msg.payload = netz + verbrauchAC; // A + B wird ausgegeben
                                  } else {
                                      msg.payload = netz; // Nur B wird ausgegeben
                                  }
                                  
                                  msg.topic = "NETZberechnung";
                                  return msg;
                                  

                                  Also ich würde gerne alle 3 Werte vorhalten und dann zeitgleich berechnen und ausgeben in einem 5 Sekunden Intervall zum Beispiel ...

                                  mickymM 1 Antwort Letzte Antwort
                                  0
                                  • I I0Br0ker

                                    Darf ich an dem Thema nochmal anknüpfen ;-)
                                    Ich bin gerade am testen und habe noch folgendes Problem.
                                    Ich bekomme von 3 quellen Werte mit unterschiedlichen datenraten.
                                    Ich würde diese 3 Quellen gerne zeitgleich in eine Funktion einspeisen, die eine Berechnung macht.
                                    Alles was ich bisher versucht habe funktioniert nicht wirklich ( Begrenzung der Nachrichten ) .. weil dann zufällig nur einzelne Quellen übertragen werden.

                                    Die Berechnung ist folgende:

                                    //if (msg.topic === "openWB/evu/W") context.set("netz",msg.payload);
                                    if (msg.topic === "Einspeisung") context.set("netz",msg.payload);
                                    if (msg.topic === "Venus system - Power on output of inverter/charger, L1 (W)") context.set("verbrauchAC",msg.payload);
                                    if (msg.topic === "Venus system - VE.Bus charge power (W)") context.set("verbrauchDC",msg.payload);
                                    
                                    
                                    var netz = context.get("netz") || 0;
                                    var verbrauchAC = context.get("verbrauchAC") || 0;
                                    var verbrauchDC = context.get("verbrauchDC") || 0;
                                    
                                    // Wenn Wert C negativ ist, addiere A und B, sonst gebe nur B aus
                                    if (verbrauchDC < 0) {
                                        msg.payload = netz + verbrauchAC; // A + B wird ausgegeben
                                    } else {
                                        msg.payload = netz; // Nur B wird ausgegeben
                                    }
                                    
                                    msg.topic = "NETZberechnung";
                                    return msg;
                                    

                                    Also ich würde gerne alle 3 Werte vorhalten und dann zeitgleich berechnen und ausgeben in einem 5 Sekunden Intervall zum Beispiel ...

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

                                    @i0br0ker Also ich kann an dem Code nichts falsches finden und verstehe das Problem nicht wirklich. Natürlich kann man das alles mit weniger Code machen. ;)

                                    Alles was ich bisher versucht habe funktioniert nicht wirklich ( Begrenzung der Nachrichten ) .. weil dann zufällig nur einzelne Quellen übertragen werden.

                                    Das ist doch richtig, weil nur dann was ausgegeben wird, wenn sich was geändert hat. Ansonsten musst Du sagen was Du willst:

                                    1. Du wartest bis alle 3 topics einen Wert geliefert haben?
                                    2. Du möchtest generell eine kontunierliche Ausgabe der letzten Berechnung (auch wenn sich nichts geändert hat.

                                    Zu Punkt 1 - würde ich das ganze dann nicht über den Kontext machen, sondern eine Nachricht mit allen Werten erzeugen, die Du dann von mir aus wieder mit Code für die Ausgabe behandeln kannst.
                                    Zu Punkt 2: Einfach eine Trigger Node die letzte Nachricht im 5s Intervall ausgeben lassen.

                                    Zeitgleich passiert nur etwas in dem Du es sammelst - wie gesagt wenn Du warten willst, dass alle 3 topics geliefert haben müssen, um eine saubere Berechnung zu ermöglichen oder nicht? Es wird immer ms zeitliche Unterschiede geben, wenn die Dinge in das System kommen, da generell NodeRed oder auch andere Systeme alle Inputs nur sequentiell verarbeiten, wenn auch im ms Bereich.

                                    Ich werde Dir wieder mal einen Flow mit den 3 Messgrößen mit Inject Nodes zur Simulation bereitstellen und Deinen Code zur Berechnung benutzen.

                                    Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                                    I 1 Antwort Letzte Antwort
                                    0
                                    • mickymM mickym

                                      @i0br0ker Also ich kann an dem Code nichts falsches finden und verstehe das Problem nicht wirklich. Natürlich kann man das alles mit weniger Code machen. ;)

                                      Alles was ich bisher versucht habe funktioniert nicht wirklich ( Begrenzung der Nachrichten ) .. weil dann zufällig nur einzelne Quellen übertragen werden.

                                      Das ist doch richtig, weil nur dann was ausgegeben wird, wenn sich was geändert hat. Ansonsten musst Du sagen was Du willst:

                                      1. Du wartest bis alle 3 topics einen Wert geliefert haben?
                                      2. Du möchtest generell eine kontunierliche Ausgabe der letzten Berechnung (auch wenn sich nichts geändert hat.

                                      Zu Punkt 1 - würde ich das ganze dann nicht über den Kontext machen, sondern eine Nachricht mit allen Werten erzeugen, die Du dann von mir aus wieder mit Code für die Ausgabe behandeln kannst.
                                      Zu Punkt 2: Einfach eine Trigger Node die letzte Nachricht im 5s Intervall ausgeben lassen.

                                      Zeitgleich passiert nur etwas in dem Du es sammelst - wie gesagt wenn Du warten willst, dass alle 3 topics geliefert haben müssen, um eine saubere Berechnung zu ermöglichen oder nicht? Es wird immer ms zeitliche Unterschiede geben, wenn die Dinge in das System kommen, da generell NodeRed oder auch andere Systeme alle Inputs nur sequentiell verarbeiten, wenn auch im ms Bereich.

                                      Ich werde Dir wieder mal einen Flow mit den 3 Messgrößen mit Inject Nodes zur Simulation bereitstellen und Deinen Code zur Berechnung benutzen.

                                      I Offline
                                      I Offline
                                      I0Br0ker
                                      schrieb am zuletzt editiert von I0Br0ker
                                      #18

                                      @mickym ich hab es nun mal so gemacht


                                      0f38fad1-1b49-4c12-87d1-b190774a29ab-image.png

                                      Ich speichere die 3 Werte in jeweils in einer Flow variable und triggere die Berechnung dann
                                      alle Sekunde mit dem Inject.
                                      So hab ich immer den zuletzt gemessenen Wert der 3 Datenquellen zur sekündlichen Berechnung

                                      mickymM 2 Antworten Letzte Antwort
                                      0
                                      • I I0Br0ker

                                        @mickym ich hab es nun mal so gemacht


                                        0f38fad1-1b49-4c12-87d1-b190774a29ab-image.png

                                        Ich speichere die 3 Werte in jeweils in einer Flow variable und triggere die Berechnung dann
                                        alle Sekunde mit dem Inject.
                                        So hab ich immer den zuletzt gemessenen Wert der 3 Datenquellen zur sekündlichen Berechnung

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

                                        @i0br0ker Ja und das ist halt Käse, weil Du nicht davon ausgehen kannst, dass sich alle Sekunden, welche Werte geändert haben und Du somit nur ein zufälligest Zustandsbild bekommst. Ausserdem belasstest Du das System nur unnötig mit dieser Inject Node und dem sekündlichen Trigger. Sinnvoller ist es die 3 Teile Einspeisung, AC und DC triggern zu lassen. Ich mach Dir mal einen Vorschlag in dem ich die 3 Nodes Einspeisung, AC und DC mit Inject Nodes simuliere - und du quasi den Rest des Flows mal hinter Deine Nodes machst.

                                        Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                                        1 Antwort Letzte Antwort
                                        0
                                        • I I0Br0ker

                                          @mickym ich hab es nun mal so gemacht


                                          0f38fad1-1b49-4c12-87d1-b190774a29ab-image.png

                                          Ich speichere die 3 Werte in jeweils in einer Flow variable und triggere die Berechnung dann
                                          alle Sekunde mit dem Inject.
                                          So hab ich immer den zuletzt gemessenen Wert der 3 Datenquellen zur sekündlichen Berechnung

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

                                          @i0br0ker So hier mein Vorschlag:

                                          91338c6a-ff70-46b3-9849-01e163b2afdb-image.png

                                          Statt der Inject Nodes klemmst Du die Change Nodes zum Vereinfachen der topics hinter Deine function Nodes.

                                          Die beiden Varianten unterscheiden sich wie folgt. Oben müssen alle 3 Werte aktualisiert werden, bevor eine erneute Berechnung stattfindet. Unten wird nachdem alle 3 Werte geliefert wurden, nach jeder Änderung eine Berechnung durchgeführt.

                                          Unten ist einfach die blau markierte Option angehakt.

                                          3053a633-8af3-444d-b2fd-098c2a9095c2-image.png

                                          Hier zum Import:

                                          [
                                             {
                                                 "id": "6242e9a2f819fd6d",
                                                 "type": "comment",
                                                 "z": "7e6af0015415146d",
                                                 "name": "Alle 3 topics müssen immer triggern bevor Berechnung stattfindet",
                                                 "info": "",
                                                 "x": 310,
                                                 "y": 5780,
                                                 "wires": []
                                             },
                                             {
                                                 "id": "9ad33fc7f452c8d5",
                                                 "type": "inject",
                                                 "z": "7e6af0015415146d",
                                                 "name": "",
                                                 "props": [
                                                     {
                                                         "p": "payload"
                                                     },
                                                     {
                                                         "p": "topic",
                                                         "vt": "str"
                                                     }
                                                 ],
                                                 "repeat": "",
                                                 "crontab": "",
                                                 "once": false,
                                                 "onceDelay": 0.1,
                                                 "topic": "Einspeisung",
                                                 "payload": "-50",
                                                 "payloadType": "num",
                                                 "x": 160,
                                                 "y": 5840,
                                                 "wires": [
                                                     [
                                                         "322428f9a6f303fd"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "5f5b5e7ba87bef7d",
                                                 "type": "inject",
                                                 "z": "7e6af0015415146d",
                                                 "name": "AC",
                                                 "props": [
                                                     {
                                                         "p": "payload"
                                                     },
                                                     {
                                                         "p": "topic",
                                                         "vt": "str"
                                                     }
                                                 ],
                                                 "repeat": "",
                                                 "crontab": "",
                                                 "once": false,
                                                 "onceDelay": 0.1,
                                                 "topic": "Venus system - Power on output of inverter/charger, L1 (W)",
                                                 "payload": "100",
                                                 "payloadType": "num",
                                                 "x": 190,
                                                 "y": 5900,
                                                 "wires": [
                                                     [
                                                         "4356754c809d6094"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "473cfab7f45ddda2",
                                                 "type": "inject",
                                                 "z": "7e6af0015415146d",
                                                 "name": "DC",
                                                 "props": [
                                                     {
                                                         "p": "payload"
                                                     },
                                                     {
                                                         "p": "topic",
                                                         "vt": "str"
                                                     }
                                                 ],
                                                 "repeat": "",
                                                 "crontab": "",
                                                 "once": false,
                                                 "onceDelay": 0.1,
                                                 "topic": "Venus system - VE.Bus charge power (W)",
                                                 "payload": "100",
                                                 "payloadType": "num",
                                                 "x": 190,
                                                 "y": 5960,
                                                 "wires": [
                                                     [
                                                         "2dcb913c17c8f93f"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "2dcb913c17c8f93f",
                                                 "type": "change",
                                                 "z": "7e6af0015415146d",
                                                 "name": "topic = verbrauchDC",
                                                 "rules": [
                                                     {
                                                         "t": "set",
                                                         "p": "topic",
                                                         "pt": "msg",
                                                         "to": "verbrauchDC",
                                                         "tot": "str"
                                                     }
                                                 ],
                                                 "action": "",
                                                 "property": "",
                                                 "from": "",
                                                 "to": "",
                                                 "reg": false,
                                                 "x": 400,
                                                 "y": 5960,
                                                 "wires": [
                                                     [
                                                         "b28d24fcb71d82ee"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "4356754c809d6094",
                                                 "type": "change",
                                                 "z": "7e6af0015415146d",
                                                 "name": "topic = verbrauchAC",
                                                 "rules": [
                                                     {
                                                         "t": "set",
                                                         "p": "topic",
                                                         "pt": "msg",
                                                         "to": "verbrauchAC",
                                                         "tot": "str"
                                                     }
                                                 ],
                                                 "action": "",
                                                 "property": "",
                                                 "from": "",
                                                 "to": "",
                                                 "reg": false,
                                                 "x": 400,
                                                 "y": 5900,
                                                 "wires": [
                                                     [
                                                         "b28d24fcb71d82ee"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "322428f9a6f303fd",
                                                 "type": "change",
                                                 "z": "7e6af0015415146d",
                                                 "name": "topic = netz",
                                                 "rules": [
                                                     {
                                                         "t": "set",
                                                         "p": "topic",
                                                         "pt": "msg",
                                                         "to": "netz",
                                                         "tot": "str"
                                                     }
                                                 ],
                                                 "action": "",
                                                 "property": "",
                                                 "from": "",
                                                 "to": "",
                                                 "reg": false,
                                                 "x": 430,
                                                 "y": 5840,
                                                 "wires": [
                                                     [
                                                         "b28d24fcb71d82ee"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "b28d24fcb71d82ee",
                                                 "type": "join",
                                                 "z": "7e6af0015415146d",
                                                 "name": "",
                                                 "mode": "custom",
                                                 "build": "object",
                                                 "property": "payload",
                                                 "propertyType": "msg",
                                                 "key": "topic",
                                                 "joiner": "\\n",
                                                 "joinerType": "str",
                                                 "accumulate": false,
                                                 "timeout": "",
                                                 "count": "3",
                                                 "reduceRight": false,
                                                 "reduceExp": "",
                                                 "reduceInit": "",
                                                 "reduceInitType": "",
                                                 "reduceFixup": "",
                                                 "x": 610,
                                                 "y": 5900,
                                                 "wires": [
                                                     [
                                                         "85e346c30c478cb5"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "85e346c30c478cb5",
                                                 "type": "switch",
                                                 "z": "7e6af0015415146d",
                                                 "name": "verbrauchDC < 0 ?",
                                                 "property": "payload.verbrauchDC",
                                                 "propertyType": "msg",
                                                 "rules": [
                                                     {
                                                         "t": "lt",
                                                         "v": "0",
                                                         "vt": "str"
                                                     },
                                                     {
                                                         "t": "else"
                                                     }
                                                 ],
                                                 "checkall": "true",
                                                 "repair": false,
                                                 "outputs": 2,
                                                 "x": 790,
                                                 "y": 5900,
                                                 "wires": [
                                                     [
                                                         "6ac4a825336230b9"
                                                     ],
                                                     [
                                                         "b5f50b3d7ce5b577"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "6ac4a825336230b9",
                                                 "type": "change",
                                                 "z": "7e6af0015415146d",
                                                 "name": "netz + verbrauchAC",
                                                 "rules": [
                                                     {
                                                         "t": "set",
                                                         "p": "payload",
                                                         "pt": "msg",
                                                         "to": "payload.netz + payload.verbrauchAC",
                                                         "tot": "jsonata"
                                                     }
                                                 ],
                                                 "action": "",
                                                 "property": "",
                                                 "from": "",
                                                 "to": "",
                                                 "reg": false,
                                                 "x": 1020,
                                                 "y": 5880,
                                                 "wires": [
                                                     [
                                                         "0d63ae49afe306a1"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "b5f50b3d7ce5b577",
                                                 "type": "change",
                                                 "z": "7e6af0015415146d",
                                                 "name": "netz",
                                                 "rules": [
                                                     {
                                                         "t": "set",
                                                         "p": "payload",
                                                         "pt": "msg",
                                                         "to": "payload.netz",
                                                         "tot": "jsonata"
                                                     }
                                                 ],
                                                 "action": "",
                                                 "property": "",
                                                 "from": "",
                                                 "to": "",
                                                 "reg": false,
                                                 "x": 1010,
                                                 "y": 5920,
                                                 "wires": [
                                                     [
                                                         "0d63ae49afe306a1"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "0d63ae49afe306a1",
                                                 "type": "delay",
                                                 "z": "7e6af0015415146d",
                                                 "name": "",
                                                 "pauseType": "rate",
                                                 "timeout": "5",
                                                 "timeoutUnits": "seconds",
                                                 "rate": "1",
                                                 "nbRateUnits": "5",
                                                 "rateUnits": "second",
                                                 "randomFirst": "1",
                                                 "randomLast": "5",
                                                 "randomUnits": "seconds",
                                                 "drop": false,
                                                 "allowrate": false,
                                                 "outputs": 1,
                                                 "x": 1280,
                                                 "y": 5900,
                                                 "wires": [
                                                     [
                                                         "3f3b72c9e9caa544"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "3f3b72c9e9caa544",
                                                 "type": "debug",
                                                 "z": "7e6af0015415146d",
                                                 "name": "NETZberechnung",
                                                 "active": true,
                                                 "tosidebar": true,
                                                 "console": false,
                                                 "tostatus": false,
                                                 "complete": "payload",
                                                 "targetType": "msg",
                                                 "statusVal": "",
                                                 "statusType": "auto",
                                                 "x": 1510,
                                                 "y": 5900,
                                                 "wires": []
                                             },
                                             {
                                                 "id": "8242208cb47150aa",
                                                 "type": "comment",
                                                 "z": "7e6af0015415146d",
                                                 "name": "3 topics müssen anfangs triggern, dann Berechnung sobald sich ein Wert ändert",
                                                 "info": "",
                                                 "x": 360,
                                                 "y": 6060,
                                                 "wires": []
                                             },
                                             {
                                                 "id": "0afde9516c8e49de",
                                                 "type": "inject",
                                                 "z": "7e6af0015415146d",
                                                 "name": "",
                                                 "props": [
                                                     {
                                                         "p": "payload"
                                                     },
                                                     {
                                                         "p": "topic",
                                                         "vt": "str"
                                                     }
                                                 ],
                                                 "repeat": "",
                                                 "crontab": "",
                                                 "once": false,
                                                 "onceDelay": 0.1,
                                                 "topic": "Einspeisung",
                                                 "payload": "-50",
                                                 "payloadType": "num",
                                                 "x": 160,
                                                 "y": 6120,
                                                 "wires": [
                                                     [
                                                         "c847c5e443282ab9"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "a48c393e89e84ed1",
                                                 "type": "inject",
                                                 "z": "7e6af0015415146d",
                                                 "name": "AC",
                                                 "props": [
                                                     {
                                                         "p": "payload"
                                                     },
                                                     {
                                                         "p": "topic",
                                                         "vt": "str"
                                                     }
                                                 ],
                                                 "repeat": "",
                                                 "crontab": "",
                                                 "once": false,
                                                 "onceDelay": 0.1,
                                                 "topic": "Venus system - Power on output of inverter/charger, L1 (W)",
                                                 "payload": "100",
                                                 "payloadType": "num",
                                                 "x": 190,
                                                 "y": 6180,
                                                 "wires": [
                                                     [
                                                         "6b61a9dd9f65e929"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "60adaf77b0272866",
                                                 "type": "inject",
                                                 "z": "7e6af0015415146d",
                                                 "name": "DC",
                                                 "props": [
                                                     {
                                                         "p": "payload"
                                                     },
                                                     {
                                                         "p": "topic",
                                                         "vt": "str"
                                                     }
                                                 ],
                                                 "repeat": "",
                                                 "crontab": "",
                                                 "once": false,
                                                 "onceDelay": 0.1,
                                                 "topic": "Venus system - VE.Bus charge power (W)",
                                                 "payload": "100",
                                                 "payloadType": "num",
                                                 "x": 190,
                                                 "y": 6240,
                                                 "wires": [
                                                     [
                                                         "250a07fa52d546df"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "250a07fa52d546df",
                                                 "type": "change",
                                                 "z": "7e6af0015415146d",
                                                 "name": "topic = verbrauchDC",
                                                 "rules": [
                                                     {
                                                         "t": "set",
                                                         "p": "topic",
                                                         "pt": "msg",
                                                         "to": "verbrauchDC",
                                                         "tot": "str"
                                                     }
                                                 ],
                                                 "action": "",
                                                 "property": "",
                                                 "from": "",
                                                 "to": "",
                                                 "reg": false,
                                                 "x": 400,
                                                 "y": 6240,
                                                 "wires": [
                                                     [
                                                         "f41ea55f35ea32ec"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "6b61a9dd9f65e929",
                                                 "type": "change",
                                                 "z": "7e6af0015415146d",
                                                 "name": "topic = verbrauchAC",
                                                 "rules": [
                                                     {
                                                         "t": "set",
                                                         "p": "topic",
                                                         "pt": "msg",
                                                         "to": "verbrauchAC",
                                                         "tot": "str"
                                                     }
                                                 ],
                                                 "action": "",
                                                 "property": "",
                                                 "from": "",
                                                 "to": "",
                                                 "reg": false,
                                                 "x": 400,
                                                 "y": 6180,
                                                 "wires": [
                                                     [
                                                         "f41ea55f35ea32ec"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "c847c5e443282ab9",
                                                 "type": "change",
                                                 "z": "7e6af0015415146d",
                                                 "name": "topic = netz",
                                                 "rules": [
                                                     {
                                                         "t": "set",
                                                         "p": "topic",
                                                         "pt": "msg",
                                                         "to": "netz",
                                                         "tot": "str"
                                                     }
                                                 ],
                                                 "action": "",
                                                 "property": "",
                                                 "from": "",
                                                 "to": "",
                                                 "reg": false,
                                                 "x": 430,
                                                 "y": 6120,
                                                 "wires": [
                                                     [
                                                         "f41ea55f35ea32ec"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "f41ea55f35ea32ec",
                                                 "type": "join",
                                                 "z": "7e6af0015415146d",
                                                 "name": "",
                                                 "mode": "custom",
                                                 "build": "object",
                                                 "property": "payload",
                                                 "propertyType": "msg",
                                                 "key": "topic",
                                                 "joiner": "\\n",
                                                 "joinerType": "str",
                                                 "accumulate": true,
                                                 "timeout": "",
                                                 "count": "3",
                                                 "reduceRight": false,
                                                 "reduceExp": "",
                                                 "reduceInit": "",
                                                 "reduceInitType": "",
                                                 "reduceFixup": "",
                                                 "x": 610,
                                                 "y": 6180,
                                                 "wires": [
                                                     [
                                                         "4c80eba219778dc8"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "4c80eba219778dc8",
                                                 "type": "switch",
                                                 "z": "7e6af0015415146d",
                                                 "name": "verbrauchDC < 0 ?",
                                                 "property": "payload.verbrauchDC",
                                                 "propertyType": "msg",
                                                 "rules": [
                                                     {
                                                         "t": "lt",
                                                         "v": "0",
                                                         "vt": "str"
                                                     },
                                                     {
                                                         "t": "else"
                                                     }
                                                 ],
                                                 "checkall": "true",
                                                 "repair": false,
                                                 "outputs": 2,
                                                 "x": 790,
                                                 "y": 6180,
                                                 "wires": [
                                                     [
                                                         "ef9f7be0eccb3f08"
                                                     ],
                                                     [
                                                         "bec30fa4e90499c0"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "ef9f7be0eccb3f08",
                                                 "type": "change",
                                                 "z": "7e6af0015415146d",
                                                 "name": "netz + verbrauchAC",
                                                 "rules": [
                                                     {
                                                         "t": "set",
                                                         "p": "payload",
                                                         "pt": "msg",
                                                         "to": "payload.netz + payload.verbrauchAC",
                                                         "tot": "jsonata"
                                                     }
                                                 ],
                                                 "action": "",
                                                 "property": "",
                                                 "from": "",
                                                 "to": "",
                                                 "reg": false,
                                                 "x": 1020,
                                                 "y": 6160,
                                                 "wires": [
                                                     [
                                                         "4b8ce84d13c5a534"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "bec30fa4e90499c0",
                                                 "type": "change",
                                                 "z": "7e6af0015415146d",
                                                 "name": "netz",
                                                 "rules": [
                                                     {
                                                         "t": "set",
                                                         "p": "payload",
                                                         "pt": "msg",
                                                         "to": "payload.netz",
                                                         "tot": "jsonata"
                                                     }
                                                 ],
                                                 "action": "",
                                                 "property": "",
                                                 "from": "",
                                                 "to": "",
                                                 "reg": false,
                                                 "x": 1010,
                                                 "y": 6200,
                                                 "wires": [
                                                     [
                                                         "4b8ce84d13c5a534"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "4b8ce84d13c5a534",
                                                 "type": "delay",
                                                 "z": "7e6af0015415146d",
                                                 "name": "",
                                                 "pauseType": "rate",
                                                 "timeout": "5",
                                                 "timeoutUnits": "seconds",
                                                 "rate": "1",
                                                 "nbRateUnits": "5",
                                                 "rateUnits": "second",
                                                 "randomFirst": "1",
                                                 "randomLast": "5",
                                                 "randomUnits": "seconds",
                                                 "drop": false,
                                                 "allowrate": false,
                                                 "outputs": 1,
                                                 "x": 1280,
                                                 "y": 6180,
                                                 "wires": [
                                                     [
                                                         "4f6542a27992e53a"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "4f6542a27992e53a",
                                                 "type": "debug",
                                                 "z": "7e6af0015415146d",
                                                 "name": "NETZberechnung",
                                                 "active": true,
                                                 "tosidebar": true,
                                                 "console": false,
                                                 "tostatus": false,
                                                 "complete": "payload",
                                                 "targetType": "msg",
                                                 "statusVal": "",
                                                 "statusType": "auto",
                                                 "x": 1510,
                                                 "y": 6180,
                                                 "wires": []
                                             }
                                          ]
                                          

                                          Alle Sekunden zu triggern - ohne das eventuell eine Änderung stattgefunden hat, ist mE Unsinn. Wenn Du einen konstante Ausgabe willst, auch ohne das sich was geändert hat, kannst Du auch die letzte Berechnung dauernd mit einer Triggernode ausgeben. Keine Ahnung - vielleicht für einen Grafen.

                                          Eine Triggernode - kann die letzte Berechnung dann kontinuierlich senden, falls Du das wünschst.
                                          8b4086d4-c49c-4fe0-8207-aadd1196ae64-image.png

                                          [
                                             {
                                                 "id": "a8842b5079340b33",
                                                 "type": "trigger",
                                                 "z": "7e6af0015415146d",
                                                 "name": "",
                                                 "op1": "",
                                                 "op2": "0",
                                                 "op1type": "pay",
                                                 "op2type": "str",
                                                 "duration": "-5",
                                                 "extend": false,
                                                 "overrideDelay": false,
                                                 "units": "s",
                                                 "reset": "",
                                                 "bytopic": "all",
                                                 "topic": "topic",
                                                 "outputs": 1,
                                                 "x": 860,
                                                 "y": 5680,
                                                 "wires": [
                                                     [
                                                         "0e6acf0851308881"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "6fb21815b4c15278",
                                                 "type": "inject",
                                                 "z": "7e6af0015415146d",
                                                 "name": "",
                                                 "props": [
                                                     {
                                                         "p": "payload"
                                                     }
                                                 ],
                                                 "repeat": "",
                                                 "crontab": "",
                                                 "once": false,
                                                 "onceDelay": 0.1,
                                                 "topic": "",
                                                 "payload": "1",
                                                 "payloadType": "num",
                                                 "x": 630,
                                                 "y": 5680,
                                                 "wires": [
                                                     [
                                                         "a8842b5079340b33"
                                                     ]
                                                 ]
                                             },
                                             {
                                                 "id": "0e6acf0851308881",
                                                 "type": "debug",
                                                 "z": "7e6af0015415146d",
                                                 "name": "Sende letzte Nachricht alle 5s",
                                                 "active": true,
                                                 "tosidebar": true,
                                                 "console": false,
                                                 "tostatus": false,
                                                 "complete": "payload",
                                                 "targetType": "msg",
                                                 "statusVal": "",
                                                 "statusType": "auto",
                                                 "x": 1170,
                                                 "y": 5680,
                                                 "wires": []
                                             }
                                          ]
                                          

                                          Ist aber meines Erachtens auch nur unsinniger Overhead - da brauche ich dann auch keine Begrenzung.

                                          Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          369

                                          Online

                                          32.5k

                                          Benutzer

                                          81.8k

                                          Themen

                                          1.3m

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

                                          • Du hast noch kein Konto? Registrieren

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