Integrating weather sensors with Home Assistant
We have a thermometer/hygrometer kit to keep track data:
- outside (sensor is under the deck)
- in the greenhouse
- in the garage (we had a third sensor, so we might as well put it somewhere)
- inside (the display base has internal sensors)
It is actually easy to capture and decode RF signals using a DVB-T USB dongle, the RTL-SDR driver and the RTL-433 decoding software.
An RTL8232-based DVB-T dongle is normally used to receive Digital Video Broadcasting TV signal in Europe. Even though it is useless for TV in North America (where the DVB standard is ATSC), a DVB-T receiver can also be used to decode a wide range of radio signals including FM or 433 MHz data signals.
It so happens that besides the base sensors embedded in the display, the three separate sensors transmit data using 433 MHz RF signals.
I purchased a RTL8232 DVB-T dongle for approximately $20 and used spare Raspberry Pi (original B+) to run RTL-433. I installed Raspbian and set up RTL-433 as follows:
1. Install rtl-sdr
sudo apt-get install rtl-sdr
This is the driver module. You need this for the OS to communicate with the DVB-T dongle.
2. Install packages needed to build RTL-433
Currently RTL-433 is not in the Raspbian sofware main repository, and when enabling the testing repos, I start running into dependy issues, so I figured that building rtl-433 from source would probably be a safer bet.
sudo apt-get install git git-core cmake build-essential # build tools
sudo apt-get install libtool libusb-1.0.0-dev librtlsdr-dev doxygen # needed to build rtl-433
4. Build rtl-433
git clone https://github.com/merbanan/rtl_433.git
cd rtl_433
mkdir build
cd build
cmake ../
make
sudo make install
If everything went well you now have rtl_433 in /usr/local/bin
5. Create a shell script to run rtl_433 with the parameters that correspond to your RF device's protocol
In my case, the transmitters are LaCrosse-TX141THBv2 units, which corresponds to protocol 73 in the rtl-433 documentation.
#!/bin/bash
# For LaCrosse TX141THB v2
rtl_433 -R73 -F mqtt://localhost:1883,retain=1,devices=sensors/rtl_433[/model][/channel] -M time:iso
# For LaCrosse TX141THB v2 and RediCheck ET-731 BBQ thermometer
# The ET-731 uses protocol 71. It transmits at a sligtly different frequency, therefore
# I need to alternate between frequencies every 120 seconds
#rtl_433 -f 433.92M -f 433.75M -H 120 -R73 -R71 -F mqtt://localhost:1883,retain=1,devices=sensors/rtl_433[/model][/channel] -M time:iso
6. Install and run an MQTT broker (if you don't already have one)
I went quick and dirty, installed it on the Pi itself, with anonymous updates allowed. You should proabaly set up proper authentication.
sudo apt-get install mosquitto
Edit the mosquitto configuration /etc/mosquitto/mosquitto.conf
:
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
password_file /etc/mosquitto/pwfile
allow_anonymous true
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
Enable and run mosquitto:
systemctl enable mosquitto
systemctl start mosquitto
I collect MQTT information from HomeAssistant, using the MQTT integration.
7. Install and configure Supervisor
Supervisor allows you to automatically start rtl433 and watch that it is still running. If rtl433 stops, supervisor will restart it automatically.
sudo apt-get install supervisor
Then add an rtl_433.conf config file in /etc/supervisor/conf.d/rtl_433.conf
[program:rtl_433]
command=/usr/local/bin/rtl433.sh
autostart=true
autrestart=true
stderr_logfile=/var/log/rtl433.err.log
stdout_logfile=/var/log/rtl433.log
Enable and start the supervisor service
systemctl enable supervisor
systemctl start supervisor