fhem.pl Problem seit Update vom Mo.16.11.2015

Begonnen von fhem-challenge, 17 November 2015, 11:03:45

Vorheriges Thema - Nächstes Thema

fhem-challenge

Hallo,

seit dem Update vom 16.11.2015 habe ich sehr skurrile Effekte. Ich habe es nun auf die fhem.pl herunter reduzieren können, die ursächlich dafür ist.

Ich kann, seit der fhem.pl vom Mo.16.11.2015, schlicht die "Variable" % nicht mehr verwenden.

Ich habe dazu eine minimal test funktion geschrieben:

test {
Log 0,"%"
}


Bei der Version fhem.pl vom 16.11.2015 gibt die Funktion im log Folgendes aus:

Bei "trigger test on" wird im Log lediglich "%" ausgegeben. Hier hätte ich ja nun eher "on" erwartet.

Bei einem Downgrade auf "fhem.pl 9809 2015-11-07 18:39:08Z" funktioniert es wieder, und die Funktion gibt mir den Inhalt aus und nicht den Bezeichner: also "on" aus.

Habe ich hier irgend eine Entwicklung verpasst ?

Ich nutze "%" natürlich an diversen Stellen in fhem, die nun deshalb alle nicht mehr funktionieren. Momentan bleibe ich zwangsweise bei fhem.pl 9809, damit fhem korrekt funktioniert.

Was kann Ursache des Problems sein ?

Viele Grüße!

Andreas





marvin78

@ und % sind schon lange deprecated (siehe bspw. commandref zu notify - dort konnte man das schon sehr lange lesen). $NAME und $EVENT ersetzen sie. Seit Version 5.7 sind die Platzhalter nun raus (ist hier an mehreren Stellen im Forum nachzulesen). Du kannst mit dem global Attribut featurelevel noch auf 5.6 zurück schalten und @ und % funktionieren dann wieder für eine Weile. "Noch" ist hier jedoch das Stichwort. Du solltest umrüsten.

Icinger

Das hängt damit zusammen, dass % schon länger auf der "Abschussliste" steht.

Zitat@ und % im notify/etc gibts nicht mehr, genauso wie %NAME, %EVENT. Bitte stattdessen $NAME, $EVENT verwenden. Das ist uniform in fhem-Befehlen,  perl-Einzeiler {}, und im shell-Aufruf "" moeglich. Damit faellt auch die Notwendigkeit von @@/%% weg. Fuer Details siehe den (seit lange unveraenderten) commandref Eintrag fuer notify.

Siehe http://forum.fhem.de/index.php/topic,44094.0.html

lg, Stefan
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

fhem-challenge

Zitat von: marvin78 am 17 November 2015, 11:07:27
@ und % sind schon lange deprecated (siehe bspw. commandref zu notify - dort konnte man das schon sehr lange lesen). $NAME und $EVENT ersetzen sie. Seit Version 5.7 sind die Platzhalter nun raus (ist hier an mehreren Stellen im Forum nachzulesen). Du kannst mit dem global Attribut featurelevel noch auf 5.6 zurück schalten und @ und % funktionieren dann wieder für eine Weile. "Noch" ist hier jedoch das Stichwort. Du solltest umrüsten.


Okay, danke!

hab ich wirklich nicht wahr genommen. Ich stell meine Funktionen um.

Viele Grüße!

Andreas


fhem-challenge

Zitat von: fhem-challenge am 17 November 2015, 11:10:09

Okay, danke!

hab ich wirklich nicht wahr genommen. Ich stell meine Funktionen um.

Viele Grüße!

Andreas

Nachtrag:

Ich bin dabei alle "%" sowie "@" aus meinen Funktionen durch "$EVENT" bzw. "$NAME" zu ersetzen.

Dabei Folgendes Problem:

Diese folgende Testfunktion funktioniert:

test {
my @@heizungen=devspec2array("NAME=Heizung.Regler.*");

foreach(@@heizungen) {
Log 0,"$_"
}
}


... LOG ...
2015.11.17 13:47:57 0: Heizung.Regler.HM.Bad
2015.11.17 13:47:57 0: Heizung.Regler.HM.Flur
2015.11.17 13:47:57 0: Heizung.Regler.HM.Hobbyraum
2015.11.17 13:47:57 0: Heizung.Regler.HM.Poolraum
2015.11.17 13:47:57 0: Heizung.Regler.HM.Schlafzimmer
2015.11.17 13:47:57 0: Heizung.Regler.HM.Wohnzimmer
2015.11.17 13:48:16 0: Heizung.Regler.HM.Bad
2015.11.17 13:48:16 0: Heizung.Regler.HM.Flur
2015.11.17 13:48:16 0: Heizung.Regler.HM.Hobbyraum
2015.11.17 13:48:16 0: Heizung.Regler.HM.Poolraum
2015.11.17 13:48:16 0: Heizung.Regler.HM.Schlafzimmer
2015.11.17 13:48:16 0: Heizung.Regler.HM.Wohnzimmer



Diese hingegen (gleiche Funktion wie oben, lediglich greife ich hier auf die Variable "$EVENT" zu):

test {
       Log 0,"$EVENT;
my @@heizungen=devspec2array("NAME=Heizung.Regler.*");

foreach(@@heizungen) {
Log 0,"$_"
}
}


... wirft ein ...


... LOG ...
2015.11.17 13:51:27 1: PERL WARNING: Bareword found where operator expected at (eval 2368) line 3, near "@@heizungen"
2015.11.17 13:51:27 3: eval: my $EVTPART0='on';my $TYPE='notify';my $SELF='test';my $EVENT='on';my $NAME='test';{
        Log 0,"$EVENT";
        my @@heizungen=devspec2array("NAME=Heizung.Regler.*");

        foreach(@@heizungen) {
                Log 0,"$_"
        }
}
2015.11.17 13:51:27 1: PERL WARNING: Bareword found where operator expected at (eval 2368) line 5, near "@@heizungen"
2015.11.17 13:51:27 3: eval: my $EVTPART0='on';my $TYPE='notify';my $SELF='test';my $EVENT='on';my $NAME='test';{
        Log 0,"$EVENT";
        my @@heizungen=devspec2array("NAME=Heizung.Regler.*");

        foreach(@@heizungen) {
                Log 0,"$_"
        }
}
2015.11.17 13:51:27 3: test return value: Can't use global @@ in "my" at (eval 2368) line 3, near "my @@"
syntax error at (eval 2368) line 3, near "@@heizungen"
syntax error at (eval 2368) line 5, near "@@heizungen"



Ich bin zugegeben etwas überrascht, oder sehe den Wald vor lauter Bäumen nicht mehr ?

Viele Grüße!

Andreas

ChrisK

Zitat von: fhem-challenge am 17 November 2015, 13:56:59
Ich bin zugegeben etwas überrascht, oder sehe den Wald vor lauter Bäumen nicht mehr ?
Mit einer Suche nach "Bareword" landest Du schnell hier: http://forum.fhem.de/index.php/topic,44172.msg360292.html#msg360292
@@ musst Du wohl durch @ ersetzen.

marvin78


fhem-challenge

Zitat von: marvin78 am 17 November 2015, 14:09:46
Doppelte @ sind nicht mehr nötig.

Okay, danke!! --> es "tut" mit einem "@".

Dennoch:

Ich vermute , dass in Kürze viele User Probleme bekommen, die ein Update auf 5.7 gemacht haben.

Viele! codesnip(s), Wiki examples, Blogs u.v.m. verwenden noch "%"/"@", oder auch "@@"-[array]. Geschweige denn in diversen ForenThreads, hier lässt sich nachträglich kein Hinweis auf "depricated" in sämtlichen threads anhängen, sodass viele (vermutlich gerade neue) User erst einmal auf den "Leim" gehen werden.

Viele Grüße!

Andreas


marvin78

Mag sein, aber das ist nun schon so lange als deprecated in der commandref markiert, dass es jeder gesehen haben sollte.

schka17

Hallo,

Bevor ich update versuche ich mich schlau zu machen worauf ich aufpassen muss, bei einem in mehreren Jahren gewachsenem System gibts doch sehr viele Altlasten. Ich bin eben dabei die letzten %'s und  @@'s zu entfernen und habe jetzt noch eine Frage um ganz sicher zu gehen.

Zitat@ und % im notify/etc gibts nicht mehr, genauso wie %NAME, %EVENT. Bitte stattdessen $NAME, $EVENT verwenden. Das ist uniform in fhem-Befehlen,  perl-Einzeiler {}, und im shell-Aufruf "" moeglich. Damit faellt auch die Notwendigkeit von @@/%% weg. Fuer Details siehe den (seit lange unveraenderten) commandref Eintrag fuer notify.

Das bezieht sich doch definitiv nur auf notify's, oder?

Ich habe mal kurz das FHEM directory gescannt und habe %NAME auch in vielen Modulen gefunden (ähnliches Ergebnis bei @@)

root@HAL9000:/opt/fhem/FHEM# cat *|grep %NAME
     { "CUL_FHTTK.*" => { GPLOT => "fht80tf:Window,", FILTER => "%NAME" } };
                             "%NAME" => $devName,
                "%NAME" => shift(@{$hash->{helper}{lastCmdValue}}),
    my %specials= ("%NAME"  => $name,
    my %specials= ("%NAME"  => $name,
             FILTER => "%NAME:power\\x3a.*",
        { "IT.*" => { GPLOT => "", FILTER => "%NAME" } };
           { "FHT.*" => { GPLOT => "fht:Temp/Act,", FILTER => "%NAME" } };
        { GPLOT => "fht80tf:Contact,", FILTER => "%NAME" },
        { GPLOT => "temp4hum6:Temp/Hum,", FILTER => "%NAME:T:.*" }
         FILTER => "%NAME:T:.*" } };
         FILTER => "%NAME:T:.*" } };
        { "CUL_TCM97001.*" => { GPLOT => "temp4hum4:Temp/Hum,", FILTER => "%NAME" },
          "CUL_TCM97001_Unknown.*" => { GPLOT => "", FILTER => "%NAME" }
        { "CUL_TX.*" => { GPLOT => "temp4hum4:Temp/Hum,", FILTER => "%NAME" } };
    { "CUL_WS.*" => { GPLOT => "temp4hum6:Temp/Hum,",  FILTER=>"%NAME:T:.*" } };
        { "CUL_EM.*" => { GPLOT => "power8:Power,", FILTER => "%NAME:CNT.*" } };
                        FILTER => "%NAME:dcpower:.*"
  $hash->{AutoCreate} = { "LaCrosse.*" => { autocreateThreshold => "2:120", FILTER => "%NAME" }};
      <code>define MOTION.not.02 notify ipcam:.*snapshots.* { myEmailFunction("%NAME") }</code><br>
    define LogErna notify MyCalendar:modeAlarmed.*2767324dsfretfvds7dsfn3e4&shy;dsa234r234sdfds6bh874&shy;googlecom.* { Log3 %NAME, 1, "ALARM name=%NAME event=%EVENT part1=%EVTPART0 part2=%EVTPART1" }
    define LogActors notify MyCalendar:mode(Started|Ended).* { my $reading= "%EVTPART0";; my $uid= "%EVTPART1";; my $actor= fhem("get MyCalendar summary $uid");; Log 3 %NAME, 1, "Actor: $actor, Reading $reading" }
    define LogErna notify MyCalendar:modeAlarmed.*2767324dsfretfvds7dsfn3e4&shy;dsa234r234sdfds6bh874&shy;googlecom.* { Log3 %NAME, 1, "ALARM name=%NAME event=%EVENT part1=%EVTPART0 part2=%EVTPART1" }
    define LogActors notify MyCalendar:mode(Started|Ended).* { my $reading= "%EVTPART0";; my $uid= "%EVTPART1";; my $actor= fhem("get MyCalendar summary $uid");; Log 3 %NAME, 1, "Actor: $actor, Reading $reading" }
      <li>The macro <code>%NAME</code> will expand to the device name.</li>
                "%NAME" => $hash->{NAME},
        "%NAME" => $name,
    <li><code>%NAME</code> - name of the PRESENCE definition</li>
    <li><code>%NAME</code> - Name der PRESENCE-Definition</li>
                "%NAME" => $n,
        <li>Instead of % and @, the parameters %EVENT (same as %), %NAME (same
          %NAME (funktionsgleich mit @) und
      => { GPLOT => "temp4:Temp,",  FILTER => "%NAME" },
      => { GPLOT => "temp4hum4:Temp/Hum,",  FILTER => "%NAME" },
           FILTER => "%NAME" },
      => { GPLOT => "wind4windDir4:WindDir/WindSpeed,",  FILTER => "%NAME" },
      => { GPLOT => "rain4:RainRate",  FILTER => "%NAME" },
      => { GPLOT => "fht80tf:Window,", FILTER => "%NAME" },
       => { GPLOT => "fht80tf:Window,", FILTER => "%NAME" },
       => { GPLOT => "temp4hum4:Temp/Hum,",  FILTER => "%NAME" },
      => { GPLOT => "temp4hum6:Temp/Hum,",  FILTER => "%NAME" },
           FILTER => "%NAME:T:.*" },
      => { GPLOT => "temp4hum6:Temp/Hum,", FILTER => "%NAME:T:.*" },
           FILTER => "%NAME:T:.*" },
      => { GPLOT => "temp4hum6:Temp/Hum,", FILTER => "%NAME:T:.*" },
  my $n = $hash->{NAME}; $str =~ s/%NAME/$n/g;
    attr autocreate filelog test2/log/%NAME-%Y.log
        wildcards %TYPE and %NAME, see the example above.</li><br>
        the wildcards %TYPE and %NAME, see the example above. The filelog will
        wildcards %TYPE and %NAME, see the example above.</li><br>
    attr autocreate filelog test2/log/%NAME-%Y.log
        die Wildcards %NAME und %TYPE enthalten, siehe oben stehendes
        Dateiname darf die Wildcards %NAME und %TYPE enthalten, siehe oben
        die Wildcards %NAME und %TYPE enthalten, siehe oben stehendes
        <code>%EVENT</code> (same as <code>%</code>), <code>%NAME</code> (same
    attr hc delayedExecutionCond isDelayed("%HEATING_CONTROL","%WEEKDAYTIMER","%TIME","%NAME","%EVENT")
    the parameters %HEATING_CONTROL(timer name) %TIME %NAME(device name) %EVENT are replaced at runtime by the correct value.
    attr wd delayedExecutionCond isDelayed("%HEATING_CONTROL","%WEEKDAYTIMER","%TIME","%NAME","%EVENT")
    Die Parameter %HEATING_CONTROL(timer Name) %TIME %NAME(device Name) %EVENT werden zur Laufzeit durch die echten Werte ersetzt.
  my %specials   = ( "%NAME" => $hash->{DEVICE}, "%EVENT" => $newParam);
         "%NAME"             => $hash->{DEVICE},
    my %specials = ( "%NAME" => $hash->{DEVICE}, "%EVENT" => $newParam);
        <code>%EVENT</code> (same as <code>%</code>), <code>%NAME</code> (same
    attr wd delayedExecutionCond isDelayed("%HEATING_CONTROL","%WEEKDAYTIMER","%TIME","%NAME","%EVENT")
    the parameter %WEEKDAYTIMER(timer name) %TIME %NAME(device name) %EVENT are replaced at runtime by the correct value.


Gruß

Karl
M: Thinclient x64 Debian | CUL FS20, HMS100WD, HMS100TF, HMS100T, HMS100CO, S300, S555TH | OWServer DS1420, DS18B20, DS2408 | RFXCOM UVN128, THWR800, THGR228N,RTGR328, PCR800 |Jeelink PCA301 EC3000|CUNO+IR|HMLAN|HMUSB|CUL433 Somfy|mySensors|espEasy
S1:Raspberry mit BPM810, Jeelink EC3000

viegener

Zitat von: schka17 am 17 November 2015, 16:34:41
Bevor ich update versuche ich mich schlau zu machen worauf ich aufpassen muss, bei einem in mehreren Jahren gewachsenem System gibts doch sehr viele Altlasten. Ich bin eben dabei die letzten %'s und  @@'s zu entfernen und habe jetzt noch eine Frage um ganz sicher zu gehen.

Das bezieht sich doch definitiv nur auf notify's, oder?

Nein, nicht nur, siehe auch Anmerkung von Rudi hier http://forum.fhem.de/index.php/topic,44141.msg359996.html#msg359996
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können