TV-Logik (FHEM2FHEM, RFHEM, LGTV_RS232)

Begonnen von Grinsekatze, 02 Oktober 2017, 19:38:44

Vorheriges Thema - Nächstes Thema

Grinsekatze

Hm, ich beschäftige mich damit ja schon länger, doch finde ich einfach keine endgültige, funktionierende Lösung.

Ich möchte meinen LG Smart-TV in FHEM integrieren.

Zum Setup:
Ich habe zum einen eine FHEM-Zentrale, die steht jedoch nicht im Wohnzimmer (wo der TV steht).
Jedoch benötige ich, um den TV ohne Fernbedienung vom TV anschalten zu können CEC. Da mein TV jedoch keine Serielle Schnittstelle mehr besitzt habe ich einen USB-RS232-Adapter gekauft. Zusätzlich auch einen zweiten Pi, der eine zweite FHEM-Instanz fährt (um den Adapter anschließen zu können).

Der Wohnzimmer-Pi:
Dort ist OSMC, CEC und FHEM installiert.
In FHEM habe ich zum einen den TV definiert (LGTV_RS232 Modul) und einen Notify um den TV anschalten zu können:
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

define Notify_FernseherWohnzimmerOn notify FernseherWohnzimmer:power.on {system("echo 'on 0' | sudo /usr/osmc/bin/cec-client -s -d 1 &")}


Auf meiner FHEM-Zentrale habe ich nun FHEM2FHEM, RFHEM einen Dummy und Notify für die TV-Logik definiert:
define FernseherWohnzimmerLog FHEM2FHEM Wohnzimmer:7072 LOG:FernseherWohnzimmer:.*
attr FernseherWohnzimmerLog addStateEvent 1
attr FernseherWohnzimmerLog comment Verbindung zum Wohnzimmer-Computer, um die fuer die TV-Fernsteuerung nötigen Daten auszulesen

define FernseherWohnzimmer dummy
attr FernseherWohnzimmer alias Fernseher
attr FernseherWohnzimmer comment Dummy für LG 55 Zoll TV im Wohnzimmer
attr FernseherWohnzimmer devStateIcon .*on:ios-on-green .*off:ios-off .*:ios-NACK
attr FernseherWohnzimmer event-on-change-reading .*
attr FernseherWohnzimmer group Multimedia
attr FernseherWohnzimmer icon it_television
attr FernseherWohnzimmer readingList CommandAccepted aspectRatio input power presence screenMute state videoOutMute volume volumeMute
attr FernseherWohnzimmer room Wohnzimmer
attr FernseherWohnzimmer setList energy_saving:auto,max,off input:component,digitalTV,hdmi1,hdmi2,hdmi3,video1,video2 power:off,on screen_mute:off,on statusRequest volume:00,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30 volume_mute:off,on volume_step:down,up

define RemoteConnectionWohnzimmer RFHEM Wohnzimmer:7072
attr RemoteConnectionWohnzimmer comment Verbindung zum Wohnzimmer-Computer, um den Fernseher fernzusteuern
attr RemoteConnectionWohnzimmer verbose 0

define FernseherWohnzimmerRemoteControl_notify notify FernseherWohnzimmer:(energy_saving|input|power|screen_mute|statusRequest|volume|volume_mute|volume_step).* { fhem "set RemoteConnectionWohnzimmer cmd set FernseherWohnzimmer $EVENT" }
attr FernseherWohnzimmerRemoteControl_notify comment Notify, notwendig um den Wohnzimmer-Fernseher fernzusteuern


Soweit so gut, dachte ich.

Das einschalten klappt leider nicht immer, weil manchmal CEC nicht funktioniert:
Zitat2017.10.02 18:18:15 3: Notify_FernseherWohnzimmerOn return value: -1
2017.10.02 18:18:15 3: Notify_FernseherWohnzimmerOn return value: -1
opening a connection to the CEC adapter...
opening a connection to the CEC adapter...
ERROR:   [              57]   Open - vc_cec could not be initialised
ERROR:   [              57]   could not open a connection (try 1)
ERROR:   [            1058]   Open - vc_cec could not be initialised
ERROR:   [            1058]   could not open a connection (try 2)

Viel mehr stört mich jedoch, dass ich, wenn ich z.B. den Dummy auf der Zentrale schalte den letzten Befehl immer im state habe (z.B. volume_mute on). Kann ich das unterbinden und dort on / off stehen haben, wie im LGTV_RS232-Modul, das gespiegelt wird?
Auch reagiert der Wohnzimmer-TV (bzw. der eigentliche TV) nicht immer auf die Kommandos von der Zentrale.
Wenn ich im Dummy event-on-change-reading .* entferne bekomme ich ebenfalls eine Endlosschleife. Doch warum?? und vor allem, wie bekomme ich die wieder weg (und eine saubere Implementierung)?!

Vielleicht habt ihr ja einen Tipp für mich.

Danke

Grinsekatze

Das CEC-Problem und das teils ignorieren der Events vom Dummy konnte ich mit einer Systemaktualisierung (und damit neuen cec-binaries) lösen.

Bleibt aber noch, warum ich ohne event-on-change .* immer in eine Endlosschleife laufe und wie ich das mit dem state löse.