[TUTORIAL] Pflanzen mit Mi Flora-Sensoren überwachen

Ziel

Dieses Tutorial soll die von den Mi Flora-Sensoren bereitgestellten Informationen in Gladys hochladen. Dafür benötigen wir:

  • Einen Mi Flora-Sensor
  • Einen Raspberry Pi Zero W
  • Eine Gladys-Instanz

Der Raspberry Pi Zero dient als Gateway für die Daten: Er führt das Python-Skript von Thom Dietrich als Dienst aus, um die Daten abzurufen und sie in MQTT-Topics einzutragen, die von Gladys zugänglich sind.

Voraussetzungen

Ein MQTT-Server muss über Gladys konfiguriert sein (siehe MQTT-Integration)

1- Gladys

Gehe zu Integration > MQTT > Gerät hinzufügen
Name: MiFlora Sensor - Basilikum (Beispiel)
Externe ID: mqtt:miflora:basilic

Hinweis: Die externe ID muss zwingend mit mqtt:miflora: beginnen, gefolgt vom Namen der Pflanze, die Sie später zur Konfiguration des Python-Skripts verwenden.
Externe ID: mqtt:miflora:[Pflanzenname]

Als Nächstes die verschiedenen Funktionen des Sensors hinzufügen





Wichtig: Die externen IDs der Funktionen müssen genau wie auf den Screenshots kopiert werden, sie entsprechen den IDs des Python-Skripts.

Gladys kann nun die Informationen des Sensors Basilikum vom MQTT-Server lesen.

Raspberry Pi Zero

Der Rest dieses Tutorials ist eine Übersetzung mit Anpassungen des Wikis von Thom Dietrich. Da der PR noch nicht von Thom integriert wurde, verwende ich mein Git als Referenz für das für Gladys modifizierte Skript.

Verbinde dich per SSH mit dem Raspberry

sudo apt install git python3 python3-pip bluetooth bluez
git clone https://github.com/Chouille/miflora-mqtt-daemon.git /opt/miflora-mqtt-daemon 
cd /opt/miflora-mqtt-daemon
sudo pip3 install -r requirement.txt

Der Daemon hängt von GATTTool ab, einem externen Tool, das vom Paket bluez bereitgestellt wird. Um sicherzustellen, dass GATTTool installiert ist

gatttool --help

Als Nächstes erstellen wir die Konfigurationsdatei, die das Skript benötigt.

cp /opt/miflora-mqtt-daemon/config.{ini.dist,ini}

Rufen Sie die MAC-Adresse Ihres Sensors wie folgt ab:

sudo hcitool lescan
4B:47:E2:DE:CE:9A (UNKNOWN)
84:C0:EF:46:B2:8A (UNKNOWN)
10:0B:F1:43:59:16 (UNKNOWN)
C4:7C:8D:62:40:29 FLOWER CARE

Bearbeiten Sie die Konfigurationsdatei, hier eine grundlegende Konfiguration:

[General]
reporting_method = gladys-mqtt
adapter = hci0
[Daemon]
enabled = true
period = 3600 #1 hour
hostname = [Gladys-IP]
port = 1883
keepalive = 60
base_topic = gladys/master/device
username=gladys
password=[Siehe Gladys-Setup]
Basilic@Salon=C4:7C:8D:62:40:29

Wichtig: Die Deklaration der MAC-Adresse erfolgt durch den Namen der Pflanze, den Sie in Gladys angegeben haben. Der Standort des Sensors (@Room) ist optional.

Test

sudo python3 /opt/miflora-mqtt-daemon/miflora-mqtt-daemon.py

Von einem MQTT-Client, der mit dem Gladys-MQTT-Server verbunden ist, sollten Sie dies sehen:

Nach der Erstellung eines Abschnitts im Gladys-Dashboard sollten Sie dies erhalten:

Skript als Dienst speichern

Wichtig: Der Daemon-Modus muss in der Konfigurationsdatei aktiviert sein!

sudo cp /opt/miflora-mqtt-daemon/template.service /etc/systemd/system/miflora.service
sudo systemctl daemon-reload
sudo systemctl start miflora.service
sudo systemctl status miflora.service
sudo systemctl enable miflora.service

Jetzt, da die Pflanzenüberwachung in Gladys erfolgt, können Sie:

  • Benachrichtigt werden, wenn Ihre Pflanze Wasser benötigt und/oder eine Pumpe zum Bewässern starten.
  • Benachrichtigt werden, wenn die Temperatur für Ihre Pflanze zu hoch/niedrig ist.
  • Eine zusätzliche Wachstumslampe einschalten, wenn sie Licht benötigt.
  • usw…

Hallo und ein großes Dankeschön für das Tutorial :+1:

Ich habe es nicht beendet, weil ich auf einen Fehler gestoßen bin und ein bisschen feststecke … Dann hatte ich auch einige Schwierigkeiten, im Tutorial voranzukommen:

Man muss diese Befehle mit sudo ausführen, sonst kommt man nicht weiter, also:

sudo git clone https://github.com/Chouille/miflora-mqtt-daemon.git /opt/miflora-mqtt-daemon
sudo cp /opt/miflora-mqtt-daemon/config.{ini.dist,ini}

Ansonsten teste ich gerade die Datei miflora-mqtt-daemon.py … wenn ich den Befehl
sudo python3 /opt/miflora-mqtt-daemon/miflora-mqtt-daemon.py
ausführe

erhalte ich dies:

[2021-04-13 14:46:20] Der Konfigurationsparameter reporting_mode ist auf einen ungültigen Wert gesetzt

Dabei habe ich in der Konfigurationsdatei:

reporting_method = gladys-mqtt

Ich weiß nicht, ob ich richtig liege, aber es scheint, als wäre gladys-mqtt nicht in der Datei miflora-mqtt-daemon.py deklariert?..

Hallo Jean.
Falls du mein Repo geklont hast, muss die Variable reporting_method deklariert sein.
Du kannst in miflora-mqtt-daemon.py überprüfen, dass du zwischen Zeile 349 und 365 Folgendes hast:

elif reporting_mode == 'gladys-mqtt':
print_line('Announcing Mi Flora devices to MQTT broker for auto-discovery ...')

for [flora_name, flora] in flores.items():
    topic_path = '{}/mqtt:miflora:{}/feature'.format(base_topic, flora_name.lower())
    data = OrderedDict()
    for param,_ in parameters.items():
        data[param] = flora['poller'].parameter_value(param)
    mqtt_client.publish('{}/mqtt:battery/state'.format(topic_path),data['battery'],1,True)
    mqtt_client.publish('{}/mqtt:moisture/state'.format(topic_path),data['moisture'],1,True)
    mqtt_client.publish('{}/mqtt:light/state'.format(topic_path),data['light'],1,True)
    mqtt_client.publish('{}/mqtt:conductivity/state'.format(topic_path),data['conductivity'],1,True)
    mqtt_client.publish('{}/mqtt:temperature/state'.format(topic_path),data['temperature'],1,True)


sleep(0.5) # some slack for the publish roundtrip and callback function
print()

Und zwischen Zeile 440 und 443:

elif reporting_mode == 'gladys-mqtt':
        print_line('Publishing to MQTT topic "{}/mqtt:miflora:{}/feature"'.format(base_topic, 
        flora_name.lower()))
        mqtt_client.publish('{}/mqtt:miflora:{}/feature'.format(base_topic, flora_name.lower()), 
        json.dumps(data))
        sleep(0.5) # some slack for the publish roundtrip and callback function

Ach ja, du musstest auch noch gladys-mqtt im Check-Teil deiner Datei hinzufügen :slight_smile:

    # Check configuration
if reporting_mode not in ['mqtt-json', 'mqtt-homie', 'json', 'mqtt-smarthome', 'homeassistant-mqtt', 'thingsboard-json', 'wirenboard-mqtt', 'gladys-mqtt']:

Vielen Dank für das Tutorial, ich suchte gerade nach einer Möglichkeit, meine Pflanzen zu überwachen und aufzuhören, sie alle umzubringen :laughing:

Wisst ihr, welche Metriken man überwachen sollte und wann man alarmiert sein muss?

Ich stelle mir die gleichen Fragen ^^ Ich habe keine grüne Hand und wenn es mir helfen kann, dann sage ich nicht nein xD

Genau! :slight_smile:

Normalerweise sind es die Exposition, Luftfeuchtigkeit und Raumtemperatur. Und das hängt von den Pflanzen ab :sweat_smile:.

Vielleicht sollten wir ein eigenes Thema mit den für die jeweiligen Pflanzenarten passenden Feuchtigkeitswerten erstellen? Seltsamerweise habe ich im Netz nur sehr wenig Informationen dazu gefunden. Sind Gärtner keine Nerds?

Das könnte sehr interessant sein!

So etwas?

5 „Gefällt mir“

Genial! Klar, so etwas zu integrieren wäre ideal, aber das ist nicht wirklich die Priorität :stuck_out_tongue:

Es gibt auch die Bodenfruchtbarkeit (Nährstoffgehalt). Dies erreicht man durch Dünger oder einfach/kostenlos durch Kompostierung mit Regenwürmern, aber man muss etwas Geduld haben ^^

https://illustrascience.fr/le-compost/

Der Vorteil ist, dass du deinen Müll reduzierst. Wer das Glück hat, einen Garten zu haben, kann einen Komposter aus Paletten bauen, für diejenigen in Wohnungen (mit oder ohne Balkon):

Man kann übrigens auch eine Kompostüberwachung in Gladys integrieren :slight_smile:

Aber ein Wurmkomposter hat schon einen ganz schönen Geruch, oder? :wink:

@lmilcent @spenceur, habt ihr es getestet?

Da ich keinen Raspberry Pi Zero habe, habe ich es auf einem Raspberry Pi 3B+ versucht und es funktioniert nicht. Er findet meinen Sensor, kann aber keine Daten abrufen, obwohl auf GitHub steht, dass der Raspi 3 kompatibel ist…

Ich habe eigentlich keine Fehlermeldung, außer einem Timeout. Ich sehe, dass er sich mit dem Flower Care verbindet, da die LED leuchtet, aber nach zwei Blinksignalen bricht die Verbindung ab, bei jedem Versuch.

Ich habe dein Issue gesehen, @glasserre. Ich denke, ich werde mir einen kleinen Raspberry Zero kaufen müssen.

Ich bekomme meine Sensoren in Woche pro (ja, ich bin schwach geworden, als ich das Tutorial gesehen habe :-p )

Ich habe mir noch keinen Sensor gekauft, aber das wird irgendwann kommen, die Lust fehlt nicht :wink:
Vor allem, da ich die Pflanzenleichen, die ich wegwerfen musste, nicht mehr zähle :sweat_smile:

Ja, ich habe alles versucht (Aktualisierung von btlewrap/bluepy, Test mit bluegatt) — keine Daten.
Danach bin ich aber überhaupt kein Experte, ich habe sicher etwas übersehen.

Ich werde mir auch noch andere holen, bald sind ja die French Days :slight_smile:

Gibt es keine Möglichkeit, die Entdeckung von @Jean34 in einen Mi Flora-Dienst einzubinden?
Dann könnte der Nutzer, wenn möglich, Szenen basierend auf einem Referenzwert erstellen, oder?

Ich werde etwas Generisches sehen (nicht direkt mit einem Dienst verbunden) mit den Szenen.

Wir werden Sensoren einer Pflanze zuweisen und das wird die Alarmbedingungen allein verwalten. (basierend auf der Entdeckung von @Jean34)