Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Xioami Flower Care / Tool

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    13
    1
    167

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.3k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

Xioami Flower Care / Tool

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
4 Beiträge 3 Kommentatoren 962 Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • M Offline
    M Offline
    malc
    schrieb am zuletzt editiert von
    #1

    Hallo.

    Ich nutzte da einige Flower Care für meine Pflanzen. Da ich gern die Logik lieber im Backend bilde habe ich mir ein Script gebaut welches im Prinzip die ble.0. <mac>Datenpunkte in dem Zweig javascript.0.flowercare spiegelt und eben dazu Min / Triggerwerte eingebaut.

    Dadurch habe ich dann ganz einfache Datenpunkte die auf true springen wenn ich giessen bzw. düngen sollte. Für jeden Sensor gibt es dann die entsprechenden Werte. Das ganze ist noch am Anfang, noch prüfe ich beim spiegeln nicht ob das Gerät überhaupt ein Flower Care Sensor ist und noch so einige andere Verbesserungen stehen aus. Die Spiegelung in dem Zweig Javascript ist beabsichtigt, einmal weil ich in ble.0.* kein createstate() machen kann und auch um in VIS ein zentraleren Ort für alles relevante zu haben.

    Es ist nur ein Anfang, nix fertiges. Aber vielleicht hat ja wer Interesse:

    // Xiaomi Flower Sensor / Erweiterung der BLE.0 Daten
    // Autor: Malc -------------------------
    // Version 0.1  27.08.2018 - Initialversion
    // Erweiterte Version 0.2c 27.08.2018
    //
    // Erweiterte Funktionen im Vergleich zu  0.2a
    // - Bei Scriptstart werden alle Messwerte mit -99 initialisiert
    // - applyfertilizer wird nur berechnet wenn fertility gesendet wird
    // - towater         wird nur berechnet wenn moisture gesendet wird
    // - BugFix 
    //
    // Erweiterte Funktionen im Vergleich zu  0.1
    // -Neuer Datenpunkt "online"
    //    Wird bei Scriptstart auf false gesetetzt und bei jedem Datenempfang auf true
    //    Jede Minute werden alle Devices geprüft und wenn TimeStamp länger als DeviceOnlineTimeout her ist auf false
    // -Neuer Datenpunk "rssiquality"
    //  Bewertung RSSI im Klartext
    // - BugFix 
    
    var DeviceOnlineTimeout  = 5;           // Wenn länger als n Minuten keine Diff aus Now - Timestamp, dann online=false 
    
    log("Start");
    
    Init();
    //CheckOnline();
    
    schedule('* * * * *', function() { CheckOnline(); });
    
    function CheckOnline() {
        $('[state.id=flowersensor.*.timestamp]').each(function(id,i) {
            var ParentId    = id.split(".").slice(0,-1).join(".");
            var Val         = getState(id).val;
    
            if (Val !== '' && TimeLeft(new Date(), new Date(Val)) <= DeviceOnlineTimeout) { 
                setState(ParentId +'.online', true);
            } else {
                setState(ParentId +'.online', false);
            }
        });
    }
    
    function Init() {
        createState('flowersensor.timestamp', "", {
          read: true, 
          write: false, 
          name: "TimeStamp", 
          type: "string", 
          def: null
        });
    
        setState('flowersensor.timestamp'               , "");
    
        $('[state.id=ble.0.*.fertility]').each(function(id,i) {
            var ParentId    = id.split(".").slice(0,-1).join(".");
            var MAC         = ParentId.substr(ParentId.lastIndexOf(".") +1);
            var Name        = "";
    
            if (true) {
                createState('flowersensor.' + MAC + '.name', Name, {
                  read: true, 
                  write: false, 
                  name: "Name", 
                  type: "string", // "number",
                  def: null
                });
    
                createState('flowersensor.' + MAC + '.online', false, {
                  read: true, 
                  write: false, 
                  name: "Device Online", 
                  type: "boolean", 
                  unit: "",
                  def: null
                });
    
                createState('flowersensor.' + MAC + '.timestamp', "", {
                  read: true, 
                  write: false, 
                  name: "Name", 
                  type: "string", // "number",
                  def: null
                });
    
                createState('flowersensor.' + MAC + '.fertility', 0, {
                  read: true, 
                  write: false, 
                  name: "Fertility of the soil", 
                  type: "number", 
                  def: 0
                });
    
                createState('flowersensor.' + MAC + '.illuminance', 0, {
                  read: true, 
                  write: false, 
                  name: "illuminance", 
                  type: "number", 
                  unit: "lux",
                  def: 0 
                });
    
                createState('flowersensor.' + MAC + '.moisture', 0, {
                  read: true, 
                  write: false, 
                  name: "Moisture of the soil", 
                  type: "number", 
                  unit: "%",
                  def: 0
                });
    
                createState('flowersensor.' + MAC + '.temperature', 0, {
                  read: true, 
                  write: false, 
                  name: "temperature", 
                  type: "number", 
                  unit: "°C",
                  def: 0
                });
    
                createState('flowersensor.' + MAC + '.timestamp', "", {
                  read: true, 
                  write: false, 
                  name: "Timestamp", 
                  type: "string", 
                  unit: "",
                  def: ""
                });
    
                createState('flowersensor.' + MAC + '.rssi', 0, {
                  read: true, 
                  write: false, 
                  name: "Signal strength of the device", 
                  type: "number",  
                  unit: "",
                  def: 0
                });
    
                createState('flowersensor.' + MAC + '.rssiquality', "", {
                  read: true, 
                  write: false, 
                  name: "Quality of RSSI", 
                  type: "string", 
                  unit: "",
                  def: ""
                });
    
                createState('flowersensor.' + MAC + '.minfertility', 300, {
                  read: true, 
                  write: false, 
                  name: "Minimum Fertility", 
                  type: "number", 
                  unit: "",
                  def: 0
                })
    
                createState('flowersensor.' + MAC + '.applyfertilizer', false, {
                  read: true, 
                  write: false, 
                  name: "apply fertilizer", 
                  type: "boolean", 
                  unit: "",
                  def: null
                });
    
                createState('flowersensor.' + MAC + '.minmoisture', 30, {
                  read: true, 
                  write: false, 
                  name: "Minimum Moisture", 
                  type: "number", 
                  unit: "",
                  def: 0
                })
    
                createState('flowersensor.' + MAC + '.towater', false, {
                  read: true, 
                  write: false, 
                  name: "to water", 
                  type: "boolean", 
                  unit: "",
                  def: null
                });
            }
    
            setState('flowersensor.' + MAC + '.fertility'       ,     -99);
            setState('flowersensor.' + MAC + '.illuminance'     ,     -99);
            setState('flowersensor.' + MAC + '.moisture'        ,     -99);
            setState('flowersensor.' + MAC + '.temperature'     ,     -99);
            setState('flowersensor.' + MAC + '.rssi'            ,     -99);
    
            setState('flowersensor.' + MAC + '.timestamp'       ,    '');
            setState('flowersensor.' + MAC + '.online'          , false);
            setState('flowersensor.' + MAC + '.applyfertilizer' , false);
            setState('flowersensor.' + MAC + '.towater'         , false);
    
            on({id: ParentId + '.fertility'     , change: "ne"}, function (obj) {FlowerData(obj); })
            on({id: ParentId + '.illuminance'   , change: "ne"}, function (obj) {FlowerData(obj); })
            on({id: ParentId + '.moisture'      , change: "ne"}, function (obj) {FlowerData(obj); })
            on({id: ParentId + '.temperature'   , change: "ne"}, function (obj) {FlowerData(obj); })
            on({id: ParentId + '.rssi'          , change: "ne"}, function (obj) {FlowerData(obj); })
    
        })
    }
    
    function FlowerData(obj ) {
        var Id              = obj.id;
        var Val             = obj.state.val;
        var Item            = Id.substr(Id.lastIndexOf(".") +1);
        var ParentId        = Id.split(".").slice(0,-1).join(".");
        var Name            = getState(ParentId + '.name').val;   
        var MAC             = ParentId.substr(ParentId.lastIndexOf(".") +1);
        var Timestamp       = formatDate(new Date(obj.state.ts), "JJJJ-MM-DD hh:mm:ss");
    
        /*
        log("FlowerData MAC         "  + MAC);
        log("FlowerData Item        "  + Item);
        log("FlowerData Val         "  + Val);
        */
    
        //log("FlowerData "  + Name +  ".Item[" + Item + "] = " + Val);
    
        setState('flowersensor.' + MAC + '.' + Item     , Val);
        setState('flowersensor.' + MAC + '.timestamp'   , Timestamp);
        setState('flowersensor.' + MAC + '.online'      , true);
    
        setState('flowersensor.timestamp'               , Timestamp);
    
        /* Generell bei jedem Ereignis prüfen da bei keiner Änderung der Feuchtigkeit / Dünger nichts übertragen wird */
    
        log (Name + " " + Item  + " " + Val   );
    
        if (Item == 'fertility') {
    
            if (Val  < getState('flowersensor.' + MAC + '.minfertility').val  ) {
                if (!getState('flowersensor.' + MAC + '.applyfertilizer').val) {
                    setState('flowersensor.' + MAC + '.applyfertilizer', true);
                    log(Name + " " + Item + " " + Val + " applyfertilizer ON");
                }
    
            }else {
                if (getState('flowersensor.' + MAC + '.applyfertilizer').val) {
                    log (Name + " " + Item + " " + Val + " applyfertilizer OFF");
                    setState('flowersensor.' + MAC + '.applyfertilizer', false);
                }
            }    
        }
    
        if (Item == 'moisture') {
            if (Val  < getState('flowersensor.' + MAC + '.minmoisture').val  ) {
                if (!getState('flowersensor.' + MAC + '.towater').val) {
                    setState('flowersensor.' + MAC + '.towater', true);
                    log(Name + " " + Item + " " + Val + " towater ON");
                }
            } else {
                if (getState('flowersensor.' + MAC + '.towater').val) {
                    log (Name + " " + Item + " " + Val + " towater OFF");
                    setState('flowersensor.' + MAC + '.towater', false);
                }
            }    
        }
    
        if( Item == "rssi") {
            var rq = '';
            if (Val >=   -40) {
                rq = 'excellent';
            } else if (Val >=   -55) {
                rq = 'good';
            } else if (Val <=   -55) {
                rq = 'bad';
            } else if (Val <=  -100) {
                rq = 'very bad';
            } else {
               rq = 'unkonwn'; 
            }
            setState('flowersensor.' + MAC + '.rssiquality', rq);
        } 
    }
    
    function TimeLeft(Start, End) {
    
        var diff =  Start - End;
    
        var h  = Math.floor( diff / 3.6e6        );
        var m  = Math.floor((diff % 3.6e6) /  6e4);
        var s  = Math.floor((diff %   6e4) / 1000);
        var Ret =  (h * 60) + m;
    
        /* 
        log('Start ' + Start);
        log('End..' + End);
        log('Ret    ' + Ret);
        */
    
        return Ret;
    
    }
    
    ````</mac>

    Fan von ioBroker!

    <size size="50">und falls ich eine Frage stelle die irgendwo schon mal beantwortet wurde: "Ja, Suchfunktion genutzt, aber keine Lösung gefunden / nicht die richtigen Suchbegriffe gewusst."

    …</size>

    1 Antwort Letzte Antwort
    0
    • ? Offline
      ? Offline
      Ein ehemaliger Benutzer
      schrieb am zuletzt editiert von
      #2

      Hi,

      super, vielen Dank, sehr gute Idee, und funktioniert hier einwandfrei!

      Klasse!

      1 Antwort Letzte Antwort
      0
      • M Offline
        M Offline
        malc
        schrieb am zuletzt editiert von
        #3

        Update: 0.2b

        (Script ist im Eingangspost aktualisiert)

        Erweiterte Funktionen im Vergleich zu 0.2a

        • Bei Scriptstart werden alle Messwerte mit -99 initialisiert

        • applyfertilizer wird nur berechnet wenn fertility gesendet wird

        • towater wird nur berechnet wenn moisture gesendet wird

        • BugFix

        Erweiterte Funktionen im Vergleich zu 0.1

        -Neuer Datenpunkt "online"

        Wird bei Scriptstart auf false gesetetzt und bei jedem Datenempfang auf true

        Jede Minute werden alle Devices geprüft und wenn TimeStamp länger als DeviceOnlineTimeout her ist auf false

        -Neuer Datenpunk "rssiquality"

        Bewertung RSSI im Klartext

        • BugFix

        Fan von ioBroker!

        <size size="50">und falls ich eine Frage stelle die irgendwo schon mal beantwortet wurde: "Ja, Suchfunktion genutzt, aber keine Lösung gefunden / nicht die richtigen Suchbegriffe gewusst."

        …</size>

        1 Antwort Letzte Antwort
        0
        • R Offline
          R Offline
          Ritschy2000
          schrieb am zuletzt editiert von
          #4

          Danke für das Script.

          scheint bei mir auch zu funktionieren, bekomme allerdings im Log immer folgende Warn-Medlung:

          javascript.0	2018-10-10 00:14:17.405	warn	at Object. <anonymous>(script.js.FlowerCare.Flower:205:78)
          javascript.0	2018-10-10 00:14:17.405	warn	at FlowerData (script.js.FlowerCare.Flower:217:27)
          javascript.0	2018-10-10 00:14:17.399	warn	getState "ble.0.c4:7c:8d:66:da:37.name" not found (3)
          javascript.0	2018-10-10 00:14:05.388	info	script.js.FlowerCare.Flower: null rssi -88
          javascript.0	2018-10-10 00:14:05.384	warn	at Object. <anonymous>(script.js.FlowerCare.Flower:205:78)
          javascript.0	2018-10-10 00:14:05.384	warn	at FlowerData (script.js.FlowerCare.Flower:217:27)
          javascript.0	2018-10-10 00:14:05.378	warn	getState "ble.0.c4:7c:8d:66:da:37.name" not found (3)
          javascript.0	2018-10-10 00:14:03.213	info	script.js.FlowerCare.Flower: null fertility 170
          javascript.0	2018-10-10 00:14:03.211	warn	at Object. <anonymous>(script.js.FlowerCare.Flower:201:78)
          javascript.0	2018-10-10 00:14:03.211	warn	at FlowerData (script.js.FlowerCare.Flower:217:27)
          javascript.0	2018-10-10 00:14:03.208	warn	getState "ble.0.c4:7c:8d:66:4c:07.name" not found (3)
          javascript.0	2018-10-10 00:13:54.383	info	script.js.FlowerCare.Flower: null rssi -85
          javascript.0	2018-10-10 00:13:54.380	warn	at Object. <anonymous>(script.js.FlowerCare.Flower:205:78)
          javascript.0	2018-10-10 00:13:54.379	warn	at FlowerData (script.js.FlowerCare.Flower:217:27)
          javascript.0	2018-10-10 00:13:54.373	warn	getState "ble.0.c4:7c:8d:66:da:37.name" not found (3)
          javascript.0	2018-10-10 00:13:54.174	info	script.js.FlowerCare.Flower: null rssi -70
          javascript.0	2018-10-10 00:13:54.172	warn	at Object. <anonymous>(script.js.FlowerCare.Flower:205:78)
          javascript.0	2018-10-10 00:13:54.171	warn	at FlowerData (script.js.FlowerCare.Flower:217:27)
          javascript.0	2018-10-10 00:13:54.164	warn	getState "ble.0.c4:7c:8d:66:4c:07.name" not found (3)
          javascript.0	2018-10-10 00:13:53.378	info	script.js.FlowerCare.Flower: null fertility 457
          javascript.0	2018-10-10 00:13:53.377	warn	at Object. <anonymous>(script.js.FlowerCare.Flower:201:78)
          javascript.0	2018-10-10 00:13:53.376	warn	at FlowerData (script.js.FlowerCare.Flower:217:27)
          javascript.0	2018-10-10 00:13:53.373	warn	getState "ble.0.c4:7c:8d:66:da:37.name" not found (3)
          javascript.0	2018-10-10 00:13:47.758	info	script.js.FlowerCare.Flower: null rssi -76
          javascript.0	2018-10-10 00:13:47.755	warn	at Object. <anonymous>(script.js.FlowerCare.Flower:205:78)
          javascript.0	2018-10-10 00:13:47.754	warn	at FlowerData (script.js.FlowerCare.Flower:217:27)
          javascript.0	2018-10-10 00:13:47.748	warn	getState "ble.0.c4:7c:8d:66:4c:05.name" not found (3)
          javascript.0	2018-10-10 00:13:44.164	info	script.js.FlowerCare.Flower: null rssi -68
          javascript.0	2018-10-10 00:13:44.161	warn	at Object. <anonymous>(script.js.FlowerCare.Flower:205:78)
          javascript.0	2018-10-10 00:13:44.160	warn	at FlowerData (script.js.FlowerCare.Flower:217:27)
          javascript.0	2018-10-10 00:13:44.154	warn	getState "ble.0.c4:7c:8d:66:4c:07.name" not found (3)
          javascript.0	2018-10-10 00:13:43.386	info	script.js.FlowerCare.Flower: null rssi -86
          javascript.0	2018-10-10 00:13:43.383	warn	at Object. <anonymous>(script.js.FlowerCare.Flower:205:78)
          javascript.0	2018-10-10 00:13:43.383	warn	at FlowerData (script.js.FlowerCare.Flower:217:27)
          javascript.0	2018-10-10 00:13:43.377	warn	getState "ble.0.c4:7c:8d:66:da:37.name" not found (3)
          javascript.0	2018-10-10 00:13:35.785	info	script.js.FlowerCare.Flower: null moisture 41
          javascript.0	2018-10-10 00:13:35.783	warn	at Object. <anonymous>(script.js.FlowerCare.Flower:203:78)
          javascript.0	2018-10-10 00:13:35.783	warn	at FlowerData (script.js.FlowerCare.Flower:217:27)
          javascript.0	2018-10-10 00:13:35.776	warn	getState "ble.0.c4:7c:8d:66:4c:05.name" not found (3)
          javascript.0	2018-10-10 00:13:35.746	info	script.js.FlowerCare.Flower: null rssi -74
          javascript.0	2018-10-10 00:13:35.743	warn	at Object. <anonymous>(script.js.FlowerCare.Flower:205:78)
          javascript.0	2018-10-10 00:13:35.743	warn	at FlowerData (script.js.FlowerCare.Flower:217:27)
          javascript.0	2018-10-10 00:13:35.737	warn	getState "ble.0.c4:7c:8d:66:4c:05.name" not found (3)</anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous></anonymous>
          

          muss ich noch irgendetwas eintragen? Bei mir scheint er den Punkt "name" nicht zu finden,

          habe bei den eigentlichen BLE Datenpunkten auch keinen "Unterpunkt" "name" gefunden.

          Bin für jede Hilfe dankbar.

          Gruße

          1 Antwort Letzte Antwort
          0
          Antworten
          • In einem neuen Thema antworten
          Anmelden zum Antworten
          • Älteste zuerst
          • Neuste zuerst
          • Meiste Stimmen


          Support us

          ioBroker
          Community Adapters
          Donate

          487

          Online

          32.7k

          Benutzer

          82.4k

          Themen

          1.3m

          Beiträge
          Community
          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
          ioBroker Community 2014-2025
          logo
          • Anmelden

          • Du hast noch kein Konto? Registrieren

          • Anmelden oder registrieren, um zu suchen
          • Erster Beitrag
            Letzter Beitrag
          0
          • Home
          • Aktuell
          • Tags
          • Ungelesen 0
          • Kategorien
          • Unreplied
          • Beliebt
          • GitHub
          • Docu
          • Hilfe