NEWS
HM Aktor nach Astro einschalten und zu einer definierten Uhrzeit ausschalten
-
Hallo zusammen,
ich bin neu hier im Forum und auch in der Homematic und iobroker "Welt". "Blut" geleckt habe ich, mal sehen ob und wann eine Ernüchterung eintritt…
Ich habe keine spezielle Sektion/Unterforum mit einer Scriptsammlung gefunden, will aber meinen aktuellen Stand meines Scriptes mit Euch teilen, vielleicht hilft es dem einen oder anderen.
Das Script schaltet Homematic Aktoren in Abhängigkeit der Astro Funktion, also z.B. bei Abenddämmerung, und setzt den ON_TIME Wert des Aktors um den Aktor nach einer definierten Anzahl von Sekunden auszuschalten. Der ON_TIME Wert errechnet sich nach der Differenz der Angabe der Uhrzeit der gewünschten Ausschaltzeit und der Astro Auslösung (z.B. dusk), also z.B. heute Nacht um 01:00:00 Uhr.
Ich habe das Script so "benutzerfreundlich" wie mir möglich geschrieben, so dass man einfach den Tag und die Uhrzeit der Ausschaltung angeben kann.
Da ich ja neu in den beiden "Welten" bin, habe ich zur Zeit nur einen Aktor, so dass ich mir ein Array für die Aktoren gespart habe.
/* Mit Hilfe dieses Scriptes wird in Abhängigkeit der Astrofunktion Licht eingeschaltet und eine Ausschaltverzögerung (in Sekunden) mitgegeben. Sollte der Lichtschalter anschließend manuell geschaltet werden, so wird der ON_TIME Wert ignoriert. Hierdurch wird immer Morgens der Status des Lichts geprüft und ggf. ausgeschaltet Aktueller Scriptstand: - astro: dusk --> Licht einschalten und Ausschaltverzögerung setzen - Nachts um 01:00 Uhr wird das Licht automatisch ausgeschaltet (Ausschaltverzögerung) - astro: nightEnd --> ON_TIME Wert auf Default setzen und wenn Licht eingeschaltet dieses ausschalten */ // -------------- Start: Hier werden die benutzerfefinierten Parameter angegeben -------------- // Zu schaltende Aktoren in Variablen einlesen var idLichtTerrasseState = "hm-rpc.0.NEQXXXXXXX.1.STATE"/*Licht_Terrasse.STATE*/, idLichtTerrasseDauer = "hm-rpc.0.NEQXXXXXXX.1.ON_TIME"/*Licht_Terrasse.ON_TIME*/; // Uhrzeit der Ausschaltung angeben (Format HH:MM:SS) var strAusschaltzeit = "01:02:03"; /* Tagesdifferenz der Ausschaltung angeben, indem der angebene Wert in Tagen auf das aktuelle Datum addiert wird. Bei Angabe einer 0 ist der Ausschalttag der gleiche Tag wie z.B. das Event astro :dusk. Bei Angabe einer 1 ist der Ausschalttag der nächste Tag wie z.B. das Event astro :dusk. */ var intAusschaltzeitTage = 1; // -------------- Ende: Hier werden die benutzerfefinierten Parameter angegeben -------------- // Funktion um Tage zu einem Datum zu addieren oder substrahieren function addDays(theDate, days) { return new Date(theDate.getTime() + days*24*60*60*1000); } // Arrays für spätere Verwendung erzeugen var arrAusschaltzeit = strAusschaltzeit.split(":"); // Ausführen wenn Abenddämmerung schedule({astro: "dusk"}, function () { // Benötigte Variablen definieren und zum Ereigniszeitpunkt, z.B. dusk setzen // Heute bestimmen var today = new Date(), // Morgen bestimmen tomorrow = addDays(new Date(), intAusschaltzeitTage), // Ausschaltzeit für anschließende Verwendung zwischenspeichern offtime = new Date(tomorrow.getFullYear(), tomorrow.getMonth(), tomorrow.getDate(), parseInt(arrAusschaltzeit[0]), parseInt(arrAusschaltzeit[1]), parseInt(arrAusschaltzeit[2])), // ON_TIME Wert für Homematic Aktor in Sekunden berechnen ontime = parseInt((offtime.getTime() - today.getTime()) / 1000); // Licht Terrasse wenn eingeschaltet dann ausschalten, da ansonsten der ON_TIME Wert nicht aktiviert wird if (getState(idLichtTerrasseState).val) setState(idLichtTerrasseState,false); // ON_TIME auf errechneten Sekundenwert setzen setState(idLichtTerrasseDauer,ontime); log("Ausschaltverzögerung auf " + ontime + " Sekunden gesetzt"); // Licht Terrasse einschalten setState(idLichtTerrasseState,true); log("Außenlicht eingeschaltet"); }); // Ausführen wenn Astro Morgendämmerung schedule({astro: "dawn"}, function () { // Licht Terrasse ON_TIME auf default setzen setState(idLichtTerrasseDauer,0); // Licht Terrasse einschalten wenn ausgeschaltet if (getState(idLichtTerrasseState).val) setState(idLichtTerrasseState,false); log("Außenlicht bei Morgendämmerung ausgeschaltet"); });
VG
Michael