Home

Awesome

cec-mqtt-bridge

A HDMI-CEC and IR to MQTT bridge written in Python 3 for connecting your AV-devices to your Home Automation system. You can control and monitor power status and volume.

Features

Dependencies

MQTT Topics

The bridge subscribes to the following topics:

topicbodyremark
prefix/cec/power/id/seton / offTurn on/off device with id id.
prefix/cec/volume/setinteger (0-127) / up / downSets the volume level of the audio system to a specific level or up/down.
prefix/cec/mute/seton / offMute/Unmute the the audio system.
prefix/cec/txcommandsSend the specified commands to the CEC bus. You can specify multiple commands by separating them with a space. Example: cec/tx 15:44:41,15:45.
prefix/ir/remote/txkeySend the specified key of remote to the IR transmitter.

The bridge publishes to the following topics:

topicbodyremark
prefix/bridge/statusonline / offlineReport availability status of the bridge.
prefix/cec/power/id/statuson / offReport power status of device with id id.
prefix/cec/volume/statusinteger (0-127)Report volume level of the audio system.
prefix/cec/mute/statuson / offReport mute status of the audio system.
prefix/cec/rxcommandNotify that command was received.
prefix/ir/remote/rxkeyNotify that key of remote was received. You have to configure key AND remote as config in the lircrc file.
prefix/ir/rxkeyNotify that key was received. You have to configure key in the lircrc file. This format is used if the remote is not given in the config file.

id is the address (0-15) of the device on the CEC-bus.

Examples

Configuration

You can either copy config.default.ini to config.ini and adjust its properties, or alternatively declare any of those as environment variables using the format SECTION_KEY (e.g., MQTT_USER).

Lirc

You need a lircrc config file. This can be generated from the lircd.conf of your lirc daemon using the script create_lircrc.py. Simply call this script with the lircd.conf path as first argument. It will print the lircrc contents to stdout and can be easily written to a file:

$ ./create_lircrc.py /etc/lirc/lircd.conf > lircrc

If you write your own lircrc file, notice that the config parameter for each configuration is what is given to the bridge. It is assumed that it is in the format <remote>,<key>. If only one value is given, the remote is expected to be omitted.

The lircrc format (that would be generated by the create_lircrc.py script) should look like:

begin
  remote = <remote-name>
  button = <key-name>
  prog = cec-ir-mqtt
  config = <remote-name>,<key-name>
end

To only get the key (without the remote name in the MQTT topic) use the format without the remote in the config:

begin
  remote = <remote-name>
  button = <key-name>
  prog = cec-ir-mqtt
  config = <key-name>
end

Interesting links