Saturday 6 April 2019

Raspberry Pi - Setting up Energenie IR Blaster Board for Alexa control (Part 1 - getting the remote working on the PI)

Please note I am not an expert on this so please don't mail me questions, the information here is a mixture of tips and instructions I have found on the web.
Some were old and contained incorrect commands and some were new but missed other steps.

I'll assume people reading this are OK installing versions of linux and using editors such as nano.

  • Install the Energenie board into your Pi (in my example I'm using a Pi version A) and the board  just plugs into the Pi.
  • Install Raspbian Sketch - I'm using the lite version because I don't need a graphics interface, I created my SD card using Etcher.
  • I've set my Pi up for a fixed IP (so I can ssh into it easily)
  • As it's a Pi Version A I've configured a USB dongle to connect to Wi-Fi.
  • SSH is configured so I can remote into the Pi
  • I've changed the root password for security.
  • The Pi is configured so it boots into the operating system without requiring the password (for automatic operation).
Most of the items above such as IP address, SSH and auto boot are configured through the raspi-config tool from command line.
Using SSH means I can run the Pi "headless" without a monitor connected and any changes or commands can be done from a remote computer - for example rebooting or changing configuration.


At this point you should have a Raspberry Pi, configured with Raspbian Sketch and ready to go.


Check all updates are installed

sudo apt-get update
sudo apt-get upgrade

Now install lirc

sudo apt-get install lirc
sudo apt-get install lirc-x

The Energenie uses pin 12 - GPIO18 for Input and Pin 11 - GPIO17 for output.

edit /etc/modules and add the following lines

lirc_dev
lirc_rpi gpio_in_pin=18 gpio_out_pin17

edit /boot/config.txt and add the following line

dtoverlay=lirc-rpi,gpio_in_pin=18,gpio_out_pin=17

Edit /etc/lirc/hardware.conf and add the lines below

LOAD_MODULES=true
DRIVER="default"
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"LIRCD_CONF=""
LIRCD_ARGS="--uinput --listen"
LIRCMD_CONF=""

If /etc/lirc/hardware.conf does not exist you can create it with the "touch" command i.e. touch /etc/lirc/hardware.conf


(If you get permission errors you might need to precede your command with sudo so you've got higher level permissions).

Edit /etc/lirc/lirc_options.conf and change the entries for device and driver to the ones below.

device = /dev/lirc0
driver = default


I had issues getting the service to start, the reason is most guides contain old command references for the service

Instead of the service being called lirc it's now called lircd

stop and start the service with the following commands

sudo /etc/init.d/lircd stop
sudo /etc/init.d/lircd start

You can check if the service is running with the following command.

sudo /etc/init.d/lircd status

At this point you should be able to test the IR is working.

You might want to reboot so everything is running and all files are in sync.

Stop the service

sudo /etc/init.d/lircd stop

Run this command

mode2 -d /dev/lirc0

Point a remote control at your pi and press some buttons, you should see output similar to this.

Using driver default on device /dev/lirc0
Trying device: /dev/lirc0
Using device: /dev/lirc0
space 16777215
pulse 15319054
space 3441
pulse 1772
space 395
pulse 485
space 385
pulse 1341
space 392
pulse 473
space 485
pulse 397

At this point the IR interface is receiving commands, the next step is to program it up to store commands and transmit them.
The following command will create a custom remote control configuration file in your home directory, the filename is specified when you are running the irrecord program.

sudo irrecord -d /dev/lirc0 ~/lircd.conf
You will see output similar to the text below (not all the output is shown).












In this example I'm creating a remote control file for "Soundbar"

Running as regular user pi
Using driver default on device /dev/lirc0

irrecord -  application for recording IR-codes for usage with lirc
Copyright (C) 1998,1999 Christoph Bartelmus(lirc@bartelmus.de)

This program will record the signals from your remote control
and create a config file for lircd.

A proper config file for lircd is maybe the most vital part of this
package, so you should invest some time to create a working config
file. Although I put a good deal of effort in this program it is often
not possible to automatically recognize all features of a remote
control. Often short-comings of the receiver hardware make it nearly
impossible. If you have problems to create a config file READ THE
DOCUMENTATION at https://sf.net/p/lirc-remotes/wiki

If there already is a remote control of the same brand available at
http://sf.net/p/lirc-remotes you might want to try using such a
remote as a template. The config files already contains all
parameters of the protocol used by remotes of a certain brand and
knowing these parameters makes the job of this program much
easier. There are also template files for the most common protocols
available. Templates can be downloaded using irdb-get(1). You use a
template file by providing the path of the file as a command line
parameter.

Please take the time to finish the file as described in
https://sourceforge.net/p/lirc-remotes/wiki/Checklist/ an send it
to  so it can be made available to others.

Press RETURN to continue.

Checking for ambient light  creating too much disturbances.
Please don't press any buttons, just wait a few seconds...

No significant noise (received 0 bytes)

Enter name of remote (only ascii, no spaces) :Soundbar
Using Soundbar.lircd.conf as output filename

Now start pressing buttons on your remote control.




It will guide you through pressing buttons randomly and then create the custom keys.

For a list of valid lirc command keys type

irrecord --list

To test the functionality I programmed keys for

KEY_VOLUMEUP
KEY_VOLUMEDOWN
KEY_POWER
KEY_MUTE

The file "Soundbar.lircd.conf" was created in the home folder.

From lirc version 0.9.2 you don't need to merge configuration files into one, you just copy the conf file to a folder and they are automatically included in the list of commands.

In this case I'll copy "Soundbar.lircd.conf" to the correct folder (/etc/lirc/lirc.conf.d)

The first command will make sure I'm in my home directory.


cd ~/

You could list the files in the directory to check the file is there.

ls

Soundbar.lircd.conf

Now copy the file, be careful typing in the command, the file is filename.lircd.conf but the directory it's going into is under /etc/lirc - i.e. it doesn't have the "d" at the end.
If you use the command below as reference just replace "Soundbar" with whatever you called your file.

sudo cp Soundbar.lircd.conf /etc/lirc/lircd.conf.d/

The original file will still be in your home directory should you need it.
At this point we should be at the point we can test the transmission.

I would restart the lircd service so it reloads any configuration files.

sudo /etc/init.d/lircd restart

The command to send an IR function is "irsend" and the syntax is

irsend SEND_ONCE Remote_Name Remote_Button

For my test file I'll see if the Soundbar turns on, then I'll send Volume UP and DOWN etc.

irsend SEND_ONCE Soundbar  KEY_POWER

The Soundbar should turn on (as long as the Pi is pointing reasonably in the right direction).

To test the other keys just repeat the command with the key name

irsend SEND_ONCE Soundbar KEY_VOLUMEUP


irsend SEND_ONCE Soundbar KEY_VOLUMEDOWN


irsend SEND_ONCE Soundbar KEY_MUTE

You can use a command "irw" to confirm your programmed buttons, type irw and then press your remote buttons, you'll see confirmation of the ones you've programmed  with their command value.

irw
0000400405000401 00 KEY_VOLUMEUP Soundbar
0000400405008481 00 KEY_VOLUMEDOWN Soundbar
0000400405004c49 00 KEY_MUTE Soundbar


Press Ctrl + C to exit the irw program.

At this point you should
1)  Have lirc working on a Pi
2) Be able to stop and start the lircd service
3) Be able to create a custom remote control key file
4) Be able to copy this file from your home directory to the correct lirc folder.

My next step is to get Alexa skill and see how to control it - the ultimate aim is to get the remote downstairs and for my wife to issue a macro such as "Alexa, Media ON" to turn the TV, Cable and Soundbar on.