Talaan ng mga Nilalaman:

Pagmamanman ng DIY House Sa RaspberryPi at Cloud4Rpi: 5 Hakbang
Pagmamanman ng DIY House Sa RaspberryPi at Cloud4Rpi: 5 Hakbang

Video: Pagmamanman ng DIY House Sa RaspberryPi at Cloud4Rpi: 5 Hakbang

Video: Pagmamanman ng DIY House Sa RaspberryPi at Cloud4Rpi: 5 Hakbang
Video: 30 Ultimate Windows 10 Tips and Tricks for 2020 2024, Nobyembre
Anonim
Pagmamanman ng DIY House Sa RaspberryPi at Cloud4Rpi
Pagmamanman ng DIY House Sa RaspberryPi at Cloud4Rpi

Isang katapusan ng linggo ng taglamig nagpunta ako sa aking bahay na bayan, at nalaman na sobrang lamig doon. May nangyari sa kuryente at pinatay ito ng RCD breaker, at namatay din ang pag-init. Mapalad ako na napunta ako roon, kung hindi man sa maraming araw ang lahat ay na-freeze na napakasama para sa mga tubo at radiator.

Mayroon akong maraming Raspberry Pi's sa paligid, at isang thermal sensor, kaya naisip ko - bakit hindi ako gumawa ng isang simpleng aparato sa pagsubaybay? Ipinapalagay ng mga tagubilin sa ibaba mayroon kang isang Raspberry Pi na may naka-set up na Raspbian at koneksyon sa network. Sa aking kaso ito ay ang Raspberry Pi B + kasama ang Raspbian (2018-06-27-raspbian-stretch-lite).

Hakbang 1: Pagsubaybay sa Temperatura

Pagsubaybay sa Temperatura
Pagsubaybay sa Temperatura
Pagsubaybay sa Temperatura
Pagsubaybay sa Temperatura

Paano ikonekta ang isang sensor ng temperatura ng DS18B20? Google lang kung paano ito gawin, at makikita mo ang maraming mga larawan tulad nito:

Sa aking kaso mayroon akong mga Black, Yellow at Red wires. Ang itim ay lupa, napupunta sa Ground pin, ang pula ay kapangyarihan - napupunta sa 3.3v pin, at ang dilaw ay data - dapat pumunta sa GPIO4 pin, na may 4.7 kOm risistor na konektado sa pagitan ng data at lakas. Tandaan, maaari mong ikonekta ang maraming mga sensor sa kahanay (ang mga ito ay digital, at may iba't ibang mga address), kailangan mo lamang ng isang risistor. Matapos ikonekta ang iyong sensor, dapat mong paganahin ang 1Wire sa raspi-config:

sudo raspi-config

Pumunta sa 5 mga pagpipilian sa Interfacing, paganahin ang P7 1-Wire at i-reboot.

Pagkatapos ay maaari mong subukan kung nakikita mo ang sensor:

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

Dapat mong makita ang isang bagay tulad nito:

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

28–00044eae2dff ang aming sensor ng temperatura.

Handa na ang hardware. Ngayon kailangan kong i-set up ang bahagi ng pagsubaybay. Kailangan ko ng isang bagay na magpapakita sa akin ng data at aabisuhan ako kung ang aparato ay naka-disconnect sandali o walang lakas, o mababa ang temperatura. Malinaw na hindi ito maaaring maging raspberry pi mismo, dapat mayroong ilang server o serbisyo sa internet na sinusubaybayan ang aking aparato.

Maaari akong lumikha ng isang simpleng server, makakuha ng isang pagho-host at i-set up ang lahat, ngunit sa honesly, ayoko. Sa kabutihang palad, may naisip na tungkol dito at lumikha ng cloud4rpi.io - isang cloud control panel para sa iyong aparato.

Hakbang 2: Pag-set up ng Cloud4Rpi.io

Pag-set up ng Cloud4Rpi.io
Pag-set up ng Cloud4Rpi.io

Nagbibigay ang Cloud4Rpi ng isang serbisyo na hinahayaan ang iyong aparato na magpadala at tumanggap ng data gamit ang MQTT o HTTP na mga protocol. Mayroon silang client library para sa Python, kaya gagamitin ko ang Python.

Ang mga halimbawa ng Python na kasama ng serbisyo ng Cloud4Rpi ay naglalaman ng code para sa DS18B20 temp sensor.

Kaya't nagpunta ako sa https://cloud4rpi.io, lumikha ng isang account at nagdagdag ng isang bagong aparato doon. Ang pahina ng aparato ay may isang token - isang string na tumutukoy sa aparato, at alin ang dapat na tukuyin sa program na nagpapadala ng data.

Upang magsimula, palaging isang magandang ideya na mag-update ng isang manager ng package at mag-upgrade ng mga pakete (tandaan: maaaring tumagal ng oras kung hindi mo na-upgrade nang ilang sandali):

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

Pagkatapos, i-install ang git, Python at ang manager ng package nito na Pip:

sudo apt-get install git python python-pip

Pagkatapos, i-install ang cloud4rpi Python library:

sudo pip install cloud4rpi

Sa wakas, handa na akong isulat ang aking control program. Nagsisimula ako mula sa halimbawang magagamit sa

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

Ang pangunahing file ng programa ay control.py - Kailangan kong baguhin ito para sa aking mga pangangailangan. Una, i-edit ang programa at i-paste ang isang token:

sudo nano control.py

Humanap ng isang linya na DEVICE_TOKEN = '…'] at tukuyin ang isang token ng aparato doon. Pagkatapos nito ay maaari ko nang patakbuhin ang programa: Gumagana ito at nag-uulat ng isang temperatura sa variable ng RoomTemp:

sudo python control.py

Gumagana ito at nag-uulat ng isang temperatura sa variable ng RoomTemp.

Tandaan na natuklasan nito ang lahat ng mga onewire ds18b20 sensor

ds_sensors = ds18b20. DS18B20.find_all ()

at ginagamit ang unang nahanap na sensor:

RoomTemp ': {' type ':' numeric ',' bind ': ds_sensors [0] kung ds_sensors iba pa}

Ok, madali iyon, dahil ang sample na programa ay mayroong lahat na muling kinakailangan upang gumana sa sensor ng ds18b20 sa Raspberry Pi. Ngayon kailangan kong maghanap ng paraan upang maiulat ang katayuan ng kuryente.

Hakbang 3: Pagsubaybay sa UPS

Pagsubaybay sa UPS
Pagsubaybay sa UPS

Susunod na bagay na nais kong subaybayan ay ang katayuan ng UPS, kaya kung may pagkawala ng kuryente, malalaman ko ang tungkol dito bago mag-disconnect ang lahat.

Mayroon akong isang APC UPS na may kontrol sa USB, kaya't mabilis akong nag-google at nalaman na kailangan ko ng apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… Sinubukan ko ng maraming beses upang mai-install ito sa pamamagitan ng apt-get, at hindi ito gumagana para sa akin para sa iba't ibang mga kadahilanan. Ipapakita ko kung paano ito mai-install mula sa mga mapagkukunan.

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

Pagkatapos ay i-edit ko ang apcupsd.conf upang kumonekta sa aking UPS sa pamamagitan ng usb.

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

Ngayon ay maaari kong mai-plug ang USB cable mula sa UPS hanggang sa RaspberryPi at subukan kung ang UPS ay matatagpuan.

sudo apctest

Dapat itong bigyan ka ng walang mga mensahe ng error.

Ngayon dapat na magsimula ang sevice apcupsd:

sudo systemctl simulan ang apcupsd

Upang quiery status ng UPS maaari akong gumamit ng isang utos ng katayuan:

sudo /etc/init.d/apcupsd katayuan

At maglalabas ito tulad nito:

APC: 001, 035, 0855DATE: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSION: 3.14.14 (31 May 2016) debian UPSNAME: vcontrol CABLE: USB Cable DRIVER: USB UPS Driver UPSMODE: Stand Alone StartTIME: 2018-10-14 16:54:28 +0300 MODEL: Back-UPS XS 650CI STATUS: ONLINE LINEV: 238.0 Volts LOADPCT: 0.0 Porsyento BCHARGE: 100.0 Porsyento TIMELEFT: 293.3 Minuto MBATTCHG: 5 Porsyento MINTIMEL: 3 Minuto MAXTIME: 0 Segundo SENSE: Katamtaman LOTRANS: 140.0 Volts HITRANS: 300.0 Volts ALARMDEL: 30 Segundo BATTV: 14.2 Volts LASTXFER: Walang paglilipat mula noong turnon: 2014-06-10 NOMINV: 230 Volts NOMBATTV: 12.0 Volts NOMPOWER: 390 Watts FIRMWARE: 892. R3. USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

Kailangan ko ng katayuan - alin ang linya na "STATUS:".

Naglalaman ang library ng Cloud4rpi ng isang module na 'rpy.py' na nagbabalik ng mga parameter ng system ng Raspberry Pi tulad ng hostname o temperatura ng CPU. Dahil ang lahat ng mga param na iyon ay mga resulta ng pagpapatakbo ng ilang mga utos at pag-parse ng output, naglalaman din ito ng isang madaling gamiting pagpapaandar na 'parse_output' na eksaktong ginagawa ko. Ito kung paano makukuha ang aking katayuan sa UPS:

def ups_status (): resulta = rpi.parse_output (r'STATUS / s +: / s + ( S +) ', [' /etc/init.d/apcupsd ',' status ']) kung resulta: bumalik sa ibang resulta: bumalik 'HINDI KILALA'

Upang maipadala ang katayuang ito sa cloud4rpi, kailangan kong ideklara ang isang variable na UPSStatus at igapos ito sa aking ups_status function: Ngayon ay maaari kong patakbuhin ang aking programa:

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

At nakikita ko kaagad ang aking variable sa pahina ng aparato ng cloud4rpi.

Hakbang 4: Paghahanda sa "produksyon"

Paghahanda sa "produksyon"
Paghahanda sa "produksyon"

Gumagana ang Everyting, at ngayon kailangan kong ihanda ang aking aparato sa mode na walang pag-aalaga.

Upang magsimula, aayusin ko ang mga agwat ng oras. Tinutukoy ng agwat ng poll kung gaano kadalas sinusuri ng programa ang temperatura at katayuan ng UPS - itakda ito sa isang segundo.

Ang mga resulta ay ipinapadala sa cloud bawat 5 minuto, at impormasyon sa diagnostic - bawat oras.

# ConstantsDATA_SENDING_INTERVAL = 300 # sec DIAG_SENDING_INTERVAL = 3600 # sec POLL_INTERVAL = 1 # sec

Kapag nagbago ang katayuan ng UPS - ayokong maghintay ng 5 minuto ang aking aparato, at magpapadala agad ako ng data. Kaya't medyo binago ko ang pangunahing loop at ganito ang hitsura:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' habang True: newUPS = ups_status () kung (data_timer <= 0) o (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS kung diag_timer aparato.publish_diag () diag_timer = DIAG_SENDING_INTERVAL pagtulog (POLL_INTERVAL) diag_timer - = POLL_INTERVAL data_timer - = POLL_INTERVAL

Pagsubok: magpatakbo ng script:

sudo python control.py

At maaari kong panoorin ang katayuan ng UPS sa aking pahina ng aparato.

Kung pinapatay ko ang lakas ng UPS, nagbabago ang katayuan sa loob ng ilang segundo, kaya gumagana ang lahat. Ngayon kailangan kong simulan ang apcupsd at ang aking control.py sa pagsisimula ng system. Ang serbisyo ng Apcupsd ay luma na at upang simulan ito sa modernong raspbian, dapat kong baguhin ang /etc/init.d/apcupsd file, sa pamamagitan ng pagdaragdag ng mga linya na ito sa isang lugar sa tuktok:

### BEGIN INIT INFO # Nagbibigay: apcupsd # Kinakailangan-Start: $ lahat # Kinakailangan-Itigil: # Default-Start: 2 3 4 5 # Default-Stop: # Maikling Paglalarawan: APC UPS daemon… ### END INIT INFO #

Pagkatapos paganahin ang serbisyo:

sudo systemctl paganahin ang apcupsd

Pagkatapos simulan ang serbisyo:

sudo systemctl simulan ang apcupsd

Ngayon apcupsd ay magsisimula sa pagsisimula ng system.

Upang mai-install ang control.py bilang isang serbisyo, ginamit ko ang ibinigay na service_install.sh script:

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

Ngayon ang serbisyo ay nagsimula at ito shouls makaligtas sa isang reboot.

Hakbang 5: Pagse-set up ng isang Control Panel

Pagse-set up ng isang Control Panel
Pagse-set up ng isang Control Panel

Pinapayagan ako ng Cloud4rpi na mag-set up ng isang control panel para sa aking aparato. Maaari kang magdagdag ng "mga widget" at maiugnay ito sa mga variable ng aparato.

Nagbibigay ang aking aparato ng dalawang variable na nabasa lamang - RoomTemp at UPSStatus:

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

Nagdagdag ako ng 3 mga widget - Bilang para sa RoomTemp, Text para sa UPSStatus at isang Tsart para sa RoomTemp.

Maaari akong mag-set up ng mga alerto, kaya nakatanggap ako ng isang email kapag ang temperatura ay wala sa tinukoy na saklaw, ang UPS ay nag-offline o ang aparato mismo ay hindi nagpapadala ng data kung kailan ito dapat. Ngayon ay nakasisiguro akong ok ang aking bahay sa bansa, at maaari akong maabisuhan kapag may isang bagay na mali, kaya't maaari akong tumawag sa mga kapitbahay at hilingin sa kanila na suriin kung ano ang nangyayari. Narito ang aktwal na code ng control.py.

Inirerekumendang: