Im Makerspace kann man an verschiedenen Stellen funkgesteuerte Steckdosen sehen. Diese sind Teil unseres Smart Homes auf Basis von Home Assistant – einem Open Source Projekt für Smarthomes.
Das sogenannte Dashboard, quasi eine Übersichtsseite für das gesamte System, kann man direkt vorne in der Ausstellung auf dem Monitor an der Säule sehen. Darüber hängt auch eine Raspberry Pi, der das gesamte System steuert und auf dem auch die Home Assistant Software läuft.
Die Steckdosen sind per Zigbee, einem Funkstandard, eingebunden. Mehr dazu in einem anderen Beitrag.
ESPHome für eigene Sensoren
Will man sich eine eigene Einbindung für Home Assistant bauen, gibt es ein großartiges Open Source Projekt: ESPHome
Mittels einem ESP32, einem Microcontroller mit Bluetooth und WLAN, für ca. 10 € kann man mit der ESPHome Software einfach einen eigenen Sensor oder Aktor für das eigene Smarthome bauen. Dafür muss man sich ein wenig in die Software und die Konfiguration einarbeiten. Wir werden dazu sicher auch bald Kurse anbieten. Aber bis dahin, sprecht gerne Nils an, er hat das System im Makerspace aufgesetzt.
Feinstaub- und Luftqualitätssensor mit ESPHome
Um die Luftqualität in der Werkstatt zu überwachen nutzen wir folgende Sensoren an einem ESP32:
- SDS011: Feinstaubsensor zum Messen der Particulate Matter (PM)
- PM10 – oft natürlichen Ursprungs wie z.B. Pollen
- PM2,5 – meist Verbrennungsprodukte
- beide Werte sind ungenau, da der Sensor nur ca. 20 € kostet
- BOSCH BME680: Luftfeuchtigkeit, -qualität, Luftdruck & Temperatur
- ein recht genauer Sensor
- Luftqualität wird über eine Messung der VOC abgeleitet
Es gibt mehrere Möglichkeiten die Software passend auf den ESP32 zu schreiben. Einmal kann dafür ein Plugin in Home Assistant installiert werden, welches auch die Verwaltung übernimmt.
Wir haben uns für einen anderen Weg entschieden, da Plugins in unserer Installation von Home Assistant nicht so leicht einzubinden sind: Die Installation von esphome mittels Python.
Um diese Sensoren in ESPHome einzubinden waren damit folgende Schritte nötig:
Erst erstellt man mit einem geführten Prozess eine erste Konfigurationsdatei. Dafür wird folgender Befehl eingegeben:
esphome wizard config-datei.yml
Dann wird die Konfiguration um folgende Zeilen erweitert:
uart:
rx_pin: GPIO16
tx_pin: GPIO17
baud_rate: 9600
i2c:
sda: GPIO21
scl: GPIO22
scan: true
id: bus_a
sensor:
- platform: sds011
pm_2_5:
name: "Feinstaub <2.5µm"
pm_10_0:
name: "Feinstaub <10.0µm"
update_interval: 5min
- platform: bme680
temperature:
name: "BME680 Temperature"
oversampling: 16x
pressure:
name: "BME680 Pressure"
humidity:
id: "humidity"
name: "BME680 Humidity"
gas_resistance:
id: "gas_resistance"
name: "BME680 Gas Resistance"
address: 0x77
update_interval: 60s
- platform: template
name: "BME680 Indoor Air Quality"
id: iaq
icon: "mdi:gauge"
# calculation: comp_gas = log(R_gas[ohm]) + 0.04 log(Ohm)/%rh * hum[%rh]
lambda: |-
return log(id(gas_resistance).state) + 0.04 * id(humidity).state;
state_class: "measurement"
text_sensor:
- platform: template
name: "BME680 IAQ Classification"
icon: "mdi:checkbox-marked-circle-outline"
lambda: |-
if (int(id(iaq).state) <= 50) {
return {"Excellent"};
}
else if (int(id(iaq).state) <= 100) {
return {"Good"};
}
else if (int(id(iaq).state) <= 150) {
return {"Lightly polluted"};
}
else if (int(id(iaq).state) <= 200) {
return {"Moderately polluted"};
}
else if (int(id(iaq).state) <= 250) {
return {"Heavily polluted"};
}
else if (int(id(iaq).state) <= 350) {
return {"Severely polluted"};
}
else if (int(id(iaq).state) <= 500) {
return {"Extremely polluted"};
}
else {
return {"unknown"};
}
Und dann mittels folgendem Befehl auf den ESP32 geschrieben (diesen vorher per USB verbinden):
esphome run config-datei.yml