openHAB :: Einbinden von LG-Fernsehern [Update]

32Kürzlich stellte ich in einem Artikel die Möglichkeit vor, einen LG-Smart-TV mit einer Linux-Kommandozeile zu steuern. Bisher war es notwendig, das lgcommander-Script auch für die Einbindung in openHAB zu nutzen, mittlerweile gibt es für diesen Zweck jedoch ein eigenständiges Binding.

 

Verfügbare Artikel zu openHAB

little_blue_dot Einleitunglittle_blue_dot Einbinden der Internetgeschwindigkeitlittle_blue_dot RFID-Lesegerät einbinden
little_blue_dot Installationlittle_blue_dot Präsenzerkennung via Bluetooth und Pinglittle_blue_dot Einbinden von DS18B20-Sensoren
little_blue_dot Konfigurationlittle_blue_dot Kleines Netzwerkmonitoringlittle_blue_dot ical-Abfallkalender einbinden
little_blue_dot Reverse-Proxy für OpenHABlittle_blue_dot Einbinden von LG-Fernsehern [Update]little_blue_dot openHAB als Wecker
little_blue_dot Datenspeicherung und Statistikenlittle_blue_dot Einbinden Schaltern und Kontaktenlittle_blue_dot Einbinden von Bewegungssensoren
little_blue_dot Regeln planen und konfigurierenlittle_blue_dot Einbinden von Funksteckdosen (433 MHz)little_blue_dot Einbinden einer FritzBox
little_blue_dot Einbinden von USB-Steckdosenleisten (SIS-PMS)little_blue_dot Infrarotgesteuerte Geräte einbindenlittle_blue_dot Sprachausgabe auf einem Raspberry
little_blue_dot Einbinden von Temperatursensorenlittle_blue_dot Steuerung mit NFC-Tagslittle_blue_dot Schaltbare Steckdosenleiste mit Relais
little_blue_dot Externer Zugriff mit my.openhab

 

 

Binding(s) installieren

Wir installieren das benötigte OpenHAB-Addon einfach mittels apt-Paketverwaltung:

apt-get install openhab-addon-binding-lgtv

 

Für die Prüfung, ob der Fernseher eingeschaltet ist oder nicht, nutze ich nicht das lg-Binding sondern das eigene Script “/scripts/ping.sh“. Die prüft mittels ping, ob die Netzwerkadresse des Fernsehers erreichbar ist. Das Script wird in diesem Beitrag genauer beschrieben.

 

openHAB-Konfiguration

DIe grundlegende Konfiguration findet in der Datei “/etc/openhab/configuration/openhab.cfg” statt. Dort geben wir die IP-Adresse, den Port 8080, den Pairingkey sowie den Serverport von openHAB an. Der Pairingkey wurde uns bereits in den letzten Anleitungen auf dem Fernseher angezeigt und ändert sich hierfür nicht. Wenn noch kein Pairing-Vorgang stattgefunden hat, wird der Key automatisch bei der ersten Anfrage von openHAB am Fernseher angezeigt.

################################## LgTV Binding ######################################
lgtv:tvc65.host=192.168.1.65
lgtv:tvc65.port=8080
lgtv:tvc65.pairkey=772855
lgtv:tvc65.serverport=80

 

P1070524

 

 

Item-Konfiguration

Die von mir umgesetzte Konfiguration der items wurde in einer seperaten lgtv.items Datei definiert und beinhaltet folgende Zeilen:

Switch TVC65_POWEROFF "TV ausschalten" <socket>  { lgtv="ON:tvc65:POWER" }
Switch TVC65_POWER "TV Betrieb" <socket> { exec="<[/scripts/ping.sh 192.168.1.65:60000:REGEX((.*?))]" }
Number TVC65_CHANNEL "Kanalauswahl [Kanal %.0f]" <channel> { lgtv="INIT:tvc65:CHANNEL_CURRENTNUMBER, ON:tvc65:CHANNEL_UP, OFF:tvc65:CHANNEL_DOWN, *:tvc65:CHANNEL_SET" }
Number TVC65_VOLUME "Lautstärke [Stufe %.0f]" <volume> { lgtv="INIT:tvc65:VOLUME_CURRENT, ON:tvc65:VOLUME_UP, OFF:tvc65:VOLUME_DOWN, *:tvc65:VOLUME_SET" }
Switch TVC65_TON "Stumm schalten" <speaker> { lgtv="ON:tvc65:KEY_MUTE, OFF:tvc65:KEY_MUTE" }
Switch TVC65_PAUSE "Pausieren" <playpause> { lgtv="ON:tvc65:KEY_PAUSE, OFF:tvc65:KEY_PLAY" }
String TVC65_KANAL "Sender: [%s]" <channel> { lgtv="INIT:tvc65:CHANNEL_CURRENTNAME" }
String TVC65_GetChan "getchannels [%s]" {lgtv="INIT:tvc65:GET_CHANNELS, ON:tvc65:GET_CHANNELS"}

 

Die Funktion “POWER” des lg-Bindings bietet uns lediglich die Möglichkeit, die Power-Taste der Fernbedienung zu drücken, kann jedoch leider nicht erkennen, ob der Fernseher läuft oder nicht. Daher habe ich die vom Entwickler vorgestellte Demo-Konfiguration durch einen Ping-Check erweitert. Leider fahren LG-Fernseher beim Ausschalten auch die Netzwerkschnittstelle herunter, so dass wir diese nicht per lg-Binding einschalten können. Dies wäre höchstens über einen Befehl via Infrarot machbar, wie in diesem Beitrag beschrieben. Die Itemdefinition des Kanals habe ich durch die Anzeige der Kanalnummer ergänzt, ebenso wurde die Anzeige der Lautstärke durch den entsprechenden Wert ergänzt. Das item “TVC65_GetChan” enthält die Anzahl der auf dem Fernseher verfügbaren Sender, das Item “TVC65_KANAL” den Namen des aktuell betrachteten Senders.

 

Sitemap-Konfiguration

In der Sitemap habe ich die Einbindung des Fernsehers so gestaltet, dass auf einer Übersichtsseite zunächst der Fernseher als einzelne Zeile mit dem aktuellen Betriebsstatus angezeigt wird.

lg2

 

Bei einem Klick auf diese Zeile öffnet sich die Unterseite mit den detaillierten Steuerungselementen des Fernsehers.

Text item=TVC65_POWER label="Fernseher (tvc65) [MAP(lgtv.map):%s]" {
    Text item=TVC65_POWER label="Fernseher (tvc65) [MAP(lgtv.map):%s]"
    Switch item=TVC65_POWEROFF mappings=[ON="Ausschalten"]
    Setpoint item=TVC65_CHANNEL minValue=0 maxValue=48 step=1.0
    Setpoint item=TVC65_VOLUME minValue=0 maxValue=20 step=1.0
    Slider item=TVC65_VOLUME
    Switch item=TVC65_TON mappings=[ON="Ton Aus", OFF="Ton an"]
    Text item=TVC65_KANAL
    Selection item=TVC65_CHANNEL mappings=[1="ARD",2="ZDF",3="WDR",4="RTL",5="RTL II",6="Super RTL",7="Pro 7"]
} //TV65 Ende

 

 


lg1

Die Angabe der Werte “eingeschaltet” oder “ausgeschaltet” wird durch die transform-Map realisiert, wie es im nächsten Punkt beschrieben wird. Das item “TVC65_POWER” stammt wie bereits beschrieben aus dem Ping-Script, der Button “TVC65_POWEROFF” schaltet den Fernseher aus, jedoch nicht wieder ein. Das Icon “socket” ist bereits im Lieferumfang von openHAB enthalten, und erscheint bei einem eingeschalteten Switch farbig (Status: ON) und bei einem deaktivierten Switch grau (Status: OFF). Den Maximalwert beim Setpoin-Item Channel habe ich auf 48 gesetzt, da dies die Anzahl der verfügbaren Kanäle auf meinem Fernseher darstellt. Die Lautstärke habe ich auf Stufe 20 begrenzt. Bei der Lautstärke habe ich testweise beide Varianten der Steuerung eingebunden, als Setpoint-Item und als Slider-Item. Die Wahl des Steuerungstyps ist hier reine Geschmackssache.

 

Transform-Konfiguration

Unser Ping-Script liefert uns als Betriebszustände für das Item TVC65_POWER lediglich die Werte “ON” oder “OFF“, je nachdem, ob unser Fernseher per PING erreichbar ist oder nicht. Um diese Werte auf der Sitemap in eine uns verständliche Form zu bringen, erstellen wir beispielsweise die Datei “lgtv.map” im Ordner “transform” und “übersetzen” die Stati in die in der Sitemap auszugebenen Werte:

undefined=unbekannt
-=unbekannt
ON=eingeschaltet
OFF=ausgeschaltet

 

Beispielregel

Gelegentlich kam es bei unserem Fernseher vor, dass sich dieser wie aus Geisterhand selbstständig einschaltete. Wahrscheinlich war dieser nur auf der Suche nach Aktualisierungen beim Hersteller, doch auch nur mittellaute Filmexplosionen oder menschliche Stimmen aus dem Wohnzimmer mitten in der Nacht lassen einen senkrecht im Bett stehen.

Um zumindest zu verhindern, dass der Fernseher stundenlang läuft, wenn niemand zuhause ist, machen wir uns unsere bereits vorgestellte Präsenzerkennung zu nutze und lassen openHAB den Fernseher bei Abwesenheit aller Bewohner wieder ausschalten:

rule "Fernseher WZ geht an"
    when
        Item TVC65_POWER changed to ON
    then
        if(PRAESENZ.state == OFF) {
            createTimer(now.plusMinutes(1)) [| sendCommand(TVC65_POWEROFF, ON) ]
        }
end

 

Hierbei bitte nicht von dem zu sendenden “ON” Befehl an das Item “TVC65_POWEROFF” verwirren lassen. Das Item kennt gemäß unserer Item-Definition lediglich den Befehl “ON” und betätigt damit die Power-Taste am Fernseher.