Სარჩევი:

წვრილმანი სახლის მონიტორინგი RaspberryPi და Cloud4Rpi: 5 ნაბიჯი
წვრილმანი სახლის მონიტორინგი RaspberryPi და Cloud4Rpi: 5 ნაბიჯი

ვიდეო: წვრილმანი სახლის მონიტორინგი RaspberryPi და Cloud4Rpi: 5 ნაბიჯი

ვიდეო: წვრილმანი სახლის მონიტორინგი RaspberryPi და Cloud4Rpi: 5 ნაბიჯი
ვიდეო: CS50 2013 - Week 10, continued 2024, ნოემბერი
Anonim
წვრილმანი სახლის მონიტორინგი RaspberryPi და Cloud4Rpi– ით
წვრილმანი სახლის მონიტორინგი RaspberryPi და Cloud4Rpi– ით

ერთ ზამთრის შაბათ -კვირას წავედი ჩემს აგარაკზე და აღმოვაჩინე, რომ იქ ძალიან ციოდა. რაღაც მოხდა ელექტროენერგიასთან და RCD ამომრთველმა ის გამორთო და გათბობაც გათიშა. გამიმართლა, რომ იქ ჩამოვედი, თორემ რამდენიმე დღეში ყველაფერი გაყინული იქნებოდა, რაც ძალიან ცუდია მილებისთვის და რადიატორებისთვის.

მე მქონდა რამოდენიმე Raspberry Pi და თერმული სენსორი, ასე რომ ვიფიქრე - რატომ არ ვაკეთებ უბრალო მონიტორინგის მოწყობილობას? ქვემოთ მოყვანილი ინსტრუქცია ვარაუდობს, რომ თქვენ გაქვთ Raspberry Pi Raspbian– ით და დაყენებულია ქსელური კავშირი. ჩემს შემთხვევაში ეს არის Raspberry Pi B+ Raspbian– ით (2018–06–27 – raspbian-stretch-lite).

ნაბიჯი 1: ტემპერატურის მონიტორინგი

ტემპერატურის მონიტორინგი
ტემპერატურის მონიტორინგი
ტემპერატურის მონიტორინგი
ტემპერატურის მონიტორინგი

როგორ დააკავშიროთ DS18B20 ტემპერატურის სენსორი? უბრალოდ google როგორ გააკეთოთ ეს და ნახავთ უამრავ მსგავს სურათს:

ჩემს შემთხვევაში მე მქონდა შავი, ყვითელი და წითელი მავთულები. შავი დაფქულია, მიდის Ground pin- ზე, წითელი არის ძალა - მიდის 3.3v პინზე, ხოლო ყვითელი არის მონაცემები - უნდა გადავიდეს GPIO4 პინზე, 4.7 kOm რეზისტორით, რომელიც დაკავშირებულია მონაცემებსა და სიმძლავრეს შორის. შენიშვნა, შეგიძლიათ რამდენიმე სენსორის დაკავშირება პარალელურად (ისინი ციფრული ხასიათისაა და აქვს სხვადასხვა მისამართი), საჭიროა მხოლოდ ერთი რეზისტორი. თქვენი სენსორის დაკავშირების შემდეგ, თქვენ უნდა ჩართოთ 1Wire raspi-config– ში:

sudo raspi-config

გადადით ინტერფეისის 5 ვარიანტზე, ჩართეთ P7 1-Wire და გადატვირთეთ.

შემდეგ შეგიძლიათ შეამოწმოთ ხედავთ თუ არა სენსორს:

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

თქვენ უნდა ნახოთ მსგავსი რამ:

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

28–00044eae2dff არის ჩვენი ტემპერატურის სენსორი.

აპარატურა მზად არის. ახლა მონიტორინგის ნაწილი უნდა შევქმნა. მე მჭირდება რაღაც, რაც მაჩვენებს მონაცემებს და შემატყობინებს, თუ მოწყობილობა გათიშულია გარკვეული ხნით ან არ არის ძალა, ან ტემპერატურა დაბალია. ცხადია, ეს არ შეიძლება იყოს ჟოლოს პი, ინტერნეტში უნდა იყოს რაიმე სერვერი ან სერვისი, რომელიც მონიტორინგს უწევს ჩემს მოწყობილობას.

მე შემიძლია შევქმნა მარტივი სერვერი, მივიღო ჰოსტინგი და დავაყენო ყველაფერი, მაგრამ გულწრფელად, არ მინდა. საბედნიეროდ, ვიღაცამ უკვე იფიქრა ამაზე და შექმნა cloud4rpi.io - ღრუბლის მართვის პანელი თქვენი მოწყობილობისთვის.

ნაბიჯი 2: Cloud4Rpi.io- ს დაყენება

Cloud4Rpi.io- ს დაყენება
Cloud4Rpi.io- ს დაყენება

Cloud4Rpi უზრუნველყოფს სერვისს, რომელიც საშუალებას აძლევს თქვენს მოწყობილობას გაგზავნოს და მიიღოს მონაცემები MQTT ან HTTP პროტოკოლების გამოყენებით. მათ აქვთ კლიენტის ბიბლიოთეკა პითონისთვის, ამიტომ მე გამოვიყენებ პითონს.

პითონის მაგალითები, რომლებიც მოყვება Cloud4Rpi სერვისს, უკვე შეიცავს კოდს DS18B20 ტემპერატურის სენსორისთვის.

მივედი https://cloud4rpi.io– ზე, შევქმენი ანგარიში და დავამატე ახალი მოწყობილობა. მოწყობილობის გვერდს აქვს ნიშანი - სტრიქონი, რომელიც განსაზღვრავს მოწყობილობას და რომელიც უნდა იყოს მითითებული პროგრამაში, რომელიც აგზავნის მონაცემებს.

დასაწყისისთვის, ყოველთვის კარგი იდეაა პაკეტების მენეჯერის განახლება და პაკეტების განახლება (შენიშვნა: შეიძლება დრო დასჭირდეს, თუ ცოტა ხნით არ განახლდებით):

sudo apt-get განახლება && sudo apt-get განახლება

შემდეგ დააინსტალირეთ git, Python და მისი პაკეტის მენეჯერი Pip:

sudo apt-get დააინსტალირეთ git python python-pip

შემდეგ დააინსტალირეთ cloud4rpi პითონის ბიბლიოთეკა:

sudo pip დააინსტალირეთ cloud4rpi

დაბოლოს, მე მზად ვარ დავწერო ჩემი საკონტროლო პროგრამა. ვიწყებ მაგალითზე, რომელიც ხელმისაწვდომია

git კლონი https://github.com/cloud4rpi/cloud4rpi-raspberrypi… cloud4rpicd cloud4rpi

ძირითადი პროგრამის ფაილი არის control.py - მე უნდა შევცვალო იგი ჩემი საჭიროებების შესაბამისად. პირველი, შეცვალეთ პროგრამა და ჩასვით ნიშანი:

sudo nano control.py

იპოვეთ ხაზი DEVICE_TOKEN = '…'] და მიუთითეთ მოწყობილობის ნიშანი. ამის შემდეგ შემიძლია უბრალოდ გავუშვა პროგრამა: ის მუშაობს და აცხადებს ტემპერატურას RoomTemp ცვლადში:

sudo python control.py

ის მუშაობს და აცხადებს ტემპერატურას RoomTemp ცვლადში.

გაითვალისწინეთ, რომ ის აღმოაჩენს ყველა ონლაინ ds18b20 სენსორს

ds_sensors = ds18b20. DS18B20.find_all ()

და იყენებს პირველად აღმოჩენილ სენსორს:

RoomTemp ': {' type ':' numeric ',' bind ': ds_sensors [0] თუ ds_sensors სხვა არცერთი}

კარგი, ეს ადვილი იყო, რადგან საცდელ პროგრამას აქვს ყველაფერი, რაც საჭიროა Raspberry Pi– ზე ds18b20 სენსორთან მუშაობისთვის. ახლა მე უნდა ვიპოვო გზა დენის სტატუსის შესახებ.

ნაბიჯი 3: UPS მონიტორინგი

UPS მონიტორინგი
UPS მონიტორინგი

შემდეგი რაც მინდა მონიტორინგი იყოს UPS სტატუსი, ასე რომ თუ ელექტროენერგიის გათიშვა მოხდება, მე ვიცნობ ამის შესახებ სანამ ყველაფერი გათიშული იქნება.

მე მაქვს APC UPS USB კონტროლით, ასე რომ სწრაფად ჩავწერე გუგლში და აღმოვაჩინე რომ მჭირდება apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… რამდენჯერმე ვცადე მისი დაყენება apt-get– ის საშუალებით და ის არ მუშაობდა ჩემზე სხვადასხვა მიზეზის გამო. მე ვაჩვენებ, თუ როგორ უნდა დააყენოთ იგი წყაროებიდან.

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

შემდეგ მე ვარედაქტირებ apcupsd.conf- ს, რათა შევუერთდე ჩემს UPS- ს usb- ის საშუალებით.

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

ახლა შემიძლია შევაერთო USB კაბელი UPS– დან RaspberryPi– ზე და შევამოწმო, არის თუ არა UPS.

sudo apctest

მან არ უნდა მოგცეთ შეცდომის შეტყობინებები.

ახლა სერვისის apcupsd უნდა დაიწყოს:

sudo systemctl დაწყება apcupsd

UPS სტატუსის შესამოწმებლად შემიძლია გამოვიყენო სტატუსის ბრძანება:

sudo /etc/init.d/apcupsd სტატუსი

და გამოვა რაღაცნაირად:

APC: 001, 035, 0855DATE: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol VERSION: 3.14.14 (2016 წლის 31 მაისი) debian UPSNAME: vcontrol CABLE: USB Cable DRIVER: USB UPS Driver UPSMODE: Stand Alone დაწყების დრო: 2018-10-14 16:54:28 +0300 მოდელი: Back-UPS XS 650CI სტატუსი: ONLINE LINEV: 238.0 ვოლტი LOADPCT: 0.0 პროცენტიანი გადასახადი: 100.0 პროცენტიანი დრო: 293.3 წუთი 0 წამი გრძნობა: საშუალო ლოტრანი: 140.0 ვოლტი HITRANS: 300.0 ვოლტი ALARMDEL: 30 წამი BATTV: 14.2 ვოლტი LASTXFER: არ არის გადარიცხვები turnon წლიდან NUMXFERS: 0 TONBATT: 0 წამი CUMONBATT: 0 წამი XOFFBATTAT00: N00: 2014-06-10 NOMINV: 230 ვოლტი NOMBATTV: 12.0 ვოლტი NOMPOWER: 390 ვატი FIRMWARE: 892. R3. I USB FW: R3 END APC: 2018-10-14 16:55:38 +0300

მე მჭირდება სტატუსი - რომელიც არის "STATUS:" ხაზი.

Cloud4rpi ბიბლიოთეკა შეიცავს მოდულს "rpy.py", რომელიც აბრუნებს Raspberry Pi სისტემის პარამეტრებს, როგორიცაა მასპინძლის სახელი ან CPU ტემპერატურა. ვინაიდან ყველა ეს პარამი არის გარკვეული ბრძანებების გაშვებისა და გამომავალი შედეგების გაანალიზების შედეგი, ის ასევე შეიცავს მოსახერხებელ ‘parse_output’ ფუნქციას, რომელიც ზუსტად იმას აკეთებს, რაც მე მჭირდება. ეს არის როგორ მივიღო ჩემი UPS სტატუსი:

def ups_status (): result = rpi.parse_output (r'STATUS / s+: / s+(S+) ', [' /etc/init.d/apcupsd ',' სტატუსი '])) თუ შედეგია: სხვა შედეგის დაბრუნება: დაბრუნება 'უცნობი'

Cloud4rpi– ზე ამ სტატუსის გასაგზავნად, მე უნდა გამოვაცხადო ცვლადი UPS სტატუსი და შევუკავშირო ის ჩემს ups_status ფუნქციას: ახლა შემიძლია ჩემი პროგრამის გაშვება:

ცვლადები = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}

და მე შემიძლია დაუყოვნებლივ ვნახო ჩემი ცვლადი cloud4rpi მოწყობილობის გვერდზე.

ნაბიჯი 4: მომზადება "წარმოებისთვის"

ემზადება "წარმოებისთვის"
ემზადება "წარმოებისთვის"

ყველაფერი მუშაობს და ახლა მე უნდა მოვამზადო ჩემი მოწყობილობა უყურადღებო რეჟიმში.

დასაწყისისთვის, მე ვაპირებ დროის ინტერვალების კორექტირებას. გამოკითხვის ინტერვალი განსაზღვრავს რამდენად ხშირად ამოწმებს პროგრამა ტემპერატურას და UPS სტატუსს - დააყენეთ იგი ერთ წამზე.

შედეგები იგზავნება ღრუბელში ყოველ 5 წუთში, ხოლო დიაგნოსტიკური ინფორმაცია - ყოველ საათში.

# მუდმივები DATA_SENDING_INTERVAL = 300 # წმ DIAG_SENDING_INTERVAL = 3600 # წმ POLL_INTERVAL = 1 # წმ

როდესაც UPS სტატუსი იცვლება - მე არ მინდა, რომ ჩემი მოწყობილობა დაელოდოს 5 წუთს და მე დაუყოვნებლივ ვაგზავნი მონაცემებს. მე ოდნავ შევცვალე მთავარი მარყუჟი და ასე გამოიყურება:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' ხოლო ჭეშმარიტი: newUPS = ups_status () if (data_timer <= 0) ან (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = diag = 0: device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL ძილი (POLL_INTERVAL) diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL

ტესტირება: გაუშვით სკრიპტი:

sudo python control.py

და მე შემიძლია უყურო UPS სტატუსს ჩემი მოწყობილობის გვერდზე.

თუ გავთიშავ UPS დენს, სტატუსი იცვლება რამდენიმე წამში, ასე რომ ყველაფერი მუშაობს. ახლა უნდა დავიწყო apcupsd და ჩემი კონტროლი. სისტემის გაშვება. Apcupsd სერვისი ძველია და თანამედროვე raspbian– ზე დასაწყებად, მე უნდა შევცვალო /etc/init.d/apcupsd ფაილი, ამ ხაზების დამატებით სადღაც ზედა:

### INIT INFO INFO # უზრუნველყოფს: apcupsd # საჭირო-დაწყება: $ all # საჭირო-გაჩერება: # ნაგულისხმევი-დაწყება: 2 3 4 5 # ნაგულისხმევი-გაჩერება: # მოკლე აღწერა: APC UPS დემონი… ### END INIT ინფორმაცია#

შემდეგ ჩართეთ სერვისი:

sudo systemctl ჩართეთ apcupsd

შემდეგ დაიწყეთ მომსახურება:

sudo systemctl დაწყება apcupsd

ახლა apcupsd დაიწყება სისტემის გაშვებისას.

Control.py- ს სერვისად დასაყენებლად გამოვიყენე მოწოდებული service_install.sh სკრიპტი:

sudo bash service_install.sh/cloud4rpi/control.py

ახლა სერვისი დაიწყო და ის გადარჩება გადატვირთვის შემდეგ.

ნაბიჯი 5: საკონტროლო პანელის დაყენება

საკონტროლო პანელის დაყენება
საკონტროლო პანელის დაყენება

Cloud4rpi მაძლევს საშუალებას დავაყენო მართვის პანელი ჩემი მოწყობილობისთვის. თქვენ შეგიძლიათ დაამატოთ „ვიჯეტები“და დაუკავშიროთ ისინი მოწყობილობის ცვლადებს.

ჩემი მოწყობილობა გთავაზობთ მხოლოდ წაკითხვის ცვლადს - RoomTemp და UPSStatus:

ცვლადები = {'RoomTemp': {'type': 'numeric', 'bind': ds_sensors [0]}, 'UPSStatus': {'type': 'string', 'bind': ups_status}}

დავამატე 3 ვიჯეტი - ნომერი RoomTemp– ისთვის, ტექსტი UPSStatus– ისთვის და დიაგრამა RoomTemp– ისთვის.

მე შემიძლია დავაყენო სიგნალები, ასე რომ მე ვიღებ ელ.წერილს, როდესაც ტემპერატურა განსაზღვრულ დიაპაზონშია, UPS გადის ხაზგარეშე ან მოწყობილობა არ აგზავნის მონაცემებს საჭიროებისამებრ. ახლა დარწმუნებული ვარ, რომ ჩემი აგარაკი კარგადაა და შემიძლია შევატყობინო როდესაც რაღაც არასწორია, მე შემიძლია დავურეკო მეზობლებს და ვთხოვო მათ შეამოწმონ რა ხდება. აქ არის კონტროლის ფაქტობრივი კოდი. Py.

გირჩევთ: