GNU/Linux >> Tutoriales Linux >  >> Debian

Raspberry Pi:encender y apagar un televisor conectado a través de HDMI-CEC

Con la ayuda de cec-client (parte de libcec), su Raspberry Pi puede controlar un dispositivo compatible con CEC, como B. un televisor conectado a través de HDMI. Puede encender o apagar el televisor, cambiar la fuente activa y mucho más.

Esto debería funcionar con cualquier versión o modelo de Raspberry Pi, incluido el Raspberry Pi original y el último Raspberry Pi 4.

Un posible caso de uso para esto sería conectarse a un Raspberry Pi a través de SSH y enviar un comando para encender o apagar un televisor conectado a él a través de HDMI-CEC. O puede usar los comandos para encender el televisor y hacer que el adaptador CEC sea la fuente activa en una fuente Raspberry Pi HDMI. Estoy seguro de que puedes pensar en varios otros casos de uso.

CHECK, o Consumer Electronics Control, es una función HDMI que permite controlar con un mando a distancia los dispositivos conectados a través de HDMI. Por ejemplo, CEC se usa para usar los botones de reproducción/pausa en un control remoto para controlar la reproducción en un dispositivo conectado a través de HDMI. O cuando reproduce un video en un Chromecast mientras el televisor está apagado y el televisor se enciende automáticamente y cambia a la fuente de Chromecast.

La mayoría de los televisores y receptores AV modernos deben ser compatibles con HDMI-CEC. Tenga en cuenta, sin embargo, que algunos modelos pueden requerir que habilite CEC en la configuración del televisor. CEC puede tener un nombre diferente según la marca del dispositivo. Por ejemplo, se llama Anynet+ para televisores Samsung, EasyLink o Fun-Link para Philips, SimpLink para LG, etc.

Para poder encender (y apagar) un televisor que está conectado a una Raspberry Pi a través de HDMI, el primer paso es instalar cec-client. En Raspbian o cualquier otra distribución de Linux basada en Debian o Ubuntu para Raspberry Pi, instale ese cec-utils paquete (cec-client es parte de este paquete):

sudo apt install cec-utils

En otras distribuciones de Linux, deberá buscar cec-client o cec-utils en los repositorios o compilar libcec desde la fuente.

Bueno, eso cec-utils instalado, vamos a Escanear el bus CEC en busca de dispositivos disponibles:

echo 'scan' | cec-client -s -d 1

En este comando echo 'scan' envía el comando de escaneo a cec-client, -s se usa para que cec-client ejecute un solo comando y exista, y -d 1 establece el nivel de registro en 1 (solo error) para que su terminal no se contamine con información inútil.

Tome nota del número de dispositivo y la dirección del televisor (o cualquier otro dispositivo conectado a su Raspberry Pi a través de HDMI-CEC), ya que lo usaremos más adelante.

Este es un ejemplo ejecutando este comando en mi Raspberry Pi conectado a un televisor Samsung a través de HDMI (con compatibilidad con CEC):

$ echo 'scan' | cec-client -s -d 1
opening a connection to the CEC adapter...
requesting CEC bus information ...
CEC bus information
===================
device #0: TV
address:       0.0.0.0
active source: no
vendor:        Samsung
osd string:    TV
CEC version:   1.4
power status:  on
language:      eng
device #1: Recorder 1
address:       1.0.0.0
active source: no
vendor:        Pulse Eight
osd string:    CECTester
CEC version:   1.4
power status:  on
language:      eng
currently active source: unknown (-1)


En este ejemplo, número de dispositivo 0 con el 0.0.0.0 La dirección es mi televisor Samsung y el número de dispositivo 1 con el 1.0.0.0 La dirección es mi dispositivo Raspberry Pi.

Ahora que conocemos el número y la dirección del dispositivo, puede Usar el siguiente comando para encender un televisor conectado a Raspberry Pi a través de HDMI-CEC:

echo 'on <DEVICE #>' | cec-client -s -d 1

O:

echo 'on <DEVICE ADDRESS>' | cec-client -s -d 1

Tanto el número de dispositivo (0 es el televisor Samsung en el ejemplo anterior) y la dirección del dispositivo (0.0.0.0 es la dirección del dispositivo Samsung TV de mi ejemplo) debería funcionar.

-d 1 es mantener el nivel de registro solo en errores, y puede usar el comando sin él, pero verá un registro largo, probablemente inútil.

Ejemplo:

echo 'on 0' | cec-client -s -d 1

O:

echo 'on 0.0.0.0' | cec-client -s -d 1

Tú también quieres eso as Comando que convierte al adaptador CEC en la fuente activa (Entonces, el televisor cambia a la fuente Raspberry Pi HDMI después de encender el televisor):

echo 'as' | cec-client -s -d 1

¿Le gustaría apagar el televisor (cambiar al modo de espera)? Usar:

echo 'standby <DEVICE #>' | cec-client -s -d 1

Dependiendo de cómo use esto, es posible que también deba verificar el estado actual del televisor (¿está encendido o en espera?). Esto es posible con:

echo 'pow <DEVICE #>' | cec-client -s -d 1

Para ver todos los comandos que cec-client puede enviar a un dispositivo conectado a través de HDMI-CEC, use echo h | cec-client -s -d 1 :

Available commands:
[tx] {bytes}              transfer bytes over the CEC line.
[txn] {bytes}             transfer bytes but don't wait for transmission ACK.
[on] {address}            power on the device with the given logical address.
[standby] {address}       put the device with the given address in standby mode.
[la] {logical address}    change the logical address of the CEC adapter.
[p] {device} {port}       change the HDMI port number of the CEC adapter.
[pa] {physical address}   change the physical address of the CEC adapter.
[as]                      make the CEC adapter the active source.
[is]                      mark the CEC adapter as inactive source.
[osd] {addr} {string}     set OSD message on the specified device.
[ver] {addr}              get the CEC version of the specified device.
[ven] {addr}              get the vendor ID of the specified device.
[lang] {addr}             get the menu language of the specified device.
[pow] {addr}              get the power status of the specified device.
[name] {addr}             get the OSD name of the specified device.
[poll] {addr}             poll the specified device.
[lad]                     lists active devices on the bus
[ad] {addr}               checks whether the specified device is active.
[at] {type}               checks whether the specified device type is active.
[sp] {addr}               makes the specified physical address active.
[spl] {addr}              makes the specified logical address active.
[volup]                   send a volume up command to the amp if present
[voldown]                 send a volume down command to the amp if present
[mute]                    send a mute/unmute command to the amp if present
[self]                    show the list of addresses controlled by libCEC
[scan]                    scan the CEC bus and display device info
[mon] {1|0}               enable or disable CEC bus monitoring.
[log] {1 - 31}            change the log level. see cectypes.h for values.
[ping]                    send a ping command to the CEC adapter.
[bl]                      to let the adapter enter the bootloader, to upgrade
the flash rom.
[r]                       reconnect to the CEC adapter.
[h] or [help]             show this help.
[q] or [quit]             to quit the CEC test client and switch off all
connected CEC devices.


Debian
  1. Cómo cambiar permisos y propietarios a través de la línea de comandos

  2. Firewall Raspberry Pi:cómo instalarlo y administrarlo mediante UFW

  3. Lanzamiento de LibreOffice 7.0:instálelo a través de PPA en Ubuntu y Mint

  4. Frambuesa Pi 4 y Kali

  5. Linux USB:¿encender y apagar la alimentación?

Cómo hacer una copia de seguridad y restaurar la tarjeta SD para Raspberry Pi

Cómo instalar y ejecutar Opera Browser a través de Snap en Ubuntu

RPI4, Raspberry Pi OS y escritorio MATE - Ajustes esenciales

Protección de SmarterMail a través de TLS (15.5 y superior)

Cómo exportar e importar una base de datos a través de phpMyAdmin

¿Cómo instalar GDAL y QGIS en una Raspberry Pi?