Stel, je hebt zoals wij een Alecto WS-4800 weerstation of je koopt een Baldr weerstation; op de binnenunit zie je de temperatuur, luchtvochtigheid etc. voor binnen en buiten en je hebt zelfs een History knop waarmee je per uur kan teruggaan in de tijd. Tof, niet? Dat kan beter, tijd voor een geconnecteerd weerstation!
In de tijd van geconnecteerde devices lijkt dit een niet zo elegante oplossing. Wat als je meer metingen wilt zien, of gemiddeldes, of min/max per dag of week? Kortom, je ziet het al, je bent gelimiteerd tot wat Alecto je aanbiedt.
Maar er is een oplossing! De buitenunit van dit Alecto weerstation stuurt zijn waarnemingen elke 12 seconden door naar de binnenunit, en dat in de 868MHz band. Gelukkig kan je voor een appel en een ei een USB-stick kopen die 433 en 868MHz signalen kan ontvangen. Wat heb je nodig?
- Deze DVB-T SDR usb stick die wij zelf al jaren gebruiken
Geconnecteerd weerstation
Update 2021
Om je data te ontvangen kan je tegenwoordig rechtstreeks MQTT berichtjes versturen via rtl433, je hoeft dus geen Docker meer te gebruiken, wat het proces heel wat vereenvoudigd. Volgende command line kan je gebruiken in een service:
/usr/local/bin/rtl_433 -R 119 -f 868M -s 1024k -F mqtt://<mqtt_server_ip> 1883 retain 0 devices rtl_433[/id]
De Alecto in dit geval gebruikt algoritme 119 van rtl433, omdat we slechts op één checken bespaart dat ook weer wat CPU verbruik wat op een oudere Raspberry Pi wel handig kan zijn.
Origineel
Wat heb je nodig:
– Linux machine (Raspberry Pi3 bijvoorbeeld)
– Docker
Stap 1. De Docker image bouwen
git clone https://github.com/mverleun/RTL433-to-mqtt
cd RTL433-to-mqtt/src
cp config.example.py config.py
vi config.py
In config.py kan je je MQTT parameters instellen (gebruikersnaam, wachtwoord, IP-adres…).
Verder moet je ook even het commando in rtl2mqtt.py aanpassen:
vi rtl2mqtt.py
Zoek naar rtl_433_cmd en vervang door:
rtl_433_cmd = "/usr/local/bin/rtl_433 -f 868M -M level -s 1024k -F json"
Nu kan je je Docker image bouwen met:
docker build -t rtl433-mqtt-gateway .
Stap 2. Docker container starten
Nu je Docker image gebouwd is, kunnen we een container starten die alles voor jou doet! Steek allereerst je USB-stick in je Linux machine en voer dan volgend commando uit:
docker run --name rtl_433 -d --rm --restart unless-stopped --privileged -v /dev/bus/usb:/dev/bus/usb rtl433-mqtt-gateway
Stap 3. Verifiëren van de gegevens
Als je mosquitto hebt geïnstalleerd op je Linux machine kan je volgend commando gebruiken om binnenkomende berichten van je weerstation te bekijken:
mosquitto_sub -h <JOUW_MOSQUITTO_IP_ADRES> -p 1883 -v -t "sensors/#"
Nota: In de huidige versie van het rtl2mqtt.py script steekt een fout waardoor het kan zijn dat je MQTT state topic gelinkt is aan de luchtvochtigheid en dus niet de hele tijd dezelfde naam heeft. Dit kan je verhelpen door
if "id" in item:
te vervangen door
if "id" == item:
Zodra dat gebeurd is, moet je wel even je Docker image opnieuw maken en de container starten.
Komen er geen gegevens binnen? Check even of je USB-stick herkend wordt in Linux. Lukt het nog steeds niet, laat ons dan even iets weten.
Koppelen aan Home Assistant
Je kan nu je MQTT gegevens doorsturen naar je Home Assistant server. Een voorbeeldje voor temperatuur en luchtvochtigheid in je config yaml file:
- platform: mqtt
name: "alecto_temperatuur"
state_topic: "sensors/rtl_433/Bresser-5in1/100/temperature_C"
unit_of_measurement: "°C"
icon: mdi:thermometer
- platform: mqtt
name: "alecto_luchtvochtigheid"
state_topic: "sensors/rtl_433/Bresser-5in1/100/humidity"
unit_of_measurement: "%"
icon: mdi:water-percent
Het kan best zijn dat het ID van jouw Alecto iets anders is dan 100, bekijk welke MQTT berichten er gestuurd worden en pas jouw configuratie zo nodig aan.
Disclaimer: we krijgen een kleine commissie bij elk product dat via een van bovenstaande links is gekocht.
Nog wat tijd over? Maak je badkamer verlichting slim voor enkele euro’s of connecteer je Ikea bureau.
Reactie (6)
Erik| 6 september 2020
Ik heb zelf een Alecto WS-3300, deze wordt door RTL_433 niet gedecodeerd. Weet je welke decoder er wordt gebruikt? Het lijkt mij dat de signalen niet heel veel verschillen. De Alecto WS-4800 komt ook niet voor in de lijst van rtl_433 dus ik vraag me af hoe dit dan werkt.
Devon| 6 september 2020
De Alecto WS4800 wordt herkend als een Bresser 5-in-1, die er identiek uit ziet. Vermoedelijk Chinees wit product waar ze de Alecto naam op geplakt hebben.
Ben je zeker dat rtl_433 data binnenkrijgt? Je kan de ‘raw data’ eens te laten printen om te zien of er weldegelijk data wordt opgevangen. Welke receiver gebruik je?
Roel| 7 oktober 2020
Ik heb een WS-3100 op 868Mhz, werkt deze ook hiermee?
Robert| 15 februari 2021
Iemand ervaring met een WS-3800? Werkt dit
netwerker| 8 april 2021
Ik heb een ws-3800 en ben er mee bezig, ik ontvang al data maar nog niet erg betrouwbaar en probeer ook nog uit te vinden wat het precies betekent. Wordt vervolgd.
netwerker| 16 april 2021
frequentie =868350kHz, baudrate=19200 zwaai=+/-35kHz dus bandbreedte=ca. 100kHz
bericht bestaat uit 4 kopieen van hetzelfde blok met een tussenruinte van slechts 3 bits. De totale lengte komt daarme op ca.61 bytes oftewel 25ms, de totale zendtijd is ca.45ms (laatste deel leest als all ones)
ieder blok heeft een preamble (55 of AA) van 2 bytes gevolgd door een sync word D22B, dit laatste is lastig voor een RFM12. Dan volgt een payload van 10 bytes en een check byte. De codering van het checkbyte ken ik niet dus ik beoordeel de integriteit door de 4 blokken onderling te vergelijken.