NEWS
[gelöst]: Nur in bestimmten Zeitbereichen on({id …}
-
Blöde Frage:
Ausgelöst durch ein Ereignis soll es starten … aber eben nur, wenn es in einem bestimmten Uhrzeit ist (8-18 Uhr).
Wie schränke ich das ein??? Habe da irgendwie keine Idee dazu ...
on({id: "hm-rpc.3.000xxxxxxxx.1.MOTION"}, function (obj) { //nur von 8-10 Uhr gewünscht - nicht immer. sendTo('telegram.0', 'Test'); // })
PS:
Kann man auch mehrere on - Kommando als ODER angeben … oder muss ich jede einzeln kopieren (wenn nachfolgende Aktionen immer gleich sind).
-
Blöde Frage:
Ausgelöst durch ein Ereignis soll es starten … aber eben nur, wenn es in einem bestimmten Uhrzeit ist (8-18 Uhr).
Wie schränke ich das ein??? Habe da irgendwie keine Idee dazu ...
on({id: "hm-rpc.3.000xxxxxxxx.1.MOTION"}, function (obj) { //nur von 8-10 Uhr gewünscht - nicht immer. sendTo('telegram.0', 'Test'); // })
PS:
Kann man auch mehrere on - Kommando als ODER angeben … oder muss ich jede einzeln kopieren (wenn nachfolgende Aktionen immer gleich sind). `
Hmm, mit ner IF abfangen ?
Probier mal:
on({id: "hm-rpc.3.000xxxxxxxx.1.MOTION"}, function (obj) { //nur von 8-10 Uhr gewünscht - nicht immer. if (compareTime('08:00', null, ">", null) && compareTime('10:00', null, "<", null)) { sendTo('telegram.0', 'Test');; } // })
Diese frage verstehe ich net
> Kann man auch mehrere on - Kommando als ODER angeben … oder muss ich jede einzeln kopieren (wenn nachfolgende Aktionen immer gleich sind).
-
Hi,
oder so….
eine Funktion (eigentlich 3 - gehören aber zusammen ) für time in range. Gibt es auch für den DatumsCheck:
hier: http://www.iobroker.net/docu/?page_id=3591&lang=de
Aufruf z.B.
var zeit1von = "17:00:00"; // Uhrzeit von
var zeit1bis = "21:30:00"; //Uhrzeit bis
if(isTimeInRange(zeit1von , zeit1bis )) {
// Code ausführen wenn true
}
vG looxer
!
! //----------------------------------------------------------------------------------------------------- // 3 Funktionen zum Zeitrange check zur Prüfung ob die Schaltungszeiten erreicht sind // Autor ist Beatz - uebernommen aus: // viewtopic.php?f=21&t=1072&p=11167&hilit=isTimeInRange&sid=4dca8ea2c7f9337cdc73a1a9e4824a40#p11167 //----------------------------------------------------------------------------------------------------- function isTimeInRange(strLower, strUpper) { var now = new Date(); var lower = addTime(strLower); var upper = addTime(strUpper); var inRange = false; if (upper > lower) { // opens and closes in same day inRange = (now >= lower && now <= upper) ? true : false; } else { // closes in the following day inRange = (now >= upper && now <= lower) ? false : true; } return inRange; } ! function currentDate() { var d = new Date(); return new Date(d.getFullYear(), d.getMonth(), d.getDate()); } function addTime(strTime) { var time = strTime.split(':'); var d = currentDate(); d.setHours(time[0]); d.setMinutes(time[1]); d.setSeconds(time[2]); return d; } !
-
Perfekt :-). Vielen Dank.
zu PS: Ich meinte, ob man mehrere Geräte mit && oder ODER auch verknüpfen kann …
on({id: "hm-rpc.0.xxxxx.1.MOTION" && id: "hm-rpc.0.xxxxx.1.MOTION"}, function (obj) { //Code } });
-
Ich meinte, ob man mehrere Geräte mit && oder ODER auch verknüpfen kann … `
Nein, das geht nicht.Du kannst aber zB alle Geräte eines Gewerks abfragen:
http://forum.iobroker.net/viewtopic.php?f=21&t=1321
Grundsätzlich kannst du aber den Code, der ausgeführt werden soll, in eine Funktion packen.
function tueDies() { Befehle .... } on(id1, function(obj) { tueDies(); }); on(id2, function(obj) { tueDies(); }); on(id3, function(obj) { tueDies(); });
Gruß
Pix
-
Ich meinte, ob man mehrere Geräte mit && oder ODER auch verknüpfen kann … `
Mittels http://forum.iobroker.net/viewtopic.php?f=21&t=2251&p=19529#p19529 ist es möglich.on(/^hm-rpc\.0\.(xxxxx&yyyyy)\.1\.MOTION$/, function (obj) { //Code });
-
Perfekt :-). Ist doch immer genial, was alles geht.
-
Hallo,
ich bin auf der Suche nach dem TimeRange Skript… kann es hier im Forum nicht (mehr) finden
Leider führen beide Links von hier - sowohl für Zeitbereich wie auch Datumsbereich - versehentlich zum identischen Skript.
http://www.iobroker.net/docu/?page_id=3591&lang=de
Vielen Dank.
Gruß
Thomas
-
Hallo,
ich bin auf der Suche nach dem TimeRange Skript… kann es hier im Forum nicht (mehr) finden
Leider führen beide Links von hier - sowohl für Zeitbereich wie auch Datumsbereich - versehentlich zum identischen Skript.
http://www.iobroker.net/docu/?page_id=3591&lang=de
Vielen Dank.
Gruß
Thomas `
Time Range Script:
! // isTimeInRange
! function currentDate() {
! var d = new Date();
! return new Date(d.getFullYear(), d.getMonth(), d.getDate());
! }
! function addTime(strTime) {
! var time = strTime.split(':');
! var d = currentDate();
! d.setHours(time[0]);
! d.setMinutes(time[1]);
! d.setSeconds(time[2]);
! return d;
! }
! function isTimeInRange(strLower, strUpper) {
! var now = new Date();
! var lower = addTime(strLower);
! var upper = addTime(strUpper);
! var inRange = false;
! if (upper > lower) {
! // opens and closes in same day
! inRange = (now >= lower && now <= upper) ? true : false;
! } else {
! // closes in the following day
! inRange = (now >= upper && now <= lower) ? false : true;
! }
! return inRange;
! }
! // isTimeInRange ENDE
! createState('Sayit.Trigger', false, {
! name: 'Sayit-Ansage bei Bewegung steuern',
! type: 'boolean'
! });
! createState('Sayit.Zeitsteuerung', false, {
! name: 'Sayit-Ansage nur innerhalb Zeitfenster schalten',
! type: 'boolean'
! });
! var idBewegung = "hm-rpc.0.MEQ1849741.3.MOTION",
! idTrigger = 'Sayit.Trigger';
! on({id: idBewegung, val: true}, function (obj) {
! if ( isTimeInRange('06:00:00', '06:45:00') || isTimeInRange('07:00:00', '07:45:00') || isTimeInRange('8:30:00', '9:15:00')) setState(idTrigger, true); // Trigger auslösen
! });
! // Zurücksetzen vom Trigger
! schedule("46 6 * * *", function () {
! setState(idTrigger, false);
! });
! schedule("46 7 * * *", function () {
! setState(idTrigger, false);
! });
! schedule("16 9 * * *", function () {
! setState(idTrigger, false);
! });