Split-Funktion im Notify liefert keine Werte zurück

Begonnen von ComputerZOO, 17 September 2017, 12:36:08

Vorheriges Thema - Nächstes Thema

ComputerZOO

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?

viegener

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.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

betateilchen

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

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ComputerZOO

Ich danke Euch,

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

macht das, was es soll, wieder etwas dazugelernt.

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