Hallo Zusammen,
in kurz, ich wollte meinen Samsung TV steuern. Die Aufgabe waren auch nur...
- Schalte den TV ein oder aus
- Schalte auf HDMI1-4
Jetzt dachte ich, kein Problem kann ich bestimmt per Netzwerk machen. Aber leider weit gefehlt, man kann lediglich nur die FB-Tasten per Netzwerk schicken. Das Problem ist nur, dass dies Zustandslos ist. Sprich ich kann nur POWER oder SOURCE durch toggeln, nicht aber sagen gehe auf HDMI2 oder schalte aus. Auch geht das Netzwerkinterface bei Samsung kurz nach dem Ausschalten aus, so dass man dann per WakeOnLan den TV schalten muss. Hier gibt es aber sogar einen (kurzen) Zeitraum wo weder HTTP noch WOL geht. Auch schaltet geht der Netzwerkinterface hinundiweder up für Softwareupdates wo das WOL wieder nicht geht. Alles irgend wie nicht schön sauber.
Das Problem mit dem Ein- und Ausschalten könnte man zwar noch per Schaltsteckdose + Hotel-Modus erledigen, aber bei der Eingangswahl ist Schluss.
Da fast alle Samsung-TVs eine RS232-Schnitstelle (EX-Link, USB-EX-Link teilweise per VGA-IN) haben, war die Idee warum nutze ich nicht diese?
Ein großer Vorteil ist, dass ich genaue Kommandos an den TV schicken kann wie POWERON, POWEROFF oder HDMI4... So das ich keine Zustände beachten muss (was mir sehr wichtig ist), was bei IR notwendig wäre.
Um den TV per RS232 zu steuern, habe ich erstmal ein Prototyp gebaut. Als Grundlage dient ein Arduino Board mit WLAN (ESP8266), ein Pegelwandler MAX2323, ein "DB9 auf Klinke"-Kabel sowie eine DB9 Buchse. Dann habe ich schnell ein kleinen Webserver gebaut und mittels SoftwareSerial den Pegelwandler angesteuert. Im Internet habe ich eine Liste statischer Codes gefunden:
https://support.justaddpower.com/kb/...ontrol-exlink/
Und siehe da, es klappt! Allerdings wollte ich verstehe wie das Protokoll aufgebaut ist und habe dann weiter recherchiert und rum probiert. Meine Erkenntnise sind folgende:
Der Aufbau eines Telegramms (in HEX) ist immer 0x08 + 0x22+ CMD1+ CMD2 + CMD3 + CMD4 + CHKSUM. Die Prüfsumme wird errechnet indem man 256 minus alls Bytes rechnet. Hier ein Bespiel an POWERON:
0x08 0x22 0x0 0x0 0x0 0x2 (0xD4)
256 - 8 - 34 - 0 - 0 - 0 - 2 = 212 (D4)
Der Vorteil die Prüffsumme zu berechnen ist, dass man nun z.B. auch die Lautstärke setzen kann. Denn mit dem Befehl (1, 0, 0, 0 bis 100) kann man die komplette Lautstärke steuern. Für mich nicht interessant, da ich Sonos verwende, aber für Leute die TV-Lautsprecher nutzen doch interessant.
Was allerdings Schade ist, dass man den Status des TVs nicht abbfragen kann. Ich habe zwar eine Tabelle mit Codes gefunden, doch die klappen leider bei einem Ex-Link Interface nicht. Diese sind wohl für spezielle Monitorwände gedacht. Somit muss man den TV mittels Strommessung prüfen ob dieser eingeschaltet ist (falls man das überhaupt braucht).
Dadruch das der Fernseher keinen Status zurück gibt, kann man sich die Rückleitung (RX) fast schenken. Wenn man nur noch die TX Leitung verwendet, gibt es noch einen weiteren Vorteil. Man kann sogar auf den Pegelwandler verzichten (wie immer ohne Gewähr). Meinem Fernseher hat das TTL Signal gereicht, allerdings muss man das Singal invertiert schicken, das RS232 genau andersherum arbeitet als TTl/LVTTL.
Beim Anschluss der Leitung darf man auf keinem Fall die RX/TX vertauschen, da es sonst das Arduino-Board zerstören kann. Der zu verwende PIN ist die 3 siehe auch mein Foto.
So wie geht es nun nach meinem Prototyp weiter....
In meinem neuen Haus möchte ich die Steuerung auf den Bus bekommen (solange bleibt der Prototyp auf WLAN Basis). Dazu ist es geplannt das Konnekting (MicroBCU bzw. Multi Interface) zu verwenden. Auch finde ich den Weg per DB9 (male) Adapter und dann mittels DB9 (female) auf Klinke doof, da ich das Ganze auch in ein Gehäuse bauen möchte. Die Idee ist daher direkt vom Pegelwandler (MAX3232) auf eine Klinkenbuchse zu gehen. So kann ich direkt mit einem normalen Klinkenkabel in den TV gehen.
Ich habe mal ein Foto vom Prototyp gemacht sowie von der zukünftigen Variante mit Klinkenbuchse:
in kurz, ich wollte meinen Samsung TV steuern. Die Aufgabe waren auch nur...
- Schalte den TV ein oder aus
- Schalte auf HDMI1-4
Jetzt dachte ich, kein Problem kann ich bestimmt per Netzwerk machen. Aber leider weit gefehlt, man kann lediglich nur die FB-Tasten per Netzwerk schicken. Das Problem ist nur, dass dies Zustandslos ist. Sprich ich kann nur POWER oder SOURCE durch toggeln, nicht aber sagen gehe auf HDMI2 oder schalte aus. Auch geht das Netzwerkinterface bei Samsung kurz nach dem Ausschalten aus, so dass man dann per WakeOnLan den TV schalten muss. Hier gibt es aber sogar einen (kurzen) Zeitraum wo weder HTTP noch WOL geht. Auch schaltet geht der Netzwerkinterface hinundiweder up für Softwareupdates wo das WOL wieder nicht geht. Alles irgend wie nicht schön sauber.
Das Problem mit dem Ein- und Ausschalten könnte man zwar noch per Schaltsteckdose + Hotel-Modus erledigen, aber bei der Eingangswahl ist Schluss.
Da fast alle Samsung-TVs eine RS232-Schnitstelle (EX-Link, USB-EX-Link teilweise per VGA-IN) haben, war die Idee warum nutze ich nicht diese?
Ein großer Vorteil ist, dass ich genaue Kommandos an den TV schicken kann wie POWERON, POWEROFF oder HDMI4... So das ich keine Zustände beachten muss (was mir sehr wichtig ist), was bei IR notwendig wäre.
Um den TV per RS232 zu steuern, habe ich erstmal ein Prototyp gebaut. Als Grundlage dient ein Arduino Board mit WLAN (ESP8266), ein Pegelwandler MAX2323, ein "DB9 auf Klinke"-Kabel sowie eine DB9 Buchse. Dann habe ich schnell ein kleinen Webserver gebaut und mittels SoftwareSerial den Pegelwandler angesteuert. Im Internet habe ich eine Liste statischer Codes gefunden:
https://support.justaddpower.com/kb/...ontrol-exlink/
Und siehe da, es klappt! Allerdings wollte ich verstehe wie das Protokoll aufgebaut ist und habe dann weiter recherchiert und rum probiert. Meine Erkenntnise sind folgende:
Der Aufbau eines Telegramms (in HEX) ist immer 0x08 + 0x22+ CMD1+ CMD2 + CMD3 + CMD4 + CHKSUM. Die Prüfsumme wird errechnet indem man 256 minus alls Bytes rechnet. Hier ein Bespiel an POWERON:
0x08 0x22 0x0 0x0 0x0 0x2 (0xD4)
256 - 8 - 34 - 0 - 0 - 0 - 2 = 212 (D4)
Der Vorteil die Prüffsumme zu berechnen ist, dass man nun z.B. auch die Lautstärke setzen kann. Denn mit dem Befehl (1, 0, 0, 0 bis 100) kann man die komplette Lautstärke steuern. Für mich nicht interessant, da ich Sonos verwende, aber für Leute die TV-Lautsprecher nutzen doch interessant.
Was allerdings Schade ist, dass man den Status des TVs nicht abbfragen kann. Ich habe zwar eine Tabelle mit Codes gefunden, doch die klappen leider bei einem Ex-Link Interface nicht. Diese sind wohl für spezielle Monitorwände gedacht. Somit muss man den TV mittels Strommessung prüfen ob dieser eingeschaltet ist (falls man das überhaupt braucht).
Dadruch das der Fernseher keinen Status zurück gibt, kann man sich die Rückleitung (RX) fast schenken. Wenn man nur noch die TX Leitung verwendet, gibt es noch einen weiteren Vorteil. Man kann sogar auf den Pegelwandler verzichten (wie immer ohne Gewähr). Meinem Fernseher hat das TTL Signal gereicht, allerdings muss man das Singal invertiert schicken, das RS232 genau andersherum arbeitet als TTl/LVTTL.
Code:
SoftwareSerial SamsungSerial(-1, D0, false);
So wie geht es nun nach meinem Prototyp weiter....
In meinem neuen Haus möchte ich die Steuerung auf den Bus bekommen (solange bleibt der Prototyp auf WLAN Basis). Dazu ist es geplannt das Konnekting (MicroBCU bzw. Multi Interface) zu verwenden. Auch finde ich den Weg per DB9 (male) Adapter und dann mittels DB9 (female) auf Klinke doof, da ich das Ganze auch in ein Gehäuse bauen möchte. Die Idee ist daher direkt vom Pegelwandler (MAX3232) auf eine Klinkenbuchse zu gehen. So kann ich direkt mit einem normalen Klinkenkabel in den TV gehen.
Ich habe mal ein Foto vom Prototyp gemacht sowie von der zukünftigen Variante mit Klinkenbuchse:
Kommentar