Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mverleun/RTL433-to-mqtt

Publish info from RTL433 receiver to MQTT broker
https://github.com/mverleun/RTL433-to-mqtt

mqtt mqtt-bridge python-script rtl-sdr rtl433 rtlsdr

Last synced: about 2 months ago
JSON representation

Publish info from RTL433 receiver to MQTT broker

Awesome Lists containing this project

README

        

# RTL433 to mqtt gateway

This small script is a cheap and easy way to start with IoT projects.
By using the great rtl_433 software and a cheap RTL-SDR receiver it will listen to all kinds of devices transmitting at the 433,92 Mhz frequency.

Quite likely it will receive information from weatherstations in your area,
if you don't own one, your neighbours might!
It will also receive signals from remote controls that are popular to use to
control the lights.

It's one way. You can receive a lot of information, but you can not send any!

## MQTT Topics
The gateway will receive information from the SDR receiver and publish them in JSON format to the topic `sensors/rtl_433`. (Without the slash!)

Subtopics are created from this JSON line allowing to easily subscribe to specific sensors.

Testing can be done with the following command:
```bash
mosquitto_sub -h mqtt.example.com -p 1883 -v -t "sensors/#"
```

This will generate output like this:

```
sensors/rtl_433 {"time" : "2018-07-05 09:48:17", "model" : "AlectoV1 Wind Sensor", "id" : 36, "channel" : 1, "battery" : "OK", "wind_speed" : 0.000, "wind_gust" : 0.200, "wind_direction" : 315, "mic" : "CHECKSUM"}

sensors/rtl_433/AlectoV1 Wind Sensor/time 2018-07-05 09:48:17
sensors/rtl_433/AlectoV1 Wind Sensor/id 36
sensors/rtl_433/AlectoV1 Wind Sensor/channel 1
sensors/rtl_433/AlectoV1 Wind Sensor/battery OK
sensors/rtl_433/AlectoV1 Wind Sensor/wind_speed 0.0
sensors/rtl_433/AlectoV1 Wind Sensor/wind_gust 0.2
sensors/rtl_433/AlectoV1 Wind Sensor/wind_direction 315
sensors/rtl_433/AlectoV1 Wind Sensor/mic CHECKSUM
sensors/rtl_433 {"time" : "2018-07-05 09:48:22", "model" : "AlectoV1 Rain Sensor", "id" : 140, "channel" : 0, "battery" : "OK", "rain_total" : 621.750, "mic" : "CHECKSUM"}

sensors/rtl_433/AlectoV1 Rain Sensor/time 2018-07-05 09:48:22
sensors/rtl_433/AlectoV1 Rain Sensor/id 140
sensors/rtl_433/AlectoV1 Rain Sensor/channel 0
sensors/rtl_433/AlectoV1 Rain Sensor/battery OK
sensors/rtl_433/AlectoV1 Rain Sensor/rain_total 621.75
sensors/rtl_433/AlectoV1 Rain Sensor/mic CHECKSUM
sensors/rtl_433 {"time" : "2018-07-05 09:48:48", "model" : "AlectoV1 Wind Sensor", "id" : 36, "channel" : 1, "battery" : "OK", "wind_speed" : 0.000, "wind_gust" : 0.000, "wind_direction" : 270, "mic" : "CHECKSUM"}

sensors/rtl_433/AlectoV1 Wind Sensor/time 2018-07-05 09:48:48
sensors/rtl_433/AlectoV1 Wind Sensor/id 36
sensors/rtl_433/AlectoV1 Wind Sensor/channel 1
sensors/rtl_433/AlectoV1 Wind Sensor/battery OK
sensors/rtl_433/AlectoV1 Wind Sensor/wind_speed 0.0
sensors/rtl_433/AlectoV1 Wind Sensor/wind_gust 0.0
sensors/rtl_433/AlectoV1 Wind Sensor/wind_direction 270
sensors/rtl_433/AlectoV1 Wind Sensor/mic CHECKSUM
sensors/rtl_433 {"time" : "2018-07-05 09:48:59", "model" : "AlectoV1 Rain Sensor", "id" : 140, "channel" : 0, "battery" : "OK", "rain_total" : 621.750, "mic" : "CHECKSUM"}

sensors/rtl_433/AlectoV1 Rain Sensor/time 2018-07-05 09:48:59
sensors/rtl_433/AlectoV1 Rain Sensor/id 140
sensors/rtl_433/AlectoV1 Rain Sensor/channel 0
sensors/rtl_433/AlectoV1 Rain Sensor/battery OK
sensors/rtl_433/AlectoV1 Rain Sensor/rain_total 621.75
sensors/rtl_433/AlectoV1 Rain Sensor/mic CHECKSUM
```

Note that spaces can be used in topic names!

This could be used to subscribe to selected topics, e.g. if you want to know the battery status of all the sensors you could subscribe to the topic `sensors/rtl_433/+/battery`.

This would look similar to this:

```bash
mosquitto_sub -h mqtt.example.com -p 1883 -v -t "sensors/rtl_433/+/battery"
sensors/rtl_433/AlectoV1 Rain Sensor/battery OK
sensors/rtl_433/AlectoV1 Wind Sensor/battery OK
sensors/rtl_433/AlectoV1 Rain Sensor/battery OK
```

## Installation
Before you get started you'll have to install some packages.

First install software using the command:

``` bash
apt-get update && apt-get install -y rtl-sdr librtlsdr-dev librtlsdr0 git automake libtool cmake
```

This will install all the software you need to build the latest version of the rtl_433 receiver
software.

Next download and build the receiver software:

```bash
git clone https://github.com/merbanan/rtl_433.git && cd rtl_433/ && mkdir build && cd build && cmake ../ && make && make install
```
The last step is to install the python MQTT library:

```bash
pip3 install paho-mqtt
```

## Configuration
Copy the file `config.py.example` to `config.py` and change the settings by editting this file.

Once you're done you can connect the RTL-SDR to a USB port and start using the
python script.

## Docker
A `Dockerfile` is included as well. Use it if you want to run this software in a Docker container.

Navigate to the `src` directory of this project and enter the following command:

```bash
docker build -t rtl433-mqtt-gateway .
```

This will build the image needed to start a container. When the build process is completed start the container:

```bash
docker run --name rtl_433 -d --rm --privileged -v /dev/bus/usb:/dev/bus/usb rtl433-mqtt-gateway
```