FHEM Forum

FHEM => Automatisierung => Thema gestartet von: ComputerZOO am 17 September 2017, 12:36:08

Titel: Split-Funktion im Notify liefert keine Werte zurück
Beitrag von: ComputerZOO am 17 September 2017, 12:36:08
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?
Titel: Antw:Split-Funktion im Notify liefert keine Werte zurück
Beitrag von: viegener am 17 September 2017, 12:48:03
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.
Titel: Antw:Split-Funktion im Notify liefert keine Werte zurück
Beitrag von: betateilchen am 17 September 2017, 13:26:49
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:

Also das hier wäre ok:


split('\.',"ABC.DEF")

Titel: Antw:Split-Funktion im Notify liefert keine Werte zurück
Beitrag von: ComputerZOO am 17 September 2017, 14:00:45
Ich danke Euch,

my @splitROOM = split(/\./,$NAME);

macht das, was es soll, wieder etwas dazugelernt.

(Diese ganzen RegExps machen mich noch fertig...)