[Modul] MiFlora2Tasmota

Jetzt sollte es aber funktionieren.
Kannst du es nochmal testen?

Grüße,
Kai

Das sieht jetzt sehr gut aus, keine Fehler mehr.

Danke :slight_smile:

So ein kleiner Vorgeschmack:

Es fehlt nur noch das Bild von der Pflanze, die Übersetzung der Variablen und dann könnt ihr testen.
Über den Konfigurator könnt ihr die Pflanzen suchen und den Sensoren zuweisen. :slight_smile:

Ich nutze die API von: https://open.plantbook.io/

Grüße,
Kai

1 „Gefällt mir“

jetzt passt alles, bist der Beste :slight_smile:

Danke Alex :smiley:

Der Wert ist nicht Fruchtbarkeit :-o.

Welcher Wert?

Grüße,
Kai

Das hast du nur einmal in deiner Hardcopy :innocent:. Das ist die Bodenleitfähigkeit.

Hallo Zusammen,

ich habe das Modul auch mal getestet.
ESP32 mit Tasmota geflasht, My Flora eingebunden, MQTT Configuriert und alles Super.

Im IPS im MQTT-Server Server tauchen auch Date auf nur nicht im Modul.


Im Debug kommen auch Daten an
dump.txt (2,7 KB)

Was mach ich falsch?

Gruß Stephan

Nur ESP32_001 im Topic nehmen

Danke für die schnelle Antwort. Leider hat das uch nicht geklappt.
Bei dem Gateway kann ich doch den Serienmäßigen von IPS nehmen oder ?

Ich glaube es gibt einen Bug.
Der Fix sollte mit dem nächsten Update kommen.

Grüße,
Kai

Es gibt eine neue Beta Version im Store, dort ist die Pflanzensuche integriert.

Danke an @Burki24 für das ergänzen der Doku und der Profile. :slight_smile:

Hier (MiFlora2Tasmota/Configurator at master · Schnittcher/MiFlora2Tasmota · GitHub) könnt ihr nachlesen, wie ihr Zugriff auf die API bekommt.

Grüße,
Kai

Bei der Suche mit Leerzeichen knallt es.

<br />
<b>Notice</b>:  Trying to access array offset on value of type null in <b>/var/lib/symcon/modules/.store/schnittcher.info.ips.miflora2tasmota/Configurator/module.php</b> on line <b>213</b><br />
<br />
<b>Warning</b>:  Invalid argument supplied for foreach() in <b>/var/lib/symcon/modules/.store/schnittcher.info.ips.miflora2tasmota/Configurator/module.php</b> on line <b>213</b><br />

Ansonsten kann ich Pflanzen aussuchen, allerdings wurden keine Werte eingetragen.
Ein Hinweis, dass pro Pflanze noch einmal auf [Prüfen] gedrückt werden muss, wäre bestimmt sinnvoll ;-).

Und die Überschriften im Konfigurator sind bei mir mixed deutsch/englisch.

Einen habe ich noch, der generierte Bildname hat noch einen Schreibfehler „PlantImgae…“

Ja, das war nur auf die schnelle eingebaut.
Doku und Variablen werden nochmal überprüft.

Danke für die Infos mit dem Leerzeichen, werde ich mir anschauen.

Grüße,
Kai

Hab jetzt bei mir mal alle 16 Sensoren aktualisiert. Bis auf die von @ralf genannten Sachen lief es bei mir ohne Probleme durch.

Ich zitiere mich bzw. meinen Wunsch noch mal.

@KaiS planst du dazu noch etwas?

Die jeweiligen Hinweise finde ich sehr nützlich, dadurch kann man auch „Overall Meldungen“ erzeugen und direkt auf „gieß mich oder düng mich“ hingewiesen werden.

nach dem Update hat das Modul meinen Sensor gefunden. Wobei ich nicht alle Wert angezeigt werden.

Kann das an der Firmware vom Sensor liegen ?
Wenn ja, gibt es irgendwo weine Anleitung um den Sonsor upzudaten?

Xiamoi Home App installieren, je nach Herkunft deiner Sensoren das richtige einstellen, dann sehr in die Nähe des jeweiligen Sensors und updaten.

Die min/max Werte werden nur eingetragen, wenn du eine Pflanze auswählst. Aber Feuchtigkeit und Leitfähigkeit sollten über BLE eigentlich kommen, je nach Firmware, 3.1.9 ist glaube ich aktuell.

Es hatte alles gepasst bis ich gestern wieder das neue Beta installiert habe und jetzt kommen die Fehlermeldungen wieder im Meldungsfenster?

Danke
Alex

@ralf

Denke mal, dass wird noch Einzug ins Modul bekommen. Für die Übergangsphase hab ich da mal was vorbereitet.

Das Script legt ein Profil „Z2M.FlowerCare“ an. Dann werden die Benötigten Variablen angelegt und im Anschluss die Werte abgeholt und analysiert.

<?php
// Profil anlegen
if (IPS_VariableProfileExists("Z2M.FlowerCare") ===false) {                                 // Prüfen, ob Profil existent
    $Profile = IPS_CreateVariableProfile("Z2M.FlowerCare",1);                               // Profil erstellen
    IPS_SetVariableProfileAssociation("Z2M.FlowerCare", 0, "Zu Niedrig", "", 0xFF0000);
    IPS_SetVariableProfileAssociation("Z2M.FlowerCare", 1, "Normal", "", 0x00FF00);
    IPS_SetVariableProfileAssociation("Z2M.FlowerCare", 2, "Zu Hoch", "", 0xFF0000);
    IPS_SetVariableProfileValues("Z2M.FlowerCare", 0, 2, 1);                                // Profil Messgrenzen und Schritte festlegen
}

// Variablen anlegen
$Name = array(  "Aktuell_Bodenfeuchtigkeit" => 1,                                               // Array mit Variablen-Name und Variablentyp
                "Aktuell_Temperatur"=> 1,
                "Aktuell_Helligkeit_Lux"=> 1,
                "Aktuell_Bodenleitfähigkeit" => 1);
$id = IPS_GetParent($_IPS['SELF']);
foreach ($Name as $Variable=>$Typ) 
        {                                 
        $Setname = $Variable;
        $childid = @IPS_GetVariableIDByName($Setname, $id);
        if ($childid === false){                                                                // Prüfen, ob Variablen existieren -> Ja => überspringen, nein => anlegen
            $Variable = IPS_CreateVariable($Typ);                                               // Variablen erstellen und Typ vergeben
            IPS_SetName($Variable, $Setname);                                                   // Variable benennen
            IPS_SetParent($Variable, $id);                                                      // Variable einsortieren unter dem Objekt mit der ID "$KategorieID (Normwerte)"
            }
        }

// Zuteilen der Profile
$Prof = array(  "Aktuell_Bodenfeuchtigkeit" => "Z2M.FlowerCare",                            // Array mit Variablen-Name und Variablentyp
                "Aktuell_Temperatur"=> "Z2M.FlowerCare",
                "Aktuell_Helligkeit_Lux"=> "Z2M.FlowerCare",
                "Aktuell_Bodenleitfähigkeit" => "Z2M.FlowerCare");
foreach ($Prof as $Var_Prof=>$Profil) {
        $VariableID = IPS_GetVariableIDByName($Var_Prof,$id);                                   // Variablen-IDs abrufen
        IPS_SetVariableCustomProfile($VariableID,$Profil);                                      // Variablen Profil zuweisen
        };

//Werte holen

// Soll-Werte
$BodenFeuchtMin = (GetValue(IPS_GetVariableIDByName("Bodenfeuchtigkeit min.", $id)));
$BodenFeuchtMax = (GetValue(IPS_GetVariableIDByName("Bodenfeuchtigkeit max.", $id)));

$HelligkeitLuxMin = (GetValue(IPS_GetVariableIDByName("Helligkeit min. (Lx)", $id)));
$HelligkeitLuxMax = (GetValue(IPS_GetVariableIDByName("Helligkeit max. (Lx)", $id)));

$TempMin = (GetValue(IPS_GetVariableIDByName("Temperatur min.", $id)));
$TempMax = (GetValue(IPS_GetVariableIDByName("Temperatur max.", $id)));

$BodenLeitMin = (GetValue(IPS_GetVariableIDByName("Bodenleitfähigkeit min.", $id)));
$BodenLeitMax = (GetValue(IPS_GetVariableIDByName("Bodenleitfähigkeit max.", $id)));


// Ist-Wert
$BodenFeuchtIst = (GetValue(IPS_GetVariableIDByName("Feuchtigkeit", $id)));
$HelligkeitLuxIst = (GetValue(IPS_GetVariableIDByName("Beleuchtungsstärke", $id)));
$TempIst = (GetValue(IPS_GetVariableIDByName("Temperatur", $id)));
$BodenLeitIst = (GetValue(IPS_GetVariableIDByName("Leitfähigkeit", $id)));

// Wert setzen

If ($BodenFeuchtIst > $BodenFeuchtMax) {
    Setvalue(IPS_GetVariableIDByName("Aktuell_Bodenfeuchtigkeit", $id), 2);
    } elseif ($BodenFeuchtIst < $BodenFeuchtMin){
        Setvalue(IPS_GetVariableIDByName("Aktuell_Bodenfeuchtigkeit", $id), 0);}
    else {
        Setvalue(IPS_GetVariableIDByName("Aktuell_Bodenfeuchtigkeit", $id), 1);
    }

If ($HelligkeitLuxIst > $HelligkeitLuxMax) {
    Setvalue(IPS_GetVariableIDByName("Aktuell_Helligkeit_Lux", $id), 2);
    } elseif ($HelligkeitLuxIst < $HelligkeitLuxMin){
        Setvalue(IPS_GetVariableIDByName("Aktuell_Helligkeit_Lux", $id), 0);}
    else {
        Setvalue(IPS_GetVariableIDByName("Aktuell_Helligkeit_Lux", $id), 1);
    }

If ($TempIst > $TempMax) {
    Setvalue(IPS_GetVariableIDByName("Aktuell_Temperatur", $id), 2);
    } elseif ($TempIst < $TempMin){
        Setvalue(IPS_GetVariableIDByName("Aktuell_Temperatur", $id), 0);}
    else {
        Setvalue(IPS_GetVariableIDByName("Aktuell_Temperatur", $id), 1);
    }

If ($BodenLeitIst > $BodenLeitMax) {
    Setvalue(IPS_GetVariableIDByName("Aktuell_Bodenleitfähigkeit", $id), 2);
    } elseif ($BodenLeitIst < $BodenLeitMin){
        Setvalue(IPS_GetVariableIDByName("Aktuell_Bodenleitfähigkeit", $id), 0);}
    else {
        Setvalue(IPS_GetVariableIDByName("Aktuell_Bodenleitfähigkeit", $id), 1);
    }

Probiere es bitte mal aus. Das Script legst Du einfach unter die Instanz. Der Rest läuft von selber, wenn Du es ausführst.

Ich hab das Script mal „Pflege_Tipps“ genannt.

Rückmeldungen, wenn Probleme gerne an mich. Wenn keine Probleme, gerne auch ein kurzes Feedback.

Hier noch als Zip-Datei:

Pflege_Tipps.zip (1,2 KB)

Gruß

Burkhard