FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Eonwe am 10 März 2023, 00:19:28

Titel: Problem mit Perl templates
Beitrag von: Eonwe am 10 März 2023, 00:19:28
Hallo zusammen,

ich nutze FHEM schon seit einigen Jahren, auch DOIFs. Ich war hier sogar schonmal angemeldet, das ist aber ewig her.
Jetzt wollte ich für eine neue Aufgabe DOIF mit Perl und templates umsetzen, aber ich komm auf keinen Grünen Zweig.
Ziel ist die Steuerung des Anwesenheitsstatus über PING auf Handys.

folgendes funktioniert.
{if ([Handy_Test] eq "present")
{fhem_set"rr_Test home"}
}


Will ich das jetzt auf ein template übertragen
defmod DOIF_TEST DEF tpl_presence(
{if ([$1] eq "present")
{fhem_set "$2 home"}
}
)
tpl_presence(Handy_Test,rr_Test)

passiert erstmal gar nichts. Ersetze ich $1 wieder durch einen hart codierten Wert, bekomm ihc bei $2 ne Fehlermeldung:
2023.03.09 23:40:09 1: PERL WARNING: Use of uninitialized value $2 in concatenation (.) or string at (eval 676) line 2.

Irgendwas passt glaube ich mit der Initialisierung der Variablen nicht, aber ich komm nicht drauf, wo und warum.

Danke für eure Hilfe!
Titel: Antw:Problem mit Perl templates
Beitrag von: xenos1984 am 10 März 2023, 06:54:26
Template-Definitionen müssen mit TPL_ (in Großbuchstaben) beginnen:

http://wiki.fhem.de/wiki/DOIF/Perl-Modus#Aufbau_einer_Template-Definition
Titel: Antw:Problem mit Perl templates
Beitrag von: Eonwe am 10 März 2023, 22:09:53
Vielen Herzlichen Dank, das war es. Da wär ich im Traum nicht drauf gekommen, dass das case sensitive ist. Jetzt läufts!
Titel: Antw:Problem mit Perl templates
Beitrag von: Damian am 10 März 2023, 22:17:30
Zitat von: Eonwe am 10 März 2023, 22:09:53
Vielen Herzlichen Dank, das war es. Da wär ich im Traum nicht drauf gekommen, dass das case sensitive ist. Jetzt läufts!

In Perl ist alles case sensitive. Warum sollte man da eine Ausnahme machen? Es ist ja nicht gerade günstig, dass FHEM das nicht tut. if z. B. kann Perl-if sein aber auch FHEM-IF, da kann der Anfänger schnell durcheinander kommen.