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. Gelöst: Verzögerungszeit bei der Ausführung von Anweisungen

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Gelöst: Verzögerungszeit bei der Ausführung von Anweisungen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
8 Beiträge 3 Kommentatoren 2.6k Aufrufe
  • Ä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.
  • R Offline
    R Offline
    Ralf H.
    schrieb am zuletzt editiert von
    #1

    Hallo und einen schönen Sonntag,

    ich bin neu hier und möchte mich zunächst einmal an all diejenigen bedanken, die ioBroker realisiert haben. Ich bin kein Programmierer, schon etwas älter und war schon etwas frustriert, als ich im Homematic-Forum die Abkündigung von CCU.IO und den diversen AddOns lesen musste – gerade, als ich eine funktionierende Lösung mit einem Raspi auf die Beine gestellt hatte.

    OK – dann also ioBoker ;-)

    Mit Vis habe ich schon die Visualisierung meines Reihenhauses einigermaßen hinbekommen, nun soll es an die Scripte gehen. Und genau hier habe ich ein Problem, dass ich nicht lösen kann:

    Ich habe ein billiges Tablet für die Visualisierung, das dauerhaft mit dem Ladegerät verbunden ist.

    Da alle Tablets, die ich kenne, den Bildschirm aktivieren, wenn mindestens der Ladestrom eingeschaltet wird, verwende ich einen Schaltaktor, der den Ladestrom für eine Sekunde einschaltet, wenn ein bestimmter Bewegungmelder Bewegung erkennt.

    DAS habe ich auch schon hinbekommen:

    on("hm-rpc.0.KEQ1234567.1.MOTION", function(obj) {
        if (obj.newState.val === true) {
            setState('hm-rpc.0.MEQ1234567.1.ON_TIME', 2 );
            setState("hm-rpc.0.MEQ1234567.1.STATE",true);
        }
    });
    

    Das ist ja auch kein Hexenwerk und funktioniert soweit einwandfrei - jedenfalls solange der Schaltaktor vorher AUS war !

    Ich möchte nun diese Funktion aber auch in der Zeit nutzen, in der ich das Tablet zum tatsächlichen Laden mit Strom versorge, der Schaltaktor also den Zustand AN hat.

    Mit einem CCU-Programm hatte ich das gelöst, indem ich -wenn der Schaltaktor EIN ist- erst die Anweisung „Schaltaktor AUS“ und dann mit einer Verzögerungszeit von 2 Sekunden, diesen wieder eingeschaltet habe.

    Das würde ich nun gern in einem ioBroker-Script realisieren.

    Als Anfänger hat mich auch eine Suche nicht weitergebracht, da ich die Lösung wahrscheinlich nicht mal erkenne, wenn ich sie gefunden habe.

    Vielen Dank schon mal und Grüße aus dem Weserbergland - Ralf

    1 Antwort Letzte Antwort
    0
    • BluefoxB Offline
      BluefoxB Offline
      Bluefox
      schrieb am zuletzt editiert von
      #2
      on("hm-rpc.0.KEQ1234567.1.MOTION", function(obj) {
          if (obj.newState.val === true) {
              // falls schon eingeschaltet
              if (getState("hm-rpc.0.MEQ1234567.1.STATE").val) {
                   // schalte aus
                   setState("hm-rpc.0.MEQ1234567.1.STATE",false);
                   // Timer für 2 sekunden
                   setTimeout(function (){
                       // schalte an
                       setState("hm-rpc.0.MEQ1234567.1.STATE",true);
                   }, 2000);
              } else { 
                  // schalte sofort an
                  setState('hm-rpc.0.MEQ1234567.1.ON_TIME', 2 );
                  setState("hm-rpc.0.MEQ1234567.1.STATE",true);
              }
          }
      });
      
      

      5076_20180203_122044.jpg

      1 Antwort Letzte Antwort
      0
      • R Offline
        R Offline
        Ralf H.
        schrieb am zuletzt editiert von
        #3

        Hallo Bluefox,

        vielen Dank, das Script funktioniert nun prima.

        -> setTimeout war die Lösung, die ich nicht erkannt hatte!

        Damit nun der vorige Ladezustand wieder hergestellt wird, habe ich die erste Anweisung für die Einschaltdauer in Zeile 10 gelöscht.

        Hintergrund: Das Display soll auch innerhalb des Zeitraums aufgeweckt werden, in dem das Tablet ohnehin geladen wird.

        In der Zwischenzeit ist mir allerdings auch noch eine Alternative eingefallen, die ich aber auch noch nicht ganz umsetzen kann:

        Schritt 1: aktuellen Stand des Schaltaktors abfragen und in einer Variable speichern

        Schritt 2: Statur des Schaltaktors sofort = AUS

        Schritt 2: Status des Schaltaktors nach einer Sekunde = EIN

        Ergebnis: Das Display geht an.

        Schritt 3: den Status des Schaltaktors wieder mit dem Wert der Variable aus Schritt 1 setzen.

        Ergebnis: der alte Status quo ist wieder hergestellt.

        Wäre das möglicherweise eine elegantere Lösung?

        Kommt die CCU2 da auch mit, oder muss dem Schaltaktor Zeit gegeben werden, bis er die nächste Anweisung entgegen und ausführen kann?

        Ralf

        1 Antwort Letzte Antwort
        0
        • P Offline
          P Offline
          pix
          schrieb am zuletzt editiert von
          #4

          Hallo Ralf H.
          @Ralf H.:

          In der Zwischenzeit ist mir allerdings auch noch eine Alternative eingefallen, die ich aber auch noch nicht ganz umsetzen kann: `
          dann nutze lieber das Skript von Bluefox. Das ist kurz und gut und funktioniert. Hatte vor Monaten selbst so ein Skript laufen (bevor ich auf iPad mit Magnetcover umgestiegen bin).

          Da es analog zu ONTIME keinen Datenpunkt OFFTIME gibt, der für eine bestimmte Zeit einen Aktor ausschaltet, muss man eben so vorgehen. Variablen machen das komplizierter und soviel Code spart das in diesem Fall auch nicht.

          geht aber auch so:

          on("hm-rpc.0.KEQ1234567.1.MOTION", function(obj) {
              if (obj.newState.val === true) {
                  // Aktorstatus in Variable schreiben
                  var ur_status_aktor = getState("hm-rpc.0.MEQ1234567.1.STATE").val;
                  // schalte sofort aus
                  setState("hm-rpc.0.MEQ1234567.1.STATE",false);
                  // Timer für 2 sekunden
                  setTimeout(function (){
                      // schalte an
                      setState("hm-rpc.0.MEQ1234567.1.STATE",true);
                  }, 2000);
                  setState("hm-rpc.0.MEQ1234567.1.STATE",ur_status_aktor);
              }
          });
          
          

          Gruß

          Pix

          ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

          1 Antwort Letzte Antwort
          0
          • R Offline
            R Offline
            Ralf H.
            schrieb am zuletzt editiert von
            #5

            Hi Pix,

            danke für die Hinweise und den Alternativcode.

            Für mich ist dieses Austesten an einem eigentlich banalen Problem die beste Möglichkeit, die Möglichkeiten der Scripte zu verstehen.

            Grüße Ralf

            1 Antwort Letzte Antwort
            0
            • P Offline
              P Offline
              pix
              schrieb am zuletzt editiert von
              #6

              @pix:

              Da es analog zu ONTIME keinen Datenpunkt OFFTIME gibt, der für eine bestimmte Zeit einen Aktor ausschaltet, … `
              Jetzt (seit 0.5.8) haben wir ja https://github.com/iobroker/ioBroker.javascript/blob/master/README.md#setstatedelayed

              Vielen Dank an Bluefox.

              Gruß,

              Pix

              ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

              1 Antwort Letzte Antwort
              0
              • BluefoxB Offline
                BluefoxB Offline
                Bluefox
                schrieb am zuletzt editiert von
                #7

                Und das konnte man dann so umschreiben:

                on("hm-rpc.0.KEQ1234567.1.MOTION", function(obj) {
                    if (obj.newState.val === true) {
                        // falls schon eingeschaltet
                        if (getState("hm-rpc.0.MEQ1234567.1.STATE").val) {
                             // schalte aus
                             setState("hm-rpc.0.MEQ1234567.1.STATE",false);
                             // Timer für 2 sekunden
                            setStateDelayed("hm-rpc.0.MEQ1234567.1.STATE",true, 2000);
                        } else { 
                            // schalte sofort an
                            setState("hm-rpc.0.MEQ1234567.1.STATE",true);
                            setStateDelayed("hm-rpc.0.MEQ1234567.1.STATE",false, 2000);
                        }
                    }
                });
                
                1 Antwort Letzte Antwort
                0
                • R Offline
                  R Offline
                  Ralf H.
                  schrieb am zuletzt editiert von
                  #8

                  @Bluefox:

                  Und das konnte man dann so umschreiben: `
                  … und hätte es dann (zumindest für mich) auch gleich noch lesbarer und verständlicher, soweit es die "Verwandschaft" zwischen setState und setStateDelayed betrifft.

                  Mann dankt - Ralf

                  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

                  704

                  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