pátek 9. prosince 2022

GSM meteostanice na chalupu

Vlhkost na chalupě je nikdy nekončící problém. Zvlášť, když se jedná o smíšené zdivo, bez podřezání, izolace neexistující a bez vytápění přes zimu. Navazuji na desítky let odvlhčovacích pokusů, které zahájil můj otec přibližně s mým narozením. A na to potřebuji tvrdá data o teplotě a vlhkosti!

Elektřina je na chalupu zavedená, ale při odjezdu se vypíná. Internet není. Mému řešení tedy nezbývá než běžet ze solárních panelů a využívat GSM síť. Pro sběr dat jsou použita bezdrátová teplotní/vlhkostní čidla La Crosse TX29DTH IT+, které jsem doma našel po již nevyužívané meteostanici. Jejich výhodou je známý komunikační protokol, vysílají své údaje cca každé 4 sekundy v pásmu 868 MHz a příjem lze realizovat modulem HopeRF RFM12B.

Celé zařízení je momentálně postaveno na mikrokontroléru STM32L031C4T. Vzhledem k požadavkům na úspornost v proudovém odběru i čerpání dat jsou údaje agregovány. Příjem se aktivuje každou hodinu na 20 sekund, po 20 hodinách jsou hodnoty úsporně odeslány na server pomocí POST požadavku přes levný GSM modul SIM800L. Jako nejvýhodnější jsem vloni nakonec zvolil operátora Kaktus, což je virtuál v síti T-Mobilu. Dobití 50Kč s platností 1 rok, cena 1MB je 1Kč, účtovaná jednotka 100kB. To máme 10 haléřů za připojení, každých 20 hodin vychází na 43,80Kč ročně. No není to paráda?

Serverová část je napsaná v PHP, využívá databáze SQLite a RRD. Pro vykreslování grafů pak RRDtool. Data jsou pro POST zakódována do variace na base64, požadavek pak vypadá např. takto:

i=60&c=20&cp=0&cl=0&ci=3&it62=IB4H1.HyAHt8Hl8HmAHiCHeCHaCHWEHOCHKCHCCG.EG6EGyCG.EHSAHZ.HZ.&it31=ICEICIICKICKICKICMH.MH.MH6MH2MH2MHyMHuMHqMHmMHmMHmKHiMHiMHeM&it46=IFqIB2IB8H9.H9.H6AH6CH6EH2EHyGHyGHuGHqGHqGHmGHiGH6EIKCICCH.C&tv=AGJAdH0AAWGQa30AAoGQU3wAA2GASHsABLFgPnsABbFQMHsABmFQJnsAB4EAGnsACHEgGHsACbEgFnsACoDADHsAC2DADnoADJDgEHoADWDAB3oADoDABXoAD3CgAXsAEKCgFHwAEXDgLn4AEpDASH4AE2EAWX8A

Uvedený řetězec obsahuje 20 teplot a vlhkostí ze čtyř bezdrátových čidel (tři místnosti a jedno venkovní), dvou NTC senzorů (vnitřní a vnější) a napětí Pb akumulátoru dobíjeného solárními panely přes PWM regulátor. PHP skript se postará o dekódování a uložení do SQLite a RRD databází, následně jsou vygenerovány grafy.

Veškeré podklady jsou dostupné na Githubu. Přiložené obrázky jsou z první verze, v současnosti už mám objednané plošné spoje na mírně inovovanou variantu, která bude umožňovat i dálkové spínání výstupů a aktivaci ventilátoru na základě vypočtené teploty rosného bodu.

Mimochodem, úsporné režimy na STM32L0 mi daly zabrat, a to se vyznám. Po dlouhém trápení, kdy procesor vypadal v pořádku a že se krásně na základě RTC probouzí po dlouhých intervalech, ale kdy na chalupě 80km daleko zlobil, jsem to nakonec vzdal a RTC vyřadil. Spolu s RTC nelze použít IWDG, má příliš krátký interval. No, ukázalo se, že závada nakonec nebyla v softwaru, ale v hardwaru. Špatně umytý leptací roztok postupně zlikvidoval malé místečko zrovna na TXD signálu od MCU do GSM modulu...