Forum: Haus & Smart Home LG Fernseher von Magenta Receiver über HDMI-CEC ein/ausschalten


von Olli Z. (z80freak)


Lesenswert?

Ich bin seit kurzem Besitzer eines Telekom DSL-Anschlusses inkl. 
MagentaTV und Media-Receiver MR401B der Telekom, mit aktueller Firmware. 
Dieser ist über den HDMI Anschluß der Box an einem, schon etwas älteren, 
LG 47LW659S auf HDMI1 angeschlossen.

Was mich, bzw. besser gesagt meine Frau nervt ist, das man nun immer 
sowohl den Receiver als auch den Fernseher einschalten muss. Nach 
einigem suchen bin ich drauf gestoßen das die Box im Einstellmenü eine 
Funktion anführt einen Fernseher über HDMI-CEC mit ein und 
auszuschalten. Bei LG wird HDMI-CEC laut BA mit dem Eigennamen 
"Simplink" unterstützt. Das kann man im Eingangswähler aktivieren.

Jetzt ist es so das sich der Fernseher (der sich natürlich im Standby 
befinden muss) einschaltet, wenn man den Receiver über dessen FB 
einschaltet. Jedoch schaltet der TV nicht nach ausschalten des Recievers 
ab. Schalte ich den TV über die FB aus, geht kurz drauf auch der 
Receiver aus.

Ich kenne mich mit dem CEC nicht aus, daher ist nun für mich schwer zu 
sagen ob das jetzt am TV, am Reciever oder irgendwelchen Einstellungen 
liegen kann?

von Sascha W. (sascha-w)


Lesenswert?

Das man da was per Einstellung beeinflussen kann glaube ich kaum, da ist 
wenig dokumentiert und noch weniger einstellbar.
Eine gewisse Logik hinter dem von dir geschilderten Verhalten ist 
erkennbar:
Externes Gerät schaltet den TV mit ein, da ohne Bildausgabe nutzlos. TV 
ausschalten, schaltet auch externes Gerät aus, da keine Bildausgabe mehr 
möglich.
Wahrscheinlich denken die Hersteller da an sowas wie einen 
Bluerayplayer, da willst du mit dessen Abschalten ja auch nicht immer 
den TV mit ausmachen.

Sascha

von Olli Z. (z80freak)


Lesenswert?

Ist es denn besonders aufwendig dieses Protokoll zu lesen/schreiben? 
Könnte man sich da ggf. einen Adapter bauen der erkennt wenn sich der 
Mediareceiver abschaltet und dann dem TV noch das fehlende OFF sendet?
Mit nem kleinen Arduino Nano z.b.? Google gibt hier rasch einigen 
output: https://github.com/floe/CEC
Weiss nur gerade noch nicht worauf ich mich da einlassen würde.. laut 
Spec klingt jetzt ein 1-wire Bus mit 500 Baud (!) nicht besonders 
anspruchsvoll.

: Bearbeitet durch User
von Max B. (citgo)


Lesenswert?

Guck mal ob es im TV eine Einstellung unter Simplink bezüglich der 
Synchronisation gibt.
Ich kann bei mir zum Beispiel einstellen ob ich mit CEC andere Geräte 
steuern möchte oder andere Geräte meinen TV steuern sollen.

Was ist denn wenn du den TV einschaltest? Geht dann die Box mit an?

von Olli Z. (z80freak)


Lesenswert?

Ne, da gibt es in den Menüs nichts, habe schon alles durchforstet. Wenn 
ich den TV einschalte bleibt der Receiver aus. Auch das ist irgendwie 
komisch...

von Εrnst B. (ernst)


Lesenswert?

Olli Z. schrieb:
> Ist es denn besonders aufwendig dieses Protokoll zu lesen/schreiben?

Nö.
Hier kannst du dir alle möglichen CEC-Kommandos zusammenklicken:

https://www.cec-o-matic.com/index.php

CEC läuft über eine eigene Ader im HDMI-Kabel (Pin 13), d.H. die kannst 
du auftrennen und eigene Logik zwischenschalten.

Das Protokoll selber ist sehr gemächlich (vmlt. an IR-Fernbedienungen 
angelehnt?) mit ~2.4 ms pro Bit.

von Olli Z. (z80freak)


Lesenswert?

Cool, sind das einfach asychrone Nachrichten, oder bedarf es vorher 
einer Initialisierung oder Antworten?
Könnte man das nicht mittels Y-Adapter einfach mit drauf legen?

von Olli Z. (z80freak)


Angehängte Dateien:

Lesenswert?

Ich habe mir nun mal einen kleinen Versuchsaufbau mit einem Arduino und 
dem Interface aus der Library https://github.com/floe/CEC gemacht und 
die CEC-Leitung vom HDMI-Kabel welches TV und MR verbindet parallel 
angezapft. Ich will ja erstmal nur mithören.

Dann habe ich die Beispieldatei 
https://github.com/floe/CEC/blob/master/examples/CEC/CEC.ino auf den 
Arduino geflashed und das ganze mal in Betrieb genommen und geschaut was 
es so hergibt.

Nach dem verbinden des Arduino mit dem "Seriellen Monitor" der 
ArduinoIDE kommt erstmal:
1
Logical address assigned: 4
2
Device ready
TV und MR befanden sich dabei im Standby.

Als erstes habe ich den MR eingeschaltet und dies ergab folgenden 
output:
1
Packet received at 8449: 00 -> 15: 0F:87:00:E0:91
2
Packet received at 8958: 00 -> 15: 0F:87:00:E0:91
3
Packet received at 9094: 00 -> 15: 0F:87:00:E0:91
4
Packet received at 9228: 00 -> 15: 0F:87:00:E0:91
5
Packet received at 18463: 00 -> 15: 0F:87:00:E0:91
6
Packet received at 18972: 00 -> 15: 0F:87:00:E0:91
7
Packet received at 19107: 00 -> 15: 0F:87:00:E0:91
8
Packet received at 19241: 00 -> 15: 0F:87:00:E0:91
9
Packet received at 25000: 03 -> 15: 3F:82:10:00
10
Packet received at 26003: 03 -> 15: 3F:82:10:00
11
Packet received at 26385: 03 -> 15: 3F:84:10:00:03
12
Packet received at 27003: 03 -> 15: 3F:82:10:00
13
Packet received at 29006: 03 -> 15: 3F:82:10:00
14
Packet received at 31009: 03 -> 15: 3F:82:00:00
15
Packet received at 32751: 03 -> 15: 3F:84:10:00:03
16
Packet received at 33012: 03 -> 15: 3F:82:10:00
17
Packet received at 33820: 00 -> 15: 0F:87:00:E0:91
18
Packet received at 33975: 00 -> 15: 0F:87:00:E0:91
19
Packet received at 34110: 00 -> 15: 0F:87:00:E0:91
20
Packet received at 34244: 00 -> 15: 0F:87:00:E0:91
21
Packet received at 34379: 00 -> 15: 0F:87:00:E0:91
22
Packet received at 34580: 03 -> 15: 3F:84:10:00:03
23
Packet received at 34812: 03 -> 15: 3F:84:10:00:03
24
Packet received at 35098: 03 -> 15: 3F:82:10:00
25
report VendorID
26
Transmit: 1
27
Packet received at 36026: 03 -> 15: 3F:84:10:00:03
28
Packet received at 36165: 00 -> 15: 0F:87:00:E0:91
29
Packet received at 36300: 00 -> 15: 0F:87:00:E0:91
30
Packet received at 36435: 00 -> 15: 0F:87:00:E0:91
31
Packet received at 36570: 00 -> 15: 0F:87:00:E0:91
32
Packet received at 36705: 00 -> 15: 0F:87:00:E0:91
33
Packet received at 37023: 00 -> 15: 0F:87:00:E0:91
34
Packet received at 37158: 00 -> 15: 0F:87:00:E0:91
35
Packet received at 37293: 00 -> 15: 0F:87:00:E0:91
36
0x387: Line Error!
37
report VendorID
38
Transmit: 1
39
Packet received at 38681: 00 -> 15: 0F:85
40
Packet received at 38794: 03 -> 15: 3F:82:10:00
41
Packet received at 38860: 00 -> 15: 0F:85
42
Packet received at 38973: 03 -> 15: 3F:82:10:00
43
Packet received at 39041: 00 -> 15: 0F:85
44
Packet received at 39153: 03 -> 15: 3F:82:10:00
45
Packet received at 39220: 00 -> 15: 0F:85
46
Packet received at 39332: 03 -> 15: 3F:82:10:00
47
Packet received at 39399: 00 -> 15: 0F:85
48
Packet received at 39512: 03 -> 15: 3F:82:10:00
49
Packet received at 39651: 00 -> 15: 0F:87:00:E0:91
50
Packet received at 39786: 00 -> 15: 0F:87:00:E0:91
51
Packet received at 39920: 00 -> 15: 0F:87:00:E0:91
52
Packet received at 40055: 00 -> 15: 0F:87:00:E0:91
53
Packet received at 40190: 00 -> 15: 0F:87:00:E0:91
54
report VendorID
55
Transmit: 1
56
Packet received at 54473: 00 -> 15: 0F:87:00:E0:91
57
Packet received at 54608: 00 -> 15: 0F:87:00:E0:91
58
Packet received at 54743: 00 -> 15: 0F:87:00:E0:91
59
Packet received at 54878: 00 -> 15: 0F:87:00:E0:91
60
report VendorID
61
Transmit: 1

Nach dem aktivieren des MR aktiviert sich auch kurz drauf der TV. Man 
kann es ganz gut nachvollziehen. Auf ID-0 vermute ich den Fernseher, auf 
ID-3 den MR und ID-15 (0x0F) ist wohl ein Broadcast. Das CEC-Arduino 
Interface selbst hat sich wohl als ID-4 registriert.

Mit dem https://www.cec-o-matic.com/index.php habe ich mal versucht den 
Inhalt der Datenpakete zu analysieren:
1
Packet received at 19241: 00 -> 15: 0F:87:00:E0:91
Das erste Byte der Message enthält im oberen Nibble die Source und im 
unteren die Target-ID.
Das zweite Byte ist die Message-ID, in dem Fall 0x87 und laut O-Matic 
"Reports the Vendor ID of this device (Broadcast)".
Die restlichen Bytes sind dann Payload. In dem Fall ist die Vendor-ID 
vom Device mit der ID-0 (TV) 0x00E091 (= 57489 dezimal). Vermutlich gibt 
es irgendwo im Netz auch eine Liste wer sich dahinter verbirgt. Ich 
würde jetzt mal tippen "LG" ;-)

Dieses Paket ist also für das ein/ausschalten nicht von Bedeutung, aber 
das nächste:
1
Packet received at 25000: 03 -> 15: 3F:82:10:00
Das geht vom MR als Broadcast raus und die Message-ID 0x82 besagt "Used 
by a new source to indicate that it has started to transmit a stream OR 
used in response to a "Request Active Source" (Brodcast). This message 
is used in several features : One Touch Play,Routing Control"
Der MR zeigt damit also an das er ein Signal sendet und darum bittet 
dieses darzustellen.
Danach wiederholt sich alles irgendwie nur und scheint nicht mehr 
relevant zu sein. Meine Vermutung ist, das der TV diese 
Sendebereitschaft des MR erkennt, sich daraufhin einschaltet und den 
HDMI1 als Quelle auswählt.

Schalte ich den MR aus, kommt:
1
standby
2
standby
3
standby
4
standby
5
standby
Was sehr wahrscheinlich den MR dazu bewegt selbst in den Standby zu 
gehen.

ABER, schalte ich den MR aus (TV ist noch an), dann tut sich auf der CEC 
genau NICHTS!! Es wird keine Nachricht gesendet. Das ist dann der Grund 
warum der TV nicht mit ausgeht. Und das obwohl in den Einstellungen ganz 
klar die Rede von "Ein/Ausschalten" über CEC ist.

Ich würde jetzt mal versuchen einen Sketch zu bauen bei dem ich über 
einen Taster am Arduino ein "Standby" Signal vom MR simulieren kann um 
zu sehen ob der TV darauf richtig reagieren würde.

von Olli Z. (z80freak)


Lesenswert?

Nach einigen Experimenten habe ich nun herausgefunden das das Interface 
grundsätzlich funktioniert. Ich weiss zwar immer noch nicht ob es 
zulässig ist das sich an einem HDMI-Anschluß mehrere Geräte registieren 
(durch das parallel schalten ist ja neben dem Tuner ID3 auch noch mein 
Interface mit ID4 vertreten), aber das spielt evtl. auch keine Rolle.

Beim ausschalten der MR sendet dieser ein "Source Inactive" um 
anzuzeigen das er in den Standby geht und kein Signal mehr sendet. Diese 
Nachricht interessiert den TV nicht.

Jedenfalls kann ich mittels geeigneter Befehle den TV einschalten und 
auch den MR. Den MR kann ich sogar ausschalten, der reagiert sowohl auf 
die Broadcast als auch auf seine ID. Der TV reagiert auf den Broadcast 
nicht. Schicke ich nun "Standby" direkt zum TV, erhalte ich eine 
negative Rückmeldung:
1
Packet received at 9996: 00 -> 04: 04:00:36:04
Die Meldung bedeutet laut CEC-O-Matic "Feature Abort: Standby refused"

Das wars dann wohl... der LG unterstütz das nicht. In den Anleitungen zu 
SIMPLINK ist auch immer wieder zu lesen das LG davon ausgeht es 
andersrum zu machen, also mit ausschalten des TV werden auch alle 
angeschlossenen Geräte ausgeschaltet. Das funktioniert ja auch.

Eine Sache habe ich dann aber dennoch entdeckt - Wenn ich den MR 
ausschalte und mich nicht an der OSD-Meldung im Fernseher störe, dann 
geht dieser nach einigen Minuten ohne Signal auch selbst in den Standby. 
Nicht schön, aber geht.

Wenn ich ein direktes Ausschalten haben will müsste ich vermutlich die 
serielle Schnittstelle des TV nutzen (der hat eine RS232 hinten dran und 
das Protokoll ist auch bei LG erklärt, es besitzt auch eine 
Ausschaltfunktion). Also MR-OFF über CEC abfangen und dann per RS232 den 
TV ausschalten.

Hier überlege ich eher daran anstelle des Standby dann über die 
CEC-Signale vom MR und meinem Arduino eine schaltbare Steckdose zu 
triggern welche den TV komplett vom Netz trennt bei OFF und anschaltet 
bei ON. Beim LG ist es so das nach anlegen der Netzspannung der 
Fernseher an geht. Würde also passen. Das spart dann sogar noch Strom...

von Olli Z. (z80freak)


Lesenswert?

Zur Vollständigkeit: Ansteuerung über RS232 mit 9600 8N1 geht um den TV 
mit "KA 00 01 00<CR>" in den Standby zu bringen. Einschalten geht aus 
dem Standby heraus mit RS232 nicht, "KA 00 01 01<CR>" hat keinen Effekt!

Aussage in div. Foren bezüglich Standby von LG TV via HDMI CEC ist 
einhdeutig "geht nicht, da nicht implementiert". Alles verweist auf 
"Auto Power Sync" was letztlich den TV nach einiger Zeit selbst 
abschaltet wenn kein Eingangssignal mehr anliegt.

Einzige wage Option wäre eine alternative Firmware auf das Gerät 
aufzuspielen. Da gab es das Projekt OpenLGTV, finde aber weder konkret 
wie man es installiert noch ob es dieses Problem beseitigt.

Damit bleibt für mich nun entweder die zusätzliche RS232-Schnittstelle 
zu implementieren, oder gleich auf eine schaltbare Steckdose zu gehen. 
Diese könnte ich mir vorstellen entweder direkt oder über Funk 
anzusteuern. Somit müsse mein CEC Interface nur "mitlesen" und auf den 
Ein/Aus Command vom Mediareceiver reagieren.

von Heinz R. (heijz)


Lesenswert?

Hat der TV eine IR-Fernbedienung

Falls ja würde ich hier einfach was mit einem Arduino usw schicken?

von Banana (Gast)


Lesenswert?

Hat der Fernseher denn keinen Stromsparmodus?
Dann sollte er von selbst wieder ausgehen.

von Olli Z. (z80freak)


Lesenswert?

Banana schrieb:
> Hat der Fernseher denn keinen Stromsparmodus?
> Dann sollte er von selbst wieder ausgehen.

Habs ja weiter oben geschrieben. Auch ohne Energiesparmodus schaltet 
sich der LG nach ca. 5 min. ohne Eingangsignal selbst in den Standby. 
Aber wenn man ausschaltet erwartet man doch auch das alles aus geht...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.