Hallo,
ich bin zzt. auf der Suche nach einer Möglichkeit, ein Notify umzusetzen, dass auf Änderungen eines Readings reagiert. Leider fehlt mir dafür die passende Bedingung - ich bekomme immer nur ein Notify hin, welches auf den STATE achtet.
Zu meinem Code:
Ich habe ein Fernseher definiert:
define FernseherWohnzimmer LGTV_RS232 /dev/ttyUSB0
attr FernseherWohnzimmer event-on-change-reading .*
attr FernseherWohnzimmer event-min-interval 60
attr FernseherWohnzimmer room Wohnzimmer
attr FernseherWohnzimmer comment LG 55 Zoll TV im Wohnzimmer
attr FernseherWohnzimmer webCmd power
Und möchte nun mit einem Notify darauf reagieren, wenn power on gesetzt wurde (im Event Monitor ist das Kommando LGTV_RS232 FernseherWohnzimmer power on).
Mein Notify sieht zzt. so aus:
define Notify_FernseherWohnzimmerOn notify FernseherWohnzimmer:power:on {system("echo 'on 0' | sudo /usr/osmc/bin/cec-client -s -d 1 &")}
Das geht aber nicht.
Habt ihr ein Tipp?
Danke
Ausschlaggebend für die Syntax eines Notify ist immer das entsprechende Event. Wie sieht das Event aus?
Eventuell kann es so gehen
define Notify_FernseherWohnzimmerOn notify FernseherWohnzimmer:power:.on {system("echo 'on 0' | sudo /usr/osmc/bin/cec-client -s -d 1 &")}
Ich empfehle das Einsteiger PDF zu lesen. Gerade der Bereich Notify ist gut dokumentiert und erklärend.
Grüße
Merke: immer ein list posten, nicht die Definition
Die Doku zu notify ist eigentlich recht eindeutig. Die Frage hier ist, was du versucht hast, um an das Event deines Readings zu kommen. Hast du in den Eventmonitor geschaut, wie das Event aussieht? Da ich das nicht weiß, kann man nur ins blaue raten:
define Notify_FernseherWohnzimmerOn notify FernseherWohnzimmer:.power.on {system("echo 'on 0' | sudo /usr/osmc/bin/cec-client -s -d 1 &")}
Zitat von: Grinsekatze am 07 Juli 2016, 08:04:45
Das geht aber nicht.
Habt ihr ein Tipp?
Du könntest auch noch ermitteln was nicht geht!?
startet das notify nicht?
Funktioniert denn der Befehl "{system("echo 'on 0' | sudo /usr/osmc/bin/cec-client -s -d 1 &")}" an sich? Getestet? Wie?
Gruß Otto
Ich versuche gerade meine TV-Steuerung zu optimieren. Dabei kam mi der Gedanke, dass ich meinen extra Dummy, der den Fernseher (mithilfe zweier Notifys) nur ein- und ausschaltet womöglich in das Hauptmodul mit integriert werden kann.
Grund für den Dummy ist, dass mein Fernseher nicht über das Modul eingeschaltet werden kann. Das geht nur Mittels CEC.
Das CEC-Kommando funktioniert.
Im Modul sind die Ein- bzw. Ausschaltanweisungen set Fernseher power on bzw. set Fernseher power off. Nun wollte ich für Power on ein Notify zusammenbauen, dass reagiert, wenn dieser Befehl gesendet wird und dann den CEC-Befehl auslöst.
Mir ist aber eben noch aufgefallen, dass in den Readings power immer on ist - zumindest solange der Stecker in der Steckdose ist. Daher kann ich mit dem Notify wohl keine Reading-Änderung abfangen, sondern muss wirklich den Befehl abgreifen.
Leider bin ich noch recht neu in der Materie und habe daher immer mal wieder Startschwierigkeiten.
Edit:
Wenn ich den Fernseher schalte, dann habe ich keinen Eintrag im Logfile und im Eventmonitor steht: 2016-07-07 11:12:14 LGTV_RS232 FernseherWohnzimmer power on
Äquivalent ist der off-Befehl.
Dann sollte Marvin78 sein Beispiel funktionieren.
@CoolTux Warum war dann Dein Vorschlag "power:.on" ??? Also ich würde es gerne verstehen wann dort noch ein ":" stehen darf und wann nicht.
Man kann das gut durchspielen wenn man sich ein Test notify macht und mit dem trigger Befehl spielt (Habe ich gerade mal gemacht) Da sieht man welches regEx auf die Zeichenkette "power on" triggert und welches nicht.
Wenn ich auch nach dem schauen in den Event-Monitor nicht sicher bin, wie das Event aussieht, mache ich folgendes:
DEVICE {Log 1, $EVENT}
Zitat von: Otto123 am 07 Juli 2016, 11:59:37
@CoolTux Warum war dann Dein Vorschlag "power:.on" ??? Also ich würde es gerne verstehen wann dort noch ein ":" stehen darf und wann nicht.
Man kann das gut durchspielen wenn man sich ein Test notify macht und mit dem trigger Befehl spielt (Habe ich gerade mal gemacht) Da sieht man welches regEx auf die Zeichenkette "power on" triggert und welches nicht.
War ein Blindflug. Da wusste ich noch nicht wie sein Event aus sieht. War so aus meinem Leben gegriffen :)
Ich glaub ich bin dazu zu blöd. :o
Ich habe nun mal zum testen 2 Dummys und ein Notify gezimmert:
define D_test2 dummy
attr D_test2 room test
define D_test dummy
attr D_test room test
attr D_test setList power:on,off
define N_test notify D_test:.power.on set D_test2 on
Doch wird D_test2 nicht auf on geschaltet.
Ich habe auch im Notify mit den Punkten und Doppelpunkten gespielt. Doch wenn immer ich trigger N_test D_test power on ausführe, passiert nichts weiter.
@marvin78:
Wo gebe ich denn deinen Befehl ein (DEVICE {Log 1, $EVENT})? Ich hab's in der Kommandozeile des WebIf probiert, doch da gehört es offenbar nicht hin :D
Danke für eure schnelle Hilfe!
Internals:
CFGFN
DEF nty_Test3:power.on set SD3 on-for-timer 1
NAME nty_Test3
NOTIFYDEV nty_Test3
NR 2017
NTFY_ORDER 50-nty_Test3
REGEXP nty_Test3:power.on
STATE 2016-07-07 11:54:46
TYPE notify
Readings:
2016-07-07 11:54:36 state active
Attributes:
room Test
Das ist mein Test notify, wenn ich dann trigger nty_Test3 power on
eingebe, geht meine SD3 für eine Sekunde an. 8)
Vielen Dank - das war glaub ich so ziemlich die einzige Kombination, die ich nicht getestet habe.
Nun klappt es! ;D
Flls es Jemandem hilft:
define FernseherWohnzimmer LGTV_RS232 /dev/ttyUSB0
attr FernseherWohnzimmer comment LG 55 Zoll TV im Wohnzimmer
attr FernseherWohnzimmer event-on-change-reading .*
attr FernseherWohnzimmer room Wohnzimmer
attr FernseherWohnzimmer webCmd power
attr FernseherWohnzimmer event-min-interval 60
define Notify_FernseherWohnzimmerOn notify FernseherWohnzimmer:power.on {system("echo 'on 0' | sudo /usr/osmc/bin/cec-client -s -d 1 &")}
Nun muss ich nur noch den webCmd etwas schöner machtn, sodass ich keine Dropdown-Liste, sondern on und off stehend habe. Aber das kommt zum Schluss, wenn alles fertig ist.
Danke euch allen noch einmal für eure Unterstützung!!!
Zitat von: Grinsekatze am 07 Juli 2016, 14:02:07
@marvin78:
Wo gebe ich denn deinen Befehl ein (DEVICE {Log 1, $EVENT})? Ich hab's in der Kommandozeile des WebIf probiert, doch da gehört es offenbar nicht hin :D
Das ist natürlich der DEF Bereich eines notifys auf DEVICE.