Indholdsfortegnelse:

DIY husovervågning med RaspberryPi og Cloud4Rpi: 5 trin
DIY husovervågning med RaspberryPi og Cloud4Rpi: 5 trin

Video: DIY husovervågning med RaspberryPi og Cloud4Rpi: 5 trin

Video: DIY husovervågning med RaspberryPi og Cloud4Rpi: 5 trin
Video: ZEITGEIST: MOVING FORWARD | OFFICIAL RELEASE | 2011 2024, November
Anonim
DIY husovervågning med RaspberryPi og Cloud4Rpi
DIY husovervågning med RaspberryPi og Cloud4Rpi

En vinterweekend tog jeg til mit landsted, og fandt ud af at det var meget koldt der. Der var sket noget med elektricitet og jordafbryder havde slukket den, og varmen gik også af. Jeg var heldig, at jeg kom der, ellers ville alt i flere dage have været frosset, hvilket er meget dårligt for rørene og radiatorerne.

Jeg havde flere Raspberry Pi’er rundt omkring og en termisk sensor, så jeg tænkte - hvorfor laver jeg ikke en simpel overvågningsenhed? Instruktionerne nedenfor forudsætter, at du har en Raspberry Pi med Raspbian og netværksforbindelse konfigureret. I mit tilfælde er det Raspberry Pi B+ med Raspbian (2018-06-27-raspbian-stretch-lite).

Trin 1: Temperaturovervågning

Temperaturovervågning
Temperaturovervågning
Temperaturovervågning
Temperaturovervågning

Hvordan tilsluttes en DS18B20 temperatursensor? Google bare hvordan du gør dette, og du vil se mange billeder som dette:

I mit tilfælde havde jeg sorte, gule og røde ledninger. Den sorte er jordet, går til jordstift, den røde er strøm - går til 3,3v pin, og den gule er data - skal gå til GPIO4 pin, med 4,7 kOm modstand tilsluttet mellem data og strøm. Bemærk, du kan tilslutte flere sensorer parallelt (de er digitale og har forskellige adresser), behøver du kun en modstand. Efter tilslutning af din sensor skal du aktivere 1Wire i raspi-config:

sudo raspi-config

Gå til 5 grænsefladeindstillinger, aktiver P7 1-Wire og genstart.

Derefter kan du teste, om du kan se sensoren:

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

Du bør se noget i stil med dette:

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

28–00044eae2dff er vores temperatursensor.

Hardware er klar. Nu skal jeg konfigurere overvågningsdelen. Jeg har brug for noget, der viser mig dataene og giver mig besked, hvis enheden er afbrudt et stykke tid, eller der ikke er strøm, eller temperaturen er lav. Dette kan naturligvis ikke være hindbær pi selv, der skulle være en server eller service på internettet, der overvåger min enhed.

Jeg kan oprette en simpel server, få en hosting og konfigurere alt, men ærligt, jeg vil ikke. Heldigvis har nogen allerede tænkt over dette og oprettet cloud4rpi.io - et cloud -kontrolpanel til din enhed.

Trin 2: Opsætning af Cloud4Rpi.io

Opsætning af Cloud4Rpi.io
Opsætning af Cloud4Rpi.io

Cloud4Rpi giver en service, der lader din enhed sende og modtage data ved hjælp af MQTT- eller HTTP -protokoller. De har et klientbibliotek til Python, så jeg vil bruge Python.

Python -eksempler, der følger med Cloud4Rpi -service, indeholder allerede kode til DS18B20 temp -sensor.

Så jeg gik til https://cloud4rpi.io, oprettede en konto og tilføjede en ny enhed der. Enhedssiden har et token - en streng, der identificerer enheden, og som skal angives i det program, der sender data.

Til at begynde med er det altid en god idé at opdatere en pakkeleder og opgradere pakker (Bemærk: det kan tage timer, hvis du ikke har opgraderet et stykke tid):

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

Installer derefter git, Python og dets pakkeleder Pip:

sudo apt-get install git python python-pip

Installer derefter cloud4rpi Python -bibliotek:

sudo pip installer cloud4rpi

Endelig er jeg klar til at skrive mit kontrolprogram. Jeg starter fra et eksempel, der er tilgængeligt på

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

Hovedprogramfilen er control.py - jeg skal ændre den efter mine behov. Rediger først programmet og indsæt et token:

sudo nano control.py

Find en linje DEVICE_TOKEN = '…'], og angiv et enhedstoken der. Derefter kan jeg simpelthen køre programmet: Det fungerer og rapporterer en temperatur i RoomTemp -variablen:

sudo python control.py

Det fungerer og rapporterer en temperatur i RoomTemp -variablen.

Bemærk, at den opdager alle onewire ds18b20 sensorer

ds_sensors = ds18b20. DS18B20.find_all ()

og bruger den først fundet sensor:

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

Ok, det var let, fordi prøveprogrammet har alt, hvad der kræves for at fungere med ds18b20 -sensor på Raspberry Pi. Nu skal jeg finde måden at rapportere strømstatus på.

Trin 3: UPS -overvågning

UPS -overvågning
UPS -overvågning

Næste ting, jeg vil overvåge, er UPS -status, så hvis der er strømafbrydelse, ved jeg det, før alt afbrydes.

Jeg har en APC UPS med USB -kontrol, så jeg googlede hurtigt og fandt ud af, at jeg har brug for apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… Jeg forsøgte flere gange at installere det via apt-get, og det fungerede ikke for mig af forskellige årsager. Jeg viser, hvordan du installerer det fra kilderne.

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

Derefter redigerer jeg apcupsd.conf for at oprette forbindelse til min UPS via usb.

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

Nu kan jeg tilslutte USB -kabel fra UPS til RaspberryPi og teste, om UPS ville blive fundet.

sudo apctest

Det burde ikke give dig nogen fejlmeddelelser.

Nu skulle sevice apcupsd startes:

sudo systemctl start apcupsd

For at spørge UPS -status kan jeg bruge en statuskommando:

sudo /etc/init.d/apcupsd status

Og det ville udsende noget som dette:

APC: 001, 035, 0855DATO: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSION: 3.14.14 (31. maj 2016) debian UPSNAME: vcontrol CABLE: USB Cable DRIVER: USB UPS Driver UPSMODE: Stand Alone STARTTID: 2018-10-14 16:54:28 +0300 MODEL: Back-UPS XS 650CI STATUS: ONLINE LINEV: 238,0 Volt LOADPCT: 0,0 Procent BCHARGE: 100,0 Procent TIDLEFT: 293,3 minutter MBATTCHG: 5 procent MINTIMEL: 3 minutter MAXTIME: 0 sekunder SINSE: Medium LOTRANS: 140,0 volt HITRANS: 300,0 volt ALARMDEL: 30 sekunder BATTV: 14,2 volt LASTXFER: Ingen overførsler siden drejning NUMXFERS: 0 TONBATT: 0 sekunder CUMONBATT: 0 sekunder XOFFBATT: N/A STATFLAG: 0x0TAT08: 0x0TAT08: 0x0TAT08: 2014-06-10 NOMINV: 230 Volt NOMBATTV: 12,0 Volt NOMPOWER: 390 Watt FIRMWARE: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

Jeg har brug for en status - som er linjen "STATUS:".

Cloud4rpi -biblioteket indeholder et modul 'rpy.py', der returnerer Raspberry Pi -systemparametre, såsom værtsnavn eller cpu -temperatur. Da alle disse params er et resultat af at køre nogle kommandoer og parsingoutput, indeholder den også en praktisk 'parse_output' -funktion, der gør præcis, hvad jeg har brug for. Sådan får du min UPS -status:

def ups_status (): resultat = rpi.parse_output (r'STATUS / s+: / s+(S+) ', [' /etc/init.d/apcupsd ',' status ']) hvis resultat: returneresultat andet: return 'UKENDT'

For at sende denne status til cloud4rpi skal jeg erklære en variabel UPSStatus og binde den til min ups_status -funktion: Nu kan jeg køre mit program:

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

Og jeg kan straks se min variabel på cloud4rpi -enhedsiden.

Trin 4: Forberedelse til "produktion"

Forbereder sig på "produktion"
Forbereder sig på "produktion"

Alt fungerer, og nu skal jeg forberede min enhed til uovervåget tilstand.

Til at begynde med vil jeg justere tidsintervaller. Afstemningsinterval definerer, hvor ofte programmet kontrollerer for temperatur og UPS -status - indstil det til et sekund.

Resultaterne sendes til skyen hvert 5. minut og diagnostiske oplysninger - hver time.

# KonstanterDATA_SENDING_INTERVAL = 300 # sek DIAG_SENDING_INTERVAL = 3600 # sek POLL_INTERVAL = 1 # sek

Når UPS -status ændres - vil jeg ikke have, at min enhed venter i 5 minutter, og jeg sender data med det samme. Så jeg har lidt ændret hovedsløjfen, og det ser sådan ud:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE', mens True: newUPS = ups_status () hvis (data_timer <= 0) eller (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS hvis 0: device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL sleep (POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL

Test: Kør script:

sudo python control.py

Og jeg kan se UPS -status på min enheds side.

Hvis jeg slukker for UPS -strømmen, ændres status på et par sekunder, så alt fungerer. Nu skal jeg starte apcupsd og min control.py ved systemstart. Apcupsd -tjenesten er gammel, og for at starte den på moderne raspbian skal jeg ændre /etc/init.d/apcupsd -filen ved at tilføje disse linjer et sted øverst:

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

Aktiver derefter tjenesten:

sudo systemctl aktivere apcupsd

Start derefter tjenesten:

sudo systemctl start apcupsd

Nu startes apcupsd ved systemstart.

For at installere control.py som en tjeneste brugte jeg det medfølgende service_install.sh script:

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

Nu er servicen startet, og den skal overleve en genstart.

Trin 5: Opsætning af et kontrolpanel

Opsætning af et kontrolpanel
Opsætning af et kontrolpanel

Cloud4rpi lader mig konfigurere et kontrolpanel til min enhed. Du kan tilføje "widgets" og binde dem til enhedsvariabler.

Min enhed har to skrivebeskyttede variabler - RoomTemp og UPSStatus:

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

Jeg tilføjede 3 widgets - Nummer til RoomTemp, Tekst til UPSStatus og et diagram til RoomTemp.

Jeg kan konfigurere advarsler, så jeg modtager en e -mail, når temperaturen er uden for det angivne område, UPS gik offline eller enheden selv ikke sender data, når den skulle. Nu kan jeg være sikker på, at mit landsted er ok, og jeg kan få besked når noget er galt, så jeg kan ringe til naboer og bede dem om at kontrollere, hvad der foregår. Her er den faktiske kode for control.py.

Anbefalede: