BenQ Beamer via RS232, Serial-to-Ethernet converter and TCP/UDP Binding

Hi.
I finally managed to connect my BenQ W1070+ beamer via its serial RS232 interface thru a Serial to Ethernet Converter Hardware to the TCP/UDP Binding in openhab 2.5.11 and felt it might be worth sharing the solution and some experience made while setting this up:

Originally I wrote this text for my own documentation purposes so unfortunately it’s written in German language (sorry):

Übersicht
Beamer (RS-232) -> Serial to Ethernet Converter -> openHAB (TCP/UDP Binding)
Die Kommunikation zwischen openHAB und der Serial to Ethernet Converter Hardware erfolgt über das TCP/UDP Binding mittels TCP zu einen, in der Converter Hardware enthaltenen, Telnet Server (alternativ auch UDP, dies habe ich jedoch nicht getestet).

The Beamer
In diesem Beispiel verwende ich einen BenQ W1070+ Beamer.
Die Verfahrensweise lässt sich aber (vermutlich/einfach) auch auf andere Beamer übertragen.

Notwendige Anforderungen an den Beamer für das hier dargestellte Verfahren:

  • Der Beamer verfügt über eine RS232 Schnittstelle (siehe auch Anhang 1 – BenQ RS-232 Kabel/Kabelbelegung)
  • Die Kommandos für die Steuerung des Beamer sind bekannt/verfügbar (siehe Anhang 2 – BenQ Beamer Kommandos) für die BenQ-Kommandos)

Im Vorfeld sollten im Menü des Beamers die Einstellungen der seriellen Schnittstelle ermittelt werden – für den BenQ Beamer sind diese per Default auf 9600 Baud, 8 character bits, keine Parität, 1 Stop Bit und ohne hardware flow control eingestellt.

Serial to Ethernet Converter

Ich habe einen, bei AliExpress aus China bestellten, einfachen und preisgünstigen Converter verwendet.

Wichtigste/hilfreichste Features:
Hardware:

  • RS232 Schnittstelle
  • RJ45 Ethernet Schnittstelle

Software im/zum Gerät:

  • Web Oberfläche (zwar sehr einfach aber ausreichend)
  • IP-Adresse und Adressvergabeverfahren einstellbar (fixe IP oder DHCP)
  • TCP Server (Port einstellbar via WebOberfläche)
  • Dokumentation der wichtigsten Features wie Default IP-Adresse, Admin User/PW und Reset-Methode

Weitere Details inkl. technischer Daten zum verwendeten Gerät siehe Anhang 3 – Serial to Ethernet Converter Hardware!

Konfiguration der Serial to Ethernet Converter Hardware

Die Konfiguration der Converter Hardware erfolgt über den eingebauten WebServer der unter der Default IP-Adresse des Converters (hier: 192.168.2.1) zu erreichen ist.

Netzwerk-Schnittstelle
P1
Gewünschte IP-Adress Konfiguration der Converter-Hardware eintragen und Default admin Passwort (system) ändern!

TCP-Mode Konfiguration

TCP Mode: Telnet Server (diese Einstellung deaktiviert automatisch den UDP Mode)

Port Number: 2222

Remote Server IP Adresse sowie Client mode inactive timeout wird für den Betrieb als Telnet Server nicht benötigt
p2

UART Konfiguration

Die RS232 Schnittstelle des BenQ Beamers arbeitet per Default mit 9600 Baud, 8 character bits, no parity, 1 stop bit und ohne hardware flow control. Die UART Konfiguration im Converter wird entsprechend eingestellt:
p3

OpenHAB Konfiguration

Raspberry Pi4 B+ (4GB)

OpenHAB 2.5.11

Binding: TCP/UDP Binding (binding-tcp1 - 1.14.0)

Konfiguration des TCP/UDP Bindings

Die Konfiguration erfolgt nicht über „Things“ (ich nehme an, weil das Binding sehr alt ist) sondern über eine gesonderte Datei Namens tcp.cfg welche durch die Installation des TCP/UDP Bindings im Verzeichnis /etc/openhab2/services angelegt wird.

Es werden nur folgende Parameter in der Konfigurationsdatei verwendet:

tcp.cfg:

# Pre-amble that will be put in front of data being sent

preamble=\r

# Post-amble that will be appended to data being sent

postamble=\r

# Update the status of Items using the response received from the remote end (if the

# remote end sends replies to commands)

updatewithresponse=true

# Used character set

charset=ASCII

Die wichtigsten Parameter

preamble und postamble

Da die BenQ Kommandos (siehe Anhang) jeweils mit einem Carriage Return (in der Kommando-Doku im Anhang mit dargestellt) eingeleitet und beendet werden müssen wird der Wert für Carriage Return (in openHAB = \r) als preamble und postamble konfiguriert, dies führt dazu, dass jeder „Nachricht“ an den Beamer jeweils ein Carriage Return vorangestellt (preamble) – und damit die Kommandoeingabe ermöglicht) – und hintenangestellt (postamble) – und damit die Kommandoeingabe abgeschlossen) wird.

updatewithresponse

Um die Antwort auf ein, an den Beamer gesendetes Kommando zurück zu erhalten wird der parameter updatewithresponse auf true gesetzt (evtl. geht das jedoch auch ohne die Verwendung dieses Parameters).

Items

Für die Interaktion mit dem Beamer werden nun exemplarisch folgende Items mit der jeweils beschriebenen Aktion angelegt:

Item Name Item Typ Beschreibung
ProjektorTCP String Dies ist praktisch der Kommunikationskanal zum bzw. vom Beamer. Der, diesem Item zugewiesene Text (bspw. über eine openHAB rule, oder ein HABpanel Buttom) wird an den Beamer weitergeleitet (Carriage Return wird mittels preamble und postamble jeweils automatisch voran- und hintenangestellt). Sendet der Beamer eine Antwort so wird diese in diesem Item „empfangen“
ProjektorAnAus Switch Item zu ein und ausschalten des Beamers. Das Schalten erfolgt nicht direkt sondern über die Auswertung des ProjektorAnAus Items innerhalb einer openHAB rule welche in Abhängigkeit des Schaltzustand dieses Items ein entsprechendes Kommando in das Item ProjektorTCP schreibt.

projektor.items

//Projektor:
String ProjektorTCP   "Projektor TCP-Verbindung"  { tcp=">[10.0.0.55:2222:'REGEX((.*))']" }
Switch ProjektorAnAus "Projektor an/aus"

Das Item ProjektorTCP enthält die Bindung an den TCP Channel des TCP/UDP Bindings.
Die Parameter enthalten die IP-Adresse des Telnet Servers der Serial to Ethernet Converter Hardware (hier: 10.0.0.55), den dort definierten Port (hier: 2222) sowie einen sog. „regulären Ausdruck“ für die Transformation des aus- und eingehenden Kommandos (hier: REGEX((.*)) - diesen habe ich im Internet recherchiert, selbst aber nie vollständig verstanden)

openHAB rules

Die hier, exemplarisch erläuterten Regeln sind (in diesem Beispiel) in folgender Datei gespeichert:
Kino.rules

Projektorschaltzustand abfragen

Um bspw. beim (Neu-) Start des openHAB Systems den Schaltzustand des Beamers abzufragen dient folgende openHAB rule. Die Regel fragt beim Start des System den Einschalt-Zustand des Beamers mit dem Kommando *pow=?# ab, interpretiert die Antwort vom Beamer und setzt den Zustand des Items ProjektorAnAus entsprechend. Sollte vom Beamer die Antwort *Block item# kommen (bspw. weil dieser sich gerade in einem Schaltzustand befindet) wird für in 30 Sekunden eine erneute Abfrage eingeplant.

//////////////////////////////////////////////////////////////////////////////
// Schalter/Variablen beim Start setzen:
rule SetzeUnbekannteSchalterstellungen
when
    System started 
then 
    if (ProjektorAnAus.state            == NULL)
    {
        ProjektorTCP.sendCommand("*pow=?#")
        Thread::sleep(750) 
        if (ProjektorTCP.state.toString.contains("*POW=ON#") )      
          { ProjektorAnAus.sendCommand(ON) }
        if (ProjektorTCP.state.toString.contains("*POW=OFF#") )     
          { ProjektorAnAus.sendCommand(OFF) }
        if (ProjektorTCP.state.toString.contains("*Block item#") )  
        { 
            if (ProjektorTimer !== null)
            {   
                ProjektorTimer.cancel
                ProjektorTimer = null 
            }
            ProjektorTimer = createTimer(now.plusMinutes(2))
            [ | if (ProjektorAnAus.state == NULL)
                {
                    ProjektorTCP.sendCommand("*pow=?#")
                    Thread::sleep(750) 
                    if (ProjektorTCP.state.toString.contains("*POW=ON#") )      { ProjektorAnAus.sendCommand(ON) }
                    if (ProjektorTCP.state.toString.contains("*POW=OFF#") )     { ProjektorAnAus.sendCommand(OFF) }
                }
                ProjektorTimer = null
            ]               
        }
    }
end 

Projektor ein- bzw. ausschalten

Zum Ein- bzw. Ausschalten des Beamers über einen Switch dient exemplarisch folgende einfache openHAB rule.
Die Regel sendet das Ein- bzw. Ausschaltkommando (*pow=on# bzw. *pow=off#) in Abhängigkeit der Veränderung des Schaltzustands des Switch Items „ProjektorAnAus“ an den Beamer.

////////////////////////////////////////////////////////////////////////////
//Projektor-Steuerung:
rule Projektor
when
    Item ProjektorAnAus changed from ON to OFF
    or 
    Item ProjektorAnAus changed from OFF to ON
then 
    switch ProjektorAnAus.state
    {
        case ON:
        {
            ProjektorTCP.sendCommand("*pow=on#")
        }
        case OFF:
        {
            ProjektorTCP.sendCommand("*pow=off#")
        }
    }
end 

Bei erfolgreichem Schalten sendet/antwortet der Beamer als Bestätigung, folgender String befindet sich in diesem Fall nach dem Schalten im Item ProjektorTCP:

*pow=on# *POW=ON#
bzw.
*pow=off# *POW=OFF#

Info: zwischen den Texten >*pow=off# und *POW=OFF# befindet sich ein Carriage Return (\r bzw. )!

Achtung: Der Ein- und Ausschaltvorgang des BenQ Beamers nimmt einige Zeit in Anspruch, in dieser Zeit kann kein weiteres Ein- bzw. Ausschaltkommando vom Beamer verarbeitet werden, der Beamer antwortet in dieser Zeit auf einen (zu früh) wiederholten Ein- bzw. Ausschaltversuch mit

*pow=off# *Block item#

Hilfreiche Tools für die Installation

Für die Verprobung der Kommunikation mit dem Beamer über den Serial to Ethernet Converter habe ich (vor der Verwendung des TCP/UDP-Bindings) einige Tools auf meinem Windows PC (Windows 10) verwendet um die korrekte Funktion der involvierten Geräte zu prüfen (und um zu lernen was funktioniert und welche Einschränkungen bestehen):

Windows Software

Eltima „Serial to Ethernet Connector“

Kostenlose 14 Tage Testlizenz
Das Tool simuliert eine Serielle PC-Schnittstelle (bspw. COM11) und verbindet sich mit der Serial to Ethernet Converter Hardware.
Bei der oben dargestellten Konfiguration des Serial to Ethernet Converters stellt die Software mit folgenden Einstellungen eine Verbindung zum Converter her:
p4

Darstellung bei aktiver Verbindung:

p5

Tera Term

Terminal Programm zum Senden/Empfangen von Daten über eine Serielle PC-Schnittstelle (bspw. COM11)

Bei laufender Verbindung der Software „Serial to Ethernet Connector“ über COM11 lässt sich mit TeraTerm wie folgt eine Verbindung zum Beamer herstellen:

p6

Die Verbindung zum Beamer ist erfolgreich wenn nach Eingabe von „Enter“ der Eingabeprompt > vom Beamer erscheint.

p7

Die Eingabe des Kommandos *pow=?# mit abschließender Betätigung der Enter Taste zur Abfrage des Schaltzustands sollte beispielsweise eine der drei folgenden Antworten zeigen:

p8

Erscheint nach Eingabe des Kommandos *pow=?# und anschließender Betätigung der Enter Taste einer der drei oben abgebildeten Antworten so besteht eine funktionierende Verbindung zum Beamer, kommt keine Antwort so besteht keine korrekte Verbindung zum Beamer (=> Einstellung im Konverter UI prüfen (RS232 Einstellungen wie Baud-Rate gemäß Beamer Einstellungen?), Einstellung im Serial to Ethernet Converter Software prüfen (Connection connected? Einstellungen gemäß Converter-Hardware?).

Putty

Will man die grundsätzliche Verbindung zum Telnet Server in der Serial to Ethernet Converter Hardware direkt per Telnet testen so bietet sich u.A. das Tool Putty an.
Vor der Verwendung von putty sollte unbedingt eine evtl. bestehende Verbindung in der Eltima Serial-to-Ethernet Software beendet/pausiert werden!

Die Verbindung mittels putty taugte (bei mir) lediglich zum rudimentären Testen der Verbindung, Kommandos ließen sich (bei mir) damit nicht korrekt übermitteln.

Mit den hier dargestellten Einstellungen kann mit Putty eine Verbindung zum Beamer hergestellt werden.
Die IP-Adresse (hier 10.0.0.55) und die Port-Nummer (hier 2222) sind ggfs. an die, in der Serial to Ethernet Converter Hardware konfigurierten Werte anzupassen
Nach dem Herstellen der Verbindung (mit Schaltfläche „Open“) kann die Kommandoeingabe mit Betätigung der Enter-Taste eingeleitet (und abgeschlossen) werden.

p10

Die Eingabe des Kommandos *pow=?# zur Abfrage des Schaltzustands liefert (bei mir) lediglich folgende Antwort. Der Versuch das Gerät bspw. mit dem Kommando *pow=on# einzuschalten liefert ebenfalls nur die Antwort *Block item#.
Auch wenn sich dar Gerät per Putty Telnet Verbindung nicht steuern lässt zeigt die Antwort *Block item# vom Beamer jedoch, dass grundsätzlich eine Verbindung bis zum Beamer besteht!

p11

Erkenntnisse/Erfahrungen

TCP/UDP-Binding Re-Installation hilft (oft)

Das openHAB TCP/UDP Binding verweigerte insbes. während der ersten Versuche zur Herstellung einer Verbindung zur Converter Hardware bzw. zum Beamer des Öfteren seinen Dienst ohne das dies offensichtlich wurde. Kommandos wurden entweder nicht zum Beamer/Converter übertragen oder Antworten vom Beamer wurden nicht empfangen.

Was hier i.d.R. half war eine Deinstallation des TCP/UDP-Bindings mit anschließender Neuinstallation – im Lauf meiner Versuche habe ich das Binding an die 20 Mal De- und Reinstalliert.
Der Grund hierfür ist mir bislang unklar, habe es mir mit dem vermutlich hohen Alter des Bindings erklärt.

Putty

Die Verwendung von Putty für die Herstellung einer Verbindung zum Beamer mittels Telnet ist nur eingeschränkt zweckdienlich da die Übermittlung von Kommandos damit nicht (oder nur unter mir unbekannten Umständen gelingt) – der Beamer antwortet (bei mir) bei einer solchen Verbindung zwar auf abgesetzte Kommandos allerdings immer nur mit dem Text *Block item#

ANHANG 1 und 2:

Hier sei aus redaktionellen Gründen auf eine URL/PDF-Download von BenQ verwiesen:
[https://business-display.benq.com/content/dam/bb/en/product/projector/corporate/lx770/quick-start-guide/lx770-rs232-control-guide-0-windows7-windows8-winxp.pdf](https://BenQ serial documentation)

ANHANG 3 – Serial to Ethernet Converter Hardware

p13

Spezifikationen

Hersteller: Die Wu

Model number: TXB038

Chipset: IP210

Ports:

  • 1 x 10/100M Auto MDI-MDIX RJ45
  • 1port RS232
    1port RS485/422

Standards:

  • IEEE 802.3
  • IEEE 802.3u
  • IEEE 802.3x
  • IEEE 802.3az

Network media:

  • 10Base-T, cat3 or above UTP,
  • 10Base-Tx, cat5 UTP

Data rate:

10/100M

Forwarding rate:

  • 10 Mbps / 14,880pps
  • 100Mbps / 148,800pps

LED Indicator:

  • Link/Act
  • Power
  • System TX/RX

Baud rate: 110bps~256000bps
Operation modes:

  • TCP Server
  • TCP Client
  • UDP

Dimension: 86 x 84 x 25mm
Power Input: DC9V-54V
Power Consumption: Max1.8W
Environment

  • Operating Temperature: -10°C – 55°C
  • Relative Humidity: 10%-90%(non-condensing)
  • Storage Temperature: -40?-85?
  • Relative Humidity: 5%-90%(non-condensing)

Other function RS485 support full duplex and half duplex
Build load default key

Device default parameters

User: admin
Password: system
Default IP address: 192.168.2.1
Operation mode: TCP server
Transmission Mode: RS232
Baud rate: 57600bps
UART parameters: 57600,8,N,1
Local port
TCP:23
UDP:21

Reset to defaults

  • Power off the device
  • hold the load default button.
  • power on the device, hold the button for 10 seconds, then release default button
2 Likes