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.


🔧 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ę.
