Mit ioBroker und JavaScript lässt sich (fast) alles einstellen, umstellen, kontrollieren oder überwachen. Mit diesem Skript kannst Du eine Funktion implementieren, die prüft, ob die aktuelle Uhrzeit im Bereich einer Zeitspanne liegt. Diese arbeitet auch tagübergreifend. So kann eine Startzeit bei 05:00:00 liegen und um 04:30:00 enden. Somit ist klar, das der Endzeitpunkt am nächsten Tag liegt.
Skript in ioBroker anlegen
Dieses Skript legst Du am Besten wieder im global Bereich an, damit es auch von anderen Skripten im common Bereich genutzt werden kann.
/* * @copyright 2020 Stephan Kreyenborg <stephan@kreyenborg.koeln> * * @author 2020 Stephan Kreyenborg <stephan@kreyenborg.koeln> * * Dieses Skript dient zur freien Verwendung in ioBroker zur Verbrauchserfassung der Shelly Geräte. * Jegliche Verantwortung liegt beim Benutzer. Das Skript wurde unter Berücksichtigung der bestmöglichen Nutzung * und Performance entwickelt. * Der Entwickler versichert, das keine böswilligen Systemeingriffe im originalen Skript vorhanden sind. * * Sollte das Skript wider Erwarten nicht korrekt funktionieren, so hast Du jederzeit die Möglichkeit, Dich auf * https://www.kreyenborg.koeln * für Unterstützung zu melden. Jedes Skript besitzt seine eigene Kommentarseite, auf der, * nach zeitlicher Möglichkeit des Autors, Hilfe angeboten wird. Ein Anrecht hierauf besteht nicht! * * Ansprüche gegenüber Dritten bestehen nicht. * * Skript Name: Zeitbereich * Skript Version: 1.0 * Erstell-Datum: 16. April 2020 * */ function Zeitbereich(startTime,endTime) { // Aktuelles Datum abholen var currentDate = new Date(); // Startdatum formatieren var startDate = new Date(currentDate.getTime()); startDate.setHours(startTime.split(":")[0]); startDate.setMinutes(startTime.split(":")[1]); if (startTime.split(":")[2]) { startDate.setSeconds(startTime.split(":")[2]); } // Enddatum formatieren var endDate = new Date(currentDate.getTime()); endDate.setHours(endTime.split(":")[0]); endDate.setMinutes(endTime.split(":")[1]); if (endTime.split(":")[2]) { endDate.setSeconds(endTime.split(":")[2]); } //Setze Zeitbereich zurück var valid_time_frame = false if (endTime > startTime) { // Zeitbereich ist im gleichen Tag valid_time_frame = (currentDate >= startDate && currentDate <= endDate) ? true : false; } else { // Zeitbereich endet im nächsten Tag valid_time_frame = (currentDate >= endDate && currentDate <= startDate) ? false : true; } return valid_time_frame; }
Andere Skripte können nun die Funktion Zeitbereich(start,ende);
nutzen.
Der Funktionsaufruf ist wie folgt:
if (Zeitbereich("05:00:00","04:30:00")) { // Zeitbereich zwischen 5 Uhr morgens und 4:30 Uhr des nächsten Morgens // Hier kannst Du etwas ausführen lassen, was zu dem Zeitraum passt. } if (Zeitbereich("09:00:00","13:00:00")) { // Zeitbereich zwischen 9 Uhr morgens und 13:00 Uhr mittags // Hier kannst Du etwas ausführen lassen, was zu dem Zeitraum passt. } oder ohne Sekunden if (Zeitbereich("09:00","13:00")) { // Zeitbereich zwischen 9 Uhr morgens und 13:00 Uhr mittags // Hier kannst Du etwas ausführen lassen, was zu dem Zeitraum passt. }
Dieses Skript lässt sich hervorragend mit meinem Beitrag:
HomeMatic Sprachausgabe mit Alexa, ioBroker und JavaScript verwenden.
Hallo,
in der Zeile 46 ist der Ausdruck
if (endTime > startTime)
wobei endTime und startTime ein String ist.
Das kann m. E. nicht sauber funktionieren.
Gruß T.
Hallo T.,
Bevor Du solche Behauptungen aufstellst, würde ich empfehlen, sich einmal mit Programmierung auseinander zu setzen.
Gruß,
Stephan
Pingback: HomeMatic Sprachausgabe mit Alexa, ioBroker und JavaScript | Kreyenborg.koeln