I want to receive a notification when someone rings the doorbell at my front door. For this I can buy all kinds of expensive (wireless) doorbells, but I want to use the existing wiring. Because I use Home Assistant for all kinds of automation at home, I also want to integrate this into Home Assistant. Since there is already a Raspberry Pi in the meter cupboard for reading my smart meter, this seemed a logical addition to me.
For this I found this repository: https://github.com/flyte/pi-mqtt-gpio
This Python application does exactly what I want:
- It reads the GPIO pins from the Raspberry Pi Board
- It allows me to configure which pins have to be read
- It allows the Pi to send the information to an MQTT broker
This allows me to use my Home Assistant installation to notify me when someone rang my doorbell, thereby always being informed when someone was at my front door, even when I’m not at home. It also makes it possible to automatically turn on a light in the hallway when it’s dark.
It was a little headache to make it work on my Raspberry Pi 3b with Raspbian, so that’s why I wrote down the instructions.
All the commands are executed as root user
Virtual Env
First you need to create a virtual environment with Python version 3, in /home/pi
/home/pi# python3 -m venv pi_mqtt_gpio
Next, you enter the virtual environment
/home/pi# . pi_mqtt_gpio/bin/activate
Your shell should now show this:
(pi_mqtt_gpio) root@rpi3:
Install the following packages with pip3
(if it’s not installed, use apt install python3-pip
)
- pi_mqtt_gpio
- rpi.gpio
(pi_mqtt_gpio) root@rpi3: pip3 install rpi.gpio pi_mqtt_gpio
In addition, other packages are also installed (enum34, PyYAML, cerberus, paho-mqtt)
Configuration
In the configuration file you define which MQTT broker the data should be sent to, but also to which GPIO pins should be listened.
Read more about the configuration of pi_mqtt_gpio
on this Github page.
Note: this tutorial assumes you save the file pi-mqtt-gpio-config.yaml
in the folder /home/pi
Supervisor
Supervisor is a client/server system that allows its users to monitor and control a number of processes on UNIX-like operating systems.
Install Supervisor
apt install supervisor
Open the Supervisor configuration folder
cd /etc/supervisor/conf.d/
Create a new file with the filename pi_mqtt_gpio.conf
nano pi_mqtt_gpio.conf
Add the following lines:
[program:pi_mqtt_gpio] command = /home/pi/pi_mqtt_gpio/bin/python -m pi_mqtt_gpio.server /home/pi/pi-mqtt-gpio-config.yaml autorestart = false # added to avoid a restart loop directory = /home/pi redirect_stderr = true stdout_logfile = /var/log/pi-mqtt-gpio.log
Update supervisor to include this program during the startup of the operating system:
supervisorctl update
This should give the following output:
pi_mqtt_gpio: updated process group
Now it’s time to start pi_mqtt_gpio
with Supervisor
supervisorctl start pi_mqtt_gpio
This should give the following output:
pi_mqtt_gpio: started
Check the logfile for the correct operation of the program:
tail -f /var/log/pi-mqtt-gpio.log
An example of an working configuration:
2020-04-28 12:06:28,550 mqtt_gpio (INFO): Startup 2020-04-28 12:06:29,039 mqtt_gpio (INFO): Connected to the MQTT broker with protocol v3.1.1. 2020-04-28 12:06:29,049 mqtt_gpio (INFO): Polling: Input 'doorbell' state changed to False
Now you can connect a doorbell to your Raspberry Pi. When you ring the doorbell, a message should be sent to your MQTT broker.