FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Medel am 14 Oktober 2023, 13:51:53

Titel: gelöst im Fhem Modus: Frage Perl Definition DOIF
Beitrag von: Medel am 14 Oktober 2023, 13:51:53
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: {"
Titel: Aw: Frage Perl Definition DOIF
Beitrag von: Per am 14 Oktober 2023, 14:49:16
my $dev = "[FeuchteTh:A.*]";
Titel: Aw: Frage Perl Definition DOIF
Beitrag von: Damian am 14 Oktober 2023, 15:07:18
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.*",""]


Titel: Aw: Frage Perl Definition DOIF
Beitrag von: Medel am 14 Oktober 2023, 17:10:23
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
Titel: Aw: Frage Perl Definition DOIF
Beitrag von: Damian am 14 Oktober 2023, 17:30:41
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
Titel: Aw: Frage Perl Definition DOIF
Beitrag von: Medel am 14 Oktober 2023, 17:37:02
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


Titel: Aw: Frage Perl Definition DOIF
Beitrag von: Medel am 14 Oktober 2023, 18:54:40
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.
Titel: Aw: Frage Perl Definition DOIF
Beitrag von: Medel am 14 Oktober 2023, 19:27:01
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");;\