Aktuellen Pollenflug in Home Assistant anzeigen

Wie kann man den aktuellen Pollenflug in Home Assistant anzeigen? Home Assistant erlaubt es einem ja so ziemlich alles zu integrieren und anzuzeigen, also warum nicht auch den aktuellen Pollenflug in deiner Gegend?

Alles, was man hierfür benötigt, ist eine API, welche diese aktuellen Daten liefert. Diese API bindet man dann beispielsweise über den REST-Sensor ein und schon hat man die aktuellen Daten zum Pollenflug und kann diese in Home Assistant beliebig nutzen. Aber der Reihe nach! 🙂

Pollenflug in Home Assistant anzeigen

Wie eingangs bereits erwähnt, macht es Home Assistant einem sehr einfach Daten externer Anbieter einzubinden und zu nutzen. So ist es natürlich auch möglich sich den aktuellen Pollenflug in Home Assistant anzeigen zu lassen! Konkret werden wir für die Anzeige des aktuellen Pollenflug in Home Assistant die Daten über eine REST-Api einbinden, diese dann auslesen um sie dann beliebig anzeigen/nutzen zu können.

Was ist eine REST-Api?

Eine REST-Api ist eine Schnittstelle welche für Representational state transfer [Wikipedia: REST] steht. Über eine Schnittstelle werden also Zustände/Daten zum Abruf angeboten.

Solche Schnittstellen sind primär für die Maschine-zu-Maschine-Kommunikation gedacht und genau dies wollen wir auch tun!

Anbieter wie Ambee erheben weltweit Daten zum aktuellen Wetter oder eben auch der Luftverschmutzung. Diese Daten stehen für nahezu jeden Ort der Welt, mehr oder weniger genau, zur Verfügung. Ambee kann kommerziell genutzt werden und hierfür gibt es kostenpflichtige Accounts.

Ebenso bietet Ambee aber auch einen kostenlosen Account an, mit welchem 100 Datenabrufe pro Tag kostenlos möglich sind! Einen solchen Account/Plan werden wir nutzen und können hierdurch in etwas 4 mal pro Stunde aktuelle Daten abrufen, ohne irgendwelche Kosten zu verursachen (24 Stunden x 4 Aufrufe die Stunde = 96 Aufrufe, was über das kostenlose Kontingent möglich ist).

Daten zum Pollenflug auslesen

Damit wir den Pollenflug in Home Assistant anzeigen können, benötigen wir natürlich entsprechende Daten! Sobald du einen Account mit Basic-Plan hast, erhältst du einen Api Token. Mit diesem Api Token kannst du bereits auf die REST-Api zugreifen und alle von Ambee bereitgestellten Daten abrufen/nutzen.

Hierfür legen wir nun einen neuen Sensor in unserer Konfiguration an, dies könnte in etwa wie folgt aussehen:

sensor:
- platform: rest
  scan_interval: 1300
  resource_template: https://api.ambeedata.com/latest/pollen/by-lat-lng?lat=47.11&lng=0.815
  value_template: >-
    {{ value_json.message}}
  name: "Ambee Pollen"
  headers:
    content-type: "application/json"
    x-api-key: !secret secret_ambee_api
  json_attributes_path: data[0]
  json_attributes:
      - Count
      - Risk
      - Species
      - updatedAt
      - time

Ich beschränke mich hierbei auf den Pollenflug durch Bäume und Gräser. Und natürlich musst du deinen eigenen Api-Token nutzen, sowie in der URL (also bei resource) deine eigenen Daten für lat und lng (also Latitude und Longitude) eintragen.

Mit diesem Code sagen wir nun Home Assistant, dass alle 1200 Sekunden von dieser Api die Daten abgerufen werden sollen. 1200 Sekunden entspricht 20 Minuten und somit bleiben wir unterhalb der etwa 4 möglichen Abrufe pro Stunde um nicht aus Versehen Kosten zu verursachen! 😉

Ambee Api-Calls
Die Spitzen nahe den 100 Cals pro Tag sind die Einrichtungs-Phase gewesen, als ich noch etwas mit der Api getestet habe.

Damit uns die über den Api-Abruf bereitgestellten Daten nun noch etwas schöner angezeigt werden, ergänzen wir unseren Sensor wie folgt:

#in Kombination mit dem zuvorgenannten Code bitte die folgende Zeile entfernen!
- platform: template
  sensors:
    ambee_pollen_tree:
      icon_template: "mdi:tree-outline"
      friendly_name: "Bäume"
      value_template: >-
        {% set state = state_attr("sensor.ambee_pollen", "Risk").tree_pollen %}
        {% if state == "Low" %}Niedrig
        {% elif state == "Moderate"%}Mittel
        {% elif state == "High"%}Hoch
        {% elif state == "Very High"%}Sehr hoch
        {% else %}Unbekannt{% endif %}
- platform: template
  sensors:
    ambee_pollen_weed:
      icon_template: "mdi:nature"
      friendly_name: "weed"
      value_template: >-
        {% set state = state_attr("sensor.ambee_pollen", "Risk").weed_pollen %}
        {% if state == "Low" %}Niedrig
        {% elif state == "Moderate"%}Mittel
        {% elif state == "High"%}Hoch
        {% elif state == "Very High"%}Sehr hoch
        {% else %}Unbekannt{% endif %}
- platform: template
  sensors:
    ambee_pollen_grass:
      icon_template: "mdi:grass"
      friendly_name: "Gräser"
      value_template: >-
        {% set state = state_attr("sensor.ambee_pollen", "Risk").grass_pollen %}
        {% if state == "Low" %}Niedrig
        {% elif state == "Moderate"%}Mittel
        {% elif state == "High"%}Hoch
        {% elif state == "Very High"%}Sehr hoch
        {% else %}Unbekannt{% endif %}

Inspiriert wurde ich hierfür definitiv von Michi, welcher nahezu den kompletten ursprünglich hier in diesem Post genutzten Code auf GitHub veröffentlicht hat – vielen Dank dafür! Durch Änderungen an der Ambee-API und eure hinweise hierauf, habe ich den Code entsprechend angepasst, so dass die gewünschten Daten wieder ausgegeben werden!

Was haben wir also soweit? Wir nutzen eine kostenlose Api, über welche wir die Luftdaten alle 20 Minuten abrufen und bereiten diese mittels Templates in den Variablen ambee_pollen_grass und ambee_pollen_tree etwas anschaulicher auf!

Aktuellen Pollenflug anzeigen

Durch den zuvor beschriebenen Code, stehen uns nun zwei neue Entities zu Verfügung, welche in Loveloce angezeigt werden können. Auch hierfür bedarf es nur (sehr) wenige(r) Zeilen Code:

cards:
      - type: glance
        title: Pollenflug
        entities:
        - entity: sensor.ambee_pollen_grass
        - entity: sensor.ambee_pollen_tree

Das Ergebnis sieht dann wie folgt aus:

Pollenflug in Home Assistant anzeigen

Natürlich kann man mit den Daten der kostenlosen Api noch viel mehr Dinge anstellen. Wie wäre es zum Beispiel mit automatischen Benachrichtigungen oder anderen Funktionen?

Dieser Beitrag ist Teil einer kleinen Beitrags-Serie rund um den hass.io Home Assistant.

Foto des Autors
Autor
Olli
Ca. Ende 30, seit Windows 3.1 Fan von Computern, Gadgets, Handys und allem, was sich irgendwie programmieren lässt. Ich mag es gerne individuell und möglichst einfach, probiere aber auch gerne neue Dinge sofort aus. :) Konnte ich dir helfen? Dann würde ich mich über ein Bier freuen ;) Bier-Spende

14 Gedanken zu „Aktuellen Pollenflug in Home Assistant anzeigen“

  1. Hallo Olli,
    toller Ansatz, den ich gleich versucht habe, nachzubauen. Allerdings wirft Home-Assistant einen InvalidStateError „State max length is 255 characters.“ aus. Funktioniert bei Dir der Sensor aktuell noch? Wie kann ich den Fehler eingrenzen?

    Antworten
  2. Hallo Olli,

    Ich finde gerade als Neuling in HA deinen Blog echt klasse.
    Gerade versuche ich deine Pollenflugfunktion nachzustellen, leider vergeblich.
    In YAML bin ich quasi ein Embryo, sicher habe ich nur etwas nicht richtig eingerückt oder so.
    Kannst Du mich unterstützen?

    Gruß André

    Antworten
  3. Moin,
    funktioniert die Pollenabfrage bei dir noch mit den Befehlen oben?
    Bei mir kommt immer nur „Unbekannt“ als Status.

    Wenn ich auf Ambee schaue werden dort Abfragen protokoliert, aber irgendwie kommt es nicht im Dashboard an.

    Antworten
    • Moin moin! 🙂

      Tatsächlich war der Code für den API-Call in der ursprünglichen Form nicht mehr funktional, da Ambee Änderungen an der API vorgenommen hatte. Ich habe im Beitrag den Code entsprechend aktualisiert und gerade an meinem System erfolgreich getestet.

      Vielen Dank für den Hinweis und sorry für den „Fehler“!

      Antworten
  4. Hallo Olli,
    Wenn ich in der Serversteuerung die Konfiguration prüfe erhalte ich folgende Fehlermeldung.

    Invalid config for [sensor.template]: expected dictionary for dictionary value @ data[’sensors‘][‚cards‘]. Got [OrderedDict([(‚type‘, ‚glance‘), (‚title‘, ‚Pollenflug‘), (‚entities‘, [OrderedDict([(‚entity‘, ’sensor.ambee_pollen_grass‘)]), OrderedDict([(‚entity‘, ’sensor.ambee_pollen_tree‘)])])])]. (See ?, line ?).

    Hast Du einen Tipp für mich? In der Config.yaml habe ich einen grünen Haken.

    Antworten
    • Hi André,

      der Fehler scheint bei der Darstellung in Lovelace aufzukommen („…cards…glance“). Ich habe meinen Lovelace-Code aus dem Beitrag hier gerade 1:1 live getestet und es läuft ohne Probleme.

      Hast du an der Darstellung Anpassungen vorgenommen? Kannst du deinen Lovelace-relevanten Code hier reinkopieren?

      Antworten
      • Hallo Olli, bewusst habe ich da nichts gendert. Ich hofe ich kopiere Dir das Richtige rein, wie gesagt bin ich blutiger Anfänger was YAML angeht. – platform: template
        sensors:
        ambee_pollen_tree:
        icon_template: „mdi:tree-outline“
        friendly_name: „Bäume“
        value_template: >-
        {% set state = state_attr(’sensor.ambee_pollen‘, ‚tree_pollen‘) %}
        {% if state == „Low“ %}Niedrig
        {% elif state == „Moderate“ %}Mittel
        {% elif state == „High“ %}Hoch
        {% elif state == „Very High“ %}Sehr hoch
        {% else %}Unbekannt{% endif %}
        – platform: template
        sensors:
        ambee_pollen_grass:
        icon_template: „mdi:grass“
        friendly_name: „Gräser“
        value_template: >-
        {% set state = state_attr(’sensor.ambee_pollen‘, ‚grass_pollen‘) %}
        {% if state == „Low“ %}Niedrig
        {% elif state == „Moderate“ %}Mittel
        {% elif state == „High“ %}Hoch
        {% elif state == „Very High“ %}Sehr hoch
        {% else %}Unbekannt{% endif %}
        cards:
        – type: glance
        title: Pollenflug
        entities:
        – entity: sensor.ambee_pollen_grass
        – entity: sensor.ambee_pollen_tree

        Antworten
    • Hi Marco,
      schau mal in den Logs, ob dir da eine Fehlermeldung gezeigt wird. Ebenso kannst du bei ambee selbst einmal nachschauen, was die sagen. Ggf. ist das kostenlose Limit (durch zu viele Aufrufe in zu kurzer Zeit) aufgebraucht?

      VG

      Olli

      Antworten

Schreibe einen Kommentar