NEWS
Alarm Ansage mit Wiederholung per Script
-
Hallo,
ich habe eine per vpn eingebundene ccu2 in den iobroker eingebunden. Wenn dort Alarm ausgelöst wird, wird die Variable (Systemintern, bereits vorhanden) "hm-rega.1.alarms" auch von 0 auf 1 gesetzt. In Vis gesetzte Bilder werden entsprechend signalisiert.
Per Sayit lasse ich dann "Alarm" sagen. Das solle sich alle 2 Minuten wiederholen.
Leider wird das ganze nur 1x wiederholt, dann ist schluss.
Gleiches Script verwende ich, wenn die Haustür zu lange geöffnet ist. Dort funktioniert das Script exakt, d.h. die Ansage "Tür zu lange offen" kommt fortwährend. Variable dort "hm-rpc.0.LEQ0000000.1.STATE".
Kann mir jemand noch ein Tipp geben, wie ich eine MP3 (Alarmsirene) mit starten kann? in Sayit kann ich nur einen Gong oder einen vorgegebenes Signal ("Sci-Fi") vor der Ansage starten.
var idSayIt = "sayit.1.tts.text"; // Hier die entsprechende SayIt Text ID var idSayIt2 = "sayit.2.tts.text"; // Hier die entsprechende SayIt Text ID var idButton = "hm-rega.1.alarms"; // Test ID var lastSay = null; var timer = null; // Bei Tastendruck wird folgender Text gesprochen subscribe(idButton, function (obj) { if (obj.newState.val) { if (!lastSay || ((new Date()).getTime() - lastSay) > 3000) { lastSay = (new Date()).getTime(); setState (idSayIt, "de;50;Alarm"); } // Starte timer für 2 Minuten if (!timer) { timer = setTimeout(function () { timer = null; setState (idSayIt2, "de;50;Alarm"); setState (idSayIt, "de;50;Alarm"); }, 120000); } } else { // Alarm beendet. Falls timer läuft = stopp if (timer) { clearTimeout(timer); timer = null; } } });
-
Vielleicht bin ich jetzt zu schnell, arbeite mich selber gerade erst in JavaScript ein. Aber muß das nicht setInterval heißen statt setTimeout
-
Na ja, bei meiner Haustür hat es bisher zumindest seit 9 Monaten problemlos funktioniert.
Ich habe gerade bei der Haustür getestet:
Hier gibt's auch keine Wiederholungen mehr! Das muss mit dem Update des Javascript-Adapters erfolgt sein….
ich muss mal lesen, wie ich diesen downgrade...
-
So gehts
// Einstellungen createState('javascript.1.alarm.triggertest', false, { read: true, write: true, name: "Löckengelöt", type: "boolean", def: false }); var idSayIt = "sayit.1.tts.text"; // Hier die entsprechende SayIt Text ID var idButton = 'javascript.1.alarm.triggertest'; // Test ID var timer; var maxrepeat = 5; // maximale Anzahl der Wdh. der Ansage var interval = 10; // Abstand zwischen den Ansagen in Sekunden // function function repeatAlarm(){ count--; if(count > 0){ setState(idSayIt, "de;10;Dies ist ein Testalarm"); log("Der Testalarm wird noch "+count +" mal ausgeführt." ); } else { clearInterval(timer); log("Interval nach Ablauf der maximalen Anzahl beendet"); setState(idButton, false); } } // Trigger on({id: idButton, change: "ne"}, function(obj){ if(obj.state.val) { count = maxrepeat; timer = setInterval(repeatAlarm, interval * 1000); } else { clearInterval(timer); log("Manuell beendet"); setState(idButton, false); } });
-
Hallo,
untertänigsten Dank! Das ist es! Ich habe es so zum Laufen bekommen:
var idSayIt0 = "sayit.0.tts.text"; // Hier die entsprechende SayIt Text ID var idSayIt3 = "sayit.3.tts.text"; // Hier die entsprechende SayIt Text ID //var idButton = 'javascript.1.alarm.triggertest'; // Test ID var idButton = 'hm-rega.1.alarms'; // Test ID var timer; var maxrepeat = 5; // maximale Anzahl der Wdh. der Ansage var interval = 30; // Abstand zwischen den Ansagen in Sekunden // function function repeatAlarm(){ count--; if(count > 0){ setState(idSayIt0, "de;70;Alarm"); setState(idSayIt3, "de;70;Alarm"); log("Der Alarm wird noch "+count +" mal ausgeführt." ); } else { clearInterval(timer); log("Interval nach Ablauf der maximalen Anzahl beendet"); setState(idButton, false); } } // Trigger on({id: idButton, change: "ne"}, function(obj){ if(obj.state.val) { count = maxrepeat; timer = setInterval(repeatAlarm, interval * 1000); } else { clearInterval(timer); log("Manuell beendet"); setState(idButton, false); } });
-
Das ist doch schön. Setze bitte das Topic dann auf [gelöst] (erstes Posting editeren, Betreff anpassen)
-
Hallo Profis:
Ich komm einfach nicht weiter. Seh bestimmt den Wald vor lauter Bäume nicht
Ich möchte durch einen Tastendruck dass ein Text für einen bestimmte Anzahl angesagt wird.
Hab jetzt als Sayit einfach eine Logausgabe angeben um um zu testen.
Wenn ich dass so laufen lasse, startet der Prozess immer von neuem, möchte aber dass er einmal durchläuft.
In diesem Fall soll sich also die Logausgabe 5 mal wiederholen, mit einer Pause von 3 Sekunden zwischen den Ausgaben und danach auf einen weiteren Tastendruck warten.
Gruß
Stephan
var idButton = "hm-rpc.0.NEQ0929126.8.PRESS_SHORT"; var timer; var maxrepeat = 5; // maximale Anzahl der Wdh. der Ansage var interval = 3; // Abstand zwischen den Ansagen in Sekunden // function function repeatAlarm(){ count--; if(count > 0){ log("Der Alarm wird noch "+count +" mal ausgeführt." ); } else { clearInterval(timer); log("Interval nach Ablauf der maximalen Anzahl beendet"); setState(idButton, false); } } // Trigger on({id: idButton, change: "ne"}, function(obj){ if(obj.state.val) { log("Tastendruck"); count = maxrepeat; timer = setInterval(repeatAlarm, interval * 1000); } else { clearInterval(timer); log("Manuell beendet"); setState(idButton, false); } });
-
Ein HM-Taster (PRESS_SHORT) liefert immer true. Versuche es mal so:
var idButton = "hm-rpc.0.NEQ0929126.8.PRESS_SHORT"; var timer; var maxrepeat = 5; // maximale Anzahl der Wdh. der Ansage var interval = 3; // Abstand zwischen den Ansagen in Sekunden var count = 0; function repeatAlarm(){ count--; if(count > 0){ log("Der Alarm wird noch "+count +" mal ausgeführt." ); } else { clearInterval(timer); log("Interval nach Ablauf der maximalen Anzahl beendet"); } } // Trigger on({id: idButton}, function(){ log("Tastendruck"); if(count > 0) { clearInterval(timer); // Abbruch bei erneutem Tastendruck count = 0; } else { count = maxrepeat; repeatAlarm(); timer = setInterval(repeatAlarm, interval * 1000); } });
-
Hallo Paul,
das wars, nachdem ich die variable "count" noch deklariert habe, lauft es.
Vielen leiben Dank …..
Gruß
Stephan