[Gelöst] eventMap mit ReadingsVal

Begonnen von Reinhard.M, 14 Juni 2021, 20:23:39

Vorheriges Thema - Nächstes Thema

Reinhard.M

Hallo Zusammen!

Ich habe mir aus diesem Thread
https://forum.fhem.de/index.php/topic,43023.msg406185.html#msg406185
dieses Event Mapping in ein Dummy kopiert und getestet:
{usr=>{ '^toggle' => '".(ReadingsVal($NAME,"state","STATE true") eq "STATE true" ? "STATE false" : "STATE true")."','off' => 'STATE false','on' => 'STATE true' }}
Leider funktioniert bei mir die Auswertung mit ReadingsVal überhaupt nicht. Statt "STATE false" oder "STATE true" steht bei mir dann die ganze Zeile im state Reading wenn ich "set f toggle" eingebe:
Zitatstate    ".(ReadingsVal($NAME,"state","STATE true") eq "STATE true" ? "STATE false" : "STATE true")."
Ein "set f on/off" bringt das jeweils richtige state Readings. Gibt es eventuell ein globales Setting das die Auswertung in einem eventMap Attribut verhindert?

rudolfkoenig

Ich habe dein Code per Copy&Paste mit einem dummy nachgestellt, und bei mir erscheint STATE false/STATE true im STATE:

fhem> define f dummy
fhem> attr f eventMap {usr=>{ '^toggle' => '".(ReadingsVal($NAME,"state","STATE true") eq "STATE true" ? "STATE false" : "STATE true")."','off' => 'STATE false','on' => 'STATE true' }}
fhem> info timer
fhem> set f toggle
2021-06-15 13:15:59 dummy f STATE false
fhem> set f toggle
2021-06-15 13:16:01 dummy f STATE true
fhem> set f toggle
2021-06-15 13:16:04 dummy f STATE false
fhem>

Reinhard.M

Der Teufel steckt im Detail :)
Ich hatte den Toggle Befehl immer über die Oberfläche aufgerufen wodurch es ein "set f ^toggle" wurde. Jetzt habe ich schlicht deine Commandline kopiert und es funktioniert auch bei mir. Wie schon von dir und anderen gepostet, das "^" ist zwingend notwendig. Allerdings nur in der Definition. Da das "^" für die Auswertung offensichtlich erkannt wird, wäre es möglich das auch an der Oberfläche auszublenden?
Besten Dank jedenfalls, das war der Stubs in die richtige Richtung.

Frank_Huber

Zitat von: Reinhard.M am 15 Juni 2021, 15:37:46
Wie schon von dir und anderen gepostet, das "^" ist zwingend notwendig. Allerdings nur in der Definition.
Da das "^" für die Auswertung offensichtlich erkannt wird, wäre es möglich das auch an der Oberfläche auszublenden?

das ^ ist RegEx und bedeutet schlicht "beginnt mit" Siehe auch hier: https://regex101.com/
von deher gehört das sehr wohl in die Definition und sollte nicht ausgeblendet werden. ;-)

Reinhard.M

Danke für den Hinweis,
aber das ist mir sehr wohl bekannt. Ich meinte an der Command Oberfläche. Warum es bei der Definition zwingend notwendig ist, darüber kann man sicherlich diskutieren. Logisch ist es zumindest für mich nicht. Der Programmierer wird es wissen warum.
Es wird aber auch an der Command Oberfläche, also die Stelle an der ich via Pulldown Menü den Befehl auswählen angezeigt. Und da führt es dann zu einem Fehler. Zum besseren Verständnis habe ich mal einen Screenshot beigefügt.
Inzwischen habe ich auch die "fw=>" Option kapiert. Sie verhindert genau diese "falsche" Anzeige von toggle. Allerdings hat sich das für mich nicht unmittelbar aus der Commandref erschlossen. Jetzt wo ich es zu interpretieren weiß, verstehe ich auch die Commandref. Es wäre aber sicherlich vorteilhafter, wenn ich die Anwendung durch das Lesen der Commandref verstehe und nicht die Commandref durch das Anwenden von Befehlen.  ;) :)

rudolfkoenig

Alternativ kann man auch ^ im eventMap entfernen (^toggle => toggle), es duerfte in diesem Fall nicht stoeren.

Reinhard.M

Wenn ich das mal mit allem Respekt erwähnen darf: Ihr habt im Laufe der Zeit wirklich sehr viel geniale Features in FHEM eingebaut, alle Achtung. Leider ist es nicht gerade einfach diese auf Basis der Dokumentation herauszufinden, da geht Neueinsteigern bei FHEM wie mich schon einiges durch die Lappen und erhöht die Frequenz von Anfragen im Forum.

rudolfkoenig

Wir hoffen darauf, dass Neueinsteiger, die sich durchgebissen haben, uns helfen, die Dokumentation zu verbessern :)