gelöst im Fhem Modus: Frage Perl Definition DOIF

Begonnen von Medel, 14 Oktober 2023, 13:51:53

Vorheriges Thema - Nächstes Thema

Medel

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: {"

Per


Damian

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.*",""]


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Medel

#3
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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Medel

#5
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



Medel

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.

Medel

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");;\