Was ist da falsch?
defmod FeuchteTh_Doif DOIF {
my $dev = [FeuchteTh:A.*];
if ($dev > 100 and $dev < 200) {
fhem ("set Signal send "@Mario Edelmann" Gießen Treppenhaus");}
}
attr FeuchteTh_Doif room Bewaesserung
attr FeuchteTh_Doif wait 60:60
bekomme immer "FeuchteTh_Doif DOIF: Perlblck: no right bracket: {"
my $dev = "[FeuchteTh:A.*]";
Zitat von: Per am 14 Oktober 2023, 14:49:16my $dev = "[FeuchteTh:A.*]";
[FeuchteTh:A.*] gibt es nicht
"[FeuchteTh:A.*]" auch nicht ;)
wahrscheinlich will er sowas:
["^FeuchteTh$:A.*",""]
Alle vorgeschlagen Versionen gehen nicht. Gleiche Fehlermeldung.
Dies ist die Fhem Langversion die ich versuche im Perl Modus zu verkürzen.
defmod FeuchteTh_Doif DOIF (([FeuchteTh:A0] > 100 and [FeuchteTh:A0] < 200) or ([FeuchteTh:A1] > 100 and [FeuchteTh:A1] < 200) or ([FeuchteTh:A2] > 100 and [FeuchteTh:A2] < 200) or ([FeuchteTh:A3] > 100 and [FeuchteTh:A3] < 200) or ([FeuchteTh:A4] > 100 and [FeuchteTh:A4] < 200) or ([FeuchteTh:A5] > 100 and [FeuchteTh:A5] < 200) or ([FeuchteTh:A6] > 100 and [FeuchteTh:A6] < 200) or ([FeuchteTh:A7] > 100 and [FeuchteTh:A7] < 200)) (set Signal send "@Mario Edelmann" Gießen Treppenhaus)
attr FeuchteTh_Doif room Bewaesserung
attr FeuchteTh_Doif wait 60:60
Das sind die Events des Devices:
2023-10-14 17:20:42 MQTT2_DEVICE FeuchteTh rssi: -122
2023-10-14 17:20:42 MQTT2_DEVICE FeuchteTh A1: 96
2023-10-14 17:20:42 MQTT2_DEVICE FeuchteTh A7: 90
2023-10-14 17:20:42 MQTT2_DEVICE FeuchteTh A0: 37
2023-10-14 17:20:42 MQTT2_DEVICE FeuchteTh A3: 240
2023-10-14 17:20:42 MQTT2_DEVICE FeuchteTh A5: 240
2023-10-14 17:20:42 MQTT2_DEVICE FeuchteTh snr: 9
2023-10-14 17:20:42 MQTT2_DEVICE FeuchteTh A2: 240
2023-10-14 17:20:42 MQTT2_DEVICE FeuchteTh A4: 77
2023-10-14 17:20:42 MQTT2_DEVICE FeuchteTh VDD: 3.908
2023-10-14 17:20:42 MQTT2_DEVICE FeuchteTh A6: 26
Bitte so in der RAW-Definition (Pluszeichen neben der Kommandozeile) einfügen:
defmod FeuchteTh_Doif DOIF {\
my $dev = ["^FeuchteTh$:A.*",0];;\
if ($dev > 100 and $dev < 200) {\
fhem ("set Signal send @Mario Edelmann Gießen Treppenhaus");;\
}\
}
Zuvor die alte Definition löschen. Die Attribute musst du dir noch definieren
Die Definition habe ich jetzt so eingegeben:
defmod FeuchteTh_Doif DOIF {\
my $dev = ["^FeuchteTh$:A.*",0];;\
if ($dev > 100 and $dev < 200) {\
fhem ("set Signal send @Mario Edelmann Gießen Treppenhaus");;\
}\
}
attr FeuchteTh_Doif room Bewaesserung
attr FeuchteTh_Doif wait 60:60
Es kommt jetzt die Fehlermeldung: "FeuchteTh_Doif: unknown attribute wait. Type 'attr FeuchteTh_Doif ?' for a detailed list."
Wenn ich wait nachträglich eintrage und ein Event kommt gibt es folgende Reading Einträge:
block_01
block_01: condition c01: Global symbol "@Mario" requires explicit package name (did you forget to declare "my @Mario"?), line 4.
warning: condition c01: Possible unintended interpolation of @Mario in string
Habe gerade festgestellt dass es im Perl Modus offensichtlich kein wait gibt oder nicht beachtet wird. siehe Ref:
ZitatIm Perl-Modus arbeitet das DOIF-Modul im Gegensatz zum FHEM-Modus ohne den eigenen Status auszuwerten. Es kommt immer zur Auswertung des definierten Block, wenn er getriggert wird. Diese Verhalten entspricht dem Verhalten mit dem Attribut do always im FHEM-Modus. Damit bei zyklisch sendenden Sensoren nicht zum ständigen Schalten kommt, muss das Schalten unterbunden werden.
Habe es jetzt im Fhem Modus gelöst:
defmod FeuchteTh_Doif DOIF (["^FeuchteTh$:A.*",0] > 100 and ["^FeuchteTh$:A.*",0] < 200) (set Signal send "@Mario Edelmann" Gießen Treppenhaus)
attr FeuchteTh_Doif room Bewaesserung
attr FeuchteTh_Doif wait 60:60
Nachtrag zu:
Zitatblock_01: condition c01: Global symbol "@Mario" requires explicit package name (did you forget to declare "my @Mario"?), line 4.
warning: condition c01: Possible unintended interpolation of @Mario in string
Bei fhem ("set Signal send @Mario Edelmann Gießen Treppenhaus");;\ muss der Empfänger in Anführungszeichen, also:
fhem ("set Signal send "@Mario Edelmann" Gießen Treppenhaus");;\