Sisällysluettelo:

DIY -talon valvonta RaspberryPi: n ja Cloud4Rpi: n avulla: 5 vaihetta
DIY -talon valvonta RaspberryPi: n ja Cloud4Rpi: n avulla: 5 vaihetta

Video: DIY -talon valvonta RaspberryPi: n ja Cloud4Rpi: n avulla: 5 vaihetta

Video: DIY -talon valvonta RaspberryPi: n ja Cloud4Rpi: n avulla: 5 vaihetta
Video: BlitzWolf BW-IS22 - Сигнализация, wi-fi + GSM, Tuya Smart, интеграция и управление в Home Assistant 2024, Marraskuu
Anonim
DIY -talon valvonta RaspberryPi: n ja Cloud4Rpi: n avulla
DIY -talon valvonta RaspberryPi: n ja Cloud4Rpi: n avulla

Eräänä talviviikonloppuna menin maalaistalooni ja huomasin, että siellä oli hyvin kylmä. Jotain oli tapahtunut sähkön kanssa ja vikavirtasuojakytkin oli sammuttanut sen, ja myös lämmitys katkesi. Olin onnekas, kun tulin sinne, muuten muutamassa päivässä kaikki olisi jäätynyt, mikä on erittäin huono putkille ja pattereille.

Minulla oli useita Raspberry Pi -laitteita ja lämpöanturi, joten ajattelin - miksi en tee yksinkertaista valvontalaitetta? Alla olevissa ohjeissa oletetaan, että sinulla on Raspberry Pi, jossa on Raspbian ja verkkoyhteys. Minun tapauksessani se on Raspberry Pi B+ ja Raspbian (2018-06-27-raspbian-stretch-lite).

Vaihe 1: Lämpötilan valvonta

Lämpötilan valvonta
Lämpötilan valvonta
Lämpötilan valvonta
Lämpötilan valvonta

Kuinka kytkeä DS18B20 -lämpötila -anturi? Googlaamalla miten tämä tehdään, näet paljon tämänkaltaisia kuvia:

Minun tapauksessani minulla oli musta, keltainen ja punainen johto. Musta on maadoitettu, menee maadoitusnastaan, punainen on virta - menee 3,3 voltin nastaan ja keltainen on data - pitäisi mennä GPIO4 -nastaan, jossa 4,7 kOm: n vastus on kytketty datan ja virran välille. rinnakkain (ne ovat digitaalisia ja niillä on eri osoitteet), tarvitset vain yhden vastuksen. Kun olet liittänyt anturin, sinun on otettava 1Wire käyttöön raspi-configissa:

sudo raspi-config

Siirry 5 liitäntävaihtoehtoon, ota P7 1-Wire käyttöön ja käynnistä uudelleen.

Sitten voit testata, näetkö anturin:

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

Sinun pitäisi nähdä jotain tällaista:

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

28–00044eae2dff on lämpötila -anturimme.

Laitteisto on valmis. Nyt minun on asennettava seurantaosa. Tarvitsen jotain, joka näyttäisi minulle tiedot ja ilmoittaisi minulle, jos laite on irrotettu hetkeksi tai siinä ei ole virtaa tai lämpötila on alhainen. Ilmeisesti tämä ei voi olla vadelma pi itse, Internetissä pitäisi olla jokin palvelin tai palvelu, joka valvoo laitettani.

Voin luoda yksinkertaisen palvelimen, hankkia isännöinnin ja määrittää kaiken, mutta honely, en halua. Onneksi joku on jo ajatellut tätä ja luonut laitteellesi cloud4rpi.io - pilvipalvelun.

Vaihe 2: Cloud4Rpi.io: n määrittäminen

Cloud4Rpi.io: n määrittäminen
Cloud4Rpi.io: n määrittäminen

Cloud4Rpi tarjoaa palvelun, jonka avulla laitteesi voi lähettää ja vastaanottaa tietoja MQTT- tai HTTP -protokollien avulla. Heillä on asiakaskirjasto Pythonille, joten käytän Pythonia.

Cloud4Rpi -palvelun mukana tulevat Python -esimerkit sisältävät jo koodin DS18B20 -lämpötila -anturille.

Joten menin osoitteeseen https://cloud4rpi.io, loin tilin ja lisäsin uuden laitteen sinne. Laitesivulla on tunnus - merkkijono, joka tunnistaa laitteen ja joka on määritettävä tietoja lähettävässä ohjelmassa.

Aluksi on aina hyvä päivittää paketinhallinta ja päivittää paketit (huomaa: voi kestää tunteja, jos et ole päivittänyt jonkin aikaa):

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

Asenna sitten git, Python ja sen paketinhallinta Pip:

sudo apt-get install git python python-pip

Asenna sitten cloud4rpi Python -kirjasto:

sudo pip asenna cloud4rpi

Lopuksi olen valmis kirjoittamaan ohjausohjelmani. Aloitan esimerkistä, joka on saatavilla osoitteessa

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

Pääohjelmatiedosto on control.py - minun on muokattava sitä tarpeitani varten. Muokkaa ensin ohjelmaa ja liitä merkki:

sudo nano control.py

Etsi rivi DEVICE_TOKEN = '…'] ja määritä siellä laitteen tunnus. Sen jälkeen voin yksinkertaisesti suorittaa ohjelman: Se toimii ja ilmoittaa lämpötilan RoomTemp -muuttujassa:

sudo python control.py

Se toimii ja ilmoittaa RoomTemp -muuttujan lämpötilan.

Huomaa, että se löytää kaikki onewire ds18b20 -anturit

ds_sensors = ds18b20. DS18B20.find_all ()

ja käyttää ensimmäistä löydettyä anturia:

RoomTemp ': {' type ':' numeric ',' bind ': ds_sensors [0] jos ds_sensors else Ei mitään}

Ok, se oli helppoa, koska näyteohjelmassa on kaikki mitä tarvitaan Raspberry Pi -laitteen ds18b20 -anturin kanssa työskentelyyn. Nyt minun on löydettävä tapa ilmoittaa virran tila.

Vaihe 3: UPS -valvonta

UPS -valvonta
UPS -valvonta

Seuraava asia, jota haluan seurata, on UPS -tila, joten jos sähkökatkos tulee, tiedän siitä ennen kuin kaikki katkeaa.

Minulla on APC UPS USB -ohjauksella, joten googletin nopeasti ja huomasin, että tarvitsen apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… Yritin useita kertoja asentaa sen apt-getin kautta, mutta se ei toiminut minulle useista syistä. Näytän kuinka asentaa se lähteistä.

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

Sitten muokkaan apcupsd.confia yhdistämään UPS -laitteeni USB -liitännän kautta.

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

Nyt voin liittää USB -kaapelin UPS: stä RaspberryPiin ja testata, löytyisikö UPS.

sudo apctest

Sen ei pitäisi antaa sinulle virheilmoituksia.

Nyt palvelun apcupsd pitäisi käynnistää:

sudo systemctl käynnistä apcupsd

UPS: n tilan salaamiseen voin käyttää tilakomentoa:

sudo /etc/init.d/apcupsd -tila

Ja se antaisi jotain tällaista:

APC: 001, 035, 0855PÄIVÄMÄÄRÄ: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSIO: 3.14.14 (31. toukokuuta 2016) debian UPSNAME: vcontrol KAAPELI: USB-kaapeliohjain: USB UPS -ohjaimen UPSMODE: Yksin STARTTIME: 2018-10-14 16:54:28 +0300 MALLI: Back-UPS XS 650CI TILA: ONLINE LINEV: 238.0 volttia LOADPCT: 0.0 Prosentti BCHARGE: 100.0 Prosentti AIKA: 293.3 minuuttia MBATTCHG: 5 prosenttia MINTIMEL: 3 minuuttia MAXTIME: 0 sekuntia SENSE: Keskikokoiset LOTRANIT: 140,0 volttia HITRANS: 300,0 volttia HÄLYTYS: 30 sekuntia BATTV: 14,2 volttia LASTXFER: Ei siirtoja vuoron jälkeen NUMXFERS: 0 TONBATT: 0 sekuntia CUMONBATT: 0 sekuntia XOFFBATT: N: A 0ATAT2400: 2014-06-10 NOMINV: 230 volttia NOMBATTV: 12,0 volttia TEHO: 390 wattia FIRMWARE: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

Tarvitsen tilan - joka on "TILA:" -rivi.

Cloud4rpi -kirjasto sisältää moduulin rpy.py, joka palauttaa Raspberry Pi -järjestelmän parametrit, kuten isäntänimen tai suorittimen lämpötilan. Koska kaikki nämä parametrit ovat seurausta joidenkin komentojen suorittamisesta ja tuloksen tulostuksesta, se sisältää myös kätevän "parse_output" -toiminnon, joka tekee juuri sen, mitä tarvitsen. Näin saan UPS -tilani:

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

Jotta voin lähettää tämän tilan cloud4rpi: lle, minun on ilmoitettava muuttuja UPSStatus ja sitottava se ups_status -funktiooni: Nyt voin suorittaa ohjelman:

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

Ja näen muuttujan heti cloud4rpi -laitesivulla.

Vaihe 4: Valmistautuminen "tuotantoon"

Valmistautuminen "tuotantoon"
Valmistautuminen "tuotantoon"

Kaikki toimii, ja nyt minun on valmisteltava laite valvomattomaan tilaan.

Aluksi aion säätää aikavälejä. Kyselyväli määrittää, kuinka usein ohjelma tarkistaa lämpötilan ja UPS -tilan - aseta se sekuntiin.

Tulokset lähetetään pilveen 5 minuutin välein ja diagnostiikkatiedot tunnin välein.

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

Kun UPS -tila muuttuu - en halua laitteeni odottavan 5 minuuttia ja lähetän tiedot välittömästi. Joten olen hieman muuttanut pääsilmukkaa ja se näyttää tältä:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE', kun taas True: newUPS = ups_status () if (data_timer <= 0) tai (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS <diag device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL lepotila (POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL

Testaus: suorita komentosarja:

sudo python control.py

Ja voin katsoa UPS: n tilaa laitesivultani.

Jos sammutan UPS -virran, tila muuttuu muutamassa sekunnissa, joten kaikki toimii. Nyt minun on käynnistettävä apcupsd ja control.py järjestelmän käynnistyksen yhteydessä. Apcupsd -palvelu on vanha ja aloittaakseni sen nykyaikaisella raspbianilla, minun pitäisi muokata /etc/init.d/apcupsd -tiedostoa lisäämällä nämä rivit jonnekin yläreunaan:

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

Ota sitten palvelu käyttöön:

sudo systemctl ottaa apcupsd käyttöön

Käynnistä sitten palvelu:

sudo systemctl käynnistä apcupsd

Nyt apcupsd käynnistetään järjestelmän käynnistyksen yhteydessä.

Asentamalla control.py palveluksi käytin mukana toimitettua service_install.sh -komentosarjaa:

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

Nyt palvelu on aloitettu ja se selviää uudelleenkäynnistyksestä.

Vaihe 5: Ohjauspaneelin asentaminen

Ohjauspaneelin asentaminen
Ohjauspaneelin asentaminen

Cloud4rpi antaa minun määrittää ohjauspaneelin laitteelleni. Voit lisätä widgettejä ja sitoa ne laitemuuttujiin.

Laitteessani on kaksi vain luku -muuttujaa - RoomTemp ja UPSStatus:

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

Lisäsin 3 widgettiä - RoomTempin numero, UPSStatusin teksti ja RoomTempin kaavion.

Voin asettaa hälytyksiä, joten saan sähköpostiviestin, kun lämpötila on määritetyn alueen ulkopuolella, UPS siirtyi offline -tilaan tai laite ei itse lähetä tietoja silloin, kun sen pitäisi olla. kun jotain on vialla, voin soittaa naapureille ja pyytää heitä tarkistamaan, mitä tapahtuu. Tässä on control.py: n todellinen koodi.

Suositeltava: