Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Skript setzt wert nicht richtig zurück

    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

    Skript setzt wert nicht richtig zurück

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

      Das Problem was ich auch nicht verstehe, ich möchte unten ein Status setzen und zurück setzen wenn der Bewegungsmelder gesetzt ist.

      Die onMethode reagiert leider jedesmal wenn das If durchlaufen wird, deshalb möchte ich es nur setzten wenn es false ist und dann nur zurück setzen wenn es wieder true ist.

      Leider macht es das hier nicht.

      const idAnwesend = "javascript." + instance +  ".Anwesend";
      
              createState(idAnwesend , false, {
               read: true, 
               write: true, 
               desc: "", 
               type: "boolean", 
               def: 0
                });
      
          if (getState("mqtt.0.ESP_Easy.Bewegungsmelder.Switch").val && !getState(idAnwesend).val) {
          setState(idAnwesend,true);
          } 
          if (getState(idAnwesend).val &&  !getState("mqtt.0.ESP_Easy.Bewegungsmelder.Switch").val) {
          setState(idAnwesend,false);
          } 
      
          //Telegram Nachicht senden
          on({id: idAnwesend, val: true}, function (obj) {
          sendTo("telegram", "send", {
          text: ([
                  'ANWESENDHEITS ALARM'
                  ].join(''))
          });
          }); 
      
      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        Hallo,

        die IF-Abfragen werden nur beim Skriptstart durchlaufen, nicht bei einer Auslösung von on() auf Anwesenheit.

        Richtig ist, dass du die Anwesenheit mit on() überwachst. Wenn die wechselt, wird ein telegram gesendet. Super.

        Es fehlt die Überwachung des MQTT-Datenpunktes. Wenn der sich auf true ändert (Bewegung) und abwesend -> Anwesenheit.

        Ob es Sinn macht, wenn bei gesetzter Anwesenheit der Melder auf false geht auch die Anwesenheit auf false zu setzen, sei mal dahingestellt.

        Im createState() ist auch noch ein kleiner Fehler: Typ ist boolean, def (default) sollte daher false nicht 0 sein.

        const idAnwesend = "javascript." + instance +  ".Anwesend";
        createState(idAnwesend , false, {
                 read: true, 
                 write: true, 
                 name: "Anwesenheit", // Name 
                 desc: "", 
                 type: "boolean", 
                 def: false,
                 role: "switch" // Rolle
                  });
        
        const idMelder = "mqtt.0.ESP_Easy.Bewegungsmelder.Switch";
        on(idMelder, function(obj) {
            let anwesenheit = getState(idAnwesend).val;
            if (obj.state.val && !anwesenheit) setState(idAnwesend, true); // wenn abwesend und Melder löst neu aus
            if (!obj.state.val && anwesenheit) setState(idAnwesend, false);// wenn anwesend und Melder geht neu zurück auf false
        });
        
            //Telegram Nachicht senden
            on({id: idAnwesend, val: true}, function (obj) {
            sendTo("telegram", "send", {
            text: ([
                    'ANWESENDHEITS ALARM'
                    ].join(''))
            });
            }); 
        
        

        Kannst du sagen, was die Anwendung ist? Protokollierst du nur die Ereignisse des Melders? Denn so werden eigentlich nur die beiden Datenpunkte synchronisiert.

        Gruß

        Pix

        1 Reply Last reply Reply Quote 0
        • W
          woehrer last edited by

          Die Anwendung soll quasi als Alarmanlage dienen.

          Sobald jemand am Melder vorbei läuft versendet es eine Nachricht.

          prüfe jetzt mit on() den Status bevor ich eine If-Abfrage setze.

          Mann kann mit sicherheit auch direkt auf die Telegram Nachricht gehen, aber evtl will ich noch einen zwischenschritt einbauen, das möchte ich mir dadurch noch offen lassen.

          const idAnwesend = "javascript." + instance +  ".Anwesend";
          
                  createState(idAnwesend , false, {
                   read: true, 
                   write: true, 
                   desc: "", 
                   type: "boolean", 
                   def: false
                    });
          
          on({id: "mqtt.0.ESP_Easy.Bewegungsmelder.Switch"}, function (obj) {
              if (getState("mqtt.0.ESP_Easy.Bewegungsmelder.Switch").val == 1) {
              setState(idAnwesend,true);
              } 
              if (getState("mqtt.0.ESP_Easy.Bewegungsmelder.Switch").val == 0) {
              setState(idAnwesend,false);
              } 
          });
          
              //Telegram Nachicht senden
              on({id: idAnwesend, val: true}, function (obj) {
              sendTo("telegram", "send", {
              text: ([
                      'ANWESENDHEITS ALARM', '\n'
                      ].join(''))
              });
              }); 
          
          
          1 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          756
          Online

          31.7k
          Users

          79.9k
          Topics

          1.3m
          Posts

          2
          3
          682
          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