Xiaomi Mi Flora / Flower Care - Smarter Pflanzensensor homebridge-mi-flower-care

  • So, ich habe das erneut zum Laufen bekommen, aber es ist tatsächlich eine arge Bastelei. Komischerweise wurde plötzlich keine Werte mehr angezeigt und gleichzeitig konnte auch die Flower Care-App sich auf einmal nicht mehr mit den Sensoren verbinden. Ich musste meinen zwei Sensoren die Batterie entnehmen und neu einsetzen, damit die App sich wieder verbinden konnte. Wie das zustande kommt: keine Ahnung. Weiter beobachten.

    homebridge-mi-flower-care unter Node 10.16.3

    Das Problem liegt im Modul bluetooth-hci-socket. Darin befindet sich irgendein Bug, der den Betrieb unter Node 10 unmöglich macht. Das hat irgendwer repariert und im npmjs-Repository hinterlegt. Der Trick besteht nun darin, dieses Modul zu installieren und homebridge-mi-flower-care unterzuschieben.


    Zuerst muss der ganze Bluetooth-Kram auf den Raspi installiert werden. Ich schätze mal, das hat schon jeder getan, aber der Ordnung halber hier nochmal:

    sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev libcap2-bin

    Es schadet nicht, das Bluetooth-Zeugs noch mal zu installieren, auch wenn es schon drauf ist.


    Den Rest der Installation habe ich als root vorgenommen.

    sudo su -


    Installation der verbesserten Module

    npm install -g --unsafe-perm @abandonware/bluetooth-hci-socket

    npm install -g --unsafe-perm @abandonware/noble


    Auch hier wird der Bildschirm mit Fehlermeldungen und Warnungen überschwemmt, aber jeweils am Ende sieht man, dass was installiert wurde.


    homebridge-mi-flower-care mal anders installieren

    git clone https://github.com/honkmaster/homebridge-mi-flower-care.git

    npm install -g --unsafe-perm ./homebridge-mi-flower-care


    Man beachte bitte den ./ bei der Installation.


    Starten der Bastelarbeiten

    rm -rf /usr/local/lib/node_modules/homebridge-mi-flower-care

    cp -av homebridge-mi-flower-care/ /usr/local/lib/node_modules/


    Während der Laie ungerührt kopiert und pastet, staunt der Fachmann. Erst habe ich mit npm das Plugin installiert, dann mit rm -rf wieder gelöscht und dann manuell mit cp -av wieder hinkopiert. Ich werde zu diesem Vorgang keine Fragen beantworten, weil ich ihn selber nicht verstehe. Aber ohne ging's nicht.


    Da homebridge-mi-flower-care die falsche noble- und bluetooth-hci-socket-Version mitinstalliert hat und diese nutzen will, schiebe ich ihr jetzt die verbesserten Versionen unter:


    cd /usr/local/lib/node_modules/homebridge-mi-flower-care/node_modules/

    rm -rf bluetooth-hci-socket noble

    ln -s ../../@abandonware/noble/ .

    ln -s ../../@abandonware/bluetooth-hci-socket/ .


    Und ganz zum Schluss:

    setcap cap_net_raw+eip $(eval readlink -f `which node`)


    Danach kann man den root-Modus wieder verlassen mit

    exit


    Nun konfiguriert man config.json wie hier beschrieben:

    Code
    {
      "accessory": "mi-flower-care",
      "name": "Golden cane palm",
      "deviceId": "AA:BB:CC:DD:EE:FF",
      "interval": 300
    }

    Die deviceId findet man, indem man sudo hcitool lescan eingibt. Irgendwann wird dann auch die Adresse des Flower Care-Sensors ausgegeben.


    Und dann Homebridge restarten. Mein Log zeigt das folgende:

    Da sieht man meine beiden Planzen: eine Dracaena und eine Fittonia. Und die melden munter:


    Die erste Meldung kam übrigens fünf Minuten nach dem Start von Homebridge, also müsst ihr ein bisschen warten.


    Noch mal: das ist alles fiese Bastelei. Ich bin sicher, dass mir bei einem Update von homebridge-mi-flower-care alles um die Ohren fliegt. Und nach einem Update von node muss der Befehl sudo setcap cap_net_raw+eip $(eval readlink -f `which node`) wieder eingegeben werden.


    Ach ja: das läuft bei mir sowohl auf einem Raspi 3 als auch auf einem Raspi 4.

    Stefan

  • Hahaha, okay ich versteh zwar absolut nicht alles was da teilweise auf meinem PI passiert, aber da hab sogar ich bemerkt, dass das keinen logischen Sinn ergeben kann mit installieren, loeschen, wieder reinkopieren. aber hey, wenn das so funktioniert, dass ist das doch geil! Hast du das mal in einer Testumgebung mit unterschiedlichen Versionen getestet und was dann wirklich bei updates passiert? Also bon node9 auf node10 auf node11 etc oder immer nur mit der aktuellen LTS Variante?


    Da ich bezweifel, dass es noch ein update fuer das Plugin selbst geben wird, ist der Teil eh hinfaellig vermute ich!


    Konntest du irgendwelche Unterschiede in der performance feststellen durch diesen "bluetooth-hack"? Oder bleibt da alles beim Alten?

  • Ich habe das einfach erst auf meinem Live-System gemacht und dann auf dem neuen Raspi 4. Ich habe nur Node 10.16.2 und Node 10.16.3 verwendet. Das kleine Update hat den Hack schon gestört und es hat ein Weilchen gedauert, bis ich darauf kam, dass ich ja erneut setcap cap_net_raw+eip $(eval readlink -f `which node`) ausführen muss.


    Performance-Unterschiede kann ich nicht feststellen. Eine meiner Pflanzen steht zu weit weg, ich hab sie für den Test gleich neben den Raspi gestellt, aber das ist eine andere Geschichte.

  • Respekt! Für den Weg und die genialen Infos zu teilen.


    Ich muss mir aber echt noch überlegen ob ich mir das zutraue. Wenn dann nach dem 3. Bier am Wochenende ;)


    Bin echt hin und hergerissen. Möchte die aktuelle node installiert haben, obwohl mit der 8.irgendwas bei mir alles stabil läuft. Jetzt muss ich mir echt überlegen ob ich das laufende System doch schon etwas umfangreicher anpasse nur damit node 10.x läuft. Wovon ich aktuell keinen Vorteil hätte, den ich verstehe.


    P.S.: Das mit den Sensor und Batterie raus, habe ich leider "öfters". 2 - 3x im Jahr. Manchmal hängen die sich auf. Merkwürdigerweise nicht immer der gleiche. Ich habe geprüft ob alle die gleiche Firmware haben (ist der Fall). Mit Batterie raus und rein kann man diese für einige Wochen / Monate wiederbeleben. Das war auch schon vor meiner Homebridge / plug-in Zeit.


    Meiner subjektiven Meinung nach kommt es vermehrt zu den "Ausetzern" sobald die Batterie leer wird. Leider ist die Anzeige ein Witz. Spätestens bei 97% ist die Batterie leer und das Ding ist tot.

  • Bin echt hin und hergerissen. Möchte die aktuelle node installiert haben, obwohl mit der 8.irgendwas bei mir alles stabil läuft. Jetzt muss ich mir echt überlegen ob ich das laufende System doch schon etwas umfangreicher anpasse nur damit node 10.x läuft. Wovon ich aktuell keinen Vorteil hätte, den ich verstehe.

    Eben. Lass es so, wie es ist. Ich wollte halt nicht auf node 8 downgraden, daher ist mein Beitrag, für diejenigen, die es auch nicht wollen. Solange du keinen wirklich triftigen Grund hast, ein Upgrade zu machen, mach es auch nicht. So etwas endet leicht in schwerem Frust.

  • :D

    Da spricht die Seele, die wahrscheinlich schon die ein oder andere Stunde vor der Homebridge verbracht hat! Ich folge Deinen Rat und lasse es so wie es ist. Vielen Dank aber trotzdem, das Du es ausgearbeitet hast und den Lösungsweg super beschreibst.

  • Raspberry Pi 3/ node 11.6.0 (aus reiner Neugierde leider von 8.x geupdated)/ pi und homebridge installation über die altbekannte Homebridge App, iOS

    Flower-care installation hat ein paar HomeKit Geräte zerschossen - raumzuordnung vom Nello und ein paar Geräte und zugehörige Automationen.


    Oben beschriebener Workaround hat funktioniert. Flowercare ist mit drei sensoren angezeigt - im Eve mit fünf:

    Temperatur

    Luftfeuchtigkeit

    Helligkeit

    Soil Fertility

    Soil Moisture


    es laufen sehr gut:

    Dummy Switch/ Nello/ Nuki


    Nicht installieren konnte ich irgendwie:

    Homebridge-hue

    Homebridge-platform-maxcube


    Trotz intensiver Forumsuche bekomm ich die nicht zum Laufen.

    Die nächsten dunklen Wintertage kommen ja bestimmt. Dann gibt es einen neuen Anlauf. : )

  • Geht jetzt Node 11 eigentlich mit dem Plugin?



    Sent from my iPhone using Community

  • Geht jetzt Node 11 eigentlich mit dem Plugin?

    Die Frage sollte besser lauten: geht das Plugin jetzt mit node irgendwas größer 9 und die Antwort ist nein. Ich habe weiter oben eine Lösung entwickelt, die aber bei jedem Update von node oder homebridge-mi-flower-care erst mal wieder nicht mehr funktioniert. Das Problem liegt im zugrunde liegenden Bluetooth-Framework noble. Dort müsste der Code an node >9 angepasst werden, nur leider geschieht das nicht.


    Da bei meinem Setup zusätzlich noch mein Switchbot gestört wird, habe ich Abschied genommen von noble und somit auch von homebridge-mi-flower-care. Ich habe eine Lösung gefunden, die meine Mi Flore Care-Sensoren mit gatttool ausliest. Was sich zunächst für mich anhörte wie die Steine aller Weisen, ist eine größere Installation, die ich hier nur kurz skizzieren möchte mit:


    Daten von den Sensoren auslesen mit miflora-mqtt-daemon. Das ist ein Python3-Skript, das einfach gestartet wird und danach alle 5 Minuten den Sensor-Status ausliest. Natürlich muss man vorher die MAC-Adressen der Sensoren angeben. Das Skript sendet die ermittelten Daten an einen MQTT-Server, den ich noch nicht hatte, und daher folgte dann sogleich die


    Installation von mosquitto. Das war einfach, runterladen, nicht weiter konfigurieren, starten. Und die Werte in Homebridge zu bekommen, brauchte ich ein Plugin, das Daten von einem MQTT-Server auslesen kann und an HomeKit sendet. Ich habe mich entschieden für die


    Installation von homebridge-mqttthings. Hier war die Konfiguration schon etwas kniffliger. Gefragt war ein Verständnis von MQTT und etwas Javascript. Sehr wenig Verständnis, aber ich hatte ein paar Rätsel zu lösen.


    Und es hat funktioniert. Die Daten landen nun in Homebridge, wobei ich mich rein auf die Werte des Feuchtigkeitssensors und der Batterie beschränkt habe. Darstellbar wären auch noch Lichtstärke, Fruchtbarkeit des Bodens (Dünger) und die Temperatur, aber ich habe darauf verzichtet.


    So kann man das betreiben und es stört auch meinen Switchbot nicht. Und mehr braucht es auch nicht, aber ich habe mich dann noch entschieden, die Kommunikation mit dem MQTT-Server zu verschlüsseln und mit einem Passwort zu versehen. Nicht dass es notwendig wäre, aber ich bastel halt gern. Hier wurde es dann etwas hässlicher, aber ich habe es dann doch noch zum Laufen bekommen.


    Wer so etwas auch bauen will, kann mich nach Details fragen, beispielsweise wie homebridge-mqttthings konfiguriert wird. Außerdem kann ich zwei systemd-Startdateien beisteuern, damit nach einem Reboot des Raspi sowohl mosquitto als auch miflora-mqtt-daemon automatisch gestartet werden.


    Da ich hier inzwischen eine Konfiguration aufgebaut habe, die dann nur noch Nerds brauchen, lese ich die Werte des MQTT-Servers dann noch zusätzlich mit Node-Red aus. Node-Red tut dann für mich noch das hier:


    • Langzeit-Speicherung der Feuchtigkeitsdaten in einer InfluxDB und die Darstellung mittels Grafana.
    • Auslesen des Batteriestatus und Darstellung im Node-Red-Dashboard.
    • Auf einen bestimmten Feuchtigkeitsstand testen und wenn dieser unterschritten wird, eine Push-Message an mein iPhone senden (via pushed.co).


    Wenn ihr einen Lebenspartner habt und wenn ihr ein Leben neben Computern habt und wenn ihr noch ganz bei Trost seid, dann verzichtet auf die Installation von Node-Red, InfluxDB, Grafana und den ganzen anderen Mist, aber ich will euch das Ergebnis nicht vorenthalten:


    (Grafana: keine Ahnung, warum da Lücken sind)


    (Sensor-Batterie rechts oben)


    Gruß

    Einmal editiert, zuletzt von sschuste ()

  • Moin moin,
    Also das mit NodeRed kommt für mich nicht in frage ^^ ist zu aufwändig.
    Aber das mit dem MQTT Broker und der Ansteuerung hört sich gut an.
    Denkst du das Ansteuern funktioniert auch mit dem MQTT Switch Plugin?
    Ich speichere mal deinen Hergang und versuche das so nachzubauen ;) wenn was ist melde ich mich.



    Sent from my iPhone using Community

  • sschuste was hast du denn in die config.ini für das Script eingeben?
    Ich habe die Config die dabei war kopiert und unter MQTT Broker die IP des Brokers eingetragen und unter devices die entsprechende Mac Adresse.
    Leider bekomme ich immer eine Fehlermeldung:


    „Xiaomi Mi Flora Plant Sensor MQTT Client/Daemon
    Source: https://github.com/ThomDietrich/miflora-mqtt-daemon


    Traceback (most recent call last):
    File "/opt/miflora-mqtt-daemon/miflora-mqtt-daemon.py", line 126, in <module>
    reporting_mode = config['General'].get('reporting_method', 'mqtt-json')
    File "/usr/lib/python3.7/configparser.py", line 958, in __getitem__
    raise KeyError(key)
    KeyError: 'General'“



    Sent from my iPhone using Community

  • Ob dir meine config.ini hilft? Als ich noch keine Verschlüsselung und kein Password eingesetzt habe, habe ich unten einfach nur die Sensoren angehängt. Ich habe keine weitere IP eingetragen, weil alles auf dem gleichen Raspi läuft. Außer den Sensoren habe ich an der config nichts verändert.


    Jetzt sieht meine config so aus wie unten, aber vorher waren username, password, tls und tls_ca_cert ebenfalls auskommentiert. Was für einen Broker nutzt du denn?


  • reporting_mode = config['General'].get('reporting_method', 'mqtt-json')

    Vielleicht fehlt dir irgendein JSON-Krempel auf der Maschine.

  • Mmh ich hab mal die config deiner etwas angepasst. Hatte nen Denkfehler, allerdings selbes Problem.
    Die frage ist welcher Json Krempel fehlt Bzw. Welchen muss ich nach installieren :/



    Sent from my iPhone using Community

  • Ich finde auch keinen mqtt-json zum nachinstallieren



    Sent from my iPhone using Community

  • Das klingt echt super spannend!
    Hatte auch vor mir die Dinger mal zuzulegen aber immer noch gewartet weil ich immer nur von den Problemen mit den aktuellen Node Versionen gelesen hatte...


    Deine Idee klingt aber super! Und auch das verschicken der Daten mittels Mqtt gefällt mir gut, da ich selber schon meine ganzen Shellys mittels Mqttthing bei mir eingebunden habe und das einwandfrei funktioniert bei mir.
    Allerdings fande ich da die Einrichtung auch etwas knifflig...
    Könntest du vielleicht nochmal die Konfiguration des Plugins zeigen ? Das wäre sehr hilfreich!


    Danke dir!
    ??



    Gesendet von iPhone mit Community

  • Das sieht so aus:

    Mein weitläufiger botanischer Garten besteht aus zwei Pflanzen: einer Fittonia und einer Dracaena. Die obige Konfiguration von homebridge-mqttthings zeigt, dass ich für die Fittonia zwei Sensordaten abfrage: Feuchtigkeit und Temperatur, und für die Dracaena nur die Feuchtigkeit.


    Das Pythonscript miflora-mqtt-daemon schickt die Sensorwerte Licht, Temperatur, Feuchtigkeit, Fruchtbarkeit und Batteriestand gleichzeitig an den MQTT-Broker:

    {"light": 4046, "moisture": 17, "conductivity": 67, "temperature": 25.3, "battery": 98}


    Die Feuchtigkeit lesen ich dann mit homebridge-mqttthings aus mit der apply-Funktion:

    "apply": "return JSON.parse(message).moisture"


    Alle anderen Werte würden ausgelesen werden mit:

    "apply": "return JSON.parse(message).light"

    "apply": "return JSON.parse(message).conductivity"

    "apply": "return JSON.parse(message).temperature"

    "apply": "return JSON.parse(message).battery"


    Die Broker-Adresse ist bei mir mit tls:// angegeben, was auf die Verschlüsselung der Protokollübertragung zurückzuführen ist. Der Rest sollte dir klar sein.


    Stefan