Hallo Ihr,
ich bin im Bereich "Sonstige Systeme" auf das Testmodul "linuxHid" gestoßen.
Mit diesem Modul kann ich meine X10 Fernbedienung anschließen und finde im
Eventmonitor folgende Eintrag.
2015-08-09 16:48:57 linuxHid hidX10 EV_KEY: KEY_377
die Verarbeitung im Notify klappt super aber im DOIF habe ich so meine Probleme beim Einbau.
define TESTTV notify hidX10:EV_KEY:.KEY_377 set HM_TV_D on
Aber wenn ich das in DOIF probiere:
define Test DOIF ([hidX10:EV_KEY:.EV_KEY377]) (set HM_TV_D on)
bekomme ich immer folgende Angabe:
"Test DOIF: unknown expression format: .EV_KEY377"
Wo liegt der Fehler ?
Gruß Olaf
Vermutlich ist das EV_ zuviel und der _ zuwenig.
Es heisst ja KEY_377 und nicht EV_KEY377
Hallo Puschel,
nö. Ich habe es jetzt mal so versucht:
define Test DOIF ([hidX10:EV_KEY:.KEY377]) (set HM_TV_D on)
Und Rausgekommen ist dieses:
Test DOIF: unknown expression format: .KEY377
aber danke für deine schnelle Anwort.
Gruß Olaf
Dein EventMonitoreintrag:
Zitat2015-08-09 16:48:57 linuxHid hidX10 EV_KEY: KEY_377
Dein DOIF-Eintrag
ZitathidX10:EV_KEY:.KEY377
Sollte es nicht KEY_377 heissen wie im EventMonitor :o
Daher oben ja der Hinweis mit dem _ zuwenig. Nämlich der zwischen KEY und 377 ;)
Wenn es dann immer noch nicht klappt müssen die DOIF-Profis dran.
Die Info habe ich aus folgenden Tread:
http://forum.fhem.de/index.php?topic=36257.75 (http://forum.fhem.de/index.php?topic=36257.75)
Wenn du dort die Frage unter "Antwort #77" dir anschaust und dann die Antwort:
"Antwort #79" dann wiest du wie ich daruf gekommen bin.
(logisch ist das für mich auch nicht).
Gruß Olaf.
Und warum hast du im notify dann KEY_377 genommen ?
Damit scheint es ja zu funktionieren also würde ich im DOIF auch mal KEY_377 probieren.
:o
Ich galube jetzt habe ich den Faden verloren.
ZitatUnd warum hast du im notify dann KEY_377 genommen ?
Das ist die TV Taste auf meiner Ferbedienung.
Im Notify klappt es so:
define TESTTV notify hidX10:EV_KEY:.KEY_377 set HM_TV_D on
Dort muss aber zwingend der Punkt zwischen EV_KEY: und KEY_377 gesetzwerden damit es funktioniert.
Diese habe ich dan versucht eins zu eins ins DOIF zu übertragen was mir die Probleme machte.
Ich glaube, dass das Problem daran leigt, dass in der Zeile zweimal ein ":" auftaucht und das DOIF damit nicht zurecht kommt.
Du hast es eben nicht 1:1 übertragen.
Das funktionierende notify von dir:
define TESTTV notify hidX10:EV_KEY:.KEY_377 set HM_TV_D on
Das nicht-funktionierende DOIF von dir:
define Test DOIF ([hidX10:EV_KEY:.EV_KEY377]) (set HM_TV_D on)
Vorschlag von mir:
define Test DOIF ([hidX10:EV_KEY:.KEY_377]) (set HM_TV_D on)
Man beachte den Teil hidX10:EV_KEY:.KEY_377
Der Punkt dient in Perl nur als Regexp für EIN beliebiges Zeichen - hier das Leerzeichen.
Das DOIF kann aber auf nichts anderes schauen als das notify daher muss das gesamte! Regexp gleich aussehen.
Und .KEY377 ist nicht gleich .KEY_377 und schon garnicht gleich .EV_KEY377
Hallo Puschel,
Hab dein Vorschlag mal eingetragen.
define Test DOIF ([hidX10:EV_KEY:.KEY_377]) (set HM_TV_D on)
Eal Ergebnis bekomme ich wieder diese Info:
Test DOIF: unknown expression format: .KEY_377
Zitat
Ereignissteuerung
Vergleichende Abfragen werden, wie in Perl gewohnt, mit Operatoren ==, !=, <, <=, >, >= bei Zahlen und mit eq, ne, lt, le, gt, ge, =~, !~ bei Zeichenketten angegeben. Logische Verknüpfungen sollten zwecks Übersichtlichkeit mit and bzw. or vorgenommen werden. Selbstverständlich lassen sich auch alle anderen Perl-Operatoren verwenden, da die Auswertung der Bedingung vom Perl-Interpreter vorgenommen wird. Die Reihenfolge der Auswertung wird, wie in höheren Sprachen üblich, durch runde Klammern beeinflusst. Stati werden mit [<devicename>], Readings mit [<devicename>:<readingname>], Internals mit [<devicename>:&<internal>] angegeben.
Du hast zwei Doppelpunkte in deinem DOIF, für das notify mag das richtig sein, da es die Value von dem Reading auch mit auswertet für das DOIF dürfte es sein
define Test DOIF ([hidX10:EV_KEY] eq "KEY_377") (set HM_TV_D on)
Zitat
Ereignissteuerung über Auswertung von Events
Eine Alternative zur Auswertung von Stati oder Readings ist das Auswerten von Ereignissen (Events) mit Hilfe von regulären Ausdrücken, wie beim notify. Eingeleitet wird die Angabe eines regulären Ausdrucks durch ein Fragezeichen. Die Syntax lautet: [<devicename>:?<regexp>]
Anwendungsbeispiel: wie oben, jedoch wird hier nur das Ereignis (welches im Eventmonitor erscheint) ausgewertet und nicht der Status von "remotecontrol" wie im vorherigen Beispiel
define di_garage DOIF ([remotecontrol:?on]) (set garage on) DOELSEIF ([remotecontrol] eq "off") (set garage off)
In diesem Beispiel wird nach dem Vorkommen von "on" innerhalb des Events gesucht. Falls "on" gefunden wird, wird der Ausdruck wahr und der DOIF-Fall wird ausgeführt, ansonsten wird der DOELSEIF-Fall ausgeführt. Die Auswertung von reinen Ereignissen bietet sich dann an, wenn ein Modul keinen Status oder Readings benutzt, die man abfragen kann, wie z. B. beim Modul "sequence". Die Angabe von regulären Ausdrücken kann recht komplex werden und würde die Aufzählung aller Möglichkeiten an dieser Stelle den Rahmen sprengen. Weitere Informationenen zu regulären Ausdrücken sollten in der Perl-Dokumentation nachgeschlagen werden. Die logische Verknüpfung "and" mehrerer Ereignisse ist nicht sinnvoll, da zu einem Zeitpunkt immer nur ein Ereignis zutreffen kann.
Oder aber wie beim Notify das Event auswertet statt das Reading
define Test DOIF ([hidX10:?KEY_377]) (set HM_TV_D on)
Zumindest gehe ich davon aus, dass dein Reading EV_KEY heißt und den Wert KEY_377 annimmt, aber wissen tue ich es nicht ;)
Grüße
igmai
Wie ich schon geschrieben hab - es müssen doch die DOIF-Experten ran.
Sorry und du hattest recht mit den beiden :
Hallo Puschel,
da ist mir ein Kopier fehler unterlaufen.
Ich hatte bevor ich diesen Tread aufgesetzt habe natürlich diverse Versuche gestartet und beim Tippen dieses Treads ist mir dan die falsche Zeile untergekommen.
Natürlich hast du recht, dass KEY_377 und KEY377 nicht das selbe ist. Ich habe aber bei den versuchen (meistens) KEY_377 genutzt.
Ich versuche mal im linuxHid den zweiten : entfernen zu lassen.
Aber danke für deine Mühe.
Gruß Olaf
Der Tipp von igami hat aber geholfen nehme ich mal an.
Noch eine kleine Ergänzung von mir:
solltest du immer nur die Events mappen wollen könntest du folgenden Ansatz wählen
define ntfy_hidX10 notify hidX10:EV_KEY.* {my @cmd = split(":",$EVENT); fhem("$cmd[1]");}
attr hidX10 eventMap /KEY_377:set HM_TV_D on/
dadurch hast du das Mapping direkt im Device und keim umständliches DOIF im zig DOELSEIF. Habe ich fix mit zwei Dummys getestet, funktioniert wunderbar.
Grüße
igami
Ups schuldigung der ist mir beim Schreiben durch die Lappen gegangen.
Aber Ja :D mit
define Test DOIF ([hidX10:?KEY_377]) (set HM_TV_D on)
Hat es eiwandfrei geklappt.
Danke euch beiden.
Und Igami,
ich hoffe das passiert mir nicht nochmal.
Schuldigung.
Gruß Olaf
Hallo Igami,
Das DOIF benötige ich um nachher mit der selben Taste den Fernseher wieder ausschalten zu können.
Danke noch mal für den Tipp.
Gruß Olaf
Gern geschehen. Man lernt dadurch ja auch selbst viel dazu :)