Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Variable setzen wenn bestimmte Bedingungen erfüllt sind

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Variable setzen wenn bestimmte Bedingungen erfüllt sind

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      PrinzEisenherz1 last edited by

      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

      1 Reply Last reply Reply Quote 0
      • Dutchman
        Dutchman Developer Most Active Administrators last edited by

        @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 Reply Last reply Reply Quote 0
        • blauholsten
          blauholsten Developer last edited by

          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…

          1 Reply Last reply Reply Quote 0
          • P
            PrinzEisenherz1 last edited by

            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

            1 Reply Last reply Reply Quote 0
            • Dutchman
              Dutchman Developer Most Active Administrators last edited by

              @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 Reply Last reply Reply Quote 0
              • paul53
                paul53 last edited by

                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();
                });
                
                1 Reply Last reply Reply Quote 0
                • A
                  aftershowman last edited by

                  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 ();

                  });

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  764
                  Online

                  31.9k
                  Users

                  80.3k
                  Topics

                  1.3m
                  Posts

                  5
                  7
                  1179
                  Loading More Posts
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes
                  Reply
                  • Reply as topic
                  Log in to reply
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                  The ioBroker Community 2014-2023
                  logo