lunes, 23 de febrero de 2015

Controlar TV conectado por HDMI CEC

El tema a tratar es cómo controlar el TV conectado por HDMI, desde una Raspberry Pi.

Muchos de los televisores actuales, utilizan el protocolo CEC para comunicarse con otros dispositivos vía HDMI.

HDMI Consumer Electronics Control
Consiste en controlar diferentes dispositivos con el mismo mando del TV, conectados por HDMI.

Las marcas de TV tienen un nombre diferente para referirse al "HDMI CEC":

- Anynet : Samsung
- Aquos Link : Sharp
- Bravia Sync o Bravia Link : Sony
- Kuro Link : Pioneer
- CE-Link o Regza Link : Toshiba
- RIHD : Onkyo
- Simplink : LG
- HDAVI, EZ-Sync, Viera Link : Panasonic
- EasyLink : Philips
- NetCommand : Mitsubishi

El “HDMI CEC” está presente desde la versión 1.0 del HDMI, aunque sólo se está utilizando a partir de la 1.3.

El control del “HDMI CEC” es bidireccional, por lo que se supone que desde otro dispositivo se puede ‘controlar’ la TV.

Depende de lo que haya implementado cada marca, el “control” permitirá hacer unas cosas u otras.

Lo primero que hay que hacer es activar el “HDMI CEC” en el televisor. Cada marca tiene su forma de hacerlo, consultad el manual de vuestro televisor.

Por ejemplo, para un televisor LG:


Existen unas librerías para el control "HDMI CEC". Se trata de "libCEC" y se instalan en la Raspberry Pi.

Librerías libCEC

Para descargar e instalar las librerías "libCEC" en la Raspberry, ejecutar la siguiente secuencia de comandos:

$ sudo apt-get -y install udev libudev-dev autoconf automake libtool gcc liblockdev1 pkg-config liblockdev1-dev
$ git clone https://github.com/Pulse-Eight/libcec
$ cd libcec
$ ./bootstrap
$ ./configure --with-rpi-include-path=/opt/vc/include --with-rpi-lib-path=/opt/vc/lib --enable-rpi
$ make
$ sudo make install
$ sudo ldconfig

Comandos a enviar al TV
Chequear que el cliente encuentra el dispositivo:

$ cec-client –l
Found devices: 1
device: 1
com port: RPI
vendor id: 2708
product id: 1001
firmware version: 1
type: Raspberry Pi
Comando para encender el TV desde la Raspberry Pi, por HDMI:
$ echo “on 0” | cec-client –s
Comando para apagar el TV desde la Raspberry Pi, por HDMI:
$ echo “standby 0” | cec-client –s 
Algunos scripts

/home/pi/bin/tv-on
#!/bin/bash
# Encender TV
echo “on 0” | cec-client –d 1 –s 
/home/pi/bin/tv-off
#!/bin/bash
# Apagar TV
echo “standy 0” | cec-client –d 1 –s
Dispositivos compatibles
Según PULSE-EIGHT, desarrollador de la librería, lo que algunas marcas implementan en sus dispositivos: (pulsa sobre la imagen para ir a la página original, por si se ha actualizado)



Hay que resaltar que para los televisores LG, el ‘Standby’ o apagado, no está soportado. Yo lo he probado con mis dos televisores LG y es cierto, cuando lanzo el script de apagado no funciona, el de encendido sí funciona.

Gracias al “HDMI CEC” se puede utilizar el mando del televisor para manejar el XBMC/Kodi de una Raspberry Pi conectada por HDMI. La versión de XBMC debe ser superior a la v11.

Enlaces de interés
High-Definition Multimedia Interface.
Pulse-Eight libcec.
LG: Simplink.
SAMSUNG: HDMI Anynet+.
SONY: ‘Bravia Sync’ con ‘Control por HDMI’.



No hay comentarios: