zurück zur Startseite

zurück zur Übersicht der Heimautomatisierung

18. Der Sonnenstand (Stand 07.09.2018)

Wenn es um die Automatisierung geht, dann muss das System häufig wissen, wie hell oder dunkel es ist. Dazu kann man nun Sensoren einbauen, aber die Macher von FHEM haben eine geniale Funktion namens "Twilight" eingebaut, so dass man sich diese Ausgabe sparen kann.

define Daemmerung Twilight 49.396721 8.216771 0 20099608
# Zahlen sind Latitude Lontitude, Indoor, WetterID

Die Länge und Breite für seinen Wohnort findet man bequem im Internet. Die Zahl für Indoor kann zwischen 0 (im Freien) und 6 (Zimmer mit kleinem Fenster) liegen. Aus der WetterID wird eine Korrektur berechnet (siehe FHEM Commandref), man kennt es ja, dass sich bei schlechtem Wetter auch tagsüber mal die Straßenbeleuchtung einschaltet, weil es dunkel wird.

Als Ergebnis kann man entweder den Parameter (diese Werte werden hier Reading genannt) „twilight“ oder „twilight_weather“ verwenden. In beiden Fällen wird ein Wert zwischen 0 (tiefste Nacht) und 100 (strahlender Sonnenschein) gemeldet.

So schön diese Funktion auch ist: sie benötigt zwingend einen kontinuierlichen Internetzugang. Da mein Haus aber mittlerweile nicht mehr am Internet hängt, funktioniert das nicht mehr und führt auch noch zu vielen Fehlermeldungen. Außerdem bekomme ich eine Meldung zur Helligkeit und nicht zur Sonneneinstrahlung. Alternativ kann man die Funktion isday() nutzen, die in FHEM zur Verfügung steht.

isday() liefert den Wert 1, wenn es Tag ist, und den Wert 0 für die Nacht. Es orientiert sich dabei an dem Sonnenaufgang, bzw. -untergang, sowie an der geografischen Länge und Breite des Standorts, die man wie bei Twilight einmalig eingeben muss. Dies sind 2 Attribute, die man über die FHEM-Eingabezeile definiert:

attr global latitude 47.672391
attr global longitude 9.167271

Leider hilft mir das auch nicht weiter, denn ich möchte nur bei direkter Sonneneinstrahlung (Treibhauseffekt) den Rollladen (teilweise) schließen, sofern es im Zimmer zu warm ist. Also werfen wir mal die Suchmaschinen an.

Und siehe da: schon der 3. Eintrag Berechnung von Sonnenhöhe und Azimut ist genau das, was ich suche. Anhand des Datums und der Uhrzeit, sowie der geografischen Länge und Breite bekomme ich die 2 Winkel "Höhe" und "Azimut". Je nach Ausrichtung des Fensters ist insbesondere der Wert Azimut von Bedeutung.

Die Eingangsdaten für die Berechnung sind Tag, Monat, Stunde und Minuten, die ich im Raspberry zur Verfügung habe, konkret sind es Variablenwerte, die in der eingesetzten Programmiersprache perl verfügbar sind. Dazu kommen natürlich noch die geografische Breite und Länge, also die schon bekannten Attribute. Die verwendeten Formeln berechnen mir die beiden Winkel genauer als 1°, sofern die Tageszeit zwischen 8 und 16 Uhr ist. Das sollte für meine Zwecke genügen.

Zum Verständnis: Azimut ist der Winkel der Sonne gegen Norden. Bei Sonnenaufgang in Konstanz ist er also so um die 90°, mittags so ungefähr 180° und am Abend demzufolge um die 270°. Die Höhe ist der Winkel gegenüber dem Horizont, Mittags steht sie am höchsten, maximal bei 90° und kann deshalb in das Zimmer kaum direkt hinein strahlen.

So, nun habe ich alle Informationen zusammen und kann die Funktion programmieren. Idealerweise macht man das direkt in perl. Habe ich wirklich alle Informationen? Nein, denn ich weiß nichts darüber, ob der Himmel klar oder wolkenverhangen ist. Damit muss ich erst einmal mit leben.

weiter zu: 19. Die eigenen perl-Funktionen