DIY: Feinstaubsensor basteln und in Homeassistant einbinden

DIY: Feinstaubsensor basteln und in Homeassistant einbinden

Vor Kurzem bin ich über die Webseite luftdaten.info gestolpert auf der es eine einfache Bauanleitung für einen Feinstaubsensor gibt. Ich habe kurzerhand alle Teile über AliExpress bestellt und einen solchen Sensor zusammengebastelt. Als Gehäuse habe ich jedoch nicht auf die Marley-Silent-Bögen zurückgegriffen, sondern den 3D-Drucker angeworfen und dieses File gedruckt.
Das faszinierende am Luftdatenprojekt ist, dass diese Sensoren mit wenigen Handgriffen Teil eines globalen Netzwerks hunderter anderer Sensoren werden können. Die so aggregierten Daten können dann grafisch sehr anschaulich auf einer Karte dargestellt werden:

Sensordaten in Homeassistant darstellen

Homeassistant unterstützt bereits mit der Luftdaten-Component das Abgreifen der öffentlichen Sensordaten. Hier muss aber explizit eine oder mehrere Sensor IDs angegeben werden. Möchte man den gebauten Sensor nur lokal betreiben, können die Daten trotzdem direkt im Frontend dargestellt werden. Der Sensor besitzt eine Rest-API die unter der URL http://IP_SENSOR/data.json abgerufen werden kann. Exemplarisch sollen mittels 4 Rest-Sensoren die Werte für PM10, PM2.5, Temperatur und relativer Luftfeuchte ausgelesen und dargestellt werden.

- platform: rest
name: Feinstaubsensor PM10
unit_of_measurement: "µg/m3"
value_template: '{{ value_json["sensordatavalues"][0]["value"] }}'
resource: 'http://IP_SENSOR/data.json'

- platform: rest
name: Feinstaubsensor PM25
unit_of_measurement: "µg/m3"
value_template: '{{ value_json["sensordatavalues"][1]["value"] }}'
resource: 'http://IP_SENSOR/data.json'

- platform: rest
name: Feinstaubsensor Temp
unit_of_measurement: "°C"
value_template: '{{ value_json["sensordatavalues"][2]["value"] }}'
resource: 'http://IP_SENSOR/data.json'

- platform: rest
name: Feinstaubsensor Humid
unit_of_measurement: "%"
value_template: '{{ value_json["sensordatavalues"][3]["value"] }}'
resource: 'http://IP_SENSOR/data.json'

Lovelace-UI: Card erstellen

Anschließend legt man eine neue Card in der Lovelace-UI an und weist ein paar passende Icons und kürzere Namen zu. Ich habe mich für eine Glance-Card entschieden:

type: glance
title: Feinstaubsensor
columns: 4
show_state: true
show_name: true
entities:
- entity: sensor.feinstaubsensor_pm10
name: PM10
icon: 'mdi:thought-bubble'
- entity: sensor.feinstaubsensor_pm25
name: PM2.5
icon: 'mdi:thought-bubble-outline'
- entity: sensor.feinstaubsensor_temp
name: Temperatur
- entity: sensor.feinstaubsensor_humid
name: Luftfeuchte
icon: 'mdi:water-percen

Das Ergebnis:

So schaut es am Ende aus. Die dargestellten Werte sind exemplarisch in meiner Küche beim Kochen am Gasherd entstanden.

UPDATE: Sensorwerte und Feinstaub-Karte in einer Lovelace Card darstellen

Mit Hilfe der Custom Card vertical-stacks-in-card können sowohl die Sensorwerte als auch eine Livemap mit aktuellen Feinstaubwerten in einer Lovelace Card dargestellt werden. Dazu muss zuerst die custom card installiert werden. Anschließend kann folgender Codeblock in der Lovelace UI verwendet werden:

type: 'custom:vertical-stack-in-card'
show_header_toggle: false
cards:
  - type: iframe
    url: 'https://opendata-stuttgart.github.io/feinstaub-map/#12/54.33/10.13'
    aspect_ratio: 80%
  - type: glance
    columns: 4
    show_state: true
    show_name: true
    entities:
      - icon: 'mdi:thought-bubble'
        entity: sensor.feinstaubsensor_pm10
        name: PM10
      - icon: 'mdi:thought-bubble-outline'
        entity: sensor.feinstaubsensor_pm25
        name: PM2.5
      - entity: sensor.feinstaubsensor_temp
        name: Temperatur
      - icon: 'mdi:water-percent'
        entity: sensor.feinstaubsensor_humid
        name: Luftfeuchte

In der eingebetteten URL müssen selbstverständlich die Parameter für Höhen- und Breitengrad angepasst werden. Das Ergebnis kann sich sehen lassen: