Netzwerk für „Mi Flora“ Pflanzensensoren
Die Pflanzensensoren unter dem Namen „Mi Flora“ werden von HuaHuaCaoCao (HHCC) hergestellt und auch als „Flower Care“ verkauft.
Die Sensoren können nur über Bluetooth ausgelesen werden, in der Regel wird dafür eine App auf dem Handy genutzt.
Sie messen folgende Daten:
- Helligkeit (Lux)
- Temperatur (°C)
- Nährstoffgehalt (µS/cm)
- Bodenfeuchtigkeit (%)
- Batteriestand (%)
Die Sensoren kann man auch mit einem Linux, das Bluetooth LE unterstützt, auslesen. Die Daten werden immer stündlich bereitgestellt. Diese kann man dann in eine Influx-Datenbank schreiben lassen und mit Grafana visualisieren.
Die Schwierigkeit ist, dass Bluetooth nur etwa 10 Meter Reichweite hat. Es muss also eine Art „Relais-Server“ genutzt werden, der einerseits innerhalb der Bluetooth-Reichweite der Sensoren ist und andererseits auch mit dem LAN/WLAN verbunden ist, um die Datenbank erreichen zu können.
Ich habe mich für einen BananaPi M2 Zero entschieden, als Betriebssystem Armbian.
Damit habe ich folgendes Netzwerk umgesetzt:
Im Detail:
Der „Relais-Server“ wurde am Balkon platziert und erreicht beide Sensoren und und gleichzeitig das WLAN. Da Bluetooth und WLAN das 2,4 GHz-Band nutzen, reicht eine Antenne für Beides.
Verwendet wurde:
- BananaPi M2 Zero
- 5V/2A USB-Netzteil
- 64 GB SD-Karte (es würde auch eine 16 oder 32 GB-Karte reichen)
- 5 dB Antenne
- 3 Meter RP-SMA-Kabel (um Antenne getrennt vom Gehäuse höher zu befestigen)
- 1 Dose Ferrero Rocher als Gehäuse (ein Hensel-Kasten folgt demnächst)
- Heißkleber zur Befestigung
Verwendete Software:
Software-Installation unter Armbian
Bluetooth-Programme:
sudo apt-get install bluetooth bluez bluez-tools rfkill -y
Python-Programme:
sudo apt-get install python3-pip libglib2.0-dev -y pip3 install setuptools pip3 install btlewrap pip3 install bluepy pip3 install influxdb
Wenn sich die pip3-Programme nicht installieren lassen „error: externally-managed-environment“, folgende Datei löschen (für x die jeweils installierte Version nehmen):
/usr/lib/python3.x/EXTERNALLY-MANAGED
MAC-Adressen der Sensoren ermitteln und notieren (Sensoren nacheinander einschalten und die Sensoren beschriften!):
sudo hcitool lescan
Die Sensoren heißen immer „Flower Care“. Jedem Sensor nacheinander einschalten, notieren und einen eindeutigen Namen geben:
11:22:33:AA:BB:CC Flower care
Sensor auslesen:
git clone https://github.com/open-homeautomation/miflora.git cd miflora sudo nano demo.py
Zeile suchen:
mac, pat=re.compile(r"(80:EA:CA)|(C4:7C:8D):[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}")
wie folgt ändern (neuere Sensoren haben andere MAC-OUIs!):
mac, pat=re.compile(r"[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}")
Sensoren auslesen und in Datenbank schreiben:
cd .. git clone https://github.com/sergem155/miflora-influxdb.git cd miflora-influxdb sudo cp config-example.py config.py sudo nano config.py
Hier die MAC-Adressen der Sensoren (Schritt: sudo hcitool lescan) und den Influx-Server eintragen (siehe Docker-Compose):
devices ={ "Blumensensor1":"11:22:33:AA:BB:CC", "Blumensensor2":"11:22:33:AA:BB:DD", "Blumensensor3":"11:22:33:AA:BB:EE" } to_scan = ["Blumensensor1","Blumensensor2","Blumensensor3"] influx_args=('11.22.33.44', 8086, '', '', 'miflora')
Log-Datei anlegen:
sudo touch /var/log/miflora-influxdb.log sudo chmod 777 /var/log/miflora-influxdb.log
Stündlichen Cronjob anlegen:
crontab -e @reboot sleep 60 && /usr/bin/python3 /home/pi/miflora-influxdb/poll-insert.py 2>&1 >> /var/log/miflora-influxdb.log 0 * * * * /usr/bin/python3 /home/pi/miflora-influxdb/poll-insert.py 2>&1 >> /var/log/miflora-influxdb.log
Den Timeout für Bluetooth-Verbindungen auf mindestens 1 Sekunde anheben:
sudo crontab -e 50 * * * * /home/pi/miflora-influxdb/set-supervision-timeout
Die Influx-Datenbank als docker-compose.yml anlgen (wie man Docker / Docker-Compose installiert, wird hier nicht erklärt!):
version: '3' services: influxdb: image: influxdb:1.8 container_name: influxdb restart: always ports: - '11.22.33.44:8086:8086' volumes: - /opt/vlan1/miflora/influxdb-storage:/var/lib/influxdb environment: - INFLUXDB_DB=miflora - INFLUXDB_ADMIN_USER=admin-user - INFLUXDB_ADMIN_PASSWORD=admin-password
IP (unter „ports“) und ggf. Volume anpassen!
Die ersten Daten sind erst nach einer Stunde (nach der Inbetriebnahme des Sensors) in Grafana sichtbar, frühere Abfragen liefern keine Werte!
Unter „Webcams“ ist ein Diagramm aus Grafana, welches auf den Daten eines Pflanzensensors basiert:
https://it.hohenleitner.eu/webcam/
Referenzen:
- https://www.sascha-curth.de/kompendium/002_Miflora.html#quick-dirty
- http://blog.sergem.net/monitoring-backyard-soil-with-xiaomi-mi-flora-plant-monitor-influxdb-and-grafana/
- https://github.com/sergem155/miflora-influxdb/blob/master/config-example.py
- https://brianp.de/posts/2020/plant-monitoring-xiaomi-miflora-rasperrypi-grafana/
System- und Netzwerkadministrator
Informationstechnik – Netzwerktechnik – Consulting
MCSA+M | MCSE | MTCNA