NEWS
BestPractis für "doppeltes on"?
-
Hi zusammen,
wie kan ich es am besten Lösen, dass ich wenn ein Schlüssel "Alarm Aus" gesendet hat und dann die Tür (mit Sensor) aufgeht, ich meine Sprachansage starte?
Im Prinzip benötige ich ein doppeltes on(…).
Aber das geht ja nicht in Abhängigkeit. Meistens habe ich ein on(..) und dann ein if (...). Hier reicht mir das aber nicht. Hoffe das man mich versteht!
Danke für einen Tipp.
So long,
Fiti
-
ehrlich gesagt:
ich habs nicht verstanden.
Wenn du 2 x on brauchst, dann schreib 2 x on.
Wenn du 1 x on brauchst, aber verschiedene Bedingungen dann schreib mehrere if.
Was brauchst du genau ?
-
Im Prinzip benötige ich ein doppeltes on(…).
Aber das geht ja nicht in Abhängigkeit. Meistens habe ich ein on(..) und dann ein if (...). `
Ich hoffe, dass ich es richtig interpretiere ?var v1 = getState(id1).val; var v2 = getState(id2).val; function auswertung() { if(v1 und v2 auswerten) { mache was } } // Script start auswertung(); on(id1, function(dp) { v1 = dp.state.val; auswertung(); }); on(id2, function(dp) { v2 = dp.state.val; auswertung(); });
-
wenn ein Schlüssel "Alarm Aus" gesendet hat und dann die Tür (mit Sensor) aufgeht, ich meine Sprachansage starte? `
Wenn die Reihenfolge entscheidend ist (erst "Alarm aus", dann Tür Auf):var v1 = getState(id1).val; // Schlüssel on(id1, function(dp) { // Schlüssel v1 = dp.state.val; }); on({id: id2, val: true}, function() { // Tür Auf if(v1) { mache was v2 = false; } });
Wenn die Ansage nur beim ersten Türöffnen nach "Alarm aus" erfolgen soll:
var v1 = getState(id1).val; // Schlüssel var v2 = false; // Ansagefreigabe on(id1, function(dp) { // Schlüssel v1 = dp.state.val; if(v1) v2 = true; }); on({id: id2, val: true}, function() { // Tür Auf if(v1 && v2) { mache was v2 = false; } });
-
Wenn die Ansage nur beim ersten Türöffnen nach "Alarm aus" erfolgen soll: ` Treffer. Genau so.
@paul53:var v1 = getState(id1).val; // Schlüssel var v2 = false; // Ansagefreigabe on(id1, function(dp) { // Schlüssel v1 = dp.state.val; if(v1) v2 = true; }); ```` `
Den Teil verstehe ich noch nicht. Ich rede von dem HM 4 Tasten Schlüssel für Alarmanlage o. ä.
Du holst DIr erst einmal in v1 den aktuellen Wert des Schlüssels - aber nur beim Skriptstart… hmmm, wozu?
v1 = dp.state.val... was macht "state"?
Na ich spiele etwas rum und teste mal.- Die Idee der Ansagefreigabe ist sehr gut. Hatte mich zu sehr in den Ablauf
on (event1 && event2 ) verrant.
-
Du holst DIr erst einmal in v1 den aktuellen Wert des Schlüssels - aber nur beim Skriptstart… hmmm, wozu? `
Das ist in diesem Fall nicht erforderlich. Allerdings muss die Variable v1 im Skript global deklariert werden, da sie in einer Funktion verändert und in einer anderen Funktion ausgewertet wird.
@Fitti:v1 = dp.state.val… was macht "state"? `
dp.state.val entspricht getState(id).val; bei on(id, function(dp) {…}) wird das Datenpunktobjekt dp inkl. state (=newState) und oldState an die Callback-Funktion übergeben.Das Skript lässt sich verkürzen:
var v1 = false; // Ansagefreigabe on({id: id1, val: true}, function() { // Schlüssel v1 = true; }); on({id: id2, val: true}, function() { // Tür Auf if(v1) { mache was v1 = false; } });
-
Danke! Schon deutlich klarer.
Beim Testen, ob ein Wert wahr ist:
on({id: id1, val: true},
schreibt man val und true jeweils OHNE ' (einfaches Anführungszeichen) , richtig?
Verwirrt mich immer, da in der OnlineDoku es anders steht. Bei einem
change: 'lt' ````wäre es so richtig, stimmts?
-
schreibt man val und true jeweils OHNE ' (einfaches Anführungszeichen) , richtig? `
Ja, die Bezeichner (z.B. val) werden ohne Anführungszeichen geschrieben (vielleicht funktioniert es auch mit ' ?). true ist ein boolscher Wert, kein String.change: 'lt'
'lt' ist ein String; es kann keine boolscher Wert (boolean) und keine Zahl (number) sein.