Innholdsfortegnelse:
- Trinn 1: Temperaturovervåking
- Trinn 2: Konfigurere Cloud4Rpi.io
- Trinn 3: UPS -overvåking
- Trinn 4: Forberedelse til "produksjon"
- Trinn 5: Konfigurere et kontrollpanel
Video: DIY husovervåking med RaspberryPi og Cloud4Rpi: 5 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:23
En vinterhelg dro jeg til landstedet mitt, og fant ut at det var veldig kaldt der. Noe hadde skjedd med strøm og jordfeilbryter hadde slått den av, og oppvarmingen gikk også av. Jeg var heldig som kom dit, ellers hadde alt på flere dager vært frosset ned, noe som er veldig dårlig for rørene og radiatorene.
Jeg hadde flere Raspberry Pi’er rundt, og en termisk sensor, så jeg tenkte - hvorfor lager jeg ikke en enkel overvåkingsenhet? Instruksjonene nedenfor forutsetter at du har konfigurert en Raspberry Pi med Raspbian og nettverkstilkobling. I mitt tilfelle er det Raspberry Pi B+ med Raspbian (2018–06–27-raspbian-stretch-lite).
Trinn 1: Temperaturovervåking
Hvordan koble til en DS18B20 temperatursensor? Bare google hvordan du gjør dette, så ser du mange bilder som dette:
I mitt tilfelle hadde jeg svarte, gule og røde ledninger. Den svarte er jordet, går til jordpinnen, den røde er strøm - går til 3,3v pinne, og den gule er data - skal gå til GPIO4 -pinnen, med 4,7 kOm motstand tilkoblet mellom data og strøm. Merk, du kan koble til flere sensorer parallelt (de er digitale og har forskjellige adresser) trenger du bare en motstand. Etter at du har koblet til sensoren, bør du aktivere 1Wire i raspi-config:
sudo raspi-config
Gå til 5 grensesnittalternativer, aktiver P7 1-Wire og start på nytt.
Deretter kan du teste om du kan se sensoren:
sudo modprobe w1-gpiosudo modprobe w1-thermls/sys/buss/w1/enheter/
Du bør se noe slikt:
pi@vcontrol: ~ $ ls/sys/bus/w1/devices/28–00044eae2dff w1_bus_master1
28–00044eae2dff er temperatursensoren vår.
Maskinvaren er klar. Nå må jeg sette opp overvåkningsdelen. Jeg trenger noe som viser meg dataene og varsler meg hvis enheten er koblet fra en stund eller det ikke er strøm, eller temperaturen er lav. Dette kan åpenbart ikke være bringebær pi selv, det bør være en server eller tjeneste på internett som overvåker enheten min.
Jeg kan lage en enkel server, få en hosting og sette opp alt, men ærlig, jeg vil ikke. Heldigvis har noen allerede tenkt på dette og opprettet cloud4rpi.io - et skykontrollpanel for enheten din.
Trinn 2: Konfigurere Cloud4Rpi.io
Cloud4Rpi tilbyr en tjeneste som lar enheten sende og motta data ved hjelp av MQTT- eller HTTP -protokoller. De har et klientbibliotek for Python, så jeg bruker Python.
Python -eksempler som følger med Cloud4Rpi -tjenesten inneholder allerede kode for DS18B20 temp -sensor.
Så jeg gikk til https://cloud4rpi.io, opprettet en konto og la til en ny enhet der. Enhetssiden har et token - en streng som identifiserer enheten, og som bør spesifiseres i programmet som sender data.
Til å begynne med er det alltid en god idé å oppdatere en pakkeleder og oppgradere pakker (merk: det kan ta timer hvis du ikke har oppgradert på en stund):
sudo apt-get update && sudo apt-get upgrade
Installer deretter git, Python og pakkebehandleren Pip:
sudo apt-get install git python python-pip
Installer deretter cloud4rpi Python -bibliotek:
sudo pip installer cloud4rpi
Til slutt er jeg klar til å skrive kontrollprogrammet mitt. Jeg starter fra et eksempel tilgjengelig på
git-klon https://github.com/cloud4rpi/cloud4rpi-raspberrypi… cloud4rpicd cloud4rpi
Hovedprogramfilen er control.py - jeg må endre den etter mine behov. Rediger først programmet og lim inn et token:
sudo nano control.py
Finn en linje DEVICE_TOKEN = '…'] og angi et enhetstoken der. Etter det kan jeg bare kjøre programmet: Det fungerer og rapporterer en temperatur i RoomTemp -variabelen:
sudo python control.py
Det fungerer og rapporterer en temperatur i RoomTemp -variabelen.
Vær oppmerksom på at den oppdager alle onewire ds18b20 sensorer
ds_sensors = ds18b20. DS18B20.find_all ()
og bruker den først funnet sensoren:
RoomTemp ': {' type ':' numeric ',' bind ': ds_sensors [0] if ds_sensors else None}
Ok, det var enkelt, fordi prøveprogrammet har alt som kreves for å fungere med ds18b20 -sensor på Raspberry Pi. Nå må jeg finne måten å rapportere strømstatus på.
Trinn 3: UPS -overvåking
Det neste jeg vil overvåke er UPS -status, så hvis det er strømbrudd, vil jeg vite om det før alt kobles fra.
Jeg har en APC UPS med USB -kontroll, så jeg googlet raskt og fant ut at jeg trenger apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… Jeg prøvde flere ganger å installere det via apt-get, og det fungerte ikke for meg av forskjellige årsaker. Jeg viser hvordan du installerer det fra kildene.
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
Deretter redigerer jeg apcupsd.conf for å koble til UPS -en min via usb.
sudo nano /etc/apcupsd/apcupsd.conf# #UPSCABLE smart UPSCABLE usb ##UPSTYPE apcsmart #DEVICE/dev/ttyS0 UPSTYPE usb DEVICE
Nå kan jeg koble USB -kabelen fra UPS til RaspberryPi og teste om UPS ville bli funnet.
sudo apctest
Det skal ikke gi deg noen feilmeldinger.
Nå bør sevice apcupsd startes:
sudo systemctl start apcupsd
For å spørre UPS -status kan jeg bruke en statuskommando:
sudo /etc/init.d/apcupsd status
Og det ville gi noe som dette:
APC: 001, 035, 0855DATO: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSION: 3.14.14 (31. mai 2016) debian UPSNAME: vcontrol CABLE: USB Cable DRIVER: USB UPS Driver UPSMODE: Stand Alone STARTTID: 2018-10-14 16:54:28 +0300 MODELL: Back-UPS XS 650CI STATUS: ONLINE LINEV: 238.0 Volt LOADPCT: 0.0 Prosent BCHARGE: 100.0 Prosent TIDLEFT: 293.3 minutter MBATTCHG: 5 prosent MINTIMEL: 3 minutter MAXTIME: 0 sekunder SENSE: Middels LOTRANS: 140,0 volt HITRANS: 300,0 volt ALARMDEL: 30 sekunder BATTV: 14,2 volt LASTXFER: Ingen overføringer siden turnon 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 trenger en status - som er linjen "STATUS:".
Cloud4rpi -biblioteket inneholder en modul ‘rpy.py’ som returnerer Raspberry Pi -systemparametere, for eksempel vertsnavn eller cpu -temperatur. Siden alle disse paramene er et resultat av å kjøre noen kommandoer og analysere utdata, inneholder den også en praktisk 'parse_output' -funksjon som gjør akkurat det jeg trenger. Slik får du UPS -statusen min:
def ups_status (): result = rpi.parse_output (r'STATUS / s+: / s+(S+) ', [' /etc/init.d/apcupsd ',' status ']) if result: return result else: return 'UKJENT'
For å sende denne statusen til cloud4rpi, må jeg deklarere en variabel UPSStatus og binde den til ups_status -funksjonen min: Nå kan jeg kjøre programmet mitt:
variabler = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}
Og jeg kan umiddelbart se variabelen min på cloud4rpi -enhetssiden.
Trinn 4: Forberedelse til "produksjon"
Alt fungerer, og nå må jeg forberede enheten til uovervåket modus.
Til å begynne med skal jeg justere tidsintervaller. Avstemningsintervallet definerer hvor ofte programmet sjekker temperatur og UPS -status - sett det til ett sekund.
Resultatene sendes til skyen hvert 5. minutt, og diagnostisk informasjon - hver time.
# KonstanterDATA_SENDING_INTERVAL = 300 # sek DIAG_SENDING_INTERVAL = 3600 # sek POLL_INTERVAL = 1 # sek
Når UPS -statusen endres - jeg vil ikke at enheten skal vente i 5 minutter, og jeg sender data umiddelbart. Så jeg har endret hovedløkken litt, og den ser slik ut:
data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' mens True: newUPS = ups_status () if (data_timer <= 0) eller (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS if 0: diag = device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL sleep (POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL
Testing: run script:
sudo python control.py
Og jeg kan se UPS -status på enhetssiden min.
Hvis jeg slår av UPS -strømmen, endres statusen i løpet av et par sekunder, så alt fungerer. Nå må jeg starte apcupsd og control.py på systemoppstarten. Apcupsd -tjenesten er gammel, og for å starte den på moderne raspbian, bør jeg endre /etc/init.d/apcupsd -filen ved å legge til disse linjene 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 deretter tjenesten:
sudo systemctl aktiver apcupsd
Start deretter tjenesten:
sudo systemctl start apcupsd
Nå vil apcupsd startes ved systemoppstart.
For å installere control.py som en tjeneste, brukte jeg det medfølgende service_install.sh -skriptet:
sudo bash service_install.sh ~/cloud4rpi/control.py
Nå er tjenesten startet, og den skal overleve en omstart.
Trinn 5: Konfigurere et kontrollpanel
Cloud4rpi lar meg sette opp et kontrollpanel for enheten min. Du kan legge til "widgets" og knytte dem til enhetsvariabler.
Enheten min har to skrivebeskyttede variabler - RoomTemp og UPSStatus:
variabler = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}
Jeg la til 3 widgets - Nummer for RoomTemp, Tekst for UPSStatus og et diagram for RoomTemp.
Jeg kan konfigurere varsler, så jeg mottar en e -post når temperaturen er utenfor det angitte området, UPS gikk frakoblet eller enheten selv ikke sender data når den skulle. Nå kan jeg være sikker på at huset mitt er ok, og jeg kan bli varslet når noe er galt, så jeg kan ringe naboer og be dem sjekke hva som skjer. Her er den faktiske koden til control.py.
Anbefalt:
RaspberryPi Islamic Prayers Watch & Alarm: 15 trinn (med bilder)
RaspberryPi Islamic Prayers Watch & Alarm: Muslimer rundt om i verden har fem bønner hver dag, og hver bønn må være på en bestemt tid på dagen. på grunn av den elliptiske måten planeten vår beveger seg rundt solen, noe som gjør at solen stiger og faller, varierer året rundt, at
Hvordan begynne med RaspberryPi: 9 trinn
Hvordan begynne med RaspberryPi: I denne instruksen skal jeg vise deg hvordan du begynner med RashpberryPi på en annen måte
RaspberryPi 3/4 utvidelseskort for å legge til ekstra funksjoner i Raspberry Pi: 15 trinn (med bilder)
RaspberryPi 3/4 utvidelseskort for å legge til ekstra funksjoner til Raspberry Pi: vi vet at bringebær pi 3/4 ikke kommer med innebygd ADC (analog til digital omformer) og RTC (sanntidsklokke), så jeg designer en PCB som inneholder 16 kanal 12bit ADC, RTC, SIM7600 4G -modul, trykknapper, reléer, USB -strøm, 5V strømutgang, 12V strøm
Smart kaffemaskinpumpe kontrollert av Raspberry Pi og HC-SR04 ultralydssensor og Cloud4RPi: 6 trinn
Smart kaffemaskinpumpe styrt av Raspberry Pi og HC-SR04 ultralydssensor og Cloud4RPi: I teorien er det bare en av tjue sjanser du må fylle vannet hver gang du går til kaffemaskinen for morgenkoppen. tank. I praksis ser det imidlertid ut til at maskinen på en eller annen måte finner en måte å alltid legge denne plikten på deg. De
Overvåk og registrer temperatur med Bluetooth LE og RaspberryPi: 9 trinn (med bilder)
Overvåk og registrer temperatur med Bluetooth LE og RaspberryPi: Denne instruksen handler om hvordan du setter sammen et multi-node temperaturovervåkingssystem med Bluetooth LE-sensorfeil fra Blue Radios (BLEHome) og RaspberryPi 3B Takket være utviklingen av Bluetooth LE-standarden er det nå lett tilgjengelig