Kaip sukurti privačią orų stebėjimo sistemą, naudojant Raspberry Pi, RTL-SDR, MQTT ir NestJS, kuri priima duomenis iš 433 MHz jutiklių ir pristato juos Grafanoje.

Nuo radijo signalo iki elegantiškų Grafanos prietaisų skydelių

Kadaise man nebepakako orų prognozių tikrinimo programėlėje. Norėjau žinoti, kokia temperatūra yra balkone — ir ne iš kokios nors debesų API, o iš savo pačių jutiklių, veikiančių realiuoju laiku. Taip gimė idėja sukurti visiškai privačią orų stebėjimo sistemą.

📡 1. Signalų sugavimas iš eterio

Pagrindas viso projekto — RTL-SDR adapteris, mažas radijo imtuvas, galintis perimti signalus iš pigių 433 MHz jutiklių. Su įrankiu rtl_433 žalią radijo signalą pavertiau aiškiais JSON formato duomenimis. Tai momentas, kai „radijo magija“ tampa duomenimis.

adapteris RTL-SDR + raspberry-pi

oro jutiklis 433 MHz

🔧 2. Protingas filtras: tik mano jutikliai, tik tai, kas svarbu

Nenorėjau šiukšlių sistemoje. Todėl sukūriau bridge.js — mažą, išmanų Node.js skritą, kuris:

  • atpažįsta tik mano jutiklius (pagal modelį ir ID),

  • priskiria jiems draugiškus pavadinimus: balcony (balkonas išorinis saulėta pusė) ir balcony_2 (balkonas tamsus kampas),

  • konvertuoja temperatūrą iš °F į °C,

  • publikuoja švarius, standartizuotus duomenis MQTT (weather/<name>),

  • įrašo paskutinio signalo laiką,

  • siunčia pranešimus, kai jutiklio baterija pradeda sekti.

Tai ne paprastas filtras — tai mano privatus „orų intelekto sluoksnis“.

🧠 3. Backend’as, suprantantis duomenis

Toliau duomenys patenka į NestJS pagrįstą backend’ą. Sukūriau savo MQTT klientą, kuris:

  • prenumeruoja weather/#,

  • priima paruoštus JSON’us iš bridge.js,

  • atnaujina paskutinių nuskaitymų talpyklą,

  • agreguoja duomenis ir įrašo juos į PostgreSQL duombaze.

Backend’ui nereikia žinoti radijo protokolų ar jutiklių modelių. Jis gauna švarius, standartizuotus duomenis — ir daro su jais tai, ką moka geriausiai.

🗄️ 4. Orų istorija PostgreSQL

Kiekvienas jutiklis generuoja daug nuskaitymų per minutę. Užuot įrašinėjęs viską, backend’as:

  • kaupia duomenis buferyje,

  • skaičiuoja vidurkius,

  • įrašo elegantiškus įrašus į lentelę weather_record.

Dėl to duomenų bazė yra lengva, greita ir paruošta analizei.

📊 5. Orų stebėjimas mano namuose — tiesiogiai

Galiausiai viskas patenka į Grafaną, kur sukūriau rinkinį prietaisų skydelių:

  • temperatūros grafiką pagal jutiklius,

  • drėgmės kitimą laike,

  • diagnostikos skydelį (baterija, paskutinis signalas),

  • greitą paskutinių reikšmių peržiūrą.

Tai ne paprastas grafikas — tai mano privatus „orų centras“, veikiantis 24/7.

🎯 Galutinis rezultatas

Sukūriau sistemą, kuri:

  • priima radijo signalus iš 433 MHz jutiklių,

  • filtruoja ir normalizuoja duomenis,

  • publikuoja juos MQTT,

  • backend’as juos agreguoja ir įrašo,

  • Grafana pristato juos gražiai ir aiškiai.

Jokių debesų. Jokio gamintojo priklausomybės. Viskas veikia lokaliai, greitai ir būtent taip, kaip noriu.