Tôi có một Pi Model B Rev 2.0 (tôi nghĩ) và tôi dự định sử dụng nó cho hệ thống Tự động hóa gia đình. Khi tôi có một đồng hồ trả trước về nguồn điện của mình, thỉnh thoảng tôi hết điện tử để đi xung quanh Nguồn cung cấp chính của nhà tôi!
Để tránh sự cố, tôi đã lấy một UPS dưới dạng UPis Basic do PiModules sản xuất . Tôi đã cấu hình nó để tôi có thể thăm dò các điện áp cung cấp thông qua cổng nối tiếp của Pi (không phải cấu hình mặc định mà là một thiết lập được hỗ trợ được ghi lại trong tài liệu hướng dẫn ).
Hiện tại, nó sử dụng chân GPIO chuyên dụng (chân 13 trên tiêu đề, tôi tin rằng GPIO27) và bộ điều khiển vi mô tích hợp sử dụng mã đó và tập lệnh python chạy từ RC.local để báo cho Pi biết shutdown -h now
khi nào pin bị hạ thấp - xảy ra khi nhấn nút "Tắt máy" của UPS hoặc nếu nguồn cung cấp pin hết mức nghiêm trọng trong trường hợp mất nguồn chính. Đối với bản ghi, kịch bản là:
#!/usr/bin/python
# import the libraries to use time delays, send os commands and access GPIO pins
import PRi.GPIO as GPIO
import time
import os
GPIO.setmode(GPIO.BCM) # Set pin numbering to board numbering
GPIO.setup(27, GPIO.IN, pull_up_don=GPIO.PUD_UP) # Setup pin 27 as an input
while True: # Setup a whille loopto wait for a button press
if(GPIO.input(27)==0): # Setup an if loop to run a shutdown command when button press sensed
os.system("sudo shutdown -h now") # Send shutdown command to os
break
time.sleep(1) # Allow a sleep time of 1 second to reduce CPU usage
Điều này gây ấn tượng với tôi như một chút không liên quan được đưa ra init
có khả năng tích hợp để xử lý các sự kiện sức mạnh. Tôi nên nhắc lại rằng tôi đang sử dụng sysVinit trên Raspbian Jessie KHÔNG phải là systemd mặc định cho bản phát hành đó (vì lý do cá nhân và lý do quen thuộc).
Ban đầu, tôi muốn thay thế đoạn script trên bằng một cái gì đó bảo init thực hiện nó powerfailnow
khi pin xuống thấp - và thực hiện powerokwait
nếu nó sau đó trả về mức cao. Cuối cùng tôi cũng muốn thăm dò ý kiến các cổng nối tiếp và giữ một mắt trên những câu trả lời @rpi
, @bat
và @ups
đó trả lại điện áp hiện hành về đường sắt 5V của Pi, pin LiPo và UPis sở hữu microUSB đầu vào tương ứng - vì vậy mà Pi có thể đưa ra một cảnh báo trên / xử lý sự cố mất điện (nó sẽ dẫn đến powerfail
hành động init và để Pi báo cáo tình trạng mất điện cho tôi, người dùng - giả sử tôi chưa sẵn sàng nhận thấy!)
Tuy nhiên tôi đang gặp khó khăn trong việc tìm hiểu cách thức các thiết bị Linux UPS hiệu cho init
rằng powerfail
\ powerwait
\ powerfailnow
\ powerokwait
lệnh quy định tại \etc\inittab
nên được thực hiện.
Chẳng hạn, ai đó có thể tư vấn cho tôi, làm thế nào UPS "trưởng thành" nói với nhân Linux trên PC bình thường rằng các sự kiện "sức mạnh" đang xảy ra và làm thế nào tôi có thể tái tạo tương tự trong hệ thống này trên Pi không?