สารบัญ:

การตรวจสอบบ้าน DIY ด้วย RaspberryPi และ Cloud4Rpi: 5 ขั้นตอน
การตรวจสอบบ้าน DIY ด้วย RaspberryPi และ Cloud4Rpi: 5 ขั้นตอน

วีดีโอ: การตรวจสอบบ้าน DIY ด้วย RaspberryPi และ Cloud4Rpi: 5 ขั้นตอน

วีดีโอ: การตรวจสอบบ้าน DIY ด้วย RaspberryPi และ Cloud4Rpi: 5 ขั้นตอน
วีดีโอ: ทำไมคุณถึงควรเปลี่ยนไปใช้ Raspberry Pi 4 Model B แทน Raspberry Pi 3 Model B, B+ 2024, ธันวาคม
Anonim
การตรวจสอบบ้าน DIY ด้วย RaspberryPi และ Cloud4Rpi
การตรวจสอบบ้าน DIY ด้วย RaspberryPi และ Cloud4Rpi

วันหยุดสุดสัปดาห์ในฤดูหนาววันหนึ่ง ฉันไปบ้านในชนบทของฉัน และพบว่าที่นั่นอากาศหนาวมาก มีบางอย่างเกิดขึ้นกับไฟฟ้าและเบรกเกอร์ RCD ได้ปิดสวิตช์ และเครื่องทำความร้อนก็ดับลงเช่นกัน ฉันโชคดีที่มาที่นี่ ไม่เช่นนั้นในหลายๆ วันทุกอย่างจะถูกแช่แข็ง ซึ่งไม่ดีต่อท่อและหม้อน้ำ

ฉันมี Raspberry Pi อยู่หลายตัวและเซ็นเซอร์ความร้อน ฉันก็เลยคิดว่า - ทำไมฉันไม่สร้างอุปกรณ์ตรวจสอบง่ายๆ ล่ะ คำแนะนำด้านล่างถือว่าคุณมี Raspberry Pi พร้อม Raspbian และตั้งค่าการเชื่อมต่อเครือข่าย ในกรณีของฉันคือ Raspberry Pi B+ พร้อม Raspbian (2018–06–27-raspbian-stretch-lite)

ขั้นตอนที่ 1: การตรวจสอบอุณหภูมิ

การตรวจสอบอุณหภูมิ
การตรวจสอบอุณหภูมิ
การตรวจสอบอุณหภูมิ
การตรวจสอบอุณหภูมิ

จะเชื่อมต่อเซ็นเซอร์อุณหภูมิ DS18B20 ได้อย่างไร? แค่ google วิธีการทำเช่นนี้ คุณจะเห็นรูปภาพมากมายเช่นนี้:

ในกรณีของฉันฉันมีสายสีดำสีเหลืองและสีแดง สีดำคือกราวด์ ไปที่พินกราวด์ สีแดงคือกำลัง - ไปที่พิน 3.3v และสีเหลืองคือข้อมูล - ควรไปที่พิน GPIO4 โดยมีตัวต้านทาน 4.7 kOm เชื่อมต่อระหว่างข้อมูลและพลังงานหมายเหตุ คุณสามารถเชื่อมต่อเซ็นเซอร์หลายตัวได้ แบบขนาน (เป็นดิจิตอลและมีที่อยู่ต่างกัน) คุณต้องการตัวต้านทานเพียงตัวเดียว หลังจากเชื่อมต่อเซ็นเซอร์ของคุณแล้ว คุณควรเปิดใช้งาน 1Wire ใน raspi-config:

sudo raspi-config

ไปที่ 5 ตัวเลือกการเชื่อมต่อ เปิดใช้งาน P7 1-Wire และรีบูต

จากนั้นคุณสามารถทดสอบว่าคุณสามารถเห็นเซ็นเซอร์ได้หรือไม่:

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

คุณควรเห็นสิ่งนี้:

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

28–00044eae2dff คือเซ็นเซอร์อุณหภูมิของเรา

ฮาร์ดแวร์พร้อม ตอนนี้ฉันต้องตั้งค่าส่วนการตรวจสอบ ฉันต้องการบางอย่างที่จะแสดงข้อมูลให้ฉันทราบและแจ้งให้ฉันทราบหากอุปกรณ์ถูกตัดการเชื่อมต่อชั่วขณะหนึ่งหรือไม่มีกระแสไฟ หรืออุณหภูมิต่ำ เห็นได้ชัดว่านี่ไม่ใช่ราสเบอร์รี่ pi เอง ควรมีเซิร์ฟเวอร์หรือบริการบางอย่างในอินเทอร์เน็ตที่ตรวจสอบอุปกรณ์ของฉัน

ฉันสามารถสร้างเซิร์ฟเวอร์ที่เรียบง่าย รับโฮสติ้ง และตั้งค่าทุกอย่างได้ แต่จริงๆ แล้ว ฉันไม่ต้องการทำ โชคดีที่มีคนคิดเกี่ยวกับเรื่องนี้แล้วและสร้าง cloud4rpi.io ซึ่งเป็นแผงควบคุมระบบคลาวด์สำหรับอุปกรณ์ของคุณ

ขั้นตอนที่ 2: การตั้งค่า Cloud4Rpi.io

การตั้งค่า Cloud4Rpi.io
การตั้งค่า Cloud4Rpi.io

Cloud4Rpi ให้บริการที่ช่วยให้อุปกรณ์ของคุณส่งและรับข้อมูลโดยใช้โปรโตคอล MQTT หรือ HTTP พวกเขามีไลบรารีไคลเอนต์สำหรับ Python ดังนั้นฉันจะใช้ Python

ตัวอย่าง Python ที่มาพร้อมกับบริการ Cloud4Rpi มีโค้ดสำหรับเซ็นเซอร์อุณหภูมิ DS18B20 แล้ว

ดังนั้นฉันจึงไปที่ https://cloud4rpi.io สร้างบัญชีและเพิ่มอุปกรณ์ใหม่ที่นั่น หน้าอุปกรณ์มีโทเค็น - สตริงที่ระบุอุปกรณ์และควรระบุในโปรแกรมที่ส่งข้อมูล

ในการเริ่มต้น คุณควรอัปเดตตัวจัดการแพ็คเกจและอัปเกรดแพ็คเกจเสมอ (หมายเหตุ: อาจใช้เวลาหลายชั่วโมงหากคุณไม่ได้อัปเกรดมาระยะหนึ่ง):

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

จากนั้นติดตั้ง git, Python และตัวจัดการแพ็คเกจ Pip:

sudo apt-get ติดตั้ง git python python-pip

จากนั้น ติดตั้งไลบรารี cloud4rpi Python:

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 onewire ทั้งหมด

ds_sensors = ds18b20. DS18B20.find_all()

และใช้เซ็นเซอร์แรกที่พบ:

RoomTemp': { 'type': 'numeric', 'bind': ds_sensors[0] if ds_sensors else None }

โอเค นั่นเป็นเรื่องง่าย เพราะโปรแกรมตัวอย่างมีทุกอย่างที่จำเป็นสำหรับการทำงานกับเซ็นเซอร์ ds18b20 บน Raspberry Pi ตอนนี้ฉันต้องหาวิธีรายงานสถานะพลังงาน

ขั้นตอนที่ 3: การตรวจสอบ UPS

การตรวจสอบ UPS
การตรวจสอบ UPS

สิ่งต่อไปที่ฉันต้องการตรวจสอบคือสถานะของ UPS ดังนั้นหากไฟฟ้าดับ ฉันจะรู้ก่อนที่ทุกอย่างจะตัดการเชื่อมต่อ

ฉันมี APC UPS ที่มีตัวควบคุม USB ดังนั้นฉันจึง googled อย่างรวดเร็วและพบว่าฉันต้องการ 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 สมาร์ท UPSCABLE usb # #UPSTYPE apcsmart #DEVICE /dev/ttyS0 UPSTYPE usb DEVICE

ตอนนี้ฉันสามารถเสียบสาย USB จาก UPS กับ RaspberryPi แล้วทดสอบว่าพบ UPS หรือไม่

sudo apctest

ไม่ควรให้ข้อความแสดงข้อผิดพลาดแก่คุณ

ตอนนี้ sevice apcupsd ควรเริ่มต้น:

sudo systemctl start apcupsd

หากต้องการสอบถามสถานะ UPS ฉันสามารถใช้คำสั่งสถานะ:

sudo /etc/init.d/apcupsd status

และมันจะแสดงผลดังนี้:

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 Percent BCHARGE: 100.0 Percent TIMELEFT: 293.3 Minutes MBATTCHG: 5 Percent MINTIMEL: 3 minutes MAXTIME: 0 Seconds SENSE: Medium LOTRANS: 140.0 Volts HITRANS: 300.0 Volts ALARMDEL: 30 Seconds BATTV: 14.2 Volts LASTXFER: No transfers since turnon NUMXFERS: 0 TONBATT: 0 Seconds CUMONBATT: 0 Seconds XOFFBATT 000002 N/A 0 STATFLAG: ไม่มี: 2014-06-10 NOMINV: 230 Volts NOMBATTV: 12.0 Volts NOMPOWER: 390 Watts FIRMWARE: 892. R3. I USB FW:R3 END APC: 2018-10-14 16:55:38 +0300

ฉันต้องการสถานะ - ซึ่งเป็นบรรทัด "สถานะ:"

ไลบรารี 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', 'status']) ถ้าผลลัพธ์: ส่งคืนผลลัพธ์อื่น: ส่งคืน 'ไม่รู้จัก'

ในการส่งสถานะนี้ไปยัง cloud4rpi ฉันต้องประกาศตัวแปร UPSStatus และผูกไว้กับฟังก์ชัน 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' ในขณะที่ True: newUPS = ups_status() ถ้า (data_timer <= 0) หรือ (newUPS != prevUPS): device.publish_data() data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS ถ้า = 0diag:_timer < 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 และ control.py ของฉันเมื่อเริ่มต้นระบบ บริการ Apcupsd นั้นเก่าและเพื่อเริ่มต้นบน raspbian สมัยใหม่ ฉันควรแก้ไขไฟล์ /etc/init.d/apcupsd โดยเพิ่มบรรทัดเหล่านี้ไว้ที่ด้านบนสุด:

### เริ่มต้น INIT INFO# ระบุ: apcupsd # Required-Start: $all # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: APC UPS daemon… ### END INIT ข้อมูล#

จากนั้นเปิดใช้งานบริการ:

sudo systemctl เปิดใช้งาน apcupsd

จากนั้นเริ่มบริการ:

sudo systemctl start 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 ออฟไลน์หรือตัวอุปกรณ์ไม่ส่งข้อมูลเมื่อควร ตอนนี้ฉันมั่นใจได้เลยว่าบ้านในชนบทของฉันโอเค และสามารถแจ้งเตือนได้ เวลามีอะไรผิดพลาดก็เลยโทรไปถามเพื่อนบ้านดูว่าเกิดอะไรขึ้น นี่คือรหัสจริงของ control.py

แนะนำ: