Innehållsförteckning:
- Steg 1: Temperaturövervakning
- Steg 2: Konfigurera Cloud4Rpi.io
- Steg 3: UPS -övervakning
- Steg 4: Förberedelse för "produktion"
- Steg 5: Konfigurera en kontrollpanel
Video: DIY husövervakning med RaspberryPi och Cloud4Rpi: 5 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:44
En vinterhelg gick jag till mitt hus och fick reda på att det var väldigt kallt där. Något hade hänt med el och jordfelsbrytaren hade stängt av och värmen gick också. Jag hade tur att jag kom dit, annars hade på flera dagar allt varit fryst vilket är mycket dåligt för rören och radiatorerna.
Jag hade flera Raspberry Pi och en termosensor, så jag tänkte - varför gör jag inte en enkel övervakningsenhet? Instruktionerna nedan förutsätter att du har en Raspberry Pi med Raspbian och nätverksanslutning konfigurerad. I mitt fall är det Raspberry Pi B+ med Raspbian (2018–06–27-raspbian-stretch-lite).
Steg 1: Temperaturövervakning
Hur ansluter jag en DS18B20 temperaturgivare? Googla bara hur du gör så ser du många bilder som den här:
I mitt fall hade jag svarta, gula och röda ledningar. Den svarta är jordad, går till jordstift, den röda är ström - går till 3,3v stift och den gula är data - ska gå till GPIO4 -stift, med 4,7 kOm motstånd anslutet mellan data och effekt. Observera att du kan ansluta flera sensorer parallellt (de är digitala och har olika adresser) behöver du bara ett motstånd. När du har anslutit din sensor bör du aktivera 1Wire i raspi-config:
sudo raspi-config
Gå till 5 gränssnittsalternativ, aktivera P7 1-Wire och starta om.
Sedan kan du testa om du kan se sensorn:
sudo modprobe w1-gpiosudo modprobe w1-thermls/sys/buss/w1/enheter/
Du borde se något så här:
pi@vcontrol: ~ $ ls/sys/bus/w1/devices/28–00044eae2dff w1_bus_master1
28–00044eae2dff är vår temperatursensor.
Hårdvaran är klar. Nu måste jag konfigurera övervakningsdelen. Jag behöver något som visar mig data och meddelar mig om enheten är frånkopplad ett tag eller om det inte finns någon ström eller temperaturen är låg. Uppenbarligen kan detta inte vara hallon pi själv, det borde finnas någon server eller tjänst på internet som övervakar min enhet.
Jag kan skapa en enkel server, skaffa en värd och ställa in allt, men det vill jag inte. Lyckligtvis har någon redan tänkt på detta och skapat cloud4rpi.io - en molnkontrollpanel för din enhet.
Steg 2: Konfigurera Cloud4Rpi.io
Cloud4Rpi tillhandahåller en tjänst som låter din enhet skicka och ta emot data med MQTT- eller HTTP -protokoll. De har ett klientbibliotek för Python, så jag använder Python.
Python -exempel som följer med Cloud4Rpi -tjänsten innehåller redan kod för DS18B20 temp -sensor.
Så jag gick till https://cloud4rpi.io, skapade ett konto och lade till en ny enhet där. Enhetssidan har en token - en sträng som identifierar enheten och som bör anges i programmet som skickar data.
Till att börja med är det alltid en bra idé att uppdatera en pakethanterare och uppgradera paket (observera: det kan ta timmar om du inte har uppgraderat på ett tag):
sudo apt-get update && sudo apt-get upgrade
Installera sedan git, Python och dess pakethanterare Pip:
sudo apt-get install git python python-pip
Installera sedan cloud4rpi Python -bibliotek:
sudo pip installera cloud4rpi
Slutligen är jag redo att skriva mitt kontrollprogram. Jag utgår från ett exempel som finns på
git-klon https://github.com/cloud4rpi/cloud4rpi-raspberrypi… cloud4rpicd cloud4rpi
Den huvudsakliga programfilen är control.py - jag måste ändra den efter mina behov. Redigera först programmet och klistra in en token:
sudo nano control.py
Hitta en rad DEVICE_TOKEN = '…'] och ange en enhetstoken där. Efter det kan jag helt enkelt köra programmet: Det fungerar och rapporterar en temperatur i RoomTemp -variabeln:
sudo python control.py
Det fungerar och rapporterar en temperatur i RoomTemp -variabeln.
Observera att den upptäcker alla onewire ds18b20 -sensorer
ds_sensors = ds18b20. DS18B20.find_all ()
och använder den först hittade sensorn:
RoomTemp ': {' type ':' numeric ',' bind ': ds_sensors [0] if ds_sensors else None}
Ok, det var enkelt, eftersom provprogrammet har allt som krävs för att fungera med ds18b20 -sensorn på Raspberry Pi. Nu måste jag hitta sättet att rapportera strömstatus.
Steg 3: UPS -övervakning
Nästa sak jag vill övervaka är UPS -status, så om det blir strömavbrott kommer jag att veta om det innan allt kopplas bort.
Jag har en APC UPS med USB -kontroll, så jag googlade snabbt och fann att jag behöver apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… Jag försökte installera det flera gånger via apt-get, och det fungerade inte för mig av olika skäl. Jag visar hur du installerar det från källorna.
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
Sedan redigerar jag apcupsd.conf för att ansluta till min UPS via usb.
sudo nano /etc/apcupsd/apcupsd.conf# #UPSCABLE smart UPSCABLE usb ##UPSTYPE apcsmart #DEVICE/dev/ttyS0 UPSTYPE usb DEVICE
Nu kan jag ansluta USB -kabeln från UPS till RaspberryPi och testa om UPS skulle hittas.
sudo apctest
Det ska inte ge dig några felmeddelanden.
Nu ska sevice apcupsd startas:
sudo systemctl start apcupsd
För att fråga UPS -status kan jag använda ett statuskommando:
sudo /etc/init.d/apcupsd status
Och det skulle mata ut något så här:
APC: 001, 035, 0855DATUM: 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 MODELL: Back-UPS XS 650CI STATUS: ONLINE LINEV: 238,0 Volt LOADPCT: 0,0 procent BCHARGE: 100,0 procent TIMELEFT: 293,3 minuter MBATTCHG: 5 procent MINTIMEL: 3 minuter MAXTIME: 0 sekunder SENSE: Medium LOTRANS: 140,0 volt HITRANS: 300,0 volt ALARMDEL: 30 sekunder BATTV: 14,2 volt LASTXFER: Inga överföringar sedan vändning 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
Jag behöver en status - som är raden "STATUS:".
Cloud4rpi -biblioteket innehåller en modul 'rpy.py' som returnerar Raspberry Pi -systemparametrar som värdnamn eller CPU -temperatur. Eftersom alla dessa parametrar är resultatet av att köra några kommandon och analysera utdata, innehåller den också en praktisk "parse_output" -funktion som gör precis vad jag behöver. Så här får jag min UPS -status:
def ups_status (): result = rpi.parse_output (r'STATUS / s+: / s+( S+) ', [' /etc/init.d/apcupsd ',' status ']) if result: return result else: return 'OKÄND'
För att skicka denna status till cloud4rpi måste jag deklarera en variabel UPSStatus och binda den till min ups_status -funktion: Nu kan jag köra mitt program:
variabler = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}
Och jag kan omedelbart se min variabel på cloud4rpi -enhetssidan.
Steg 4: Förberedelse för "produktion"
Allt fungerar, och nu måste jag förbereda min enhet till obevakat läge.
Till att börja med ska jag justera tidsintervallen. Omfrågningsintervallet definierar hur ofta programmet kontrollerar temperatur och UPS -status - ställ in det på en sekund.
Resultaten skickas till molnet var 5: e minut och diagnostisk information - varje timme.
# KonstanterDATA_SENDING_INTERVAL = 300 # sek DIAG_SENDING_INTERVAL = 3600 # sek POLL_INTERVAL = 1 # sek
När UPS -status ändras - jag vill inte att min enhet ska vänta i 5 minuter, och jag skickar data direkt. Så jag har modifierat huvudslingan något och det ser ut så här:
data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' medan True: newUPS = ups_status () if (data_timer <= 0) eller (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS if diag_timer = device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL sleep (POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL
Testa: kör skript:
sudo python control.py
Och jag kan se UPS -status på min enhets sida.
Om jag stänger av UPS -strömmen ändras status på ett par sekunder, så allt fungerar. Nu måste jag starta apcupsd och min control.py vid systemstart. Apcupsd -tjänsten är gammal och för att starta den på modern raspbian bör jag ändra filen /etc/init.d/apcupsd genom att lägga till dessa rader någonstans högst upp:
### BEGIN INIT INFO # Ger: apcupsd # Required-Start: $ all # Required-Stop: # Standard-Start: 2 3 4 5 # Standard-Stop: # Short-Description: APC UPS daemon … ### END INIT INFO#
Aktivera sedan tjänsten:
sudo systemctl aktivera apcupsd
Starta sedan tjänsten:
sudo systemctl start apcupsd
Nu startas apcupsd vid systemstart.
För att installera control.py som en tjänst använde jag det medföljande scriptet service_install.sh:
sudo bash service_install.sh ~/cloud4rpi/control.py
Nu startas tjänsten och den ska överleva en omstart.
Steg 5: Konfigurera en kontrollpanel
Cloud4rpi låter mig konfigurera en kontrollpanel för min enhet. Du kan lägga till "widgets" och binda dem till enhetsvariabler.
Min enhet har två skrivskyddade variabler - RoomTemp och UPSStatus:
variabler = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}
Jag lade till tre widgets - Nummer för RoomTemp, Text för UPSStatus och ett diagram för RoomTemp.
Jag kan ställa in varningar, så jag får ett e -postmeddelande när temperaturen är utanför det angivna intervallet, UPS gick offline eller själva enheten skickar inte data när det ska. Nu kan jag vara säker på att mitt hus är ok och jag kan meddelas när något är fel, så jag kan ringa grannar och be dem kontrollera vad som händer. Här är den faktiska koden för control.py.
Rekommenderad:
Smart kaffemaskinpump styrd av Raspberry Pi & HC-SR04 ultraljudssensor och Cloud4RPi: 6 steg
Smart kaffemaskinpump som styrs av Raspberry Pi & HC-SR04 Ultrasonic Sensor och Cloud4RPi: I teorin, varje gång du går till kaffemaskinen för din morgonkopp, finns det bara en av tjugo chanser att du måste fylla vattnet tank. I praktiken verkar det dock som om maskinen på något sätt hittar ett sätt att alltid lägga den här orken på dig. De
Övervaka och registrera temperatur med Bluetooth LE och RaspberryPi: 9 steg (med bilder)
Övervaka och registrera temperatur med Bluetooth LE och RaspberryPi: Den här instruerbara handlingen handlar om hur man sätter ihop ett temperaturövervakningssystem med flera noder med Bluetooth LE-sensorbugg från Blue Radios (BLEHome) och RaspberryPi 3B Tack vare utvecklingen av standarden Bluetooth LE finns det nu tillgängligt
Arduino -robot med avstånd, riktning och rotationsgrad (öst, väst, norr, söder) som styrs med röst med hjälp av Bluetooth -modul och autonom robotrörelse .: 6 steg
Arduino -robot med avstånd, riktning och rotationsgrad (öst, väst, norr, söder) som styrs med röst med hjälp av Bluetooth -modul och autonom robotrörelse.: Denna instruktion förklarar hur man gör Arduino -robot som kan flyttas i önskad riktning (framåt, bakåt , Vänster, höger, öst, väst, norr, syd) krävs Distans i centimeter med röstkommando. Roboten kan också flyttas autonomt
8 Reläkontroll med NodeMCU och IR -mottagare med WiFi och IR -fjärrkontroll och Android -app: 5 steg (med bilder)
8 Reläkontroll med NodeMCU och IR -mottagare med WiFi och IR -fjärrkontroll och Android -app: Styrning av 8 reläväxlar med nodemcu och IR -mottagare via wifi och IR -fjärrkontroll och Android -app. Fjärrkontrollen fungerar oberoende av wifi -anslutning. HÄR ÄR EN UPPDATERAD VERSIONKLICK HÄR
Temperatur och fuktighet Display och datainsamling med Arduino och bearbetning: 13 steg (med bilder)
Temperatur- och luftfuktighetsvisning och datainsamling med Arduino och bearbetning: Intro: Detta är ett projekt som använder ett Arduino -kort, en sensor (DHT11), en Windows -dator och ett bearbetningsprogram (ett gratis nedladdningsbart) för att visa temperatur, luftfuktighetsdata i digital och stapeldiagramform, visa tid och datum och kör en räkningstid