Raspberry Pi – server pro senzory
V minulém článku jsme si dali takový rámcový úvod. Dneska se podíváme na server, který bude sloužit ke zpracování dat.
Umět data přečíst je jedna věc, ale je potřeba, aby se vám data někde sbírala, abyste je mohli vizualizovat a tak dále. Teoreticky na to můžete použít stávající počítač nebo nějakou cloudovou službu. Ale nakonec mi přijde nejjednodušší rozběhnout si vlastní server pomocí malého počítače Raspberry Pi, který může běžet 24/7 na lokální síti, je to poměrně levné a bezúdržbové řešení, odběr má do 5W. Ukážu vám pár tipů a software, který používám.

Hardware
Jak už jsem říkal, vybral jsem Raspberry Pi 4, protože to je prostě nejrozšířenější a nejjednodušší platforma pro toto použití. Koupil jsem verzi se 4GB RAM, vychází to na nějakých 1.500 Kč. Samozřejmě můžete koupit i jiný hardware s jiným softwarem. Třeba i levnější, lepší. Já se snažím jít jednoduchou cestou a když je něco osvědčené a rozšířené a nestojí to raketu, tak do toho jdu.

Počítejte s tím, že k tomu ještě potřebujete krabičku do které to vložíte, napájecí adaptér a SD kartu. Případně kabel k monitoru, ale já to k monitoru nepřipojoval. K tomu příslušenství pár tipů.
- Krabička – já sem pořídil tu na obrázku, ale můžete jakoukoli jinou. Tato mimochodem funguje zároveň jako chladič. Případně byste měli chladič pořídit extra.
- Napájecí adaptér – kupte raději originální a nebo nějaký prostě kvalitní. Četl jsem o častých problémech s kolísajícím napětí některých adaptérů, které pak Rapsberry Pi těžko snáší.
- SD Karta – potřebujete microSD kartu, ta na tomto počítači funguje v podstatě jako disk. I když se pak dají připojit další periferie přes USB, tak operační systém bývá typicky na SD kartě, i když ani to nemusí. Do SD karty malinko zainvestujte. Dal jsem tam napoprvé nějakou kartu co jsem našel doma a bylo to strašně pomalý a nakonec jsem jí velmi rychle oddělal. Potom jsem pořídil kartu řady Samsung EVO Plus (dle rad z internetu) a to je úplně jiná kategorie – vše jede rychle a už mi to běží přes půl roku úplně bez problému. Prý ty karty ale čas od času stejně odejdou.
Výběr operačního systému
Do Raspberry pak budete muset nainstalovat nějaký operační software. Všechno jsou to vesměs nějaké verze Linuxu. Buď si tam dáte přímo nějakou linuxovou distribuci, nebo je přímo operační systém Rapsberry Pi OS. Pak jsou ještě systémy přímo na automatizaci domácnosti, které v sobě mají rovnou i ten operační systém a trochu víc laickou instalaci. Já sem nejdříve chvíli zkoušel openHAB, ale nakonec jsem skončil u Home Assistant. Ale je to v zásadě jedno, stačil by vám klidně čistý Linux, protože všechny další nástroje co si ukážeme tam můžete úplně stejně nainstalovat taky.
Opět bych volil něco s čím se vám bude dobře pracovat a bude k tomu dostupná rozumná podpora.
Proč Home Assistant?

Home Assistant má pár feature, které mi přišly fajn. Namátkou vypisuji. Můžete to třeba vzít i jako vodítko co brát při rozhodování o operačním systému v úvahu.
- All -in-one open source řešení. Nainstaluju a neřeším extra nějaký OS. Pomocí pluginů naistaluji nejpoužívanější rozšíření a mám hotovo.
- Jednoduchá správa senzorů a ovladačů, možnost rozšíření o další periferie, aktivní komunita.
- Možnost cloudového přístupu. Je to teda placené, 5$ / měsíc. Můžete si samozřejmě udělat nějakej tunel, VPN apod. a dostanete se na svůj server zvenku taky. Tohle je ale fajn jednoduché řešení a já ho třeba aktuálně používám, protože se k definitivnímu vyřešení dálkového přístupu teprve chystám.
- Mobilní aplikace. V kombinaci s cloudem fajn věc. Chová se úplně stejně jako webová verze (ono to nejspíš bude to samé). Vhodné by to bylo především na to, kdybyste tím třeba chtěli něco ovládat na dálku, protože i to je možné. S nějakým takovým systémem se z toho stává poměrně silný a rozšiřitelný nástroj.
- Jeden z mých dalších hlavních požadavků byl například i na zálohování. Což se nakonec u Home Assistant ukázalo jako poměrně jednoduché, protože existuje plugin, který vám udělá image a nahraje na Google Drive. Takže to mám nastavené, že každý den ve 3 ráno se mi nahrává záloha do cloudu. A když přijdu o SD kartu (a dřív nebo později o ni přijdu nebo si něco rozhasim a budu muset přeinstalovat), tak jen najedu čistý Home Assistant a do něj přes plugin zálohu a jsem tam kde jsem byl. Vyzkoušeno, funguje to rychle a výborně.
Zkoušel jsem ještě ten openHAB a ač se mi ze začátku líbil víc, tak jsem pak přešel a přiznám se, že si nepamatuji přesně proč. Možná to byla právě ta mobilní aplikace, cloud a zálohy, ale nevím.
Jak nainstalovat takový systém najdete přímo na jejich stránkách, většinou je to docela jednoduché.
Přehled základních nástrojů
Používám následující sadu nástrojů. Jsou rozšířené, dá se k nim toho dost najít, jsou open source a dobře propojené. Je v zásadě jedno, jaký druh operačního systému jste si na server nainstalovali, tyto nástroje tam s nejvyšší pravděpodobností dokážete dostat také.
Nejdříve takový základní pohled: Data sbírá Arduino, posílá je po WiFi na MQTT broker, z toho si pak data přebírá Node-RED, lehce je zpracovává a posílá do InfluxDB. A nakonec je pak zobrazuje Grafana. (V mém případě to ještě občas jde z Node-RED do Home Assistant ale ten pak stejně používá InfluxDB, takže to je vlastně jen mezikrok).
Postup je tedy následující:
Senzor -> Arduino -> WiFi -> MQTT -> Node-RED -> InfluxDB -> Grafana
Vypadá to komplikovaně, ale v zásadě je tomu právě naopak. Díky správné kombinaci nástrojů je vše poměrně jednoduché. Pojďme se na ně podívat jednotlivě. K senzorům, Arduinu a WiFi se pak dostanu někdy později, tento článek je o serveru, takže začneme od MQTT. Nastíním vám základní přehled k čemu jsou nástroje dobré, detaily si případně dohledáte sami.
MQTT
Protokol pro posílání zpráv v rámci IoT (Internet of things). Používá se termín MQTT broker nebo server. Jde o systém, který sbírá zprávy a posílá zprávy v rámci témat (topics). Každé zařízení pak může odesílat data do různých topiců a nebo se na různé topicy navázat a sledovat data v nich. Fór je v tom, že vám to umožňuje, aby daná zařízení (např. senzory, vypínače) byly poměrně dost hloupé.
Představte si, že máte někde bezdrátové tlačítko a bezdrátovou žárovku. a chcete tlačítkem ovládat žárovku. Takže naprogramujete tlačítko aby odesílalo nějaká data, nějak to spárujete se žárovkou a na žárovce naprogramujete příjem dat. Potud fajn. A co se stane, když budete chtít přidat několik dalších vypínačů a světel? A následně zjistíte, že chcete změnit, který spínač spíná které světlo? Budete muset vypínače a žárovky vzít a všechny je přeprogramovat.
MQTT vám toto zjednodušuje. Na vypínači nastavíte pouze, na který topic posílá změnu stavu a u žárovek vás zajímá jen na který topic reaguje. Můžete tak snadno přidávat spínače pro stejnou žárovku a zároveň i přidávat další žárovky pro jedno tlačítko. Zařízení jsou tedy hloupá a neví nic o vztazích ve vašem systému, jen reagují na stavy topiců a posílají do nich data. Co se děje dál a co je s čím propojeno se nestarají, o to se musí starat nějaký další systém na serveru. V mém případě Node-RED níže.
Jeden z nejpoužívanějších je Mosquitto broker. Pro Home Assistant nainstalujete stejně jako všechny následující programy jednoduše jako add-on. O MQTT by se toho dalo napsat mnohem víc, ale takto to myslím pro úvod stačí.
Node-RED
Node-RED je nástroj, kde můžete jednoduše pomocí vizuálního programování propojovat další systémy. V zásadě to je právě Node-RED v úzké kombinaci s MQTT, které vám umožňují, aby vaše zařízení byla hodně hloupá, protože logiku co je s čím propojené nastavíte právě zde. Takže pokud bych si v předchozím příkladu se žárovkami např. očísloval žárovky i tlačítka 1-5 a spároval je vždy 1-1, 2-2 a pak se rozhodl že chci jejich propojení přeházet, nemusím přeprogramovávat hardware, ale pouze v Node-RED nastavím, aby tlačítko 1 spouštělo žárovku 2 apod.

V mém případě tak typicky na začátku použiju MQTT node, kde sbírám data z nějakého topicu. Ty pak zpracovávám. Například když posílám více dat najednou v JSONu tak si je vyberu nebo dělám nějakou kalibraci apod. Dále pak data můžu poslat například do Home Assistant senzoru, nebo přímo do InfluxDB databáze a nebo třeba je dál poslat pomocí MQTT do nějakého dalšího zařízení.
Další příklad, kde se bude hodit Node-RED je počítání objemu vody v nádrži na dešťovou vodu. Ultrazvukový senzor měří vzdálenost hladiny od senzoru. Výsledný objem pak závisí na umístění senzoru a tvaru nádrže (= vztahem mezi výškou hladiny a objemem). Senzor je opět hloupý a odesílá pouze naměřenou vzdálenost hladiny. Node-RED si pak naměřenou vzdálenost přepočítává na správný objem a posílá data do databáze k příslušné nádrži. Při změně umístění senzoru, změně tvaru nádrže nebo přemístění do jiné nádrže stačí jen upravit schéma a vzorce ve schématu.
InfluxDB
O databázi InfluxDB vám toho moc nepovím, naposledy když jsem se zabýval databázemi tak to bylo MySQL a PHP a bylo to před 10 lety. InfluxDB je prostě databáze, která je vhodná pro tyto účely, funguje, napojení je opět připravené pro spoustu dalších nástrojů. A to je vlastně všechno co potřebuju vědět.
Grafana
Grafana vám umožňuje vytvářet pěkné dashboardy, grafy, ukazatele. Je toho hodně, vypadá to dobře a dají se na základě toho odečítat všelijaká data. Na začátku jsem pro čtení dat ze senzorů používal home page Home Assistenta (říkají tomu lovelace), ale postupně jsem si zvykl chodit především právě na stránku Grafany. A i to je mimochodem důvod proč jsem si pak přehodil celý Home Assistant do černého tématu, aby mi to ladilo s Grafanou.

V Grafaně si nastavíte zdroj dat, můžete tak data brát z Home Assistant senzorů a nebo napřímo z InfluxDB. O drobném ale zásadním rozdílu si povíme až budu psát o elektroměrech.
Nastavení zobrazení je mnoho, je to o tom nad tím chvíli posedět a vyhrát si s tim. Docela se mi osvědčilo si vytvořit jednu globální proměnnou, kterou se dá nastavit hustota grafu (potřeba tu proměnnou promítnout do všech dotazů v grafech). Grafana vám standardně umožňuje nastavovat časové rozpětí na zobrazeném grafu. Zda data chcete agregovat po hodinách, minutách nebo dnech si musíte ale nastavit sami a na to se právě hodí ta globální proměnná.

Pro poslední týden tak například chcete vidět data po hodinách. Pro poslední měsíc po dnech, pro posledních pár hodin po minutách.
Závěr
To by bylo pro dnešek vše. Snad jste z toho získali představu jak může takový server vypadat a fungovat. A v příštím článku bych se už pustil do detailního popisu jak vypadá měření spotřeby elektřiny v praxi.