Wir wollen nun mal ein CO2-Messsystem mit dem MH-Z19B aufbauen und die CO2-Konzentrationen mit einem Raspberry Pi einlesen und per MQTT an eine NodeRed-Installation senden. Parallel dazu werden die Daten noch in einer CSV-Datei geschrieben für Langzeitauswertungen. Wenn der Grenzwert von 1000 ppm erreicht ist, wird noch eine Pushover Nachricht an ein Handy gesendet, so das rechtzeitig gelüftet werden kann.
Hier die Architektur-Übersicht:
Installation
1. raspi-config aufrufen und die Serielle-Schnittstelle aktivieren
2. Sensor mit den vier Drähten an den Pi anschließen wie hier beschrieben
https://github.com/IT-Berater/mh-z19.git
3. Git installieren wenn noch nicht vorhanden mit: sudo apt-get install git
4. Leeres Verzichnis erstellen und darin das setup.sh aufrufen
mkdir co2
cd co2
git clone https://github.com/IT-Berater/mh-z19.git
cd mh-z19
./setup.sh
5. Testen ob die co2 Werte geliefert werden mit Python (Python 2.7.16)
sudo python -m mh_z19
Wenn diese Rückgabe kommt ist es geschafft:
{‚co2‘: 668}
6. MQTT installieren und aktivieren
sudo apt-get install -y mosquitto mosquitto-clients
sudo systemctl enable mosquitto.service
7. Das Bash Script in das Verzeichnis kopieren und ausführen:
sudo chmod +x send-co2-per-mqtt.sh
Das Bash Script send-co2-per-mqtt.sh erstellt ein JSON Objekt und sendet die über Python mh_z19 ermittelten Werte per MQTT unter dem Pfad co2 zum Dashboard.
Das Script liegt auch in /example/send-co2-per-mqtt.sh Verzeichnis.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#!/bin/sh # (c) 2020 Thomas Wenzlaff # send-co2-per-mqtt.sh # Sendet jede alle 1 Minuten die co2 Werte an MQTT NODERED while (true) do zeit=$(date +"%d.%m.%Y %H:%M") wert=$(sudo python -m mh_z19 --all 2>%1) echo "Sende CO2 Messung: $wert um $zeit" # erstellen ein JSON Objekt sende="{ \"messung\":{\"satz\": [{\"zeitpunkt\":\"$zeit\" },$wert ]}}" mosquitto_pub -d -t co2 -m "$sende" sleep 60; done; |
Das Script dann später im Hintergrund gestartet werden mit ./send-co2-to-mqtt.sh &
8. Den NodeRed-Flow kopieren und den Mqtt-Server eingeben. Hier das CO2 Daschboard mit dem Trend und die aktuellen Werte die jede Minute aktualisiert werden:
Der nötige NodeRed-Flow zum Download:
9. Sensor auf 400 ppm kalibrieren. Dazu den Sensor an frischer Luft eine halbe Stunde laufen lassen und mit dem Programm mh_z19
einmal mit dem Parameter 5000 (je nach Sensor) und mit zero_point_calibration aufrufen.
sudo python -m mh_z19 –detection_range_5000
sudo python -m mh_z19 –zero_point_calibration
aufrufen, wie hier beschrieben.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
sudo python -m mh_z19 --help usage: __main__.py [-h] [--serial_device SERIAL_DEVICE] [--serial_console_untouched] [--version | --all | --abc_on | --abc_off] [--span_point_calibration SPAN_POINT_CALIBRATION] [--zero_point_calibration] [--detection_range_10000] [--detection_range_5000] [--detection_range_2000] return CO2 concentration as object as {'co2': 416} optional arguments: -h, --help show this help message and exit --serial_device SERIAL_DEVICE Use this serial device file --serial_console_untouched Don't close/reopen serial console before/after sensor reading --version show version --all return all (co2, temperature, TT, SS and UhUl) as json --abc_on Set ABC functionality on model B as ON. --abc_off Set ABC functionality on model B as OFF. --span_point_calibration SPAN_POINT_CALIBRATION Call calibration function with SPAN point --zero_point_calibration Call calibration function with ZERO point --detection_range_10000 Set detection range as 10000 --detection_range_5000 Set detection range as 5000 --detection_range_2000 Set detection range as 2000 |