Mahlzeit ! Ich hab mir ein DOIF gemacht, welches auf ein Event des LufterTrigger.EZ reagiert. In weiterer Folge soll es generalisiert werden und "EZ" durch andere Räume (e.g. WZ, SZ, ..) ersetzt werden können. Zu diesem Zweck extrahiere ich die Zimmernamen und auch das "LüfterTrigger", damit nicht versehentlich ein anderee Event der mit e.g "EZ" endet das DOIF auslost.
Dafür habe ich folgenden Code geschrieben:
defmod sample DOIF { if ([LueftenTrigger.EZ:"^myEVENT:.*"]) {\
my $ret_cde = $DEVICE =~ /([a-zA-Z]+)\.([A-Z]{2})/;;\
}\
}
attr sample room Development
setstate sample initialized
setstate sample 2021-04-15 12:18:10 Device LueftenTrigger.EZ
setstate sample 2021-04-15 12:18:10 block_01 condition c01: Bareword "LueftenTrigger" not allowed while "strict subs" in use at (eval 87856) line 2.\
Bareword "EZ" not allowed while "strict subs" in use at (eval 87856) line 2.\
setstate sample 2021-04-15 12:18:10 e_LueftenTrigger.EZ_events myEVENT: closed
setstate sample 2021-04-15 12:17:46 mode enabled
setstate sample 2021-04-15 12:17:46 state initialized
Der Einzeiler funktioniert unter Perl, wenn ich das nativ ausführe.
#!/usr/bin/perl -w
use strict;
#
my $caller = "error";
my $room = "error";
my $temp = "LueftenTriggerEZ";
my $returncode = $temp =~ /([a-zA-Z]+)\.([A-Z]{2})/;
if ($returncode == 1) {
$caller = $1;
$room = $2;
}
print "$returncode\n$temp\n$caller\n$room\n";
In FHEM jedoch erhalte ich die o.a Fehlermeldung
block_01 condition c01: Bareword "LueftenTrigger" not allowed while "strict subs" in use at (eval 87856) line 2.
Kann mir bitte jemand auf die Sprünge helfen ?
[a-zA-Z] z. B. wird als ein möglicher Devicetrigger nach der Syntax: [<Devicename>] interpretiert.
In einem solchen Fall musst du deine Perl-Anweisung in eine Subroutine auslagern.
$DEVICE sollte m.E. in Anführungszeichen stehen...
Zitat von: KernSani am 15 April 2021, 13:10:20
$DEVICE sollte m.E. in Anführungszeichen stehen...
Das kann natürlich auch sein. Im Perlmodus sollte man besser mit der Perlvariablen $device arbeiten.