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! 🙂
Inhaltsverzeichnis
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! 😉
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:
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?
Produktempfehlungen
ich bekomme seit Tagen keine Werte mehr in der Lovelace Card angezeigt. Was prüfe ich am besten erstmal ? (nur noch Unbekannt)
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
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.
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?
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
Okay, der Fehler liegt in der Lovelace-Card. Nutzt du Lovelace überhaupt im YAML-Modus? Wirf hier mal einen Blick drauf: https://www.home-assistant.io/lovelace/dashboards-and-views/
Mein Code mit „cards…“ kann nicht einfach so in die configuration.yaml kopiert werden, sondern muss als lovelace-Code platziert werden, also so wie hier https://www.home-assistant.io/lovelace/dashboards-and-views/#example gezeigt!
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.
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“!
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é
Hi André,
ich kann es gerne versuchen! 🙂
Wo bekommst du denn eine Fehlermeldung?
VG
Olli
Ich habe gerade den Code für den API-Call aktualisiert, da es seitens Ambee Änderungen an der API gegeben hat! 🙂
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?
Hi!
Wo wird dir die Fehlermeldung angezeigt? Bei mir funktioniert es (aktuell) weiterhin einwandfrei.
Ich habe gerade den Code für den API-Call aktualisiert, da es seitens Ambee Änderungen an der API gegeben hat! 🙂