ioBroker Skript um zu prüfen, ob die aktuelle Uhrzeit innerhalb eines bestimmten Zeitfensters liegt

Uhrzeit
Lesedauer: 2 Minuten

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.1
 * Erstell-Datum:       15. Mai 2025
 * 
 */
/**
 * Prüft, ob die aktuelle Zeit in einem gegebenen Zeitbereich liegt.
 * Unterstützt auch Zeitbereiche über Mitternacht hinweg.
 *
 * @param {string} startTime - Zeit im Format "HH:mm" oder "HH:mm:ss"
 * @param {string} endTime - Zeit im Format "HH:mm" oder "HH:mm:ss"
 * @returns {boolean} true, wenn aktuelle Zeit im Bereich liegt
 */
function Zeitbereich(startTime, endTime) {
    const now = new Date();

    const parseTime = (timeStr) => {
        const [h, m, s] = timeStr.split(":").map(v => parseInt(v, 10) || 0);
        const d = new Date(now);
        d.setHours(h, m, s || 0, 0);
        return d;
    };

    const start = parseTime(startTime);
    const end = parseTime(endTime);

    if (end > start) {
        // Zeitbereich im selben Tag
        return now >= start && now <= end;
    } else {
        // Zeitbereich über Mitternacht, z. B. 22:00–06:00
        return now >= start || now <= end;
    }
}

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.

Wie hat Dir der Beitrag gefallen?
Bewertung: 4.3/5 - abgegebene Bewertungen: 3

5 Gedanken zu „ioBroker Skript um zu prüfen, ob die aktuelle Uhrzeit innerhalb eines bestimmten Zeitfensters liegt

  1. Reinhold Antworten

    Hallo, nettes Skript, danke dafür.
    Darf ich für Zeile 48 vorschlagen:
    valid_time_frame = currentDate >= startDate && currentDate <= endDate;
    Zeile 51 ebenso mit Negation.

    • Stephan Autor des BeitragsAntworten

      Hallo Reinhold,
      danke für die Inspiration – ich habe das Skript nun redesigned und es sollte so noch besser funktionieren! 😉

      Gruß,
      Stephan

  2. T. Antworten

    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.

    • Stephan Autor des BeitragsAntworten

      Hallo T.,
      Bevor Du solche Behauptungen aufstellst, würde ich empfehlen, sich einmal mit Programmierung auseinander zu setzen.

      Gruß,
      Stephan

  3. Pingback: HomeMatic Sprachausgabe mit Alexa, ioBroker und JavaScript | Kreyenborg.koeln

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert