[Modul] MiFlora2Tasmota

Es ging hier auch mit eine IPhone APP, musste auch nur die Region auf China stellen. Habe die App aber nicht mehr drauf. Muss mal suchen, wo ich den Tipp weitergegeben hatte, auch vergessen. :cry:

@KaiS

wenn ich eine Instanz anlegen möchte, erhalte ich folgende Fehlermeldung:

Fehler beim Übernehmen der Änderungen
<br />
<b>Notice</b>:  Undefined index: max_light_mmol in <b>C:\ProgramData\Symcon\modules\.store\schnittcher.info.ips.miflora2tasmota\MiFlora\module.php</b> on line <b>91</b><br />
<br />
<b>Notice</b>:  Undefined index: min_light_mmol in <b>C:\ProgramData\Symcon\modules\.store\schnittcher.info.ips.miflora2tasmota\MiFlora\module.php</b> on line <b>92</b><br />
<br />
<b>Notice</b>:  Undefined index: max_light_lux in <b>C:\ProgramData\Symcon\modules\.store\schnittcher.info.ips.miflora2tasmota\MiFlora\module.php</b> on line <b>93</b><br />
<br />
<b>Notice</b>:  Undefined index: min_light_lux in <b>C:\ProgramData\Symcon\modules\.store\schnittcher.info.ips.miflora2tasmota\MiFlora\module.php</b> on line <b>94</b><br />
<br />
<b>Notice</b>:  Undefined index: max_temp in <b>C:\ProgramData\Symcon\modules\.store\schnittcher.info.ips.miflora2tasmota\MiFlora\module.php</b> on line <b>95</b><br />
<br />
<b>Notice</b>:  Undefined index: min_temp in <b>C:\ProgramData\Symcon\modules\.store\schnittcher.info.ips.miflora2tasmota\MiFlora\module.php</b> on line <b>96</b><br />
<br />
<b>Notice</b>:  Undefined index: max_env_humid in <b>C:\ProgramData\Symcon\modules\.store\schnittcher.info.ips.miflora2tasmota\MiFlora\module.php</b> on line <b>97</b><br />
<br />
<b>Notice</b>:  Undefined index: min_env_humid in <b>C:\ProgramData\Symcon\modules\.store\schnittcher.info.ips.miflora2tasmota\MiFlora\module.php</b> on line <b>98</b><br />
<br />
<b>Notice</b>:  Undefined index: max_soil_moist in <b>C:\ProgramData\Symcon\modules\.store\schnittcher.info.ips.miflora2tasmota\MiFlora\module.php</b> on line <b>99</b><br />
<br />
<b>Notice</b>:  Undefined index: min_soil_moist in <b>C:\ProgramData\Symcon\modules\.store\schnittcher.info.ips.miflora2tasmota\MiFlora\module.php</b> on line <b>100</b><br />
<br />
<b>Notice</b>:  Undefined index: max_soil_ec in <b>C:\ProgramData\Symcon\modules\.store\schnittcher.info.ips.miflora2tasmota\MiFlora\module.php</b> on line <b>101</b><br />
<br />
<b>Notice</b>:  Undefined index: min_soil_ec in <b>C:\ProgramData\Symcon\modules\.store\schnittcher.info.ips.miflora2tasmota\MiFlora\module.php</b> on line <b>102</b><br />
<br />
<b>Notice</b>:  Undefined index: image_url in <b>C:\ProgramData\Symcon\modules\.store\schnittcher.info.ips.miflora2tasmota\MiFlora\module.php</b> on line <b>104</b><br />
<br />
<b>Fatal error</b>:  Uncaught TypeError: file_get_contents() expects parameter 1 to be a valid path, null given in C:\ProgramData\Symcon\modules\.store\schnittcher.info.ips.miflora2tasmota\MiFlora\module.php:104
Stack trace:
#0 C:\ProgramData\Symcon\modules\.store\schnittcher.info.ips.miflora2tasmota\MiFlora\module.php(104): file_get_contents(NULL)
#1 C:\Windows\System32\-(3): MiFlora-&gt;ApplyChanges()
#2 {main}
  thrown in <b>C:\ProgramData\Symcon\modules\.store\schnittcher.info.ips.miflora2tasmota\MiFlora\module.php</b> on line <b>104</b><br />
 (Code: -32603)

Modul wird korrekt erkannt:


wenn ich es anlegen möchte, markiere ich das neue Modul und gehe ja auf „erstellen“.
Danach erscheint die Fehlermeldung.

Instanz wird dann angelegt:

Allerdings werden die Variablen nicht aktualisiert. Wo mache ich den Fehler?

Grüße
Simon

Hallo Simon,

kann es sein, dass Du im Konfigurator keine passende Pflanze über open.plantbook gesucht hast?
Dem Modul fehlen die Min/Max Werte, die er ohne Pflanzenangabe nicht beziehen kann.

Gruß

Burkhard

Im Moment ist es nicht möglich, keine Pflanze auszuwählen, bzw. dann komm der Fehler.

Grüße,
Kai

okay das war der Fehler.
Ich wollte die Sensoren erstmal alle einrichten, damit meine Frau sie dann flexibel verteilen kann.
hab jetzt pro Forma überall eine Orchidee (wie viele Typen es hierzu gibt…) eingetragen und danach hat es problemlos funktioniert.
Danke für den Hinweis!

Hallo @KaiS ,

wäre es möglich, das Modul dahingehend zu erweitern, dass der Pflanzenname, den man im Konfigurator auswählt in eine Variable geschrieben wird?
Das würde es vereinfachen, den richtigen Sensor in der Liste wieder zu finden:

Gruß

Burkhard

Ich habe deinen Beitrag mal in den richtigen Thread verschoben.
Klar, können wir noch eine Variable anlegen, oder die Instanz umbenennen, wenn eine Pflanze ausgewählt wird. Was fändest du besser?

Grüße,
Kai

Für mich wäre eine Variable besser, da ich den „deutschen“ Namen als Instanz nutze und den lateinischen Namen nur für Plantbook raus suche.
Richte mich da aber nach der Mehrheit.

Wäre ich auch dafür.

+1

Bin auch für eine Variable

Wäre es nicht besser, beim Anlegen der Geräteinstanz zunächst den lateinischen Namen aus dem Konfigurator als Objektname zu übernehmen?

Der Name der Geräteinstanz kann dann ja, wie sonst auch üblich, beliebig geändert werden.

Der lateinische Name ist ja als Property „Plant Name“ weiterhin vorhanden. Ich sehe noch keinen Vorteil darin, das Property „Plant Name“ zusätzlich als Variable anzulegen. Ganz im Gegenteil, wenn sich einer der Inhalte ändert, wer gewinnt dann?

Da ich meine visuellen Bedienungen alle mit IPSStudio erstelle, bräuchte ich es als Variable, um es in die View als VarLabel einzufügen. Würde es jedenfalls vereinfachen

Gruß

Burkhard

Das finde ich auch besser, dann muss man den Namen nicht doppelt pflegen.

Du bräuchtest doch nur den Instanznamen „Flora641b01“ in „Beerenbeet“ ändern. Das wäre das übliche Vorgehen bei Instanzen. Oder übersehe ich da etwas?

Im IPSView kann man den Instanznamen nicht verwenden.

Ich werde den Namen mal noch zusätzlich in eine Variable schreiben.

Grüße,
Kai

Wenn du das Modul weiter anpasst, würde ich mich auch über die Update-Zeit freuen, da dann ein besseres Monitoring stattfinden kann.

„Time“:„2021-04-10T12:37:25“

Vielleicht in einem „sinnvolleren“ Format in einer Variablen.

Mir fehlte gerade bei meiner Umstellung auch genau diese Variable :slight_smile:

Ich habe mir als Übergangslösung mit einem temporären Skript beholfen. Vielleicht möchtest du es auch nutzen.

<?php

// created by bumaas

// temporäre Lösung um eine "Letzte Meldung" Variable bei den Miflora Instanzen anzulegen und zu setzen

declare(strict_types=1);

foreach (IPS_GetInstanceListByModuleID('{1ABD9482-C0FC-A2D1-BB98-C5509FB8321C}') as $id){

   CreateVariableByIdent($id, 'LastMessageTS', 'Letzte Meldung', VARIABLETYPE_INTEGER, '~UnixTimestamp');

   

   if ($rssID = IPS_GetObjectIDByIdent('RSSI', $id)){

      createEvent($rssID); 

   }

}

if ($_IPS['SENDER'] === 'Variable'){

   $id = IPS_GetObjectIDByIdent('LastMessageTS', IPS_GetParent($_IPS['VARIABLE']));

   SetValueInteger($id, time());

}

return;

//------------------------------------------------------------------------------

function createEvent(int $varID): void

{

   global $_IPS;

   if (@IPS_GetEventIDByName('Event ' . $varID, $_IPS['SELF']) === false) {

       $ereignis = IPS_CreateEvent(0);

       IPS_SetEventTrigger($ereignis, EVENTTRIGGERTYPE_ONUPDATE, $varID);

       IPS_SetEventTriggerSubsequentExecution($ereignis, true);

       IPS_SetParent($ereignis, $_IPS['SELF']);

       IPS_SetName($ereignis, 'Event ' . $varID);

       IPS_SetEventActive($ereignis, true);

   }

}

//------------------------------------------------------------------------------

function CreateVariableByIdent(int $ParentID, string $ident, string $name, int $type, string $profile = ''): int

{

   global $_IPS;

   $vid = @IPS_GetObjectIDByIdent($ident, $ParentID);

   if ($vid === false) {

       $vid = IPS_CreateVariable($type);

       IPS_SetParent($vid, $ParentID);

       IPS_SetName($vid, $name);

       IPS_SetInfo($vid, 'This variable was created by script #' . $_IPS['SELF']);

       IPS_SetIdent($vid, $ident);

       if ($profile !== '') {

           IPS_SetVariableCustomProfile($vid, $profile);

       }

   }

   return $vid;

}

Burkhard

Hallo Kai,

erst mal danke für dein „weiteres“ tolles Modul für die MiFloras.

Mal kurz eine Frage dazu:
So wie ich es sehe, datest du alle Variablen immer ab (Tasmota Modul > IPS-Variablen), auch wenn der Sensor noch gar nicht die passenden Daten geliefert hat, oder dies im Konfigurator vorliegen.
Z.B. die Temperatur, wenn diese noch gar nicht im ESP vorliegt.
Das macht hier dann einen falschen Anschein für die wirklichen Werte.
Hat das einen speziellen Grund warum das so ist oder kann man das konfigurieren?
Ich hätte so keine Möglichkeit einen fehlenden Sensorwert zu bemerken, oder interpretiere ich da noch etwas falsch?

Danke u. viele Grüße,
Doc

Du könntest auf Änderung der Variable prüfen. :slight_smile:

Grüße,
Kai