Raspberry Pi 3 se mi na stole válí od jara 2016. Většinu času bylo vypnuté. Jakkoli mě tento koncept počítače pro výuku bastlení i seriózní malé projekty zaujal, tak jsem posléze neměl dost času nebo vůle dotáhnout jej k něčemu, co bych využíval každý den.
Raspberry Pi 4 jsem si teď sice nekoupil, ale jeho vydáním se probudila moje kutilská část duše. Malinová trojka v oficiální krabičce si vyloženě říkala o doplnění displejem. Dostala 4DPI-24-HAT od 4D Systems. Když mi došlo, že pak k ní ale už na GPIO nepřipojím žádné senzory, vysvobodil jsem ze stoletého nánosu prachu dvojkovou Raspberry Pi a připojil k ní BME280. A nějaké využití brzy najdu i pro jedničkovou verzi tohoto počítače.
Přestože si nejvíce času hraju s vykreslováním na RPi a jejím displeji (funguje i jako primární zobrazení), tak je to zatím spíše takové tápání. Něco, co bych mohl nazvat projektem, jsem rozběhal na Raspberry Pi 2 spolu se senzorem BME280.
RPi-Monitor – nástěnka pro sledování dat z nejrůznějších logů
Objevil jsem zajímavou aplikaci nazvanou RPi-Monitor. Přestože poběží pravděpodobně nejenom na miniaturních Raspberry Pi, vznikla právě pro ně. RPi-Monitor je taková nástěnka dostupná přes webový prohlížeč, která vám zobrazuje nejrůznější posbírané statistiky.
Ty samozřejmě nesbírá web, ale linuxová služba běžící na pozadí. Oficiálně je podporovaný Raspbian, ale monitoring pravděpodobně rozběhnete díky širokým možnostem konfigurace i na jiných linuxových distribucích.
Monitoring je rozdělen na aktuální ukazatele (Status), grafy nasbíraných hodnot (Statistics) a ve webovém rozhraní je ještě možnost různých doplňkových stránek (Addons), třeba pro zobrazení obrazu z kamery. V základu po instalaci RPi-Monitor sleduje systémové údaje, jako je použité Raspberry Pi, čas běhu, vytížení procesoru, paměti, odkládacího prostoru a úložiště. Pokud nakonfigurujete, uvidíte i vytížení síťového rozhraní.
Silná stránka RPi-Monitoru však tkví v možnosti přidat sledování nejrůznějších dalších dat. Nabízí se tak kombinace odečítání ukazatelů z napojených senzorů, stejně jako nějakých údajů stahovaných periodicky z webu. Já na začátek využil darovaný senzor BME280 a začal sbírat údaje o teplotě, tlaku a vlhkosti vzduchu.
Pro ukládání dat autor monitoringu využívá RRDtool, k vykreslování grafů pak JavaScriptovou knihovnu, která s těmito daty funguje.
Instalace RPi-Monitor na Raspberry Pi
Ze svého Macu jsem tedy za pomoci aplikace SD Card Formatter nakopíroval na malou SD kartu spouštěč NOOBS, Raspberry Pi 2 připojil přes HDMI k monitoru, přidal jsem bezdrátovou klávesnici od Logitechu a čekal, co se bude po několika letech dít. Vše naběhlo na první dobrou, Raspbian se mi během večeře nainstaloval a já se mohl pustit do rozběhání samotného monitoringu.
Příslušná dokumentace k RPi-Monitoru je velice přehledná. Nenarazil jsem díky ní při instalaci na žádný zádrhel. V podstatě stačí přidat odkaz pro servery s instalačním balíčkem do apt sources a následně RPi-Monitor nainstalovat klasicky přes apt-get.
Hned po instalaci je RPi-Monitor spuštěn. Prohlédnete si jej zadáním adresy Raspberry a portu 8888 do webového prohlížeče. V mém případě tedy 192.168.1.31:8888. Doporučuji kouknout do dokumentace a podívat se, jak se jeho démon startuje, zastavuje a restartuje. Zejména restart se vám hodí, abyste načetli upravenou konfiguraci.
První změny v konfiguračních souborech – nastavení sledování sítě
Pro první úpravy nastavení monitoringu doporučuji začít s něčím jednodušším. Samozřejmě poté, co si projdete dokumentaci. Já nejprve zprovoznil sledování síťového rozhraní.
Na konfiguračním souboru /etc/rpimonitor/template/network.conf si vyzkoušíte, jak vypadá zápis dynamického měření a odečítání nějakých údajů. RPi-Monitor sám o sobě data jenom sbírá. V daném případě volá příkaz /sys/class/net/eth0/statistics/rx_bytes, který vrací počet přenesených dat.
Výsledek pak ukládá do Robin Round Database. Všimněte si, že datové soubory tohoto typu mají pevně danou velikost. Najdete je ve složce /var/lib/rpimonitor/stat.
Zprovoznění síťového monitoringu znamenalo jen odstranit zakomentovaná data, tj. smazat v konfiguračním souboru znak # ze začátku řádků. Poté je potřeba monitoring restartovat zadáním příkazu /etc/init.d/rpimonitor restart.
Od té chvíle uvidíte ve statistikách webového rozhraní i vytížení sítě a počty odeslaných a stažených dat.
Sbíráme data ze senzoru BME280
Další výzvou bylo připojení senzoru BME280. Kdysi mě bavilo skládat počítače, ale nějaké bastlení, pro které je třeba používat pájku, to nebylo nic pro mě. Naštěstí v tomto případě stačí jen nasunout čtveřici drátků ze senzoru na ty správné piny GPIO v Raspberry Pi.
Moje první čtení dat z GPIO byla také procházka růžovým sadem. Jako typický programátor považuji za zbytečné si hrát s něčím, co už naprogramoval někdo jiný. V tomto případě jsem nešel na StackOverflow, ale pustil Google a za pár minut už stahoval potřebný skript v Pythonu. Více o něm v článku Using the BME280 I2C Temperature and Pressure Sensor in Python.
Jak vytvořit vlastní monitoring statistik v RPi-Monitoru
Monitoring i čtení dat ze senzoru jsem měl tedy rozběhané, zbývalo to vše propojit do sebe. Z dokumentace zjistíte, že je nejlepší si připravit vlastní konfigurační soubor pro každou ze statistik, které chcete sbírat. A ten poté doplnit do toho hlavního.
Vytvořil jsem tedy /etc/rpimonitor/template/pocasi.conf a do /etc/rpimonitor/data.config jsem přidal následující řádek:
include=/etc/rpimonitor/template/pocasi.conf
Nyní jsem do konfiguračního souboru s počasím musel dostat několik věcí. Za prvé sběr dat ze senzoru. K tomu slouží nastavení pro dynamickou extrakci dat. Následně jsem teplotu, tlak a vlhkost chtěl zobrazit na titulní straně monitoringu, bylo nutné specifikovat status.
A konečně pro zobrazení posbíraných dat ve formě grafu jsem potřeboval konfigurační část statistics.
Začněme tím sběrem dat. V nastavené periodě rpimonitor volá nějaký příkaz. Jeho návratovou hodnotu, co by se jinak vypsala do příkazového řádku ukládá do databáze. Předtím ji můžete za pomoci regulárního výrazu rozkouskovat a vzít si jen něco. Následně ji lze ještě nějak zpracovat, třeba zaokrouhlit.
Protože regulární výrazy nesnáším a zřejmě bych nedovedl napsat takový, který mi z výše uvedené ukázky vypreparoval třeba jen teplotu, upravil jsem měřidlo v Pythonu. Rozkopíroval jej do třech souborů s odlišnými názvy. Každý z nich vypíše jen číslo načtené z příslušné části senzoru. Tedy samostatný skript pro teplotu, samostatný pro tlak a totéž pro vlhkost.
Zápis v souboru pocasi.conf pak vypadá následovně:
dynamic.1.name=vlhkost
dynamic.1.source=python /home/pi/vlhkost.py
dynamic.1.regexp=(.*)
dynamic.1.postprocess=sprintf("%.0f", $1)
dynamic.1.rrd=GAUGE
První řádek určuje vlastně název sbírané hodnoty. Následuje spuštění potřebného příkazu pro zjištění hodnoty. Regulární výraz v tomto případě říká, že si má rpimonitor vzít vše, co mu ten příkaz vrátil. Následuje zaokrouhlení na celá čísla a způsob uložení do databáze.
Podobně jsem dopsal konfiguraci pro teplotu a tlak.
Zápis pro status jsem vytvořil následující:
web.status.1.content.1.name=Počasí
web.status.1.content.1.icon=cpu_temp.png
web.status.1.content.1.line.1=JustGageBar("Teplota", data.teplota+"°C", 0, data.teplota, 40, 100, 80)+" "+JustGageBar("Vlhkost", data.vlhkost+" %", 0, data.vlhkost, 100, 100, 80)+" "+JustGageBar("Tlak", data.tlak+" hPa", 900, data.tlak, 1100, 100, 80)
Říkám tím RPi-Monitoru, že na titulní straně chci ukazatel tří hodnot o počasí v podobné formě, jako je výchozí zobrazení teploty procesoru. V dokumentaci jen chtělo kouknout, jaké je pořadí parametrů ve funkci JustGageBar pro vykreslení údajů. Výsledek:
Nejsložitější bylo dát dohromady zápis, který posbíraná data zobrazí v RPi-Monitoru na kartě Statistics:
web.statistics.1.content.1.name=Počasí
web.statistics.1.content.1.graph.1=teplota
web.statistics.1.content.1.ds_graph_options.teplota.label=Teplota
web.statistics.1.content.1.graph.2=vlhkost
web.statistics.1.content.1.ds_graph_options.vlhkost.label=Vlhkost
web.statistics.1.content.1.graph.3=tlak
web.statistics.1.content.1.ds_graph_options.tlak.label=Tlak
web.statistics.1.content.1.ds_graph_options.tlak.yaxis=2
První trojice řádků říká, že v rozbalovačce se statistikama budu chtít novou položku nazvanou Počasí. Následně vykreslím první křivku v grafu, která bude vycházet z dat pro hodnotu teplota. Tak ji mám pojmenovanou výše v konfiguraci pro dynamickou extrakci údajů. Přidal jsem název křivky a vyzkoušel zobrazení.
Chvíli mi trvalo, než jsem v dokumentaci pochopil, jak dostat další křivky do téhož grafu. Trik je v tom, že už nepřidáváte nový název, ale jen změníte číslo grafu. Do něj se pak přiřadí hodnota dalšího údaje, který chcete v grafu vykreslit. V posledním případě jsem ještě přidal zobrazení druhé osy y. To proto, aby se naměřený tlak nezobrazil ve strašném nepoměru k číslům teploty a vlhkosti. Jejich křivky by jinak byly nečitelné.
Výsledek je myslím povedený. Mohl bych si ještě v konfiguraci pohrát s barvama, ale takto mi to zatím stačí. Grafy reagují na myš, najetí zobrazí odpovídající hodnotu. Označením myší pro vybraný interval si graf přiblížíte.
A co dál?
Tím je můj první projekt na Raspberry Pi, ze kterého je nějaký reálný užitek, hotov. RPi-Monitor má i vlastní API. Nebo spíše výstup do JSONu. Kdybych měl k tomuto Raspberry Pi připojený displej, mohl bych data z JSONu stahovat a nějak zobrazovat. Třeba na to ještě přijde.
Zatím mě spíše trápí, že mi na stole leží nezakrytovaný počítač a z něj trčí dráty se senzorem. Už jsem byl v brněnském FabLabu, koukal se na 3D tiskárny a brzy tento problém vyřeším. Doufejme.
Krabičku s monitoringem pak budu moci dát kamkoli. Jako další krok plánuju doplnění monitoringu u sledování dostupnosti webů, které mám ve správě. Jen takové orientační. A možná nebude špatné přidat i hlídání exspirace jejich SSL certifikátů.
Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.
Přidat komentář