INHOUDSOPGAWE:

DIY huismonitering met RaspberryPi en Cloud4Rpi: 5 stappe
DIY huismonitering met RaspberryPi en Cloud4Rpi: 5 stappe

Video: DIY huismonitering met RaspberryPi en Cloud4Rpi: 5 stappe

Video: DIY huismonitering met RaspberryPi en Cloud4Rpi: 5 stappe
Video: 1.Nodemcu ESP8266 Starting Guide With Firebase |ElectroCSE 2024, November
Anonim
DIY huismonitering met RaspberryPi en Cloud4Rpi
DIY huismonitering met RaspberryPi en Cloud4Rpi

Een winternaweek het ek na my landhuis gegaan en uitgevind dat dit baie koud is daar. Iets het gebeur met elektrisiteit en 'n RCD -skakelaar het dit afgeskakel, en die verhitting het ook afgegaan. Ek was gelukkig dat ek daar aangekom het, anders sou alles binne 'n paar dae alles gevries gewees het, wat baie erg is vir die pype en die verkoelers.

Ek het verskeie Raspberry Pi's en 'n termiese sensor gehad, en ek het gedink - waarom maak ek nie 'n eenvoudige moniteringstoestel nie? In die onderstaande instruksies word aanvaar dat u 'n Raspberry Pi met Raspbian en netwerkverbinding opgestel het. In my geval is dit Raspberry Pi B+ met Raspbian (2018-06-27-raspbian-stretch-lite).

Stap 1: Temperatuurmonitering

Temperatuurmonitering
Temperatuurmonitering
Temperatuurmonitering
Temperatuurmonitering

Hoe om 'n DS18B20 temperatuur sensor aan te sluit? Google net hoe om dit te doen, en u sien baie foto's soos hierdie:

In my geval het ek swart, geel en rooi drade gehad. Die swart is gemaal, gaan na grondpen, die rooi is krag - gaan na 3.3v -pen, en die geel is data - moet na GPIO4 -pen gaan, met 'n weerstand van 4,7 kOm tussen data en krag. parallel (hulle is digitaal en het verskillende adresse), benodig u slegs een weerstand. Nadat u u sensor gekoppel het, moet u 1Wire in die raspi-config aktiveer:

sudo raspi-config

Gaan na 5 koppelvlakopsies, aktiveer P7 1-Wire en herlaai.

Dan kan u toets of u die sensor kan sien:

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

U behoort so iets te sien:

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

28–00044eae2dff is ons temperatuursensor.

Hardeware is gereed. Nou moet ek die moniteringsdeel instel. Ek het iets nodig wat my die data kan wys en my in kennis stel as die toestel 'n rukkie ontkoppel is, of as daar geen krag is nie, of as die temperatuur laag is. Dit kan duidelik nie framboos pi self wees nie; daar moet 'n bediener of diens op die internet wees wat my toestel monitor.

Ek kan 'n eenvoudige bediener skep, 'n gasheer kry en alles instel, maar ek wil dit nie eerlik nie. Gelukkig het iemand al hieroor gedink en cloud4rpi.io geskep - 'n wolkbeheerpaneel vir u toestel.

Stap 2: Die opstel van Cloud4Rpi.io

Die opstel van Cloud4Rpi.io
Die opstel van Cloud4Rpi.io

Cloud4Rpi bied 'n diens waarmee u toestel data kan stuur en ontvang met behulp van MQTT- of HTTP -protokolle. Hulle het 'n kliëntbiblioteek vir Python, so ek sal Python gebruik.

Python -voorbeelde wat by die Cloud4Rpi -diens kom, bevat reeds kode vir die DS18B20 temp sensor.

Ek het dus na https://cloud4rpi.io gegaan, 'n rekening geskep en 'n nuwe toestel daar bygevoeg. Die apparaatbladsy het 'n teken - 'n string wat die toestel identifiseer en wat gespesifiseer moet word in die program wat data stuur.

Om mee te begin, is dit altyd 'n goeie idee om 'n pakketbestuurder by te werk en pakkette op te gradeer (let op: dit kan ure neem as u nie 'n rukkie opgegradeer het nie):

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

Installeer dan git, Python en sy pakketbestuurder Pip:

sudo apt-get install git python python-pip

Installeer dan cloud4rpi Python -biblioteek:

sudo pip installeer cloud4rpi

Uiteindelik is ek gereed om my beheerprogram te skryf. Ek begin met 'n voorbeeld wat beskikbaar is op

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

Die hoofprogramlêer is control.py - ek moet dit aanpas vir my behoeftes. Wysig eers die program en plak 'n teken:

sudo nano control.py

Soek 'n reël DEVICE_TOKEN = '…'] en spesifiseer 'n toesteltoken daar. Daarna kan ek die program eenvoudig laat loop: dit werk en meld 'n temperatuur in RoomTemp -veranderlike:

sudo python control.py

Dit werk en rapporteer 'n temperatuur in die RoomTemp -veranderlike.

Let daarop dat dit alle onewire ds18b20 sensors ontdek

ds_sensors = ds18b20. DS18B20.find_all ()

en gebruik die eerste sensor wat gevind is:

RoomTemp ': {' type ':' numeries ',' bind ': ds_sensors [0] as ds_sensors anders Geen}

Dit was maklik, want die voorbeeldprogram bevat alles wat nodig is om met die ds18b20 -sensor op Raspberry Pi te werk. Nou moet ek die manier vind om die kragstatus aan te meld.

Stap 3: UPS -monitering

UPS -monitering
UPS -monitering

Die volgende ding wat ek wil monitor, is die UPS -status, so as daar 'n kragonderbreking is, sal ek daarvan weet voordat alles ontkoppel word.

Ek het 'n APC UPS met USB -beheer, so ek het vinnig gegoogle en gevind dat ek apcupsd nodig het. https://www.anites.com/2013/09/monitoring-ups.html… Ek het verskeie kere probeer om dit via apt-get te installeer, en dit het om verskillende redes nie vir my gewerk nie. Ek sal wys hoe om dit uit die bronne te installeer.

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 maak sudo maak installeer

Dan wysig ek apcupsd.conf om via USB aan te sluit by my UPS.

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

Nou kan ek 'n USB -kabel van UPS aan RaspberryPi koppel en toets of UPS gevind word.

sudo apctest

Dit behoort u geen foutboodskappe te gee nie.

Nou moet sewe apcupsd begin word:

sudo systemctl begin apcupsd

Om navraag te doen oor UPS -status, kan ek 'n statusopdrag gebruik:

sudo /etc/init.d/apcupsd status

En dit sou iets soos hierdie lewer:

APC: 001, 035, 0855DATUM: 2018-10-14 16:55:30 +0300 GASNAAM: vcontrol VERSIE: 3.14.14 (31 Mei 2016) debian UPSNAME: vcontrol KABEL: USB-kabel DRIVER: USB UPS Driver UPSMODE: Stand Alone BEGINTYD: 2018-10-14 16:54:28 +0300 MODEL: Back-UPS XS 650CI STATUS: ONLINE LINEV: 238.0 Volt LOADPCT: 0.0 persent BCHARGE: 100.0 persent TIMELEFT: 293.3 minute MBATTCHG: 5 persent MINTIMEL: 3 minute MAXTIME: 0 sekondes SIN: Medium LOTRANS: 140.0 volt HITRANS: 300.0 volt ALARMDEL: 30 sekondes BATTV: 14.2 volt LASTXFER: Geen oordragte sedert beurt NUMXFERS: 0 TONBATT: 0 sekondes CUMONBATT: 0 sekondes XOFFBATT: N/A STATFLAG: 0x05T08T05T08: 0x05T08: 2014-06-10 NOMINV: 230 Volt NOMBATTV: 12.0 Volt NOMPOWER: 390 Watts FIRMWARE: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

Ek het 'n status nodig - dit is die 'STATUS:' - reël.

Cloud4rpi -biblioteek bevat 'n module 'rpy.py' wat Raspberry Pi -stelselparameters teruggee, soos gasheernaam of CPU -temperatuur. Aangesien al die params die gevolg is van die uitvoer van 'n paar opdragte en ontleeduitsette, bevat dit ook 'n handige 'parse_output' -funksie wat presies doen wat ek nodig het. Dit is hoe ek my UPS -status kan kry:

def ups_status (): resultaat = rpi.parse_output (r'STATUS / s+: / s+(S+) ', [' /etc/init.d/apcupsd ',' status ']) as resultaat: terugkeer resultaat anders: terugkeer 'ONKEND'

Om hierdie status na cloud4rpi te stuur, moet ek 'n veranderlike UPSStatus verklaar en dit aan my ups_status -funksie bind: Nou kan ek my program uitvoer:

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

En ek kan my veranderlike onmiddellik sien op die cloud4rpi -apparaatbladsy.

Stap 4: Voorbereiding vir 'produksie'

Berei voor vir 'produksie'
Berei voor vir 'produksie'

Alles werk, en nou moet ek my toestel voorberei op die modus sonder toesig.

Om mee te begin, gaan ek die tydsintervalle aanpas. Peilingsinterval bepaal hoe gereeld die program na temperatuur en UPS -status kyk - stel dit op een sekonde.

Uitslae word elke 5 minute na die wolk gestuur, en diagnostiese inligting - elke uur.

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

As die UPS -status verander - wil ek nie hê my toestel moet 5 minute wag nie, en ek stuur dadelik data. Ek het dus die hooflus effens aangepas en dit lyk so:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' terwyl True: newUPS = ups_status () if (data_timer <= 0) of (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS if 0: device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL slaap (POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL

Toets: run script:

sudo python control.py

En ek kan UPS -status op my toestelbladsy kyk.

As ek die UPS -krag afskakel, verander die status binne 'n paar sekondes, sodat alles werk. Nou moet ek apcupsd en my control.py begin met die opstart van die stelsel. Apcupsd -diens is oud en om dit op moderne raspbian te begin, moet ek die lêer /etc/init.d/apcupsd verander deur hierdie reëls by te voeg iewers bo:

### BEGIN INIT INFO # Bied: apcupsd # Vereis-begin: $ alles # Vereis-stop: # standaard-begin: 2 3 4 5 # standaard-stop: # kort beskrywing: APC UPS-demoon … ### EINDE INIT INLIGTING#

Aktiveer dan die diens:

sudo systemctl aktiveer apcupsd

Begin dan met die diens:

sudo systemctl begin apcupsd

Nou word apcupsd begin met die opstart van die stelsel.

Om control.py as 'n diens te installeer, het ek die verskafde service_install.sh -script gebruik:

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

Nou word diens begin, en dit moet weer begin as dit herlaai word.

Stap 5: Stel 'n bedieningspaneel op

Die opstel van 'n bedieningspaneel
Die opstel van 'n bedieningspaneel

Met Cloud4rpi kan ek 'n bedieningspaneel vir my toestel instel. U kan 'widgets' byvoeg en dit aan toestelveranderlikes koppel.

My toestel bied twee leesalleen veranderlikes - RoomTemp en UPSStatus:

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

Ek het 3 widgets bygevoeg - nommer vir RoomTemp, teks vir UPSStatus en 'n grafiek vir RoomTemp.

Ek kan waarskuwings instel, sodat ek 'n e -pos ontvang wanneer die temperatuur buite die gespesifiseerde bereik is, UPS vanlyn is of die toestel self nie data stuur wanneer dit moet nie. as iets verkeerd is, kan ek die bure bel en hulle vra om te kyk wat aangaan. Hier is die werklike kode van die control.py.

Aanbeveel: