NEWS
SayIt - Ausgabe bei MOTION
-
habe den Script "SayIt - Ausgabe bei Wetterwarnung (DWD)" laufen.
nun wollte ich eine Ansage machen wenn der Bewegungsmelder auf der Terasse auslöst.
Leider habe ich es wohl noch nicht verstanden
Hier mein "nicht funktionierender" Script
var idSayIt = "sayit.0.tts.text"; var MOTION = "hm-rpc.0.LEQxxxxxxx.1.MOTION"; subscribe(MOTION, function (obj) { if (obj.newState.val !==true) { setState (idSayIt, "Achtung Bewegung auf der Terasse") ; } if (obj.newState.val ===false) { setState (idSayIt, "Alles wieder ruhig") ; } });
wer kann mir einen Tipp geben?
Gruß
Jürgen
-
Hallo Jürgen,
wie gut, dass ich nichts von js verstehe, aber so etwas würde ich nicht machen:
@derAuge:var MOTION = "hm-rpc.0.LEQxxxxxxx.1.MOTION"; `
Gruß
Rainer
-
ein paar kleine Anpassungen
var idSayIt = "sayit.0.tts.text"; var Bewegung = "hm-rpc.0.LEQxxxxxxx.1.MOTION"; subscribe(Bewegung, function (obj) { if (obj.newState.val ===true) { setState (idSayIt, "Achtung Bewegung auf der Terasse") ; } if (obj.newState.val ===false) { setState (idSayIt, "Alles wieder ruhig") ; } });
Gruß
Jürgen
-
Hallo Jürgen ich kämpfe auch noch mit JS
probiere mal
on('hm-rpc.0.LEQXXXXXXX.1.MOTION', function (obj) { // Bewegung überwachen if (obj.newState.val ===true) { setState (idSayIt, "Achtung Bewegung auf der Terasse") ; } if (obj.newState.val ===false) { setState (idSayIt, "Alles wieder ruhig") ; } });
Gruß Stephan
-
Oder so was.
Immer wenn man Zweifeln hat muss man Debug Ausgaben einbauen:
var idSayIt = "sayit.0.tts.text"; var idBewegung = "hm-rpc.0.LEQxxxxxxx.1.MOTION"; on(idBewegung, function (obj) { log('Bewegung: ' + JSON.stringify(obj.newState)); if (obj.newState.val === true || obj.newState.val === "true" || obj.newState.val === 1 || obj.newState.val === "1") { setState (idSayIt, "Achtung Bewegung auf der Terasse") ; } else { setState (idSayIt, "Alles wieder ruhig") ; } });
-
if (obj.newState.val === true || obj.newState.val === "true" || obj.newState.val === 1 || obj.newState.val === "1") `
Javascript macht doch implizite Typwandlungen. Genügt da nicht die Abfrageif (obj.newState.val)
egal, welche von den 4 Varianten stimmt ?
EDIT: Bei Zeichenketten funktioniert die implizite Typwandlung nicht, da nur leere Zeichenketten (Länge 0) ein false liefern.
-
if (obj.newState.val === true || obj.newState.val === "true" || obj.newState.val === 1 || obj.newState.val === "1") `
Javascript macht doch implizite Typwandlungen. Genügt da nicht die Abfrageif (obj.newState.val)
egal, welche von den 4 Varianten stimmt ?
EDIT: Bei Zeichenketten funktioniert die implizite Typwandlung nicht, da nur leere Zeichenketten (Länge 0) ein false liefern. `
Richtig. Z.B.console.log(!"0")
liefert false.
Auch
console.log(!"false");
liefert false.