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. Skript setzt wert nicht richtig zurück

NEWS

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

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

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

Skript setzt wert nicht richtig zurück

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
3 Beiträge 2 Kommentatoren 744 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.
  • W Offline
    W Offline
    woehrer
    schrieb am zuletzt editiert von
    #1

    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 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      pix
      schrieb am zuletzt editiert von
      #2

      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

      ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

      1 Antwort Letzte Antwort
      0
      • W Offline
        W Offline
        woehrer
        schrieb am zuletzt editiert von
        #3

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

        796

        Online

        32.4k

        Benutzer

        81.6k

        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