NEWS
Telegram mehrfach Nachricht und Logikproblem
-
Hi,
folgende Situation. Ich habe 2 Türkontakte. Einen am Türgitter und einem an der Wohnungstür. Wenn sich ein Zustand des Contactevents ändert prüfe ob beide Türen offen sind. Wenn das der Fall ist schick mir nach 10 Sekunden eine Nachricht. Funktioniert auch. Aber meisstens ist es der Fall das man erst die Wohnungstür und dann das Gitter öffnet. Gibt also 2 Nachrichten per Telegram. Hier ist mein Skript:Wenn ich jetzt eine Objekt ID oben ersetze durch
bekomme ich gar kein debug. Er wird keine Veränderung des Zustands erkannt.Was mache ich falsch
?
Danke im vorraus
-
@bastian888
Deine 2 Events haben den selben Namen, könnte schon mal ein Problem sein. Dann setzte mal ein stop timeout vor den Timeout.
Deine Logik ist auch eher unlogisch. Du prüfst 2 mal auf nicht war und das Ergebnis UND. Ich würde zu erst UND und dann nicht wahr prüfen. -
@Jan1 Vielen Dank für die schnelle Antwort.
Was bringt mir der stop timeout davor ?
Und wie überprüfe ich erst UND und dann beide nicht wahr ?Hier nochmal der JS Code
var timeout; on({id: new RegExp('zigbee\\.0\\.00158d00032b7626\\.contact' + "|" + 'zigbee\\.0\\.00158d00031b3589\\.contact'), change: "ne"}, function (obj) { timeout = setTimeout(function () { if (getState("zigbee.0.00158d00031b3589.contact").val == false && getState("zigbee.0.00158d00032b7626.contact").val == false) { sendTo("telegram.1", "send", { text: 'Türgitter ist offen' }); } }, 10000); });
-
@bastian888
Der stop timeout verhindert, dass der timeout mehrfach läuft und die UND Verknüpfung einfacher zuerst.
Wobei das Problem wohl eher von den gleichen Namen verursacht wird. Ich denke Du bekommst wohl immer 2 Meldungen oder? -
@Jan1
Ja immer zwei Nachrichten. Habe mal einen anderen State genommen und bekomme trotzdem zwei Meldungen.
Denke der triggert halt weil die Türen mit ein paar Sekunden Unterschied geöffnet werden. -
@bastian888 sagte:
Denke der triggert halt weil die Türen mit ein paar Sekunden Unterschied geöffnet werden.
Ja, wenn innerhalb der 10 s Verzögerung der 2. Kontakt triggert, laufen 2 Timer. Das kann man durch ein stop timeout vor dem Ausführen timeout verhindern.