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. Blockly
  5. Trigger: Wenn Wert länger gehalten wird

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.1k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.2k

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.6k

Trigger: Wenn Wert länger gehalten wird

Geplant Angeheftet Gesperrt Verschoben Blockly
6 Beiträge 3 Kommentatoren 1.1k 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.
  • D.VED Offline
    D.VED Offline
    D.VE
    schrieb am zuletzt editiert von D.VE
    #1

    Moin,
    ich baue mir gerade mehrere Scripte die diverse nicht-smarte Haushaltsgeräte anhand vom Energieverbraucht überwachen (Spül-/Waschmaschine fertig, Ofen vorgeheizt, TV auf Standby etc.).

    Problem ist, dass die Leistung logischerweise immer ziemlich hin-, und herspringt. Bei einigen Geräten ist das so kurz, dass ich das über "letzter Wert" abfangen konnte. Oft klappt das aber nicht. So ist z.B. die Spülmaschine fertig, wenn die Leistung für unter 5Watt sinkt. Zwischendurch springt sie aber auch für zwei bis drei Sekunden darunter, so dass ich einen Trigger brauche, der checkt, ob der Wert für ca 10s unter 5 Watt sinkt...

    Hat jemand da zufällig da eine schicke, generische Lösung? Vorzugsweise, ohne, dass ich noch für jedes Gerät irgendwo einen State im Objektbaum zwischenspeichern muss.

    Momentan schwebt mir da eine kleine, rekursive JS-Funktion vor, mache mir aber Sorgen um die Performance, da ich das häufiger brauche.

    Oder gibt es sowas schon ioB und ich habe es nur übersehen?
    Ist sowas angedacht, in das Scripting zu übernehmen?

    EDIT:
    Lösung gibt es hier:
    https://forum.iobroker.net/topic/37141/trigger-wenn-wert-länger-gehalten-wird/6

    Mein SmartHome-Podcast:
    http://www.scheiss-technik.com

    HomoranH paul53P 2 Antworten Letzte Antwort
    0
    • D.VED D.VE

      Moin,
      ich baue mir gerade mehrere Scripte die diverse nicht-smarte Haushaltsgeräte anhand vom Energieverbraucht überwachen (Spül-/Waschmaschine fertig, Ofen vorgeheizt, TV auf Standby etc.).

      Problem ist, dass die Leistung logischerweise immer ziemlich hin-, und herspringt. Bei einigen Geräten ist das so kurz, dass ich das über "letzter Wert" abfangen konnte. Oft klappt das aber nicht. So ist z.B. die Spülmaschine fertig, wenn die Leistung für unter 5Watt sinkt. Zwischendurch springt sie aber auch für zwei bis drei Sekunden darunter, so dass ich einen Trigger brauche, der checkt, ob der Wert für ca 10s unter 5 Watt sinkt...

      Hat jemand da zufällig da eine schicke, generische Lösung? Vorzugsweise, ohne, dass ich noch für jedes Gerät irgendwo einen State im Objektbaum zwischenspeichern muss.

      Momentan schwebt mir da eine kleine, rekursive JS-Funktion vor, mache mir aber Sorgen um die Performance, da ich das häufiger brauche.

      Oder gibt es sowas schon ioB und ich habe es nur übersehen?
      Ist sowas angedacht, in das Scripting zu übernehmen?

      EDIT:
      Lösung gibt es hier:
      https://forum.iobroker.net/topic/37141/trigger-wenn-wert-länger-gehalten-wird/6

      HomoranH Nicht stören
      HomoranH Nicht stören
      Homoran
      Global Moderator Administrators
      schrieb am zuletzt editiert von
      #2

      @D-VE es gibt zwei Möglichkeiten

      • nach ein paar Sekunden/Minuten noch mal den Wert überprüfen und erst dann Meldung geben wenn er immer noch unter der Schwelle ist
      • einen gleitenden Mittelwert über die letzten x Messungen berechnen und die Meldung erst dann ausgeben wenn dieser unter den Schwellwert fällt

      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

      D.VED 1 Antwort Letzte Antwort
      0
      • D.VED D.VE

        Moin,
        ich baue mir gerade mehrere Scripte die diverse nicht-smarte Haushaltsgeräte anhand vom Energieverbraucht überwachen (Spül-/Waschmaschine fertig, Ofen vorgeheizt, TV auf Standby etc.).

        Problem ist, dass die Leistung logischerweise immer ziemlich hin-, und herspringt. Bei einigen Geräten ist das so kurz, dass ich das über "letzter Wert" abfangen konnte. Oft klappt das aber nicht. So ist z.B. die Spülmaschine fertig, wenn die Leistung für unter 5Watt sinkt. Zwischendurch springt sie aber auch für zwei bis drei Sekunden darunter, so dass ich einen Trigger brauche, der checkt, ob der Wert für ca 10s unter 5 Watt sinkt...

        Hat jemand da zufällig da eine schicke, generische Lösung? Vorzugsweise, ohne, dass ich noch für jedes Gerät irgendwo einen State im Objektbaum zwischenspeichern muss.

        Momentan schwebt mir da eine kleine, rekursive JS-Funktion vor, mache mir aber Sorgen um die Performance, da ich das häufiger brauche.

        Oder gibt es sowas schon ioB und ich habe es nur übersehen?
        Ist sowas angedacht, in das Scripting zu übernehmen?

        EDIT:
        Lösung gibt es hier:
        https://forum.iobroker.net/topic/37141/trigger-wenn-wert-länger-gehalten-wird/6

        paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #3

        @D-VE sagte:

        einen Trigger brauche, der checkt, ob der Wert für ca 10s unter 5 Watt sinkt...

        Siehe hier.

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        1 Antwort Letzte Antwort
        0
        • HomoranH Homoran

          @D-VE es gibt zwei Möglichkeiten

          • nach ein paar Sekunden/Minuten noch mal den Wert überprüfen und erst dann Meldung geben wenn er immer noch unter der Schwelle ist
          • einen gleitenden Mittelwert über die letzten x Messungen berechnen und die Meldung erst dann ausgeben wenn dieser unter den Schwellwert fällt
          D.VED Offline
          D.VED Offline
          D.VE
          schrieb am zuletzt editiert von
          #4

          @Homoran said in Trigger: Wenn Wert länger gehalten wird:

          @D-VE es gibt zwei Möglichkeiten

          • nach ein paar Sekunden/Minuten noch mal den Wert überprüfen und erst dann Meldung geben wenn er immer noch unter der Schwelle ist
          • einen gleitenden Mittelwert über die letzten x Messungen berechnen und die Meldung erst dann ausgeben wenn dieser unter den Schwellwert fällt

          Kann ich den dazu wenigstens Variablen nehmen? Bleiben die persistent innerhalb der Blockly-Scripte, oder geht das nur mit States im Objektbaum?

          Mein SmartHome-Podcast:
          http://www.scheiss-technik.com

          HomoranH 1 Antwort Letzte Antwort
          0
          • D.VED D.VE

            @Homoran said in Trigger: Wenn Wert länger gehalten wird:

            @D-VE es gibt zwei Möglichkeiten

            • nach ein paar Sekunden/Minuten noch mal den Wert überprüfen und erst dann Meldung geben wenn er immer noch unter der Schwelle ist
            • einen gleitenden Mittelwert über die letzten x Messungen berechnen und die Meldung erst dann ausgeben wenn dieser unter den Schwellwert fällt

            Kann ich den dazu wenigstens Variablen nehmen? Bleiben die persistent innerhalb der Blockly-Scripte, oder geht das nur mit States im Objektbaum?

            HomoranH Nicht stören
            HomoranH Nicht stören
            Homoran
            Global Moderator Administrators
            schrieb am zuletzt editiert von
            #5

            @D-VE sagte in Trigger: Wenn Wert länger gehalten wird:

            Kann ich den dazu wenigstens Variablen nehmen?

            natürlich!

            @D-VE sagte in Trigger: Wenn Wert länger gehalten wird:

            Bleiben die persistent innerhalb der Blockly-Scripte

            nur in dem jeweiligen Skript

            States als "Systemvariable" nutzen geht auch, ergibt IMHO aber keinen Sinn, da du wahrscheinlich nicht auf die gleichen Werte von mehreren Skripten zugreifen willst/musst

            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

            D.VED 1 Antwort Letzte Antwort
            0
            • HomoranH Homoran

              @D-VE sagte in Trigger: Wenn Wert länger gehalten wird:

              Kann ich den dazu wenigstens Variablen nehmen?

              natürlich!

              @D-VE sagte in Trigger: Wenn Wert länger gehalten wird:

              Bleiben die persistent innerhalb der Blockly-Scripte

              nur in dem jeweiligen Skript

              States als "Systemvariable" nutzen geht auch, ergibt IMHO aber keinen Sinn, da du wahrscheinlich nicht auf die gleichen Werte von mehreren Skripten zugreifen willst/musst

              D.VED Offline
              D.VED Offline
              D.VE
              schrieb am zuletzt editiert von
              #6

              Ich hab mal eine kleine Methode implementiert, die das realisiert.
              Einfach als Globale JS Funktion einfügen:

              var historyValuesOBJ ;
              
              function compareHistoryValue(currentValueFLT, operatorSTR, compareValueFLT, durationINT, identifierSTR) {  
                  console.log(currentValueFLT + " " + operatorSTR + " " + compareValueFLT + "  For " + durationINT + "s");
              
                  //Current timestamp
                  var currentTimeTST = Math.round(new Date().getTime() / 1000); 
              
                  //check if the global object exists and create it if not 
                  if (typeof historyValuesOBJ == "undefined") {
                      historyValuesOBJ = {};
                      historyValuesOBJ[identifierSTR] = {};
                      historyValuesOBJ[identifierSTR].lastCallINT = currentTimeTST;
                      historyValuesOBJ[identifierSTR].countINT = 0;
                  }
              
                  //Calculate the delata since last Call
                  var deltaTimeINT = currentTimeTST - historyValuesOBJ[identifierSTR].lastCallINT;
              
                  //Add the dealte to the count value
                  historyValuesOBJ[identifierSTR].countINT = historyValuesOBJ[identifierSTR].countINT + deltaTimeINT;
              
                  //set the last call to current timestamp
                  historyValuesOBJ[identifierSTR].lastCallINT = currentTimeTST;
              
                  console.log("Time since Last Call: " + historyValuesOBJ[identifierSTR].countINT );
              
                  if (operatorSTR == '<' ){
                      //if comparison fails, reset counter
                      if (currentValueFLT >= compareValueFLT) {            
                          historyValuesOBJ[identifierSTR].countINT = 0;
                          return false;
                      }
                      //if comparison is true
                      else if (currentValueFLT < compareValueFLT) {
                          //return true if value is larger
                          if (historyValuesOBJ[identifierSTR].countINT >= durationINT){
                              return true;
                          }            
                          return false;
                      } 
                  }
                  else if (operatorSTR == '>' ){
                      //if comparison fails, reset counter
                      if (currentValueFLT <= compareValueFLT) {            
                          historyValuesOBJ[identifierSTR].countINT = 0;
                          return false;
                      }
                      //if comparison is true
                      else if (currentValueFLT > compareValueFLT) {
                          //return true if value is larger
                          if (historyValuesOBJ[identifierSTR].countINT >= durationINT){
                              return true;
                          }
                          return false;
                      } 
                  }        
              }
              

              Im Blockly baut man sich dann noch einen Wrapper (JS-Funktion mit Ergebnis):

              222b82a7-e309-49c1-9590-fb509f99bcc8-grafik.png

              Und kann das dann so benutzen:
              18108933-ea4e-445f-9ee4-16a251937167-grafik.png

              Das obige Script gibt true zurück, wenn der Wert für mindestens 45 Sekunden unter 500 geblieben ist.

              ToDo:

              • Ich habe nur größer und kleine implementiert, es fehlen noch Gleich sowie Größer-Gleich und Kleine-Gleich an Operatoren
              • Auch vergleiche mit true/false fehlen noch
              • Leider muss man noch einen Identifier angeben, damit das Script die Werte intern korrekt speichern kann.

              Wenn jemand eine Idee hat, wie man das Generisch gestalten kann, immer her damit.

              Mein SmartHome-Podcast:
              http://www.scheiss-technik.com

              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

              603

              Online

              32.7k

              Benutzer

              82.4k

              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