Jak zbudować prywatny system monitoringu pogody oparty na Raspberry Pi, RTL-SDR, MQTT i NestJS, który odbiera dane z czujników 433 MHz i prezentuje je w Grafanie.

Od sygnału radiowego do eleganckich dashboardów w Grafanie

W pewnym momencie przestało mi wystarczać sprawdzanie pogody w aplikacji. Chciałem wiedzieć, jaka temperatura jest na balkonie — i to nie z jakiegoś chmurzastego API, tylko z moich własnych czujników, działających w czasie rzeczywistym. Tak narodził się pomysł stworzenia własnego, w pełni prywatnego systemu monitoringu pogody.

📡 1. Złapanie sygnału z powietrza

Podstawą całego projektu jest dongle RTL‑SDR — mały odbiornik radiowy, który potrafi przechwycić transmisje z tanich czujników 433 MHz. Z pomocą narzędzia rtl_433 zamieniłem surowy sygnał radiowy na czytelne JSON‑y. To moment, w którym „magia radiowa” staje się danymi.

dongle RTL-SDR + raspberry-pi

czujnik 433 MHz pogodowy

🔧 2. Inteligentny filtr: tylko moje czujniki, tylko to, co ważne

Nie chciałem śmieci w systemie. Dlatego stworzyłem bridge.js — mały, sprytny skrypt Node.js, który:

  • rozpoznaje tylko moje czujniki (po modelu i ID),

  • mapuje je na przyjazne nazwy: balcony (kąt ciemny) oraz balcony_2 (kąt sloneczny),

  • konwertuje temperaturę z °F na °C,

  • publikuje czyste, ujednolicone dane na MQTT (weather/<name>),

  • zapisuje timestamp ostatniego sygnału,

  • wysyła powiadomienia, gdy bateria w czujniku zaczyna umierać.

To nie jest zwykły filtr — to mój prywatny „weather intelligence layer”.

🧠 3. Backend, który rozumie dane

Dalej dane trafiają do backendu opartego o NestJS. Zbudowałem własny klient MQTT, który:

  • subskrybuje weather/#,

  • odbiera gotowe JSON‑y z bridge.js,

  • aktualizuje cache ostatnich odczytów,

  • agreguje dane i zapisuje je do PostgreSQL bazy danych.

Backend nie musi znać protokołów radiowych ani modeli czujników. Dostaje czyste, ustandaryzowane dane — i robi z nimi to, co robi najlepiej.

🗄️ 4. Historia pogody w PostgreSQL

Każdy czujnik generuje wiele odczytów na minutę. Zamiast zapisywać wszystko, backend:

  • buforuje dane,

  • liczy średnie,

  • zapisuje eleganckie rekordy do tabeli weather_record.

Dzięki temu baza jest lekka, szybka i gotowa do analizy.

📊 5. Pogoda w moim domu — na żywo

Na koniec wszystko trafia do Grafany, gdzie stworzyłem zestaw dashboardów:

  • wykres temperatury z podziałem na sensory,

  • wilgotność w czasie,

  • panel diagnostyczny (bateria, ostatni sygnał),

  • szybki podgląd ostatnich wartości.

To nie jest zwykły wykres — to mój prywatny „weather center”, działający 24/7.

🎯 Efekt końcowy

Zbudowałem system, który:

  • odbiera sygnał radiowy z czujników 433 MHz,

  • filtruje i normalizuje dane,

  • publikuje je na MQTT,

  • backend je agreguje i zapisuje,

  • Grafana prezentuje je w piękny, czytelny sposób.

Zero chmury. Zero vendor lock‑in. Wszystko działa lokalnie, szybko i dokładnie tak, jak chcę.