Moin,
ich möchte mir mittels eines Notify die Helligkeitswerte von meinen HomeMatic-Bewegungsmeldern in das Reading eines anderen Device schreiben. Hierzu habe ich mir folgendes Notify angelegt:
Internals:
.COMMAND {
my $HELLIGKEIT = ReadingsVal("$NAME","brightness",99);
my @splitROOM = split(".",$NAME);
fhem ("setreading $splitROOM[0].lightscene brightness $HELLIGKEIT");
}
CFGFN
DEF .*.cul868.motion.inside_Motion:motion {
my $HELLIGKEIT = ReadingsVal("$NAME","brightness",99);
my @splitROOM = split(".",$NAME);
fhem ("setreading $splitROOM[0].lightscene brightness $HELLIGKEIT");
}
NAME n.brightness
NR 28612
NTFY_ORDER 50-di.brightness
REGEXP .*.cul868.motion.inside_Motion:motion
STATE 2017-09-17 12:26:30
TYPE notify
READINGS:
2017-09-17 12:26:06 state active
Nun bekomme ich aber den folgenden Fehler im Log angezeigt:
2017.09.17 12:26:30.828 1: PERL WARNING: Use of uninitialized value $splitROOM[0] in concatenation (.) or string at (eval 348796) line 4.
2017.09.17 12:26:30.828 3: eval: my $EVENT='motion';my $EVTPART0='motion';my $SELF='n.brightness';my $TYPE='CUL_HM';my $NAME='sz.cul868.motion.inside_Motion';{
my $HELLIGKEIT = ReadingsVal("$NAME","brightness",0);
my @splitROOM = split(".",$NAME);
fhem ("setreading $splitROOM[0].lightscene brightness $HELLIGKEIT");
}
2017.09.17 12:26:30.837 3: setreading .lightscene brightness 96 : Please define .lightscene first
2017.09.17 12:26:30.838 3: n.brightness return value: Please define .lightscene first
Nun zur Frage,
ich habe solche Split-Abfragen mehrfach in meiner myUtils im Einsatz, welche alle wunderbar funktionieren. Warum geht das nicht im Notify?
Der punkt ist im regexp ein match für jedes beliebige Zeichen. Also definierst Du alles als Trennzeichen im Split unnd schon kommt nichts zurück.
Du willst aber nicht den eigentlichen Punkt als Trennzeichen haben also müsste der Ausdruck lauten
my @splitROOM = split(/\./,$NAME);
Achtung den regexp nicht in Anführungszeichen das wird vermutlich auch nicht gehen.
Zitat von: viegener am 17 September 2017, 12:48:03
Achtung den regexp nicht in Anführungszeichen das wird vermutlich auch nicht gehen.
Da muss man unterscheiden:
- doppelte Anführungszeichen in der regex funktionieren nicht
- einfache Anführungszeichen in der regex funktionieren
Also das hier wäre ok:
split('\.',"ABC.DEF")
Ich danke Euch,
my @splitROOM = split(/\./,$NAME);
macht das, was es soll, wieder etwas dazugelernt.
(Diese ganzen RegExps machen mich noch fertig...)