In einem älteren Beitrag hatte ich ja bereits über das Betreiben eines Luftdaten.info-Sensors geschrieben. Da ich immer versucht bin mein Smarthome so lokal wie möglich zu betreiben (also möglichst alle Abhängigkeiten von nicht in meinem lokalen Netzwerk liegenden Daten zu eleminieren), musste auch noch mein Feinstaub-Sensor „anders“ eingebunden werden.
Aber der Reihe nach… 🙂
Luftdaten.info heißt mittlerweile Sensor.community (offizieller Link) und bietet jedem die Möglichkeit zu Hause einen Feinstaubsensor zu betreiben und diese Daten „mit allen“ zu teilen. Wichtig ist hierbei, dass beim Teilen dieser Daten kein Rückschluss auf persönliche Daten möglich ist – deine Daten sind also „live“ sichtbar, aber eben nur anonym.
Für wenige Euros kann man die benötigte Hardware kaufen und einen solchen Sensor einrichten. Die Kombination der unzähligen Feinstaubsensoren, welche auf diese Weise bereits Daten öffentlich teilen, kann dann in etwa so aussehen für eine Gegend:
Für Home Assistant gibt es dann eine Integration, über welche man die Daten eines beliebigen solchen Feinstaub-Sensors anzeigen lassen kann (Home Assistant Luftdaten Integration).
Du magst Home Assistant? Dann abonniere kostenlos meine Beiträge mit Tipps, Tricks und Anleitungen rund um Home Assistant:
Follow Home Assistant
Garantiert kein Spam, keine Werbung und immer mit Abmelde-Link, solltest du es dir anders überlegen!
Genau diese Integration möchte ich nun jedoch „loswerden, da meine eigenen Feinstaub-Daten bei Nutzung dieser Integration folgenden Weg zurücklegen:
- Datenerhebung auf meinem persönlichen Sensor
- Übermittlung der Daten an Sensor.Community
- Ermitteln der Daten durch Home Assistant von Sensor.Community
- Anzeige der Daten in Home Assistant
Die Schritte 2 und 3 sind also eigentlich überflüssig, da meine lokal vorhandenen Daten zuerst „nach draußen“ gegeben werden, um sie dann wieder „zurückzuholen“.
Feinstaub-Daten lokal auslesen
Zuerst musst du die IP-Adresse deines lokalen Feinstaub-Sensors ermitteln. Hierfür schaust du am besten in deinem Router (oder ähnlich) nach. Ergänz dann diese lokale IP-Adresse um folgendes Ziel „/data.json“
Rufst du diese Adresse (also http://IP-Adresse/data.json“ in deinem Browser auf, erhältst du die aktuellen Messwerte als JSON-Daten (optisch aufbereitet zur besseren Lesbarkeit hier):
{
"software_version":"NRZ-2020-133",
"age":"28",
"sensordatavalues":[
{
"value_type":"SDS_P1",
"value":"8.25"
},
{
"value_type":"SDS_P2",
"value":"3.03"
},
{
"value_type":"samples",
"value":"5051440"
},
{
"value_type":"min_micro",
"value":"28"
},
{
"value_type":"max_micro",
"value":"20098"
},
{
"value_type":"interval",
"value":"145000"
},
{
"value_type":"signal",
"value":"-73"
}
]
}
Alles, was man nun noch tun muss, ist in Home Assistant mittels Command-Line Sensor, diese JSON-Daten einzulesen. Dies kann wie folgt aussehen:
sensor:
- platform: command_line
name: "Luftdata PM10"
command: 'curl http://IP-Adresse/data.json'
value_template: "{{ value_json.sensordatavalues[0].value | round(2) }}"
unit_of_measurement: "µg/m³"
- platform: command_line
name: "Luftdata PM2.5"
command: 'curl http://IP-Adresse/data.json'
value_template: "{{ value_json.sensordatavalues[1].value | round(2) }}"
unit_of_measurement: "µg/m³"
- platform: statistics
name: pm10 stats
state_characteristic: mean
entity_id: sensor.luftdata_pm10
max_age:
minutes: 60
- platform: statistics
name: pm25 stats
state_characteristic: mean
entity_id: sensor.luftdata_pm2_5
max_age:
minutes: 60
Sobald diese Command-Line Sensoren aktiv sind, sollte dir Home Assistant zwei neue nutzbare Sensoren bereitstellen:
- sensor.luftdata_pm10
- sensor.luftdata_pm2_5
Diese Sensoren kannst du dann in Lovelace anzeigen/nutzen!
ACHTUNG: Mit 2023.8 gab es Änderungen in Home Assistant, wie Sensoren die die Command-Line nutzen deklariert werden müssen! Aus diesem Grund ist das Code-Beispiel von weiter oben nicht mehr funktional und es muss nun wie folgt aussehen:
command_line: - sensor: name: "Luftdata PM10" command: "curl http://IP-Adresse/data.json" value_template: "{{ value_json.sensordatavalues[0].value | round(2) }}" unit_of_measurement: "µg/m³" scan_interval: 120 command_timeout: 15 - sensor: name: "Luftdata PM2.5" command: "curl http://IP-Adresse/data.json" value_template: "{{ value_json.sensordatavalues[1].value | round(2) }}" unit_of_measurement: "µg/m³" scan_interval: 120 command_timeout: 15
Auch mit diesem Code erhältst du die zwei Sensoren sensor.luftdata_pm10 und sensor.luftdata_pm2_5, die du beliebig nutzen kannst!
Produktempfehlungen
Danke,
habe mit der Hacs Integration Erfolg gehabt. Aber ich werde das nun auch mit deinem neuen skript versuche, Aber auch mit der HACS integration war ohne einen Neustart keine Entität zu finden. Ich habe noch zusätzliche Sensoren (BME 280) eingebunden.
– platform: local_luftdaten
host: 192.168…………
scan_interval: 300
name: feinstaubsensor
monitored_conditions:
– SDS_P1
– SDS_P2
– BME280_temperature
– BME280_pressure
– BME280_humidity
– signal
Hallo,
bei mir werden keine neuen Entitäten erstellt, Text habe ich kopiert, keine Fehlermeldung beim speichern der neuen config Datei.
??
VG
Hi und sorry für die späte Antwort!
Eigentlich dürfte der ursprüngliche Code aus diesem Beitrag gar nicht mehr funktionieren, da seit 2023.8 Sensoren, die die Command-Line nutzen anders deklariert werden müssen. Sorry für das in die Irre leiten!!!
Ich habe den Beitrag entsprechend aktualisiert und den nun zu nutzenden Code ergänzt. Diese ist so (bis natürlich auf die IP-Adresse) bei mir im Einsatz und ich nutze die beiden Sensoren. Ggf. kann ein Neustart von Home Assistant helfen die Ermittlung der Sensoren zu beschleunigen!
VG
Olli
Hallo, mit deinem neuen text funktioniert es auch bei mir. Vielleicht ist für einige auch interessant, dass weitere sensoren eingebunden werden können.
Wenn man die http://IP-Adresse/data.json“ im Browser aufrufst , erhält man ja diese/ oder eine ähnliche Antwort.
ensordatavalues
0
value_type „SDS_P1“
value „2.83“
1
value_type „SDS_P2“
value „2.63“
2
value_type „BME280_temperature“
value „8.79“
3
value_type „BME280_pressure“
value „95213.03“
4
value_type „BME280_humidity“
value „89.28“
5
value_type „samples“
value „8425197“
6
value_type „min_micro“
value „28“
7
value_type „max_micro“
value „20562“
8
value_type „interval“
value „240000“
9
value_type „signal“
value „-53“
Wenn man dann die Nummer hinter … sensordatavalues ändert z.B 1 auf 2 erhält man einen neuen sensor , bei mir die Temperatur. Man muss dann natürlich auch noch unit _of_measurement anpassen
– sensor:
name: „Luftdata PM2.5“
command: „curl http://IP-Adresse/data.json“
value_template: „{{ value_json.sensordatavalues[1].value | round(2) }}“
unit_of_measurement: „µg/m³“
scan_interval: 120
VG
command_timeout: 15
Danke für das Teilen!
Welche Sensoren es noch so gibt, hängt natürlich von der verbauten Hardware ab! Aber bei dir sind es ja durchaus noch ein paar weitere Sensoren (wobei das WLAN-Signal mich z. B. gar nicht interessieren würde in Home Assistant ;)).
Vermutlich ein Anfängerfehler, aber ich bekomme nach dem Einfügen in die configuration.yaml die Fehlermeldung „Diese Entität („sensor.luftdaten_pm2_5″) hat keine eindeutige ID,…“. Die aktuellen Werte werden angezeigt, aber die Statistik ist nicht verfügbar.
Die Meldung dürfte aber wie folgt weitergehen vermutlich „…, daher können die Einstellungen nicht über die UI verwaltet werden. Schaue in der Dokumentation nach für mehr Details.“
Das bedeutet eigentlich lediglich, dass du die Entität eben nicht über das Frontend verändern kannst, sondern nur in YAML. Auswirkungen auf Historienwerte sollte das nicht haben.
Du kannst eine eindeutige ID selber vergeben in dem YAML-Code (siehe in der Fehlermeldung verlinkte Dokumentation auf deutsch).
Der Hinweis auf HACS ist Gold wert. Ich war schon kurz vorm Verzweifeln, weil es mir immer wieder die Verknüpfung zu „Luftdaten“ unterbrochen hat, also keine Werte mehr angezeigt wurden. Die lokale Lösung ist spitze!
Guten Morgen,
etwas genauer: Ich meine die Logfiles unter: Einstellungen/Einstellungen/Logs.
Dort steht bei mir folgendes (ohne der Änderung):
Protokolldetails (WARNUNG)
Logger: homeassistant.components.statistics.sensor
Source: components/statistics/sensor.py:207
Integration: statistics (documentation, issues)
First occurred: 06:50:38 (2 occurrences)
Last logged: 06:50:38
The configuration parameter ’state_characteristic‘ will become mandatory in a future release of the statistics integration. Please add ’state_characteristic: mean‘ to the configuration of sensor „pm10 stats“ to keep the current behavior. Read the documentation for further details: https://www.home-assistant.io/integrations/statistics/
The configuration parameter ’state_characteristic‘ will become mandatory in a future release of the statistics integration. Please add ’state_characteristic: mean‘ to the configuration of sensor „pm25 stats“ to keep the current behavior. Read the documentation for further details: https://www.home-assistant.io/integrations/statistics/
Es handelt sich jetzt um die Version HA 2021.12.10
Vielen Dank für die Info! Dann ergänze ich das Mal in meinem Code-Beispiel!
Da sieht man Mal wieder, wie wichtig ein regelmäßiger Blick in die Logs ist!
In meinem Logfile kam noch ein Hinweis, den man mit der Ergänzung „state_characteristic: mean“ wegbekommt. Der entsprechende Teil des Scripts sieht dann so aus:
– platform: statistics
name: pm10 stats
entity_id: sensor.luftdata_pm10
state_characteristic: mean
max_age:
minutes: 60
– platform: statistics
name: pm25 stats
entity_id: sensor.luftdata_pm2_5
state_characteristic: mean
max_age:
minutes: 60
Und wenn der Feinstaubsensor keine feste IP hat, geht es auch mit dem entsprechenden Namen: command: ‚curl http://feinstaubsensor-XXXXXX.fritz.box/data.json‘
Interessant! Was für eine Fehlermeldung gab es bei dir denn im Log? Ich habe in meines gerade einen Blick geworfen und konnte keinen Hinweis auf Probleme mit den Luftdaten-Sensoren finden.
Bei mir war der „Umweg“ über sensor.community irgendwann unzuverlässig, daher lese ich meinen Sensor wie du mittlerweile auch lokal aus. Ich nutze dafür HACS und https://github.com/lichtteil/local_luftdaten … was im Prinzip genau das gleiche macht.
Noch eine Frage: Alternativ könnte man statt Command Line-Sensor hier auch einen REST-Sensor verwenden, oder?
Diese HACS-Integration macht letztlich das Gleiche, wie mein beispielhafter Code oder der von dir erwähnte REST-Sensor (also ja, das sollte auch gehen! ;)) – ich bevorzuge nur mittlerweile ein schlankeres Setup. Also mehr lokal und weniger notwendige Integrationen oder Add-ons. Leider habe ich zu oft erlebt, das „fremder“ Code nicht verlässlich war oder irgendwann nicht mehr aktualisiert wurde.