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. JavaScript
  5. persist timer

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

persist timer

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
4 Beiträge 3 Kommentatoren 382 Aufrufe 1 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.
  • M Offline
    M Offline
    Marty56
    schrieb am zuletzt editiert von
    #1

    Hallo,

    mit setStateDelayed(id,value,delay) kann man ja eine verzögerte Veränderung eines Datenpunkts relativ zur Ist Zeit programmieren.
    Wenn man jetzt aber iobroker neu startet, wird dieser Timer vergessen.

    Hat jemand schon eine Lösung, wie man diesen Timer wiederherstellen kann?
    Es sollte so sein, dass dieser wiederhergestellte Timer genau am selben Zeitpunkt triggert, wie vorher. Also nicht relativ zum aktuellen Zeitpunkt. Und wenn dieser Zeitpunkt abgelaufen ist, dann sollte kein Trigger mehr aufgerufen werden.

    Der derzeitige Workaround, den ich benutze, ist, dass ich mir aus der Verzögerungen den Zeitpunkt des Triggers berechne und dann mit der neuen Funktion "scheduleById" einen Trigger auslöse. Das erscheint mir aber ziemlich umständlich. Am Liebsten hätte ich eine Funktion, die
    setStateDelay_pers(id,value,delay),
    clearStateDelayed_pers(id) und eine Funktion
    setStateDelayed_restore(id) die ich aufrufe, wenn das Script neu gestartet wird.

    HW:NUC (16 GB Ram)
    OS: Debian Bullseye, Promox V7, node v16.x npm 8.19.3

    T Rene55R 2 Antworten Letzte Antwort
    0
    • M Marty56

      Hallo,

      mit setStateDelayed(id,value,delay) kann man ja eine verzögerte Veränderung eines Datenpunkts relativ zur Ist Zeit programmieren.
      Wenn man jetzt aber iobroker neu startet, wird dieser Timer vergessen.

      Hat jemand schon eine Lösung, wie man diesen Timer wiederherstellen kann?
      Es sollte so sein, dass dieser wiederhergestellte Timer genau am selben Zeitpunkt triggert, wie vorher. Also nicht relativ zum aktuellen Zeitpunkt. Und wenn dieser Zeitpunkt abgelaufen ist, dann sollte kein Trigger mehr aufgerufen werden.

      Der derzeitige Workaround, den ich benutze, ist, dass ich mir aus der Verzögerungen den Zeitpunkt des Triggers berechne und dann mit der neuen Funktion "scheduleById" einen Trigger auslöse. Das erscheint mir aber ziemlich umständlich. Am Liebsten hätte ich eine Funktion, die
      setStateDelay_pers(id,value,delay),
      clearStateDelayed_pers(id) und eine Funktion
      setStateDelayed_restore(id) die ich aufrufe, wenn das Script neu gestartet wird.

      T Nicht stören
      T Nicht stören
      ticaki
      schrieb am zuletzt editiert von
      #2

      @marty56

      Ich brauche das zwar nicht, weil ich selbst die delays berechne, selbst schalte und beim Neustart einen funktionierenden Default habe. Jedoch wenn ich das machen würde, würde ich mir ein Json in einen State schreiben mit id und endzeitpunkt und beim Start des Skripts das einlesen und ausführen. Natürlich im laufenden Betrieb immer wieder aktualisieren.

      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

      Spenden

      1 Antwort Letzte Antwort
      0
      • M Marty56

        Hallo,

        mit setStateDelayed(id,value,delay) kann man ja eine verzögerte Veränderung eines Datenpunkts relativ zur Ist Zeit programmieren.
        Wenn man jetzt aber iobroker neu startet, wird dieser Timer vergessen.

        Hat jemand schon eine Lösung, wie man diesen Timer wiederherstellen kann?
        Es sollte so sein, dass dieser wiederhergestellte Timer genau am selben Zeitpunkt triggert, wie vorher. Also nicht relativ zum aktuellen Zeitpunkt. Und wenn dieser Zeitpunkt abgelaufen ist, dann sollte kein Trigger mehr aufgerufen werden.

        Der derzeitige Workaround, den ich benutze, ist, dass ich mir aus der Verzögerungen den Zeitpunkt des Triggers berechne und dann mit der neuen Funktion "scheduleById" einen Trigger auslöse. Das erscheint mir aber ziemlich umständlich. Am Liebsten hätte ich eine Funktion, die
        setStateDelay_pers(id,value,delay),
        clearStateDelayed_pers(id) und eine Funktion
        setStateDelayed_restore(id) die ich aufrufe, wenn das Script neu gestartet wird.

        Rene55R Offline
        Rene55R Offline
        Rene55
        schrieb am zuletzt editiert von
        #3

        @marty56 sagte in persist timer:

        setStateDelayed(

        Ich denke, dass mit diesem Kommando etwas anderes bezweckt wird, nämlich das spätere Schreiben eines Datenpunktes und nicht das zeitlich gesteuerte. Oder liege ich da falsch?

        Host: Fujitsu Intel(R) Pentium(R) CPU G4560T, 32 GB RAM, Proxmox 8.x + lxc Ubuntu 22.04
        ioBroker (8 GB RAM) Node.js: 20.19.1, NPM: 10.8.2, js-Controller: 7.0.6, Admin: 7.6.3
        Wetterstation: Froggit WH3000SE V1.6.6

        M 1 Antwort Letzte Antwort
        0
        • Rene55R Rene55

          @marty56 sagte in persist timer:

          setStateDelayed(

          Ich denke, dass mit diesem Kommando etwas anderes bezweckt wird, nämlich das spätere Schreiben eines Datenpunktes und nicht das zeitlich gesteuerte. Oder liege ich da falsch?

          M Offline
          M Offline
          Marty56
          schrieb am zuletzt editiert von Marty56
          #4

          Ich habe mir jetzt folgendes gebastelt.
          Damit übersteht das verzögerte Schalten auch nach Neutstart von ioBroker

          function clearStateDelayed_persist(id) {
              clearStateDelayed(id)
              setState(id+"_timer",JSON.stringify([]))
          }
          
          function setStateDelayed_persist(id,val,delay,clearRunning) {
              setStateDelayed(id,val,delay,clearRunning)
              var timer = getStateDelayed(id)
              var persist = []
              for (var i = 0;i < timer.length;i++) {
                  var timestamp = new Date(new Date().getTime() + timer[i].delay)
                  var date = timestamp.toISOString()
                  persist.push({"date":date,"val":val,"clearRunning":clearRunning})
              }
              setState(id+"_timer",JSON.stringify(persist))   
          }
          
          function restore_setStateDelayed(id) {
              clearStateDelayed(id)
              var timer = JSON.parse(get(id + "_timer"))
              for (var i = 0;i < timer.length;i++) {
                  var persist = timer[i]
                  var delay = new Date(persist.date).getTime() - new Date().getTime()
                  if (delay > 0) setStateDelayed(id,persist.val,delay,persist.clearRunning)
              }
          }
          
          /*
          Damit das Bespiel läuft muss
          der Datenpunkt 
          1. '0_userdata.0.Test.test_boolean' und 
          2. '0_userdata.0.Test.test_boolean_timer' 
          
          vorhanden sein.
          
          */
          var id = '0_userdata.0.Test.test_boolean'
          setStateDelayed_persist(id,false,2000)
          setStateDelayed_persist(id,false,3000,false)
          //clearStateDelayed_persist(id)
          setTimeout(function(){restore_setStateDelayed(id)},1000)
          
          on({ id:  id, change: "any"}, function (obj) { 
              log("getriggert")
          })
          

          HW:NUC (16 GB Ram)
          OS: Debian Bullseye, Promox V7, node v16.x npm 8.19.3

          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

          736

          Online

          32.6k

          Benutzer

          82.2k

          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