Nachdem ich mich intensiv mit Homeassistant (HASS) beschäftigt habe, kam sehr bald der Wunsch auf, auch externe Datensätze im Dashboard visualisieren zu können. Der Sommer steht vor der Tür, und ich wollte die aktuellen Daten (Temperatur, Wasserqualität, Unterwasser-Sichtweite und Keimbelastung) der Badeplätze in der näheren Umgebung am Dashboard darstellen.
Die AGES macht in den Sommermonaten mindestens fünf Messungen an den verschiedenen Badeplätzen/Gewässern und publiziert diese auf ihrer Webseite https://www.ages.at/umwelt/wasser/badegewaesser-monitoring.
Weiters ist unter https://www.data.gv.at/katalog/dataset/badegewaesser der Link zur JSON-API aufgeführt um die Daten maschinenlesbar auszuwerten: http://www.ages.at/typo3temp/badegewaesser_db.json
Diese Schnittstelle verwenden wir nun im Home Assistant um bspw. die Messungen der Alten Donau beim Gänsehäufel zu abonnieren. Gehe dazu wie folgt vor:
Einrichtung der RESTful API
Editiere die Home Assistant Datei configuration.yaml
und füge folgende Zeilen hinzu:
rest:
- resource: https://www.ages.at/typo3temp/badegewaesser_db.json
scan_interval: 21600
sensor:
- name: altedonau_gaensehauefl_temp
device_class: temperature
value_template: "{{ value_json['BUNDESLAENDER'] | selectattr('BUNDESLAND', 'eq', 'Wien') | map(attribute='BADEGEWAESSER') | first | selectattr('BADEGEWAESSERID', 'eq', 'AT1300002200010030') | map(attribute='MESSWERTE') | first | map(attribute='W') | first | float }}"
unit_of_measurement: "°C"
force_update: True
json_attributes_path: "$.BUNDESLAENDER[?(@.BUNDESLAND== 'Wien')].BADEGEWAESSER[?(@.BADEGEWAESSERID=='AT1300002200010030')].MESSWERTE[0]"
json_attributes:
- D
- S
- A
- E
- E_C
Erläuterungen:
- resource: Endpoint API; die URL zur oben angeführten JSON-Datei
- scan_interval: Aktualisierungsintervall in Sekunden; 21600 bedeutet, dass die Werte alle 6 Stunden aktualisiert werden. Tipp: Die Daten ändern sich nur sehr selten – eine Aktualisierungshäufigkeit von 6 Stunden sollte ausreichend sein und sollte die gratis angebotene JSON-API nicht unnötig oft strapazieren.
- die grün markierten Felder können für andere/weitere Badegewässer angepasst werden. Die entsprechenden Werte können Sie sich im JSON (https://www.ages.at/typo3temp/badegewaesser_db.json) heraussuchen.
- die
json_attributes
extrahieren die folgenden Felder:- D: Datum der Messung
- S: Sichtweite in Meter
- A: Wasserqualität; 1=Ausgezeichnet, 4=Baden verboten
- E: Anzahl Keime Intestinale Enterokokken
- E_C: Anzahl Keime Escherichia coli
- Hinweis: Laut https://www.ages.at/umwelt/wasser/badegewaesser-monitoring soll der Wert der Enterokokken sowie der Escherichia coli den Wert von 100 KBE/100 ml nicht überschreiten.
Nun Öffnen wir Home Assistant | Entwicklerwerkzeuge | Überprüfen und neu starten und klicken auf “Konfiguration prüfen”. Ist die Konfiguration valide klicken wir auf “Neu starten” um Home Assistant neu zu starten. Nach dem Neustart sollte die Entity sensor.altedonau_gaensehauefl_temp existieren und den Wert der Temperatur beinhalten. Als Attribute sind zusätzlich noch die Werte für D, S, A, E, E_C vorhanden.
Visualisierung im Dashboard
Nun folgt das Visualiseren der zuvor abonnierten Daten im Dashboard.
Hinweis: Um die Werte aus den Attributes darzustellen verwende ich template-entity-row
aus HACS – siehe https://github.com/thomasloven/lovelace-template-entity-row
Lege dazu eine neue Karte im Dashboard an und wähle “Manuell”. Im Yaml Code Editor füge dann folgendes ein:
type: entities
entities:
- type: custom:template-entity-row
icon: mdi:percent
entity: sensor.altedonau_gaensehauefl_temp
name: Wasserqualität
color: >
{% set quality = state_attr('sensor.altedonau_gaensehauefl_temp', 'A') %}
{% if quality == 1 %}
#04a01a
{% elif quality == 2 %}
#ffb70e
{% elif quality == 3 %}
#ff520e
{% elif quality == 4 %}
#ff0e0e
{% endif %}
state: >
{% set quality = state_attr('sensor.altedonau_gaensehauefl_temp', 'A') %}
{% if quality == 1 %}
Ausgezeichnet
{% elif quality == 2 %}
Gut
{% elif quality == 3 %}
Mangelhaft
{% elif quality == 4 %}
Baden verboten
{% else %}
Not mapped: {{quality}}
{% endif %}
- type: custom:template-entity-row
icon: mdi:thermometer-water
entity: sensor.altedonau_gaensehauefl_temp
name: Temperatur
state: '{{states.sensor.altedonau_gaensehauefl_temp.state_with_unit}}'
secondary: ''
- type: custom:template-entity-row
icon: mdi:eye
entity: sensor.altedonau_gaensehauefl_temp
name: Sichttiefe
state: '{{state_attr(''sensor.altedonau_gaensehauefl_temp'', ''S'')}} m'
- type: custom:template-entity-row
icon: mdi:counter
entity: sensor.altedonau_gaensehauefl_temp
name: Anzahl Keime Enterokokken
state: '{{state_attr(''sensor.altedonau_gaensehauefl_temp'', ''E'')}} KBE/100ml'
secondary: < 100 OK
- type: custom:template-entity-row
icon: mdi:counter
entity: sensor.altedonau_gaensehauefl_temp
name: Anzahl Keime E-Coli
state: '{{state_attr(''sensor.altedonau_gaensehauefl_temp'', ''E_C'')}} KBE/100ml'
secondary: < 100 OK
- type: custom:template-entity-row
icon: mdi:calendar
entity: sensor.altedonau_gaensehauefl_temp
name: Stand
state: '{{state_attr(''sensor.altedonau_gaensehauefl_temp'', ''D'')}}'
secondary: >-
Updated {{states.sensor.altedonau_gaensehauefl_temp.last_updated |
as_datetime | relative_time}} ago
color: >
{% set daysSince = ((as_timestamp(now()) - as_timestamp(strptime(state_attr('sensor.altedonau_gaensehauefl_temp', 'D'), "%d.%m.%Y") | as_datetime)) / 86400) | int %}
{% if daysSince < 15 %}
#04a01a
{% else %}
#ff0e0e
{% endif %}
Nach erfolgtem Speichern siehst du nun eine Karte mit den visualisierten Daten:
Weiteres …
Du kannst natürlich mehrere Gewässer abonnieren und visualisieren. Füge dazu einfach zusätzliche “name: gewaessername_temp
” – Blöcke zur configuration.yaml
unterhalb von “sensor:
” hinzu.
Bspw für den Donau-Altarm in Greifenstein:
- name: donau_greifenstein_temp
device_class: temperature
value_template: "{{ value_json['BUNDESLAENDER'] | selectattr('BUNDESLAND', 'eq', 'Niederösterreich') | map(attribute='BADEGEWAESSER') | first | selectattr('BADEGEWAESSERID', 'eq', 'AT1260007800190020') | map(attribute='MESSWERTE') | first | map(attribute='W') | first | float }}"
unit_of_measurement: "°C"
force_update: True
json_attributes_path: "$.BUNDESLAENDER[?(@.BUNDESLAND== 'Niederösterreich')].BADEGEWAESSER[?(@.BADEGEWAESSERID=='AT1260007800190020')].MESSWERTE[0]"
json_attributes:
- D
- S
- A
- S
- E
- E_C
Für die Visualiserung musst du natürlich jeweils eine neue Karte anlegen und alle Referenzen zur Entity aktualisieren.
Persönliches Badegewässer Dashboard
Mein persönliches Badegewässer Dashboard beinhaltet die Messungen der folgenden für mich interessanten Badeplätze:
- Neue Donau (Wasserskilift)
- Alte Donau (Gänsehäufel Süd)
- Greifenstein (Altarm)
- Neusiedlersee (Podersdorf)
- Lunzer See (Lunz)
Der Sommer kann kommen :-)
One thought on “Home Assistant – Anzeige der österreichische Badegewässer und Badeplätze”