Як побудувати приватну систему моніторингу погоди на базі Raspberry Pi, RTL-SDR, MQTT та NestJS, яка отримує дані з датчиків 433 МГц і відображає їх у Grafana.

Від сирого радіосигналу до елегантних дашбордів у Grafana

У певний момент мені перестало вистачати перевірки погоди в додатку. Я хотів знати, яка температура на балконі — і не з якогось хмарного API, а зі своїх власних датчиків, що працюють у реальному часі. Так народилася ідея створити власну, повністю приватну систему моніторингу погоди.

📡 1. Перехоплення сигналу з ефіру

Основою всього проєкту є донгл RTL-SDR — маленький радіоприймач, який здатен перехоплювати передачі з дешевих датчиків 433 МГц. За допомогою інструменту rtl_433 я перетворив сирий радіосигнал на зрозумілі JSON-об’єкти. Це момент, коли «радіомагія» стає даними.

донгл RTL-SDR raspberry-pi

датчик 433 MHz погодний

🔧 2. Інтелектуальний фільтр: тільки мої датчики, тільки те, що важливо

Я не хотів сміття в системі. Тому створив bridge.js — невеликий, розумний скрипт на Node.js, який:

  • розпізнає тільки мої датчики (за моделлю та ID),

  • зіставляє їх із зручними назвами: balcony (кут темний) oraz balcony_2 (кут світлий),

  • конвертує температуру з °F у °C,

  • публікує чисті, уніфіковані дані в MQTT (weather/<name>),

  • записує timestamp останнього сигналу,

  • надсилає сповіщення, коли батарея в датчику починає розряджатися.

Це не просто фільтр — це мій приватний «шар погодного інтелекту».

🧠 3. Бекенд, який розуміє дані

Далі дані потрапляють до бекенду на базі NestJS. Я створив власного клієнта MQTT, який:

  • підписується на weather/#,

  • отримує готові JSON-об’єкти з bridge.js,

  • оновлює кеш останніх показників,

  • агрегує дані та записує їх у PostgreSQL базі даніх.

Бекенд не мусить знати про радіопротоколи чи моделі датчиків. Він отримує чисті, стандартизовані дані — і робить з ними те, що вміє найкраще.

🗄️ 4. Історія погоди в PostgreSQL

Кожен датчик генерує багато показників за хвилину. Замість того, щоб записувати все, бекенд:

  • буферизує дані,

  • обчислює середні значення,

  • записує акуратні записи до таблиці weather_record.

Завдяки цьому база легка, швидка й готова до аналізу.

📊 5. Погода у моєму домі — у реальному часі

На завершення все потрапляє до Grafana, де я створив набір дашбордів:

  • графік температури з розподілом за датчиками,

  • вологість у динаміці,

  • діагностична панель (батарея, останній сигнал),

  • швидкий перегляд останніх значень.

Це не просто графік — це мій приватний «погодний центр», що працює цілодобово.

🎯 Кінцевий результат

Я побудував систему, яка:

  • отримує радіосигнал з датчиків 433 МГц,

  • фільтрує та нормалізує дані,

  • публікує їх у MQTT,

  • бекенд агрегує та зберігає їх,

  • Grafana відображає їх у красивий, зрозумілий спосіб.

Жодних хмар. Жодного vendor lock-in. Все працює локально, швидко й саме так, як я хочу.