Mục lục:

Giám sát ngôi nhà tự làm với RaspberryPi và Cloud4Rpi: 5 bước
Giám sát ngôi nhà tự làm với RaspberryPi và Cloud4Rpi: 5 bước

Video: Giám sát ngôi nhà tự làm với RaspberryPi và Cloud4Rpi: 5 bước

Video: Giám sát ngôi nhà tự làm với RaspberryPi và Cloud4Rpi: 5 bước
Video: RASPBERRY: GET A SMART HOME USING RASPBERRY PI - TẠO SMARTHOME VỚI RASPBERRY 2024, Tháng mười một
Anonim
Giám sát ngôi nhà tự làm với RaspberryPi và Cloud4Rpi
Giám sát ngôi nhà tự làm với RaspberryPi và Cloud4Rpi

Một ngày cuối tuần mùa đông, tôi đến ngôi nhà quê của mình, và phát hiện ra rằng ở đó rất lạnh. Có điều gì đó đã xảy ra với điện và cầu dao RCD đã tắt nó, và hệ thống sưởi cũng tắt. Thật may mắn khi tôi đến đó, nếu không trong vài ngày nữa mọi thứ sẽ bị đóng băng, điều này rất xấu cho đường ống và bộ tản nhiệt.

Tôi đã có một số Raspberry Pi xung quanh và một cảm biến nhiệt, vì vậy tôi nghĩ - tại sao mình không tạo một thiết bị giám sát đơn giản? Hướng dẫn bên dưới giả sử bạn có Raspberry Pi với Raspbian và kết nối mạng được thiết lập. Trong trường hợp của tôi, đó là Raspberry Pi B + với Raspbian (2018–06–27-raspbian-Stret-lite).

Bước 1: Giám sát nhiệt độ

Kiểm soát nhiệt độ
Kiểm soát nhiệt độ
Kiểm soát nhiệt độ
Kiểm soát nhiệt độ

Làm thế nào để kết nối cảm biến nhiệt độ DS18B20? Chỉ cần google cách thực hiện việc này và bạn sẽ thấy rất nhiều hình ảnh như hình sau:

Trong trường hợp của tôi, tôi có dây Đen, Vàng và Đỏ. Màu đen là nối đất, chuyển đến chân Nối đất, màu đỏ là nguồn - đến chân 3,3v và màu vàng là dữ liệu - chuyển đến chân GPIO4, với điện trở 4,7 kOm được kết nối giữa dữ liệu và nguồn. Lưu ý, bạn có thể kết nối nhiều cảm biến song song (chúng là kỹ thuật số, và có các địa chỉ khác nhau), bạn chỉ cần một điện trở. Sau khi kết nối cảm biến, bạn nên bật 1Wire trong raspi-config:

sudo raspi-config

Đi tới 5 tùy chọn Giao diện, bật P7 1-Wire và khởi động lại.

Sau đó, bạn có thể kiểm tra xem bạn có thể nhìn thấy cảm biến hay không:

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

Bạn sẽ thấy một cái gì đó như thế này:

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

28–00044eae2dff là cảm biến nhiệt độ của chúng tôi.

Phần cứng đã sẵn sàng. Bây giờ tôi cần thiết lập phần giám sát. Tôi cần một cái gì đó sẽ hiển thị cho tôi dữ liệu và thông báo cho tôi nếu thiết bị bị ngắt kết nối trong một thời gian hoặc không có điện hoặc nhiệt độ thấp. Rõ ràng đây không thể là bản thân của raspberry pi, nên có một số máy chủ hoặc dịch vụ trên internet giám sát thiết bị của tôi.

Tôi có thể tạo một máy chủ đơn giản, mua một máy chủ lưu trữ và thiết lập mọi thứ, nhưng tôi không muốn. May mắn thay, ai đó đã nghĩ đến điều này và đã tạo cloud4rpi.io - một bảng điều khiển đám mây cho thiết bị của bạn.

Bước 2: Thiết lập Cloud4Rpi.io

Thiết lập Cloud4Rpi.io
Thiết lập Cloud4Rpi.io

Cloud4Rpi cung cấp một dịch vụ cho phép thiết bị của bạn gửi và nhận dữ liệu bằng giao thức MQTT hoặc HTTP. Họ có một thư viện máy khách cho Python, vì vậy tôi sẽ sử dụng Python.

Các ví dụ Python đi kèm với dịch vụ Cloud4Rpi đã chứa mã cho cảm biến nhiệt độ DS18B20.

Vì vậy, tôi đã truy cập https://cloud4rpi.io, tạo một tài khoản và thêm một thiết bị mới vào đó. Trang thiết bị có mã thông báo - một chuỗi xác định thiết bị và sẽ được chỉ định trong chương trình gửi dữ liệu.

Để bắt đầu, bạn nên cập nhật trình quản lý gói và nâng cấp các gói (lưu ý: có thể mất hàng giờ nếu bạn chưa nâng cấp trong một thời gian):

sudo apt-get update && sudo apt-get nâng cấp

Sau đó, cài đặt git, Python và trình quản lý gói của nó Pip:

sudo apt-get install git python python-pip

Sau đó, cài đặt thư viện Python cloud4rpi:

sudo pip cài đặt cloud4rpi

Cuối cùng, tôi đã sẵn sàng để viết chương trình điều khiển của mình. Tôi bắt đầu từ ví dụ có sẵn tại

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

Tệp chương trình chính là control.py - Tôi cần sửa đổi nó theo nhu cầu của mình. Đầu tiên, hãy chỉnh sửa chương trình và dán mã thông báo:

sudo nano control.py

Tìm một dòng DEVICE_TOKEN = '…'] và chỉ định mã thông báo thiết bị ở đó. Sau đó, tôi có thể chỉ cần chạy chương trình: Nó hoạt động và báo cáo nhiệt độ trong biến RoomTemp:

sudo python control.py

Nó hoạt động và báo cáo nhiệt độ trong biến RoomTemp.

Lưu ý rằng nó phát hiện ra tất cả các cảm biến onewire ds18b20

ds_sensors = ds18b20. DS18B20.find_all ()

và sử dụng cảm biến đầu tiên được tìm thấy:

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

Ok, điều đó thật dễ dàng, vì chương trình mẫu có mọi thứ được yêu cầu để hoạt động với cảm biến ds18b20 trên Raspberry Pi. Bây giờ tôi cần tìm cách thông báo tình trạng nguồn điện.

Bước 3: Giám sát UPS

Giám sát UPS
Giám sát UPS

Điều tiếp theo tôi muốn theo dõi là trạng thái của UPS, vì vậy nếu có mất điện, tôi sẽ biết về nó trước khi mọi thứ ngắt kết nối.

Tôi có một bộ lưu điện APC với điều khiển USB, vì vậy tôi nhanh chóng truy cập vào Google và thấy rằng tôi cần apcupsd. https://www.anites.com/2013/09/monitoring-ups.html… Tôi đã thử cài đặt nó nhiều lần qua apt-get và nó không hoạt động với tôi vì nhiều lý do. Tôi sẽ chỉ cách cài đặt nó từ các nguồn.

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

Sau đó, tôi chỉnh sửa apcupsd.conf để kết nối với UPS của tôi qua usb.

sudo nano /etc/apcupsd/apcupsd.conf# #UPSCABLE USB UPSCABLE thông minh # #UPSTYPE apcsmart #DEVICE / dev / ttyS0 THIẾT BỊ USB UPSTYPE

Bây giờ tôi có thể cắm cáp USB từ UPS đến RaspberryPi và kiểm tra xem có tìm thấy UPS hay không.

sudo apctest

Nó sẽ không cung cấp cho bạn thông báo lỗi.

Bây giờ apcupsd sevice sẽ được bắt đầu:

sudo systemctl start apcupsd

Để kiểm tra trạng thái UPS, tôi có thể sử dụng lệnh trạng thái:

trạng thái sudo /etc/init.d/apcupsd

Và nó sẽ xuất ra một số thứ như thế này:

APC: 001, 035, 0855 NGÀY: 2018-10-14 16:55:30 +0300 HOSTNAME: vcontrol PHIÊN BẢN: 3.14.14 (31 tháng 5 năm 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 TÌNH TRẠNG: TUYẾN TRỰC TUYẾN: 238,0 Volts TẢI TRỌNG: 0,0 Phần trăm BCHARGE: 100,0 Phần trăm TIMELEFT: 293,3 phút MBATTCHG: 5 phần trăm MINTIMEL: 3 phút MAXTIME: 0 giây SENSE: LOTRANS trung bình: 140,0 Volts HITRANS: 300,0 Volts ALARMDEL: 30 giây BATTV: 14,2 Volts LASTXFER: Không chuyển vì turnon NUMXFERS: 0 TONBATT: 0 Giây CUMONBATT: 0 Giây XOFFBATT: N / A STATFLAGATEAG: 345 B140500000829 SB14050000029: 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

Tôi cần một trạng thái - đó là dòng "TRẠNG THÁI:".

Thư viện Cloud4rpi chứa một mô-đun ‘rpy.py’ trả về các thông số hệ thống Raspberry Pi như tên máy chủ hoặc nhiệt độ cpu. Vì tất cả các tham số đó là kết quả của việc chạy một số lệnh và phân tích cú pháp đầu ra, nó cũng chứa hàm ‘parse_output’ tiện dụng thực hiện chính xác những gì tôi cần. Đây là cách nhận trạng thái UPS của tôi:

def ups_status (): result = rpi.parse_output (r'STATUS / s +: / s + ( S +) ', [' /etc/init.d/apcupsd ',' status ']) if result: return result else: return 'KHÔNG XÁC ĐỊNH'

Để gửi trạng thái này tới cloud4rpi, tôi cần khai báo một UPSStatus biến và liên kết nó với hàm ups_status của mình: Bây giờ tôi có thể chạy chương trình của mình:

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

Và tôi có thể thấy ngay biến của mình tại trang thiết bị cloud4rpi.

Bước 4: Chuẩn bị "sản xuất"

Chuẩn bị "sản xuất"
Chuẩn bị "sản xuất"

Mọi thứ đang hoạt động và bây giờ tôi cần chuẩn bị thiết bị của mình ở chế độ không giám sát.

Để bắt đầu, tôi sẽ điều chỉnh khoảng thời gian. Khoảng thời gian thăm dò xác định tần suất chương trình kiểm tra nhiệt độ và trạng thái UPS - đặt nó thành một giây.

Kết quả được gửi đến đám mây cứ sau 5 phút và thông tin chẩn đoán - mỗi giờ.

# Hằng sốDATA_SENDING_INTERVAL = 300 # giây DIAG_SENDING_INTERVAL = 3600 # giây POLL_INTERVAL = 1 # giây

Khi trạng thái của UPS thay đổi - tôi không muốn thiết bị của mình đợi trong 5 phút và tôi sẽ gửi dữ liệu ngay lập tức. Vì vậy, tôi đã sửa đổi một chút vòng lặp chính và nó trông như thế này:

data_timer = 0diag_timer = 0 prevUPS = 'ONLINE' while True: newUPS = ups_status () if (data_timer <= 0) or (newUPS! = prevUPS): device.publish_data () data_timer = DATA_SENDING_INTERVAL prevUPS = newUPS if Diag_timer <= 0 device.publish_diag () Diag_timer = DIAG_SENDING_INTERVAL chế độ ngủ (POLL_INTERVAL) Diag_timer - = POLL_INTERVAL data_timer - = POLL_INTERVAL

Thử nghiệm: chạy tập lệnh:

sudo python control.py

Và tôi có thể xem trạng thái UPS trên trang thiết bị của mình.

Nếu tôi tắt nguồn UPS, trạng thái sẽ thay đổi trong vài giây để mọi thứ đang hoạt động. Bây giờ tôi cần khởi động apcupsd và control.py khi khởi động hệ thống. Dịch vụ Apcupsd đã cũ và để khởi động nó trên raspbian hiện đại, tôi nên sửa đổi tệp /etc/init.d/apcupsd, bằng cách thêm những dòng này vào đâu đó ở trên cùng:

### BEGIN INIT INFO # Cung cấp: apcupsd # Bắt buộc-Bắt đầu: $ all # Bắt buộc-Dừng: # Mặc định-Bắt đầu: 2 3 4 5 # Mặc định-Dừng: # Mô tả ngắn gọn: APC UPS daemon… ### END INIT THÔNG TIN#

Sau đó, kích hoạt dịch vụ:

sudo systemctl kích hoạt apcupsd

Sau đó bắt đầu dịch vụ:

sudo systemctl start apcupsd

Bây giờ apcupsd sẽ được khởi động khi khởi động hệ thống.

Để cài đặt control.py làm dịch vụ, tôi đã sử dụng tập lệnh service_install.sh được cung cấp:

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

Bây giờ dịch vụ được bắt đầu và nó sống sót sau khi khởi động lại.

Bước 5: Thiết lập bảng điều khiển

Thiết lập bảng điều khiển
Thiết lập bảng điều khiển

Cloud4rpi cho phép tôi thiết lập bảng điều khiển cho thiết bị của mình. Bạn có thể thêm “widget” và liên kết chúng với các biến thiết bị.

Thiết bị của tôi cung cấp hai biến chỉ đọc - RoomTemp và UPSStatus:

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

Tôi đã thêm 3 tiện ích con - Số cho RoomTemp, Văn bản cho UPSStatus và Biểu đồ cho RoomTemp.

Tôi có thể thiết lập cảnh báo, vì vậy tôi nhận được email khi nhiệt độ nằm ngoài phạm vi quy định, UPS ngoại tuyến hoặc bản thân thiết bị không gửi dữ liệu khi cần. Khi có vấn đề gì xảy ra, tôi có thể điện thoại cho hàng xóm và nhờ họ kiểm tra xem chuyện gì đang xảy ra. Đây là mã thực tế của control.py.

Đề xuất: