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. Variable setzen wenn bestimmte Bedingungen erfüllt sind

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Variable setzen wenn bestimmte Bedingungen erfüllt sind

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
7 Beiträge 5 Kommentatoren 1.2k 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.
  • P Offline
    P Offline
    PrinzEisenherz1
    schrieb am zuletzt editiert von
    #1

    Hi zusammen!

    Ich hab mal wieder n Problem wo ich vor lauter Bäumen den Wald nicht sehe.

    Und zwar möchte ich gerne 3 Datenpunkte überwachen und wenn die einen Bestimmten Wert haben dann soll eine Variable gesetzt werden.

    Also als Beispiel:

    javascript.0.Abenddämmerung ist true

    javascript.0.Abwesend ist true

    javascript.0.scriptEnabled.Kamera_Haustuer ist false

    Dann soll als Beispiel javascript.0.Bedinungerfuellt auf true.

    In dem Moment wo eine der Bedingungen sich wieder ändert z.B. javascript.0.Abenddämmerung auf false

    dann soll javascript.0.Bedinungerfuellt auch auf false.

    mit on(…. bekomme ich das leider nicht hin und if-Schleifen bringen da nichts weil ja die 3 Datenpunkte ja immer überwacht werden sollen

    Kann mir da jemand vielleicht weiterhelfen? Wäre echt klasse.

    Gruß

    Johnny

    Intel-NUC mit ProxMox: ioBroker,SQL, logging Strom- Gas- u. Wasserzähler;10Zoll Tab im Flur für VIS; weiteres: Homematic CCU2, Homeduino, Kameras, selbstgebaute Wetterstation;

    1 Antwort Letzte Antwort
    0
    • DutchmanD Offline
      DutchmanD Offline
      Dutchman
      Developer Most Active Administrators
      schrieb am zuletzt editiert von
      #2

      @PrinzEisenherz1:

      mit on(…. bekomme ich das leider nicht hin und if-Schleifen bringen da nichts weil ja die 3 Datenpunkte ja immer überwacht werden sollen

      Kann mir da jemand vielleicht weiterhelfen? Wäre echt klasse.

      Gruß

      Johnny `

      Verstehe ich nicht ganz, mittels ON kan man die 3 werte auf aenderungne/update uberwachten und dan ein IF fuer setzten des wertes ?

      Hast du ein script vorbereited wasa nicht leuft ?

      Muesste ungefaehr so aussehen aus dem bauch raus:

      on({id: "javascript.0.Abenddämmerung", change: "any"}, function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        if (getState("javascript.0.Abenddämmerung").val == true) {
          setState("javascript.0.Bedinungerfuellt", true);
        } else {
          setState("javascript.0.Bedinungerfuellt", false);
        }
      });
      
      
      1 Antwort Letzte Antwort
      0
      • blauholstenB Offline
        blauholstenB Offline
        blauholsten
        Developer
        schrieb am zuletzt editiert von
        #3
        var bedingung_eins = "javascript.0.Abenddämmerung"; //Beispiel
        var bedingung_zwei = "usw....";
        var bedingung_drei = "usw";
        
        function check() {
        
        var wert_eins = getState(bedingung_eins).val;
        var wert_zwei = getState(bedingung_zwei).val;
        var wert_drei = getState(bedingung_drei).val;
        
         If( wert_eins && wert_zwei && !wert_drei) {
               //tue dies
            }
          else {
             //mache das
        }
        }
        
        on(bedingung_eins, check);
        on(bedingung_zwei, check);
        on(bedingung_drei, check);
        

        Kannst es ja mal so probieren…

        Entwickler vom: - Viessman Adapter
        - Alarm Adapter

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

          Erstmal danke euch beiden für eure Lösungsvorschläge @dutchman du hast mich da glaub ich etwas missverstanden die Lösung von blauholsten ist glaub ich genau die passende.

          Es sollen ja die drei Auslöser überwacht werden und bei deiner wird nur eine Überwacht. Ich hoffe du verstehst was ich meine.

          Muss ich später mal ausprobieren.

          Trotzdem euch beiden schonmal vielen Dank

          Gruß Johnny

          Intel-NUC mit ProxMox: ioBroker,SQL, logging Strom- Gas- u. Wasserzähler;10Zoll Tab im Flur für VIS; weiteres: Homematic CCU2, Homeduino, Kameras, selbstgebaute Wetterstation;

          1 Antwort Letzte Antwort
          0
          • DutchmanD Offline
            DutchmanD Offline
            Dutchman
            Developer Most Active Administrators
            schrieb am zuletzt editiert von
            #5

            @PrinzEisenherz1:

            Ich hoffe du verstehst was ich meine. `

            Jup war auch beispiel fuer eine :)

            Die loesung von blauholsten ist definitiev besser und uebersichtlicher und auch logischer um in eine function zu schreiben. Einziger nachteil is hierbei das bei jedem update einer der 3 weten immer alle 3 neu gesetzt werden da keine abrage statt findet. Das duerfte aber kein problem sein denke ich mal

            Ich muss mich mal mehr in functions vertiefen das macht so einiges ubersichtlicher

            Greetz,

            Dutch

            1 Antwort Letzte Antwort
            0
            • paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #6

              Um ein dreifaches getState(id) bei jedem Auslöser zu vermeiden, würde ich es so machen:

              var bedingung_eins = "javascript.0.Abenddämmerung"; //Beispiel
              var bedingung_zwei = "usw....";
              var bedingung_drei = "usw";
              
              var wert_eins = getState(bedingung_eins).val;
              var wert_zwei = getState(bedingung_zwei).val;
              var wert_drei = getState(bedingung_drei).val;
              
              function check() {
                if(wert_eins && wert_zwei && !wert_drei) {
                     //tue dies
                 }
                else {
                   //mache das
                 }
              }
              
              check();  // script start
              
              on(bedingung_eins, function(dp) {
                wert_eins = dp.state.val;
                check();
              });
              on(bedingung_zwei, function(dp) {
                wert_zwei = dp.state.val;
                check();
              });
              on(bedingung_drei, function(dp) {
                wert_drei = dp.state.val;
                check();
              });
              

              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
              • A Offline
                A Offline
                aftershowman
                schrieb am zuletzt editiert von
                #7

                Hallo,

                Ich hatte ein ähnliches Problem.

                Mehrere Homematic Schalt-Aktoren (Weihnachstbeleuchtung) sollten geschaltet werden wenn der Bewegungsmelder "draußen" oder der Bewegungsmelder "Flur-unten" eine Bewegung erkannt hat.

                Nach ein er bestimmten Zeit sollten "Lichter" wieder "allein" ausgehen. Muß ja nicht die ganze Ncht brennen :lol:

                Zusätzlich sollte noch die Helligkeit des Bewegungsmelder "draußen" überprüft werden (ob es dunkel genug ist die "Licher" einzuschalten).

                Ich hab das über eine Funktion gelöst, die von beiden "on" Ereignis Funktionen ausgeführt wird.

                Hier ist der Script:

                function Kerze () {

                var Helligkeit = getState("hm-rpc.0.NEQ0121243.1.BRIGHTNESS"/Aussen Bewegung-1-S.BRIGHTNESS/).val;

                log ("Helligkeit: " + Helligkeit);

                if (Helligkeit < 130) {

                setState("hm-rpc.0.KEQ0171811.1.STATE"/Licht Wand.STATE/,true); //Steckdose Schuppen ein

                setState("hm-rpc.0.KEQ0171542.1.STATE"/Licht Fenster.STATE/,true); //Steckdose Carport ein

                setState("hm-rpc.0.KEQ0171848.1.STATE"/Schalter-2.STATE/,true); //Steckdose Terasse ein

                setState("hm-rpc.0.KEQ0172215.1.STATE"/Schalter-1.STATE/,true); //Steckdose Küche ein

                setState("hm-rpc.0.LEQ0944756.1.STATE"/Kerze-1S.STATE/,true); //Kerze-1 ein

                setState("hm-rpc.0.NEQ0603872.1.STATE"/Kerze-2S.STATE/,true); //Kerze-2 ein

                setState("hm-rpc.0.NEQ0603833.1.STATE"/Kerze-3S.STATE/,true); //Kerze-4 ein

                setStateDelayed("hm-rpc.0.KEQ0171811.1.STATE"/Licht Wand.STATE/,false,10006020); //Steckdose Schuppen aus, nach 20 min

                setStateDelayed("hm-rpc.0.KEQ0171542.1.STATE"/Licht Fenster.STATE/,false,10006020); //Steckdose Carport aus, nach 20 min

                setStateDelayed("hm-rpc.0.KEQ0171848.1.STATE"/Schalter-2.STATE/,false,10006020); //Steckdose Terasse aus, nach 20 min

                setStateDelayed("hm-rpc.0.KEQ0172215.1.STATE"/Schalter-1.STATE/,false,10006020); //Steckdose Küche aus, nach 20 min

                setStateDelayed("hm-rpc.0.LEQ0944756.1.STATE"/Kerze-1S.STATE/,false,10006010); //Kerze-1 aus, nach 10 min

                setStateDelayed("hm-rpc.0.NEQ0603872.1.STATE"/Kerze-2S.STATE/,false,10006010); //Kerze-2 aus, nach 10 min

                setStateDelayed("hm-rpc.0.NEQ0603833.1.STATE"/Kerze-3S.STATE/,false,10006010); //Kerze-4 aus, nach 10 min

                }

                }

                // auslösen wenn Bewegung in Flur-unten

                on ({id: "hm-rpc.0.JEQ0264853.1.MOTION"/Flur unten Bewegungsmelder.MOTION/, val: true}, function () {

                Kerze ();

                });

                // auslösen wenn Bewegung vor dem Haus

                on ({id: "hm-rpc.0.NEQ0121243.1.MOTION"/Aussen Bewegung-1-S.MOTION/, val: true}, function () {

                Kerze ();

                });

                Homematic: CCU2 (2.17.15) ; 56 RF Geräte, 4 wired Geräte

                ioBroker PC: Intel celeron 1007U 1.5GHz, 4GB RAM, 128 GB SSD

                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

                739

                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