Obsah:

DIY domácí monitorování s RaspberryPi a Cloud4Rpi: 5 kroků
DIY domácí monitorování s RaspberryPi a Cloud4Rpi: 5 kroků

Video: DIY domácí monitorování s RaspberryPi a Cloud4Rpi: 5 kroků

Video: DIY domácí monitorování s RaspberryPi a Cloud4Rpi: 5 kroků
Video: A Raspberry Pi 4 can do what! 2024, Listopad
Anonim
DIY monitorování domu s RaspberryPi a Cloud4Rpi
DIY monitorování domu s RaspberryPi a Cloud4Rpi

Jednoho zimního víkendu jsem šel do svého venkovského domu a zjistil, že je tam velká zima. Něco se stalo s elektřinou a jistič RCD jej vypnul a topení také zhaslo. Měl jsem štěstí, že jsem tam přišel, jinak by za několik dní bylo všechno zmrzlé, což je velmi špatné pro potrubí a radiátory.

Měl jsem kolem sebe několik Raspberry Pi a teplotní senzor, tak jsem si řekl - proč nevytvořím jednoduché monitorovací zařízení? Níže uvedené pokyny předpokládají, že máte Raspberry Pi s nastavením Raspbian a síťovým připojením. V mém případě je to Raspberry Pi B+ s Raspbianem (2018–06–27-raspbian-stret-lite).

Krok 1: Monitorování teploty

Monitorování teploty
Monitorování teploty
Monitorování teploty
Monitorování teploty

Jak připojit teplotní senzor DS18B20? Stačí si vygooglit, jak to udělat, a uvidíte spoustu obrázků, jako je tento:

V mém případě jsem měl černý, žlutý a červený vodič. Černá je uzemněná, jde na zemnící kolík, červená je napájení - jde na 3,3 V pin a žlutá je datová - měla by jít na pin GPIO4 s odporem 4,7 kOm připojeným mezi daty a napájením. Poznámka, můžete připojit několik senzorů paralelně (jsou digitální a mají různé adresy), potřebujete pouze jeden odpor. Po připojení senzoru byste měli povolit 1Wire v raspi-config:

sudo raspi-config

Přejděte na 5 možností rozhraní, povolte P7 1-Wire a restartujte počítač.

Poté můžete vyzkoušet, zda vidíte senzor:

sudo modprobe w1-gpiosudo modprobe w1-thermls/sys/bus/w1/devices/

Měli byste vidět něco takového:

pi@vcontrol: ~ $ ls/sys/bus/w1/devices/28–00044eae2dff w1_bus_master1

28–00044eae2dff je naše teplotní čidlo.

Hardware je připraven. Nyní musím nastavit monitorovací část. Potřebuji něco, co by mi ukázalo data a upozornilo mě, pokud je zařízení na chvíli odpojeno nebo není napájení, nebo je nízká teplota. Očividně to nemůže být samotný malinový pi, na internetu by měl být nějaký server nebo služba, která monitoruje moje zařízení.

Mohu vytvořit jednoduchý server, získat hosting a vše nastavit, ale laskavě, nechci. Naštěstí už na to někdo myslel a vytvořil cloud4rpi.io - cloudový ovládací panel pro vaše zařízení.

Krok 2: Nastavení Cloud4Rpi.io

Nastavení Cloud4Rpi.io
Nastavení Cloud4Rpi.io

Cloud4Rpi poskytuje službu, která umožňuje vašemu zařízení odesílat a přijímat data pomocí protokolů MQTT nebo HTTP. Mají klientskou knihovnu pro Python, takže použiji Python.

Příklady Pythonu, které jsou součástí služby Cloud4Rpi, již obsahují kód pro teplotní čidlo DS18B20.

Šel jsem tedy na https://cloud4rpi.io, vytvořil si účet a přidal tam nové zařízení. Stránka zařízení má token - řetězec, který identifikuje zařízení a který by měl být zadán v programu, který odesílá data.

Na začátek je vždy dobré aktualizovat správce balíčků a upgradovat balíčky (poznámka: může to trvat hodiny, pokud jste nějakou dobu neaktualizovali):

sudo apt-get update && sudo apt-get upgrade

Poté nainstalujte git, Python a jeho správce balíčků Pip:

sudo apt-get install git python python-pip

Poté nainstalujte knihovnu cloud4rpi Python:

sudo pip install cloud4rpi

Nakonec jsem připraven napsat svůj kontrolní program. Vycházím z příkladu dostupného na

klon git https://github.com/cloud4rpi/cloud4rpi-raspberrypi… cloud4rpicd cloud4rpi

Hlavní soubor programu je control.py - potřebuji jej upravit pro své potřeby. Nejprve upravte program a vložte token:

sudo nano control.py

Najděte řádek DEVICE_TOKEN = '…'] a zadejte tam token zařízení. Poté mohu jednoduše spustit program: Funguje a hlásí teplotu v proměnné RoomTemp:

sudo python control.py

Funguje a hlásí teplotu v proměnné RoomTemp.

Všimněte si, že objeví všechny senzory onewire ds18b20

ds_sensors = ds18b20. DS18B20.find_all ()

a používá první nalezený senzor:

RoomTemp ': {' type ':' numeric ',' bind ': ds_sensors [0] if ds_sensors else None}

Dobře, to bylo snadné, protože ukázkový program má vše, co je požadováno pro práci se senzorem ds18b20 na Raspberry Pi. Nyní musím najít způsob, jak nahlásit stav napájení.

Krok 3: Monitorování UPS

Monitorování UPS
Monitorování UPS

Další věc, kterou chci sledovat, je stav UPS, takže pokud dojde k výpadku napájení, budu o tom vědět, než se vše odpojí.

Mám APC UPS s ovládáním USB, takže jsem rychle googlil a zjistil, že potřebuji apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… Zkoušel jsem to několikrát nainstalovat pomocí apt-get a z různých důvodů mi to nefungovalo. Ukážu, jak jej nainstalovat ze zdrojů.

wget https://sourceforge.net/projects/apcupsd/files/ap…tar xvf apcupsd-3.14.14.tar.gz cd apcupsd-3.14.14./configure --enable-usb sudo make sudo make install

Poté upravím apcupsd.conf tak, aby se připojil k mému UPS přes USB.

sudo nano /etc/apcupsd/apcupsd.conf# #UPSCABLE smart UPSCABLE usb ##UPSTYPE apcsmart #DEVICE/dev/ttyS0 UPSTYPE usb DEVICE

Nyní mohu zapojit USB kabel z UPS do RaspberryPi a vyzkoušet, jestli by se našel UPS.

sudo apctest

Mělo by vám to poskytnout žádné chybové zprávy.

Nyní by měla být spuštěna služba apcupsd:

sudo systemctl start apcupsd

Chcete -li zjistit stav UPS, mohu použít stavový příkaz:

sudo /etc/init.d/apcupsd stav

A výstup by vypadal nějak takto:

APC: 001, 035, 0855DATUM: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERZE: 3.14.14 (31. května 2016) debian UPSNAME: vcontrol CABLE: USB Cable DRIVER: USB UPS Driver UPSMODE: Stand Alone STARTTIME: 2018-10-14 16:54:28 +0300 MODEL: Back-UPS XS 650CI STATUS: ONLINE LINEV: 238,0 Voltů LOADPCT: 0,0 procenta BCHARGE: 100,0 procenta TIMELEFT: 293,3 minut MBATTCHG: 5 procent MINTIMEL: 3 minuty MAXTIME: 0 Seconds SENSE: Medium LOTRANS: 140,0 Volts HITRANS: 300,0 Volts ALARMDEL: 30 Seconds BATTV: 14,2 Volts LASTXFER: Žádné přenosy od otočení NUMXFERS: 0 TONBATT: 0 Seconds CUMONBATT: 0 Seconds XOFFBATT: N0 A STATAG: 0: 2014-06-10 NOMINV: 230 Voltů NOMBATTV: 12,0 Voltů NOMPOWER: 390 W FIRMWARE: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

Potřebuji stav - což je řádek „STATUS:“.

Knihovna Cloud4rpi obsahuje modul „rpy.py“, který vrací systémové parametry Raspberry Pi, jako je název hostitele nebo teplota procesoru. Protože všechny tyto parametry jsou výsledkem spuštění některých příkazů a analýzy výstupu, obsahuje také praktickou funkci „parse_output“, která dělá přesně to, co potřebuji. Takto zjistím svůj stav UPS:

def ups_status (): result = rpi.parse_output (r'STATUS / s+: / s+(S+) ', [' /etc/init.d/apcupsd ',' status ']) if result: return result else: return 'NEZNÁMÝ'

K odeslání tohoto stavu do cloud4rpi musím deklarovat proměnnou UPSStatus a svázat ji s funkcí ups_status: Nyní mohu spustit svůj program:

variables = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}

A hned vidím svoji proměnnou na stránce zařízení cloud4rpi.

Krok 4: Příprava na „výrobu“

Příprava na „výrobu“
Příprava na „výrobu“

Všechno funguje a teď musím zařízení připravit do bezobslužného režimu.

Nejprve upravím časové intervaly. Interval dotazování určuje, jak často program kontroluje teplotu a stav UPS - nastavte jej na jednu sekundu.

Výsledky jsou odesílány do cloudu každých 5 minut a diagnostické informace - každou hodinu.

# ConstantsDATA_SENDING_INTERVAL = 300 # s DIAG_SENDING_INTERVAL = 3600 # s POLL_INTERVAL = 1 # s

Když se změní stav UPS - nechci, aby moje zařízení čekalo 5 minut a data odesílám okamžitě. Takže jsem mírně upravil hlavní smyčku a vypadá to takto:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' while True: newUPS = ups_status () if (data_timer <= 0) or (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS if diag_timer < device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL spánek (POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL

Testování: spustit skript:

sudo python control.py

A na stránce svého zařízení mohu sledovat stav UPS.

Pokud vypnu napájení UPS, stav se změní za několik sekund, takže vše funguje. Nyní potřebuji spustit apcupsd a můj control.py při spuštění systému. Služba Apcupsd je stará a abych ji spustil na moderním raspbianu, měl bych upravit soubor /etc/init.d/apcupsd přidáním těchto řádků někam nahoru:

### BEGIN INIT INFO # Poskytuje: apcupsd # Required-Start: $ all # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: APC UPS daemon… ### END INIT INFO#

Poté službu aktivujte:

sudo systemctl povolit apcupsd

Poté spusťte službu:

sudo systemctl start apcupsd

Nyní bude apcupsd spuštěno při spuštění systému.

K instalaci control.py jako služby jsem použil dodaný skript service_install.sh:

sudo bash service_install.sh ~/cloud4rpi/control.py

Nyní je služba spuštěna a přežije restart.

Krok 5: Nastavení ovládacího panelu

Nastavení ovládacího panelu
Nastavení ovládacího panelu

Cloud4rpi mi umožňuje nastavit ovládací panel pro mé zařízení. Můžete přidat „widgety“a svázat je s proměnnými zařízení.

Moje zařízení poskytuje dvě proměnné pouze pro čtení - RoomTemp a UPSStatus:

variables = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}

Přidal jsem 3 widgety - číslo pro RoomTemp, text pro UPSStatus a graf pro RoomTemp.

Mohu nastavit upozornění, takže dostanu e -mail, když je teplota mimo specifikovaný rozsah, UPS přejde do režimu offline nebo samotné zařízení neposílá data, když by mělo. Nyní si mohu být jistý, že můj venkovský dům je v pořádku a mohu být upozorněn když je něco špatně, mohu zavolat sousedům a požádat je, aby zkontrolovali, co se děje. Zde je skutečný kód control.py.

Doporučuje: