Maak je weerstation geconnecteerd

Geconnecteerd weerstation

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?

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.

De temperatuur van je Alecto weerstation, weergegeven in Home Assistant

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.

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.

  • Geef een reactie

    Deze website gebruikt Akismet om spam te verminderen. Bekijk hoe je reactie-gegevens worden verwerkt.