$NAME in Eventmap

Begonnen von aw, 02 Februar 2021, 13:23:17

Vorheriges Thema - Nächstes Thema

aw

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

Otto123

#1
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rudolfkoenig

Ich hoffe, dass Details (im Sinne von welche Variablen sind definiert) im FHEM-Log stehen.

aw

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


aw

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.

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rudolfkoenig

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.

aw

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!!