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

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. js timer hölle soft start :)

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.5k

js timer hölle soft start :)

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascriptscenes
1 Beiträge 1 Kommentatoren 208 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.
  • G Offline
    G Offline
    gosund
    schrieb am zuletzt editiert von
    #1

    Ausgangssituation:
    Im Eingangsbereich ist eine (IKEA|Osram|Aldi) RGB-Lampe, welche zwischen Sonnenuntergang und Sonnenaufgang automatisch eingeschaltet wird. Allerdings mit einer bestimmten Farbe und reduzierter Helligkeit.

    Ich suche eine Idee oder einen eleganten Lösungsansatz für folgende Anforderung:

    Ein (aqara/xiaomi) Türsensor soll das Licht im Eingangsbereich ansteuern.
    Wird die Tür geöffnet, soll das Licht auf 100% Helligkeit und weiß umgeschaltet werden, nach dem Schließen der Türe nach x Sekunden wieder auf den ursprünglichen Zustand umschalten, also entweder aus oder gedimmtes, farbiges Licht.

    Die Umschaltung soll mit einer gewissen transition_time erfolgen, d.h. falls voher eine Farbe eingestellt war, wird auf weiß geschaltet, dann mit ca. 0.5 bis 1. Sekunden die Helligkeit hochgefahren. Analog dazu soll nach dem Schließen der Türe das Licht wieder langsam auf die ursprüngliche Helligkeit runtergefahren werden und dann auf die ursprüngliche Farbe umschalten. Die transition_time habe ich auf 0.5 Sek. eingestellt, daher die 700ms delay.

    Wenn zwischen dem Öffnen und Schließen der Tür genug Zeit vergeht, klappt alles prima.

    Wird die Türe allerdings kurz auf und wieder zu gemacht, dann wird der zweite Event getriggert, noch bevor der erste beendet ist. Problematisch sind die Timer der aufeinander folgenden setStateDelayed().

    Hier mal ein bischen Code:

    
    var lampe_brightness, lampe_color, lampe_state;
    
    var timeout;
    
    var lamp = "zigbee.0.xxx";
    var door = "zigbee.0.yyy.opened";
    
    var processing = false;
    
    on({id: door, change: "ne"}, function (obj) {
      var value = obj.state.val;
      var oldValue = obj.oldState.val;
    
      if (compareTime(getAstroDate("sunset", undefined, 0).toLocaleTimeString(), getAstroDate("sunrise", undefined, 0).toLocaleTimeString(), "between")) {
    
        (function () {if (timeout) {clearTimeout(timeout); timeout = null;}})();
    
        setState(lamp+".transition_time", 0.5);
       
        if (value) {
    
            lampe_brightness = getState(lamp+".brightness").val;
            lampe_color = getState(lamp+".colortemp").val;
            lampe_state = getState(lamp+".state").val;
        
            setState(lamp+".colortemp", 100,false);
            setStateDelayed(lamp+".brightness", 100,700,false);
    
          } else {
    
            timeout = setTimeout(function () {
    
                if (lampe_state === false) {
                    setState(lamp+".state", false);
                    setState(lamp+".brightness", lampe_brightness,true);
                    setState(lamp+".colortemp", lampe_color,true);
                }else{
                    setState(lamp+".brightness", lampe_brightness);
                    setStateDelayed(lamp+".colortemp", lampe_color, 1000, false);
                }
             }, 500);
          }
      }
    });
    

    Ich könnte jetzt natürlich ein paar weitere Abfragen für die setStateDelayed() Timer machen, frage mich aber, ob es nicht irgendwie eleganter geht. Evtl. mit einer Rekursion?!

    Hat hier jemand so etwas schon sauber implementiert oder kann mir einen Tip geben??

    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

    366

    Online

    32.4k

    Benutzer

    81.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