FHEM Forum

FHEM => Automatisierung => Thema gestartet von: aw am 02 Februar 2021, 13:23:17

Titel: $NAME in Eventmap
Beitrag von: aw am 02 Februar 2021, 13:23:17
Hallo,
ich habe eine kurze Verstädnisfrage...
Aus welchem Grund funktioniert im eventmap $Name im perl code nicht?

Beispiel    
{ dev=>{...}, usr=>{ 'Schatten' => 'dim '.AttrVal('Rollade.Erker_1','u_shadow',97),off' => '0'} } ---> funktioniert ohne Probleme
{ dev=>{...}, usr=>{ 'Schatten' => 'dim '.AttrVal($Name,'u_shadow',97),off' => '0'} }  ---> ERROR in eventMap for Rollade.Erker_1: Global symbol "$Name" requires explicit package name ...

Vielen Dank für einen Hinweis
Achim
Titel: Antw:$NAME in Eventmap
Beitrag von: Otto123 am 02 Februar 2021, 14:04:40
Hallo Achim,

also zum Einen steht es nicht in der Doku, dass es gehen soll. Kann sein das es nicht implementiert ist.
Zum Anderen: man kann oft $NAME und oft auch $name verwenden. $Name geht mWn an keiner Stelle.

Und den glaube ich Dir nicht, der ist vom Syntax her falsch! Die Verkettung ist nicht/falsch beendet!
Zitat{ dev=>{...}, usr=>{ 'Schatten' => 'dim '.AttrVal('Rollade.Erker_1','u_shadow',97),off' => '0'} } ---> funktioniert ohne Probleme
So wäre der Perl Syntax korrekt. Ob komplett in Ordnung kann ich nicht sagen!
{ dev=>{...}, usr=>{ 'Schatten' => 'dim '.AttrVal('Rollade.Erker_1','u_shadow',97).',off' => '0'} }

Gruß Otto
Titel: Antw:$NAME in Eventmap
Beitrag von: rudolfkoenig am 02 Februar 2021, 14:09:52
Ich hoffe, dass Details (im Sinne von welche Variablen sind definiert) im FHEM-Log stehen.
Titel: Antw:$NAME in Eventmap
Beitrag von: aw am 02 Februar 2021, 14:22:48
Zitat von: Otto123 am 02 Februar 2021, 14:04:40
Hallo Achim,

also zum Einen steht es nicht in der Doku, dass es gehen soll. Kann sein das es nicht implementiert ist.
Zum Anderen: man kann oft $NAME und oft auch $name verwenden. $Name geht mWn an keiner Stelle.

Und den glaube ich Dir nicht, der ist vom Syntax her falsch! Die Verkettung ist nicht/falsch beendet!So wäre der Perl Syntax korrekt. Ob komplett in Ordnung kann ich nicht sagen!
{ dev=>{...}, usr=>{ 'Schatten' => 'dim '.AttrVal('Rollade.Erker_1','u_shadow',97).',off' => '0'} }

Gruß Otto

Sorry, da hast du natürlich recht. Die Verkettung war in meinem Beispiel falsch, da ich ein Teil des Codes rausgeworfen habe, damit es übersichtlicher ist. Die gleiche Ursache hat auch die falsche Schreibweise von $Name

Titel: Antw:$NAME in Eventmap
Beitrag von: aw am 02 Februar 2021, 14:26:17
Zitat von: rudolfkoenig am 02 Februar 2021, 14:09:52
Ich hoffe, dass Details (im Sinne von welche Variablen sind definiert) im FHEM-Log stehen.

Das steht im Log...
2021.02.02 13:13:11.943 1: PERL WARNING: Odd number of elements in anonymous hash at (eval 18068) line 1.
2021.02.02 13:13:28.616 1: ERROR in eventMap for Rollade.Erker_1: Global symbol "$NAME" requires explicit package name (did you forget to declare "my $NAME"?) at (eval 18086) line 1.

Ich möchte jetzt aber nicht, dass ihr zuviel Aufwand in eine mögliche andere Lösung investiert. Mein Problem lässt sich mittels Devicenamen ja lösen und läuft auch. Es ging mir nur grundsätzlich drum, ob $NAME vom Design her vorgesehen ist oder nicht.
Titel: Antw:$NAME in Eventmap
Beitrag von: Otto123 am 02 Februar 2021, 14:48:00
Zitat von: aw am 02 Februar 2021, 14:22:48
Sorry, da hast du natürlich recht. Die Verkettung war in meinem Beispiel falsch, da ich ein Teil des Codes rausgeworfen habe, damit es übersichtlicher ist. Die gleiche Ursache hat auch die falsche Schreibweise von $Name
Was in 99% der Fälle nur dazu führt den potentiellen Helfer auf die falsche Fährte zu locken und damit hier im Forum manchmal Seitenweise Blindleistung erzeugt wird. ::)
Also: zwar gut gedacht aber der Schuß führt ins Aus
Titel: Antw:$NAME in Eventmap
Beitrag von: rudolfkoenig am 02 Februar 2021, 17:22:50
An dieser Stelle steht (inkonsequenterweise) $dev fuer den Namen des Geraetes.

ABER: eventMap wird beim Setzen ausgewertet, und als $defs{XXX}{".eventMapHash"} gespeichert, d.h. Schatten wird den Wert des Attributes u_shadow beim Starten von FHEM (bzw. Setzen des Attributes) haben, und danach sich nicht mehr aendern.
Titel: Antw:$NAME in Eventmap
Beitrag von: aw am 03 Februar 2021, 08:19:47
Zitat von: rudolfkoenig am 02 Februar 2021, 17:22:50
An dieser Stelle steht (inkonsequenterweise) $dev fuer den Namen des Geraetes.

$dev hat mein Problem gelöst, auch wenn es an der Stelle nicht konsequent ist  ;)

Ich speichere pro Device verschiedene eigene Parameter in User Attributen ab, die sich eigentlich (fast) nie ändern. Z.B. Werte für verschiedene Beschattungsszenarien, die dann einfach per DoIf nach Zeit, ermitteltem Sonnenstand usw ausgewertet werden. Daher ist es das kein Problem für mich.

Vielen Dank für die Hilfe!!