Sony Beamer HW55 in FHEM per RS232 steuern

IM EINSATZ?

Dann schau dir UNSEREN LOXKURS an und profitiere von unserem Wissen!

Der Heimkinoprojektor Sony VPL-HW55ES sollte jetzt in die bestehende Smart-Home-Steuerung integriert werden, damit er je nach Harmony-Szene automatisch ein- bzw. ausgeschaltet wird. Per Infrarot war mir das aber zu langweilig bzw. aus Erfahrung mit meinem TV, welcher bisher ebenfalls per Infrarot gesteuert wurde und gefühlt bei jedem zehnten Schaltvorgang nicht reagierte, vorallem auch zu fehleranfällig.

Aus diesem Grund musste die RS232-Schnittstelle des Sony Projektors angezapft werden, um die Schaltbefehle kabelgebunden und damit zuverlässig zu übertragen. Da ich dazu keine fertige Lösung finden konnte, musste kurzerhand selbst Hand angelegt werden und FHEM mit “Universal-RS232-Modul” zum Einsatz kommen. Wie die Einbindung abläuft und welches Potenzial noch nach oben ist, um bspw. auch Statusmeldungen vom Beamer verarbeiten zu können, ist Inhalt des nachfolgenden Blogpost – inkl. einiger Impressionen aus dem Kinowohnzimmer.

Projektorspezifische RS232-Befehle ausfindig machen

Jeder Hersteller und manchmal sogar jedes Modell eines Herstellers nutzt abweichende serielle Befehle, welche gewöhnlich im jeweiligen “ProtocolManual” (zumindest heisst das so bei Sony) zu finden sind. Meist leitet der erste oder zweite Google-Treffer bereits zur korrekten pdf-Datei. Im Falle des Sony HW55 (Affiliate-Link) ist das Dokument hier zu finden.

BTW: Der HW55 ist an der Decke schon nen ganz schöner Klopper…

Lustig dabei ist, dass die Googletreffer meist nicht auf die Herstellerseite verweisen, sondern stattdessen auf diverse/dubiose Drittseiten, bei denen man die Dokumente herunterladen kann. Hier hat man auf Herstellerseite anscheinend gar nicht sooo den großen Anreiz, dass das überhaupt jemand nutzt. Schade eigentlich – vorallem für den Konsumenten.

Hat man das Dokument studiert, kann man sich anhand der Tabellen die korrekten Befehle in Bit- bzw. Byteform – z.B. für Projektor ein- oder ausschalten – zusammenbasteln. Das ist – gelinde gesagt – kein großer Spaß, da man neben den einzelnen Hex-Werten bspw. auch noch die Prüfziffer berechnen muss. Warum kann man nicht einfach eine Liste aller fertig ausformulierten Befehle abdrucken? Grml!

Hier mal einige zentrale Steuerbefehle für den Sony HW55, die ich bisher nutze:

Power On: A9 17 2E 00 00 00 3F 9A (Besonderheit: Gesamter Befehl muss 2x hintereinander mit kurzer Pause dazwischen gesendet werden!)
Power Off: A9 17 2F 00 00 00 3F 9A

Lamp Low: A9 00 1A 00 00 00 1A 9A
Lamp High: A9 00 1A 00 00 01 1B 9A

Motion Enhancer
Off A9 00 59 00 00 00 59 9A
Low A9 00 59 00 00 01 59 9A
High A9 00 59 00 00 02 5B 9A

Anhand dieser Beispiele und der pdf-Dokumentation sollte eigentlich jeder “reverse-engineeren” können, wie sich die Codes zusammensetzen. Ich möchte an dieser Stelle nicht näher darauf eingehen, schon alleine um keine schlechte Laune zu bekommen.

Achso und man benötigt natürlich noch Angaben zur Baudrate (hier 38400), den Datenbits (hier 8), der Parität (hier E für Even) und den Stopbits (hier 1). Diese Infos findet man gewöhnlich auch in der Dokumentation, in diesem Fall unter dem Punkt “3.2 – Communication Specifications”.

Projektor per RS232-USB-Adapter am RPI anschließen

Einige neuere Beamer haben mittlerweile bereits Netzwerkanschluss und können per HTTP-Befehlen direkt angesteuert werden. In meinem Fall muss der Sony VPL-HW55ES aber eben noch “oldschool” per RS232-Schnittstelle angesprochen werden, was aus technischer Sicht aber kein Nachteil ist. Im Gegenteil – denn Beamer, die im ausgeschalteten Zustand auf Netzwerkbefehle lauschen, haben gewöhnlich einen höheren Standbyverbrauch.

Damit das mit dem Anschließen funktioniert, habe ich das StarTech.com 1m USB Nullmodem RS232 Adapter Kabel (Affiliate-Link) aus dem Schrank geholt. Damit der Adapter passt, habe ich mir noch das DeLock Seriell Kabel (1m) (Affiliate-Link) besorgen müssen, da der Beamer eine RS232-Buchse (mit Pins nach innen) besitzt und das Adapterkabel eben auch. Es gibt aber vermutlich auch Adapter, die direkt ohne zusätzliches Kabel passen, da sie direkt einen 9-pligen D-Sub-Stecker (und eben keine Buchse) für den RS232-Anschluss mitbringen.

Die andere Seite des Adapters mit dem USB-Anschluss wird dann einfach an einen Raspberry Pi angeschlossen. In meinem Fall mussten noch knapp 15 Meter vom Beamer bis zum Netzwerkwerkschrank (hier ist der Raspberry Pi 3 untergebracht) überbrückt werden, wobei hierfür bereits im Vorfeld ein Duplex-Netzwerkkabel verlegt wurde. Also musste mit dem  LogiLink Verlängerungskabel USB über CAT5/6 bis 60 Meter (Affiliate-Link) wiederum der passende Adapter her, um das USB-Signal über die Distanz zu übertragen. Man hätte evtl. auch einfach die RS232-Verbindung verlängern können, ab einer Leitungslänge von 15 Metern ist das bei RS232 aber anscheinend aufgrund etwaiger Signallaufzeitprobleme kritisch. USB hat hier wohl mehr Luft nach oben, zumindest langsames USB 1.1, welches für den Anwendungszweck vom Adapter genutzt wird.

Per FHEM serielle Schaltbefehle senden

Nachdem die hardwareseitige Verbindung steht, geht es an das Senden der passenden Schaltbefehle. Da ich keine fertigen Module für die Integration von Sony-Projektoren finden konnte, musste kurzerhand auf eine “universelle” Lösung aus dem FHEM-Forum zurückgegriffen werden, welches im Thread Raspberry PI und RS232 Modul für Beamer Steuerung zu finden war. Das zum Download bereitgestellte Programm 99_serial.pm (Direktdownload) macht dabei genau das, was ich benötige. Es sendet “dumm” die gewünschten seriellen Befehle über den angeschlossenen USB-Adapter. Die Datei muss dabei in das Verzeichnis /opt/fhem/FHEM/ geladen werden.

Hier schon das von mir für die Ansteuerung des Sony HW55-Projektors angepasste Programm mit Direktdownload in das passende Verzeichnis auf dem RPI mit Raspbian:

wget -P /opt/fhem/FHEM/ www.meintechblog.de/download/99_serial.pm

Angepasst werden musste dabei lediglich der Paritäts-Wert von “none” zu “even”, welcher die seriellen Schnittstellenspezifikationen festlegt:

Die Zeile
$serport->parity(‘none’);
wurde dabei geändert in
$serport->parity(‘even’);

Die anderen Werte wie Parität etc. waren bereits korrekt.

Wer noch Werte anpassen muss, eben per nano editieren:

sudo nano /opt/fhem/FHEM/99_serial.pm

Änderungen per STRG + o und nachfolgendem Enter speichern und den nano-Editor per STRG + x schließen.

Damit FHEM die neu eingeschleuste Datei berücksichtigt, wird in der FHEM-Kommandozeile der Befehl

reload 99_serial.pm

abgesetzt.

Um den Sony Projektor in den Standby-Modus (Power Off) zu schicken, lässt sich jetzt direkt mal der FHEM-Konsolenbefehl

{serial_comm(38400,"/dev/ttyUSB0","\xA9\x17\x2F\x00\x00\x00\x3F\x9A")}

testen.

38400 ist dabei die Baudrate, /dev/ttyUSB0 der Pfad, unter dem der RS232-USB-Adapter vom Betriebssytem erkannt wird (kann je nach System natürlich abweichen) und \xA9\x17\x2F\x00\x00\x00\x3F\x9A als eigentlicher Schaltbefehl, welcher zum oben ermittelten Befehl “A9 17 2F 00 00 00 3F 9A” syntaktisch insofern abweicht, dass jedes Leerzeichen mit einem \x getauscht werden muss, inkl. führemdem \x. Das führende \x hatte ich dabei erst vergessen, dann läuft natürlich nichts.

Projektor in FHEM abbilden und automatisieren

Zuerst habe ich einen Dummy namens WZ.Projektor erzeugt, welcher einige WebCmds erhält, über welche die danach definierten Befehle per notify aufgerufen werden können. Das ist nicht wirklich hübsch – ich weiss -, für meinen Anwendungszweck aber erstmal völlig ausreichend.

define WZ.Projektor dummy
attr WZ.Projektor room Wohnzimmer
attr WZ.Projektor webCmd on:off:LampLow:LampHigh:MotionEnhancerOff:MotionEnhancerLow:MotionEnhancerHigh

define WZProjektorOn notify WZ.Projektor.on {serial_comm(38400,"/dev/ttyUSB0","\xA9\x17\x2E\x00\x00\x00\x3F\x9A")};; sleep 1;; {serial_comm(38400,"/dev/ttyUSB0","\xA9\x17\x2E\x00\x00\x00\x3F\x9A")}

define WZProjektorOff notify WZ.Projektor.off {serial_comm(38400,"/dev/ttyUSB0","\xA9\x17\x2F\x00\x00\x00\x3F\x9A")}

define WZProjektorLampLow notify WZ.Projektor.LampLow {serial_comm(38400,"/dev/ttyUSB0","\xA9\x00\x1A\x00\x00\x00\x1A\x9A")}

define WZProjektorLampHigh notify WZ.Projektor.LampHigh {serial_comm(38400,"/dev/ttyUSB0","\xA9\x00\x1A\x00\x00\x01\x1B\x9A")}

define WZProjektorMotionEnhancerOff notify WZ.Projektor.MotionEnhancerOff {serial_comm(38400,"/dev/ttyUSB0","\xA9\x00\x59\x00\x00\x00\x59\x9A")}

define WZProjektorMotionEnhancerLow notify WZ.Projektor.MotionEnhancerLow {serial_comm(38400,"/dev/ttyUSB0","\xA9\x00\x59\x00\x00\x01\x59\x9A")}

define WZProjektorMotionEnhancerHigh notify WZ.Projektor.MotionEnhancerHigh {serial_comm(38400,"/dev/ttyUSB0","\xA9\x00\x59\x00\x00\x02\x5B\x9A")}

Als Besonderheit ist hier der Einschaltbefehl hervorzuheben, welcher zwei Mal hintereinander mit kurzer Pause (hier eine Sekunde) gesendet werden muss.

Damit lässt sich der Projektor jetzt schon mal rudimentär über das FHEM-Interface schalten.

Zwecks Automatisierung nutze ich dann noch zwei notify-Befehle, welche auf den Status meiner Harmony Elite (Affiliate-Link) reagieren und den Sony Beamer entsprechend ein- bzw. ausschalten:

define HAWZProjektorOn notify HarmonyHub.currentActivity:.starting.* set WZ.Projektor on

define HAWZProjektorOff notify HarmonyHub.currentActivity:.PowerOff set WZ.Projektor off

Und das war es auch schon, vorerst…

Aus meinem täglichen Leben

Ich kann es kaum glauben, dass ich es über eineinhalb Jahre ausgehalten habe, bis im Neubau nun endlich ein Beamer zum Einsatz kommen durfte. Ich hatte zuvor bestimmt die letzten 15 Jahre durchgehend Projektoren und war immer super begeistert vom Kinofeeling (mein erster Beamer war übrigens ein Sanyo PLV-Z1 – damals ein absoluter Meilenstein). In Kombination mit einer 92 Zoll Hochkontrastleinwand (Elite Screens Aeon – Cinegrey 3D – Edge Free) toppt der Sony HW55 (Affiliate-Link) nun aber mit Abstand alles, was meine angestrengten Augen bisher sehen durften.

Obwohl ich sonst Bildverbesserungen auf den Tod hasse (ja, ich HASSE sowas und rege mich immer sofort auf, wenn jemand bei seinem TV die Zwischenbildberechnung aktiviert hat und es zum Soap-Opera-Effekt kommt), konnte mich der Sony sofort von seiner Reality Creation (smarte Bildnachschärfung) und vorallem vom Motion Flow (Zwischenbildberechnung) im niedrigen Modus überzeugen. Meiner Meinung nach im wahrsten Sinne des Wortes “großes Kino” und augenöffnende Technologien, die beim Nachfolger Sony HW65 (Affiliate-Link) sogar noch ein wenig verbessert wurden – inkl. der neu hinzugekommenen Berechnung von Zwischenfarben, um den “Treppenstufeneffekt” (bei normaler 8 Bit-Zuspielung) zu kaschieren. Sony macht hier einen grandiosen Job, ich habe bisher wirklich noch nichts Besseres gesehen.

Und mit der nun vollzogenen Integration des Projektors in die bestehende Multimediasteuerung könnte es fast nicht mehr besser werden. Einzig wäre es jetzt noch cool einige Statuswerte des Projektors auszulesen, wie bpsw. die aktuelle Lampenlaufzeit und den Betriebszustand (Ein, Aus, Standby, etc.). Denn dann könnte ich den Projektor auch guten Gewissens komplett vom Strom trennen (jede Steckdose bei mir im Haus ist ohnehin schaltbar), ohne einen Lampentod durch Überhitzung bei versehentlicher Stromtrennung zu riskieren. Hierfür muss man über die RS232-Schnittstelle dann keine set-Befehle senden, sondern entsprechende get-Befehle, wobei die Rückgabewerte eben in FHEM als Readings angelegt werden müssen.

Aber das ist dann Ausbaustufe zwei, erstmal bin ich schon mal froh, dass das mit der seriellen Übertragung so gut geklappt hat, auch wenn es anfangs etwas holprig war. Und evtl. hat ja jemand eine fertige bzw. bessere Lösung zur seriellen Ansteuerung von Sony-Projektoren, bei der die Statuswerte direkt miteingelesen werden können. Dann immer her damit und jedem viel Spaß mit seinem eigenen Heimkino! Gerade in der dunklen Winterzeit gibt es abends doch kaum etwas Besseres, als einen Blockbuster in übertriebener Kinogröße in den eigenen vier Wänden genießen zu können…

9 Kommentare
  1. Vielleicht komplett am Thema vorbei, aber: Den PLV-Z1 hatte ich damals auch. War ein super Gerät für seine Zeit. Danach hatte ich dann allerdings keine Projektoren mehr im Einsatz.

    1. Hi Patrick,
      was wäre das Leben ohne “off topic” 😀
      Der PLV-Z1 hat damals wirklich alles weggeblasen und man dachte, dass die DVD-Auflösung mit 704×576 Bildpunkten schon meeeega scharf ist. Aus heutiger Sicht echt lustig, wobei ich von 4k nach wie vor nicht viel halte. Auflösung ist eben lange nicht alles – das sieht man besonders gut bei Digitalkameras. Aber gut, nach 3D und UHD wird jetzt ja bereits mit HDR die nächste Marketing-Kuh durchs Dorf getrieben. Und 8k steht auch schon Schlange… 😀

      Aber zurück zum Thema: Gladiator hat mich voll weggehauen, vorallem die Szene, in der Russel Crowe mit den Fingern durchs Getreidefeld streift. Hänsehautalarm!!! Glaub das muss ich mir direkt nochmal in BluRay-Quali mit der neuen Hardware ansehen…
      Warum hast du nach dem Z1 keinen Neuen geholt? Selbst die jetzigen TVs mit 70+ Zoll sind doch im Vergleich wirklich mickrig, da kommt kein Kinofeeling auf…

      Grüße
      Jörg

  2. Moin Jörg,

    ich habe den gleichen Beamer. Kann es sein, dass Du dich bei der Bemerkung für Poer on/off vertan hast? BEim Ausschalten muss man die FB zweimal betätigen, nicht beim einschalten. 😉

    Darüberhinaus bin ich lustigerweise gerade an genu derselben Problematik mit der Fernsteuerung des Beamers dran…

    Ich habe es mit einem BroadLink RM pro+ (Affiliate-Link) ca. 20€ umgesetzt. Das vielleicht nur zur Vervollständigung! 😉 Weiter so, geiler Blog!

    1. Hi Mike,
      beim Schalten per RS232 ist die Logik exakt so, wie im Blogpost beschrieben: 2x der Ein-Befehl und 1x der Aus-Befehl.

      Grüße und viel Erfolg bei der Umsetzung!
      Jörg

      PS: Beim BroadLink nutzt du Infrarotbefehle, oder?

    2. Ji Jörg,
      okay, das klingt zwar merkwürdig, ist aber wohl so. 😉

      Der Broadlink macht IR & Funk (433MHz). Für den Beamer nutze ich IR. Funktioniert einwandfrei.

      Gruss
      Mike

  3. Hallo Jörg,
    ich habe einen Vivitec H1189 Beamer und möchte ihn über einen Zeropi mit FHEM steuern. Die Installation der Software habe ich auch soweit hinbekommen. doch wenn ich den Einzeiler aus deinem Blog eingebe mit den Hex angaben für meinen Beamer passiert nichts. Ich bekomme im Logfile von FHEM folgende Fehlermeldung:

    2019.09.06 23:05:47 1: PERL WARNING: Illegal hexadecimal digit ‘\’ ignored at (eval 33) line 1.
    2019.09.06 23:05:47 3: eval: {serial_comm(9600,”/dev/ttyUSB0″, “\x00\x56\x9\x9\x53\x30\x30\x30\x31\x0D”)}

    Ich weiß nicht was ich falsch mache und ob die Hex angaben so richtig sind.
    kannst du mir vielleicht helfen?

    Ich würde dir die Seite aus dem Handbuch gerne zukommen lassen doch geht das hier leider nicht.

    Danke!

  4. Hallo,
    ich bin über deinen Beitrag gestolpert, da ich eine Alternative mit Raspi zum Steuern meiner Heimkinogeräte suchte, da mein Global Cache GC-100-12 kaputt gegangen ist.Leider bin ich kein Fan von FHEM weshalb diese Lösung doch ausfiel und ich mir doch wieder einen GC-100-12 gebraucht für 120€ gekauft habe.
    Dieser kann genau das was du damals suchtest.

    Evtl. ist dieser auch für andere Interessant die hier über deinen Blog stolpern.
    In ebay Kleinanzeigen findet man sie man ab und zu, sowie die kleineren iTach Geräte.

    Weiterhin viel Spaß beim Filme schauen
    Tobias

    1. Hi Tobias,
      danke für deinen Hardwaretipp! Habe es übrigens zwischenzeitlich über NodeRED mit entsprechenden RS232-Befehlen umgesetzt – funktioniert damit also auch ohne FHEM. 🙂

      Viele Grüße
      Jörg

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Das könnte dir auch gefallen