Bewölkt mit Aussicht auf Besserung
Der Grad der Bewölkung spielt bei vielen unserer Automatisierungen, welche wir über Home Assistant realisiert haben, eine entscheidende Rolle. Dies betrifft all jene Automatisierungen, welche mit der Beschattung des Hauses bzw. dem automatischen Schließen der Rollläden zusammenhängen.
Wir sitzen nicht gerne im Dunkeln, wenn es nicht unbedingt sein muss, sprich, wenn genug Bewölkung vorhanden ist, dass eine Beschattung nicht notwendig ist, möchten wir die Rollläden auch nicht automatisch schließen.
Über einen Teil unserer Automatisierungen und was wir sonst noch mit Wetterdaten machen, habe ich bereits in einem früheren Post geschrieben.
Hinweis
Bewölkung, der Grad an Bewölkung bzw. der Bewölkungsgrad ist, wie er im Folgenden dargestellt wird, absolut subjektiv und spiegelt alleine meine eigene Meinung wider. Ich habe weder Meteorologie studiert noch habe ich tiefergehendes Wissen darüber, wie der Bewölkungsgrad gemessen wird.
Der untenstehende Text spiegelt mein eigenes Vorgehen wider.
Über Bewölkung
Bewölkung ist, wie eingangs erwähnt, zumindest für mich hoch spekulativ und subjektiv. Möchte ich wissen, wie die aktuelle Bewölkung ist, schaue ich in der Regel nach oben und stelle eine grobe Schätzung an.
Das Problem hierbei ist jedoch, dass “Strahlend Blauer Himmel” oder “Hmmm so 50%” nicht von Home Assistant zur Steuerung der Beschattung genutzt werden kann. Hier zählen nur Zahlen und Fakten.
Warum die Bewölkung selbst bestimmen?
Aktuell wird für die Messung der Bewölkung das Plug-in DWD weather in Home Assistant genutzt. Für unseren Einsatzzweck funktioniert dies “okay”. Wie immer gibt es jedoch Nachteile von solchen Plugins welche mal mehr mal weniger schwer wiegen:
- Genauigkeit: Das aktuell größte Problem ist die Genauigkeit der durch DWD weather zur Verfügung gestellten Daten. Diese lassen sich aktuell leider nur für größere Siedlungen beziehen. Das bedeutet für uns, dass der nächste Messpunkt ca. 10 km weit von uns entfernt ist. Zum Messen der Bewölkung eine sehr große Strecke mit zum Teil auch sehr großen Unterschieden. Dies war unter anderem auch einer der Beweggründe, eine eigene Wetterstation anzuschaffen.
- Unabhängigkeit: Die Bewölkung ist aktuell der einzige meteorologische Messwert, den wir nicht selbst bestimmen können. Wenn dies auf die ein oder andere Art gelingen würde, könnte eine Integration für einen externen Service wegfallen.
Anforderungen
Die Anforderungen für die Ermittlung sind in diesem Fall recht simpel, aber wichtig, da sie eine große einschränkung und Vereinfachung ermöglichen:
- Die Bewölkung soll , näherungsweise, in Prozent zurückgegeben werden
- Es sollen so wenig externe Daten wie möglich genutzt werden
- Die Berechnung muss nur am Tag funktionieren, da der Wert ausschließlich für die Automatisierungen der Beschattung genutzt wird.
Eine erste Lösung
Wenn ich aus meiner Laiensicht beobachte, was sich verändert, wenn der Himmel mehr oder weniger bewölkt ist, dann ist es, neben der Ausbeute der Solaranlage, die Helligkeit.
Die aktuelle Helligkeit an unserem Standort kann ich leicht über unsere Wetterstation nachvollziehen (solar_lux). Die Frage welche sich dann jedoch stellt ist: Mit was kann man die aktuelle Helligkeit vergleichen bzw. wie hell sollte es denn eigentlich aktuell sein? Hierbei hat mir eines der letzten Updates von Illuminance in die Hände gespielt, welches seither unterstützt eine Helligkeitsberechnung ohne den Einfluss des Wetters zurückzugeben. Der zurückgegebene Wert (illuminance) ist dann die aktuell zu erwartende Helligkeit.
Für das Prototyping habe ich mich schlicht Google Sheets bedient, um grob abschätzen zu können, ob mein erster Ansatz funktioniert oder nicht. Hierzu habe ich die beiden Werte an einem bewölkten Tag zu verschiedenen Zeitpunkten über den Verlauf in Home Assistant abgerufen:
solar_lux | illuminance | tmp_cloud_coverage | tmp_cloud_coverage_caped | cloud_coverage |
---|---|---|---|---|
0 | 1 | 0 | 0 | 100 |
800 | 1600 | 42 | 42 | 58 |
6000 | 16000 | 32 | 32 | 68 |
25000 | 36000 | 58 | 58 | 43 |
27000 | 54000 | 42 | 42 | 58 |
27000 | 70000 | 33 | 33 | 68 |
35000 | 82000 | 36 | 36 | 64 |
54000 | 88000 | 51 | 51 | 49 |
48000 | 86000 | 47 | 47 | 53 |
35000 | 80000 | 37 | 37 | 63 |
24500 | 67000 | 31 | 31 | 69 |
40000 | 28500 | 117 | 100 | 0 |
17500 | 10000 | 146 | 100 | 0 |
4500 | 5000 | 75 | 75 | 25 |
1100 | 1100 | 83 | 83 | 17 |
800 | 500 | 133 | 100 | 0 |
200 | 300 | 56 | 56 | 44 |
50 | 1 | 4167 | 100 | 0 |
Die Spalten repräsentieren jeweils die folgenden Werte:
- solar_lux: Die aktuell gemessene Helligkeit.
- Illuminance: Die durch Illuminance für den Standort und die Tageszeit errechnete maximale Helligkeit.
- tmp_cloud_coverage: Der berechnete Wert zu wie viel Prozent die aktuelle Helligkeit die errechnete maximale Helligkeit erreicht, korrigiert um den Faktor 1.2.
- (solar_lux*100/illuminance)/1.2
- tmp_cloud_coverage_caped: Da der Wert tmp_cloud_coverage höher als 100 sein kann wird er in dieser Spalte auf maximal 100 normalisiert.
- cloud_coverage: Der berechnete Bewölkungsgrad in Prozent. Im letzten Berechnungsschritt wird der berechnete normalisierte Bewölkungsgrad von 100 abgezogen.
- 100 - tmp_cloud_coverage_caped
Durch die grobe Auflösung der Daten sehen die Ergebnisse auf den ersten Blick nicht sehr erstrebenswert aus:
Mit einer höheren Auflösung der Daten direkt in Home Assistant ergibt sich jedoch ein weitaus besseres Bild:
Was im Diagramm oben direkt auffällt, sind die enormen Fluktuationen, welche durch die sich relativ rasch ändernde Helligkeit entstehen. Diese lassen sich mit einem Statistiksensor jedoch leicht dämpfen, schließlich ändert sich die Bewölkung in der Realität nicht im Minutentakt:
Im Diagramm oben ist direkt auch der Vergleich des berechneten Bewölkungsgrades und des von DWD weather ermittelten zu sehen.
Durch den Statistiksensorergibt sich jedoch noch eine kleine Ungereimtheit: Die Berechnung des Durchschnitts funktioniert nur für Werte welche größer 0 sind. Daher wird im Template Sensor, sollte der berechnete Wert 0 sein, eine Zufallszahl zwischen 1 und 5 zurückgegeben.
Template Sensor
{% set solar_lux = states("sensor.ws2900_v2_02_03_solar_lux")|float %}
{% if states("sensor.illuminance_without_weather")|float <= 0 %}
{% set illuminance = 1 %}
{% else %}
{% set illuminance = states("sensor.illuminance_without_weather")|float %}
{% endif %}
{% set tmp_cloud_coverage = (solar_lux*100/illuminance)/1.2|round(1) %}
{% if tmp_cloud_coverage >= 100 %}
{% set tmp_cloud_coverage_caped = 100 %}
{% else %}
{% set tmp_cloud_coverage_caped = tmp_cloud_coverage %}
{% endif %}
{% set cloud_coverage = 100 - tmp_cloud_coverage_caped %}
{% if cloud_coverage <= 0 %}
{{ range(1, 5) | random }}
{% else %}
{{ cloud_coverage }}
{% endif %}
Fazit
Kann man den Bewölkungsgrad über die Helligkeit berechnen? Ja, annäherungsweise funktioniert das wunderbar. Hat der berechnete Wert den Wert von DWD weather ersetzt? Nein, leider bisher noch nicht. Die zurückgegebenen Werte sind in manchen Fällen plausibel, in anderen wiederum nicht. Speziell wenn es auf 100% Bewölkungsgrad zugeht, fühlen sich die Ergebnisse noch nicht zufriedenstellend an, ein Startpunkt ist die Berechnung jedoch allemal.