In an earlier post I showed how one could address the raspberry GPIO pins from within OpenHab (or NodeRed for that matter). The only limitation here was that it was on a raspberry that also hosted OpenHAB.
What if you have a RaspberryPi whose pins you want to control from within OpenHab, while openHab is in fact operating from another machine?
In that case MQTT seems the best option. I wrote a Python program that will do just that.
If you installed Jessie or Stretch, it comes already with Python 2.7 which is quite suitable for this goal.
You will need two libraries:
The lightweight MQTT client Eclipse Paho Mqtt: Here I describe how to install it, but you could also just do:
pip install paho-mqtt
The second one you need to install is the Rpi.GPIO library.
LadyAda gives a good explanation how to do that, but it basically comes down to issuing the command:
sudo apt-get install python-dev python-rpi.gpio
The Python program itself is fairly simple, but there are a few things to point out
The Rpi.GPIO library has two modes to set up the pins. it has ‘BCM mode’ and ‘BOARD mode’
These two modes refer to the numbering of the pin.
The GPIO.BOARD option specifies that you are referring to the pins by the number of the pin in the plug – i.e the numbers printed on the board.
The GPIO.BCM option means that you are referring to the pins by the “Broadcom SOC channel” number, these are the numbers after “GPIO” that can be seen in the various pinout diagrams
If you are still a bit puzzled, you can try and issue “the
gpio readall” command on your terminal and depending on the type of Raspberry you have, you may get outputs like this for the Rpi3:
The program currently switches one pin ON or OFF. it is not particularly hard to expand that for more than one pin. The working can be controlled by the
gpio readall command (check in the column ‘V’ what the state of the pin is)
I saved the program in my home/pi directory. It can be started by
python mqttpublish2.py (or any other name you want to give it). It is best to have it start at boot-up
Output will look like this:
A slight word of warning: Python sees indents as part of the command structure. If after downloading my file you go change it, be careful not to mess up the indents.
Edit: In the mean time I expanded the program a bit, it now sends the state of the pin as a seperate topic. It also sends the IP nr, the program name and an ‘alive’ message on startup. It uses pin 18.