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. Wie lasse ich eine if Bedingung regelmäßig prüfen?

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Wie lasse ich eine if Bedingung regelmäßig prüfen?

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
5 Beiträge 3 Kommentatoren 979 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.
  • F Offline
    F Offline
    fuchs1978
    schrieb am zuletzt editiert von
    #1

    Hallo,

    ich arbeite mich gerade etwas in Javascript ja, klappt schon einiges ganz gut. Nun habe ich aber mal eine Frage.

    Über den on Befehl oder Zeiten setze ich Variablen. Diese möchte ich am Ende mit einem if Befehl auf den KNX Bus schreiben. Das Problem was ich habe, das Script läuft beim starten einmal durch. Die on Befehle werden ja weiterhin getriggert, ebenso die Zeiten. Jedoch wird der if Befehl nicht mehr ausgeführt. Wir ändere ich das, das der if Befehl ausgeführt wird wenn sich eine Bedingungsvariable ändert? Wäre klassen wenn mich da jemand auf den richtigen Weg bringen kann.

    var Aussenlicht_Freigabe = false;
    var Aussentaster = false;
    
    on({id: "knx.0.Beleuchtungssteuerung_EG.Außen.Schalter_Garten_Pfosten"/*Schalter Garten Pfosten*/}, function (obj) {
         Aussentaster = true;
         log("Taster Außenbeleuchtung gedrückt Timer gestartet");
    });
    
    on({id: "knx.0.Beleuchtungssteuerung_EG.Außen.Schalter_Garten_Pfosten"/*Schalter Garten Pfosten*/}, function (obj) {
         setTimeout(Aussentaster = false, 300000);
         setTimeout(log("Taster Außenbeleuchtung abgelaufen",300000));
        });
    
    schedule({astro: "sunset", shift: 0}, function () {
        log("Sonnenuntergang Aussenlicht_Freigabe AN");
        Aussenlicht_Freigabe = true;
    });
    
    schedule("00 23 * * 1-5", function () {
        log("Werktags 23 Uhr Aussenlicht_Freigabe AUS");
        Aussenlicht_Freigabe = false;
    });
    
    schedule("00 23 * * 6-7", function () {
        log("Wochenende 23 Uhr Aussenlicht_Freigabe AUS");
        Aussenlicht_Freigabe = false;
    });
    
    schedule("00 5 * * 1-5", function () {
        log("Werktags 5 Uhr Aussenlicht_Freigabe EIN");
        Aussenlicht_Freigabe = true;
    });   
    
    schedule("00 7 * * 6-7", function () {
        log("Wochenende 7 Uhr Aussenlicht_Freigabe EIN");
        Aussenlicht_Freigabe = true;
    });
    
    schedule("00 9 * * 1-5", function () {
        log("Werktags 9 Uhr Aussenlicht_Freigabe AUS");
        Aussenlicht_Freigabe = false;
    });
    
    schedule("00 10 * * 6-7", function () {
        log("Wochenende 10 Uhr Aussenlicht_Freigabe AUS");
        Aussenlicht_Freigabe = false;
    });
    
    if (isAstroDay () && Aussenlicht_Freigabe || Aussentaster) {
        setState("knx.0.Beleuchtungssteuerung_EG.Außen.Außenbeleuchtung_Tür_Schalten",true);
        log("Außenlicht wurde eingeschaltet");
    } else {
        setState("knx.0.Beleuchtungssteuerung_EG.Außen.Außenbeleuchtung_Tür_Schalten",false);
        log("Außenlicht wurde ausgeschaltet");
    } 
    
    1 Antwort Letzte Antwort
    0
    • AlCalzoneA Offline
      AlCalzoneA Offline
      AlCalzone
      Developer
      schrieb am zuletzt editiert von
      #2

      Entweder du packst die if-Abfrage in eine eigene Funktion, die du jedesmal aufrufst, wenn du deine Skriptvariablen änderst, und 1x zu Beginn des Skripts.

      Oder du ersetzt deine Skriptvariablen durch States (Datenpunkte) in ioBroker, die du per setState(…) / getState(...) schreibst und ausliest. Dann kannst du die if-Abfrage in einen on(...)-Block wie oben packen, der immer aufgerufen wird, wenn sich die Zustände geändert haben.

      Übrigens:

      setTimeout(Aussentaster = false, 300000);
      

      setzt den Wert von Aussentaster sofort auf false

      setTimeout(function() {Aussentaster = false}, 300000);
      

      erst nach 300s.

      Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

      1 Antwort Letzte Antwort
      0
      • F Offline
        F Offline
        fuchs1978
        schrieb am zuletzt editiert von
        #3

        Vielen Dank für den Hinweis und die Ideen :-)

        Dann werde ich die if Anweisung in eine Funktion legen und sie im oberen Bereich immer mit hineinschreiben.

        1 Antwort Letzte Antwort
        0
        • F Offline
          F Offline
          fuchs1978
          schrieb am zuletzt editiert von
          #4

          Vielen Dank, hat alles super geklappt. Für die Umstellung von EibPC auf ioBroker hätte ich noch eine Frage. Ich habe einige Timer die das Radio ausschalten wenn keine Bewegung mehr im Raum ist. Also: wenn bewegung=false starte timer 30s danach schalte radio aus. Wenn nun zwischenzeitlich wieder eine Bewegung registriert wird breche Timer ab bis Bewegung wieder false. Wie setzt ich soetwas um?

          1 Antwort Letzte Antwort
          0
          • frankjokeF Offline
            frankjokeF Offline
            frankjoke
            schrieb am zuletzt editiert von
            #5

            Nur ein kleiner Tipp:

            Ich verwende für gleiche/ähnliche Beispiele meine 'StateMachine', ein Javascript Programm mit welchem mann einfach State-Machines und sonstige Befehle abarbeiten kann.

            Einen ersten Versuch einer Beschreibung gibt es da: http://forum.iobroker.net/viewtopic.php … atemachine

            Eine StateMachiene für das Radio könnte so ausschauen:

            const Machines = {
                RadioLichtBad: {
                    _all: { timer: ["BewegungsmelderBad~+", "LichtschalterBad~+"], aus: "LichtschalterBad~-" },
                    aus: { _onEnter: ["radioBad-", "lichtBad-"], _onExit: ["radioBad+", "lichtBad+"], _default:true },
                    timer: { _timeout: "aus:30000" }
                }
            }
            

            Sie reagiert auf Schalter oder Bewegung und schaltet Radio und Licht.

            Das könnte man erweitern um das Licht natürlich nur bei Dunkelheit zu schalten :)

            Die ~ bedeutet bei Änderung und +- ein(+)/aus(-).

            Die Maschine hat 2 States: aus und timer. bei allen states wird '_all:' abgefragt was bedeutet dass beim Einschalten oder bei Bewegung die Maschine auf timer geht und beim ausschalten auf aus.

            timer selbst geht nach 30 Sekunden auf aus.

            aus schaltet Lich und Radio ein oder aus je nachdem…

            Habe so etliche Steuerungen, auch mit Zeiten und lichtabhängig realisiert.

            p.s.: Irgendwann werd ich das in einen Adapter packen -- wenn BlueFox mir zeigt wie ich den Javascript-Adapter dafür ergänzen oder adaptieren kann....

            Frank,

            NUC's, VM's und Raspi's unter Raspian, Ubuntu und Debian zum Testen.
            Adapter die ich selbst beigesteuert habe: BMW, broadlink2, radar2, systeminfo, km200, xs1 und einige im Anmarsch!

            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

            341

            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