ioBroker Astrozeiten in VIS anzeigen

In diesem Artikel zeige ich Dir, wie ich eine Anzeige für die verschiedenen Astrozeiten in ioBroker VIS integriert habe.

Zu gewissen Astro-Zeitpunkten werden bei uns im Haus Leuchtmittel ein- oder ausgeschaltet. In meiner VIS Visualisierung wollte ich dazu nun die direkten Uhrzeiten für jeden Tag darstellen.

Für die automatische Lichtsteuerung nutze ich z.B. folgenden Script-Code:

schedule({astro: "sunriseEnd", shift: 0},  function () {
  setState("hm-rpc.0.OEQ0333442.1.STATE",false);
  setState("hue.0.Philips_hue.KugellampeWZ.on",false);
});

Im oben gezeigten JavaScript-Code wird über die schule-Funktion beim Eintreten der Astrozeit „sunriseEnd“ die Leuchtmittel über die setState-Funktion ausgeschaltet. Soweit funktioniert das auch problemlos.

Um nun den konkreten Zeitpunkt für das Ausschalten in der Visualisierung anzeigen zu können, habe ich mir nun im ersten Schritt ein neues JavaScript erstellt, welches die Datenpunkte anlegt und jeden Tag automatisch die Astrozeitpunkte ermittelt.

Die Funktion updateAstroData() ermittelt mittels der suncalc-Bibliothek anhand des aktuellen Tages sowie der GPS-Koordinaten die jeweiligen Astrozeiten. In der For-Schleife werden die ermittelten Werte dann in die Datenpunkte geschrieben. Hierbei werden auch die Datenpunkte angelegt, falls sie noch nicht vorhanden sind.

Über den schedule() Block ob im Script wird die Funktion updateAstroData() jede Nacht um 0:05 Uhr automatisch aufgerufen. Somit stehen die aktualisierten Astrozeiten für den neuen Tag zur Verfügung.

schedule({hour: 0, minute: 5}, createAstroData );

function createAstroData() {
    var suncalc = require('suncalc');
    var d = new Date();

    var times = suncalc.getTimes(d,48.802332199999995,9.0593212);
    
    for (var t in times) {
        var time = times[t];
 
        var Hour = times[t].getHours();
        var Minute = times[t].getMinutes();
        
        if ( Hour < 10 ) { Hour = "0"+Hour; }
        if ( Minute < 10 ) { Minute = "0"+Minute; }
        
        var TimeString = Hour + ':' + Minute;
        var objectName = '0_userdata.0.Astrozeiten.'+t;

        if ( !existsState(objectName )) {
            createState(objectName,TimeString,{name: "Astrozeit",  type: 'string', role: 'value'}, function () {}); 
        } else {
            setState(objectName,TimeString);
        }
    }
}

createAstroData();

Nach dem Ausführen des Scripts wechseln wir in die Objekte und öffnen nun den Bereich javascript.0.Datenpunkte.0.Astrozeit. In diesem Ordner werden die Datenpunkte angelegt und direkt mit dem Zeitpunkt versehen.

In der View können wir nun einfach auf die angelegten Datenpunkte zugreifen und wie hier z.B. die Zeitpunkte für das sunset darstellen. Für die Darstellung auf der View verwende ich hierfür ein einfaches Basic-String-Widget. Über die Objekt-ID kannst Du dann die entsprechenden Datenpunkte der Astrozeiten wählen uns hier darstellen. In meinem Beispiel zeige ich hier relevante Zeiten für die Steuerung der Beleuchtung.

Ich hoffe euch gefällt dieser Artikel. Über Kritik, Lob oder Anregungen zum Thema freue ich mich wie immer. Schreibt mir dazu gerne einen Kommentar oder sendet eine E-Mail 🙂

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

Schreibe einen Kommentar

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