Avec l'aide de cec-client (qui fait partie de libcec), votre Raspberry Pi peut contrôler un appareil prenant en charge CEC, tel que B. un téléviseur connecté via HDMI. Vous pouvez allumer ou éteindre le téléviseur, changer la source active et bien plus encore.
Cela devrait fonctionner avec n'importe quelle version ou modèle de Raspberry Pi, y compris le Raspberry Pi d'origine ainsi que le dernier Raspberry Pi 4.
Un cas d'utilisation possible serait de se connecter à un Raspberry Pi via SSH et d'envoyer une commande pour allumer ou éteindre un téléviseur connecté via HDMI-CEC. Ou vous pouvez utiliser les commandes pour allumer le téléviseur et faire de l'adaptateur CEC la source active dans une source HDMI Raspberry Pi. Je suis sûr que vous pouvez penser à divers autres cas d'utilisation.
CHECK, ou Consumer Electronics Control, est une fonction HDMI qui permet aux appareils connectés via HDMI d'être contrôlés avec une télécommande. Par exemple, CEC est utilisé pour utiliser les boutons de lecture / pause d'une télécommande pour contrôler la lecture sur un appareil connecté via HDMI. Ou lorsque vous lisez une vidéo sur un Chromecast alors que le téléviseur est éteint et que le téléviseur s'allume automatiquement et bascule sur la source Chromecast.
La plupart des téléviseurs et récepteurs AV modernes devraient prendre en charge HDMI-CEC. Notez cependant que certains modèles peuvent nécessiter l'activation de CEC dans les paramètres du téléviseur. CEC peut avoir un nom différent selon la marque de l'appareil. Par exemple, il s'appelle Anynet+ pour les téléviseurs Samsung, EasyLink ou Fun-Link pour Philips, SimpLink pour LG, etc.
Afin de pouvoir allumer (et éteindre) un téléviseur qui est connecté à un Raspberry Pi via HDMI, la première étape consiste à installer cec-client. Sur Raspbian ou toute autre distribution Linux basée sur Debian ou Ubuntu pour Raspberry Pi, installez ce cec-utils
paquet (cec-client
fait partie de ce package) :
sudo apt install cec-utils
Sur les autres distributions Linux, vous devrez rechercher cec-client
ou cec-utils
dans les dépôts ou compilez libcec à partir de la source.
Eh bien ce cec-utils
installé, Analysons le bus CEC pour les appareils disponibles :
echo 'scan' | cec-client -s -d 1
Dans cette commande echo 'scan'
envoie la commande de numérisation à cec-client, -s
est utilisé pour cec-client pour exécuter une seule commande et exister, et -d 1
définit le niveau de journalisation à 1 (erreur uniquement) afin que votre terminal ne soit pas contaminé par des informations inutiles.
Notez le numéro d'appareil et l'adresse du téléviseur (ou de tout autre appareil connecté à votre Raspberry Pi via HDMI-CEC) car nous les utiliserons plus tard.
Voici un exemple d'exécution de cette commande sur mon Raspberry Pi connecté à un téléviseur Samsung via HDMI (avec prise en charge 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)
Dans cet exemple, le numéro d'appareil 0
avec le 0.0.0.0
L'adresse est mon téléviseur Samsung et le numéro d'appareil 1
avec le 1.0.0.0
L'adresse est mon appareil Raspberry Pi.
Maintenant que nous connaissons le numéro et l'adresse de l'appareil, vous pouvez utiliser la commande suivante pour allumer un téléviseur connecté au Raspberry Pi via HDMI-CEC :
echo 'on <DEVICE #>' | cec-client -s -d 1
Ou :
echo 'on <DEVICE ADDRESS>' | cec-client -s -d 1
Le numéro de l'appareil (0
est le téléviseur Samsung dans l'exemple ci-dessus) et l'adresse de l'appareil (0.0.0.0
est l'adresse du périphérique Samsung TV de mon exemple) devrait fonctionner.
-d 1
est de conserver le niveau de journalisation uniquement aux erreurs, et vous pouvez utiliser la commande sans cela, mais vous verrez un journal long, probablement inutile.
Exemple :
echo 'on 0' | cec-client -s -d 1
Ou :
echo 'on 0.0.0.0' | cec-client -s -d 1
Vous le voulez aussi as
Commande qui fait de l'adaptateur CEC la source active (Ainsi, le téléviseur bascule sur la source HDMI du Raspberry Pi après avoir allumé le téléviseur) :
echo 'as' | cec-client -s -d 1
Voulez-vous éteindre le téléviseur (passer en mode veille) ? Utiliser :
echo 'standby <DEVICE #>' | cec-client -s -d 1
Selon la façon dont vous l'utilisez, vous devrez peut-être également vérifier l'état actuel du téléviseur (est-il allumé ou en veille ?). C'est possible avec :
echo 'pow <DEVICE #>' | cec-client -s -d 1
Pour voir toutes les commandes que cec-client peut envoyer à un appareil connecté via HDMI-CEC, utilisez 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.