Smart Plant
Grundsätzlich geht es darum, die Pflanze zu beobachten, bzw. zu erkennen, ob die Erde der Pflanze zu trocken ist, oder sie zu wenig Licht bekommt.
Ein ausführliche Beschreibung für die Einrichtung von MQTT findet man hier.

Die jeweiligen Blöcke findet man unter “Advanced -> MQTT”
Smart-Plant
Stecke den Pb.HUB am Port A des M5Stacks an. Der Pb.HUB wird benötigt, da die folgenden beiden Sensoren jeweils über den Port B angesprochen werden müssen.
Im nächsten Schritt muss der Earth Sensor an den Port 0 des Pb.HUBs angeschlossen werden.

Als letzte Komponente muss der Light Sensor mittels Grove Kabel an den Port 1 des Pb.HUBs angeschlossen werden.

Bevor mit der Programmierung in Ui Flow begonnen werden kann, muss zunächst die Unit Pb.HUB ausgewählt werden, denn sowohl die Earth-Unit als auch die Light-Unit benötigen beide den Port B.
Wie bei dem Smart Home zuvor benötigt man auch bei diesem Modul den MQTT Broker.
Wie sieht es nun mit den Topics aus. Welche Nachrichten benötigt man, welche soll man weiterschicken? Für unseren Anwendungsfall benötigen wir keine Nachrichten von anderen Geräten, jedoch wollen wir den Zustand der Pflanze weitergeben können. Deswegen werden keine Subscribe-Blöcke benötigt, sondern nur Publish-Blöcke.
Die zu verwendeten Variablen sind somit:
· M5/jku/humidity … Ob die Erde ausreichend bewässert ist
· M5/jku/light … Ob die Pflanze ausreichend Licht bekommt
Um den MQTT Broker ansprechen zu können, müssen nach dem Setup die Verbindungsinformationen für den Broker angegeben werden.
Bevor wir nun mit der Logik der Units anfangen, muss man im Vorhinein überlegen, wann soll eine Nachricht gesendet werden? Ich möchte alle paar Sekunden den Status der Pflanze senden. Deswegen benötigen wir eine Schleife:

Den Status der Pflanze ermitteln wir über die Units, besser gesagt über den Pb.HUB, mittels dem analogRead-Block. Hier ist zu beachten, an welchen der 6 Ports man die Unit ansteckt. (Am Pb.HUB selbst, ist die Zahl gekennzeichnet).

Wenn man die LIGHT-Unit an den, Pb.HUB ansteckt, und dessen Werte sich über dieses „AnalogRead“ anschaut (z.B. über eine Label Ausgabe am M5Stack Bildschirm), erkennt man, dass starkes Licht zu einem niedrigen Wert führen, und hohe Werte bedeuten somit Dunkelheit. Für meine Pflanze zuhause möchte ich, dass die „Lichtwerte“ unter 500 sind, alles darüber wäre zu dunkel.
Deswegen beginnen wir wieder mit einer Bedingung, die man abfragen muss. Da es nur ein richtig oder falsch gibt, genügt hier eine einfache „if-do-else“-Schleife.

Die Abfrage selbst beim „if“ erfolgt über den Vergleichsoperator, den wir schon vorm vorherigen Kapitel kennen. Hier den AnalogRead abprüfen, ob der Wert unter 500 ist.

Im „do“-Teil soll die Nachricht gesendet werden, dass die Lichtverhältnisse für die Pflanze passen. Dies kann beliebig gewählt werden, für mich ist es einfacher zu halten mit „1“ für ok und „0“ für dunkel.

Für die Feuchtigkeit der Erde gehen wir analog vor und erstellen einen „if-do-else“ Block mit einem Vergleichsoperator mit dem AnalogRead. Beim Herumtesten fiel mir auf: Sehr trockene Erde hat Werte über 400.

Der momentane Zustand wird somit alle 10 Sekunden an den Broker gesendet. Was jedoch nicht beachtet wird, sind Tag- und Nachtzeiten. Das auf Nacht die Lichtwerte nie passen, ist selbstverständlich. Man könnte eventuell eine Überprüfung machen, dass diese Werte nur zu gewissen Uhrzeiten (z.B. Tagsüber) geschickt werden oder man summiert pro Tag alle diese „1“ und „0“ und findet heraus, ob die Pflanze über den ganzen Tag hinweg genug Licht bekommen hat.

