Home Assistant – Anzeige der österreichische Badegewässer und Badeplätze

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 :-)

Persönliches Dashboard mit Daten von fünf Badeplätzen

One thought on “Home Assistant – Anzeige der österreichische Badegewässer und Badeplätze

Leave a Reply

Your email address will not be published. Required fields are marked *

*