Projector power control with KODI/LibreELEC

bg

March 18th, 2019

Projectors commonly have a serial port for control. Here is an approach for controlling the projector's power state via the current power state of LibreELEC.

The following has been tested with an Acer H6510BD projector and an x86 device running LibreELEC. LibreELEC does not provide the python-serial package, thus this approach only depends on the light-weight stty binary which can be taken from any Linux distribution where it is usually found under /bin/. All files are created on the storage partition, allowing for persistence even after a LibreELEC upgrade.

Hardware Setup

You need connect your projector via an ancient serial cable to the LibreELEC host. Look on the attic if you still have a spare one. Unfortunately, as many modern computer boards do not have a serial interface anymore, a USB-Serial adapter might be additionally required. If your projector has a USB port, test if it forwards a serial device over it by checking with lsusb.

Dependency and script

First, log in to KODI via SSH and create a directory for your files, for example /storage/misc. Find /bin/stty on a Linux distribution and copy it via SCP to /storage/misc/stty. In my case, I have copied it from my Ubuntu 18.04 distribution, but be careful that the processor architecture must match, for example a Raspberry Pi is an ARM device - in this case you should fetch it e.g. from a Raspbian Linux installation.

Furthermore, put the following bash script to /storage/misc/projector and make it executable (chmod 755 /storage/misc/projector).

#!/bin/bash
SERIALPORT=/dev/ttyUSB0

case $1 in
  on)
  SERCMD="* 0 IR 001"
 ;;
 off)
  SERCMD="* 0 IR 002"
 ;;
 *)
  echo "On or off?"
 exit 1
 ;;
esac

/storage/misc/stty -F $SERIALPORT 9600
printf "$SERCMD\r\n" > $SERIALPORT

Based on your projector brand and model, you might need to adapt the serial commands above based on manuals of your projector you can usually find on the web. You can manually test the scripts by entering /storage/misc/projector on or /storage/misc/projector off and checking if you projector reacts appropriately. If it does not react or errors occur on the command line, check if the USB serial adapter is recognized correctly using lsusb and ls -l /dev/ttyUSB*. You should also check if the serial commands for you projector model are correct.

Autostarting the script

Adapt (or create) the file /storage/.config/shutdown.sh to auto-power off your projector.

#!/bin/bash

case "$1" in
 halt)
  /storage/misc/projector off
  ;;
 poweroff)
  /storage/misc/projector off
  ;;
 reboot)
  # your commands here
  ;;
 *)
  # your commands here
  ;;
esac

Furthermore, adapt (or create) the file /storage/.config/autostart.sh to auto-power on your projector.

#!/bin/bash

/storage/misc/projector on

Conclusion

The capabilities of a projector's serial interface go beyond powering on and off, however, in most cases this is sufficient to operate a projector together with LibreELEC.
Creative Commons License
The content of this article (except the nobach.net logo) is licensed under a Creative Commons Attribution 3.0 Germany License.
The license might not apply to content on other pages of this website.