我有一个Pi Model B Rev 2.0(我认为),我打算将其用于家庭自动化系统。由于我的电源上有一个预付费电表,因此我偶尔会用尽电子来绕过我家的主电源!
为避免出现问题,我获得了由PiModules制造的UPis Basic形式的UPS 。我已经对其进行了配置,以便可以通过Pi自己的串行端口(不是默认配置,而是手册中记录的受支持的设置)轮询电源电压。
目前,它使用专用的GPIO引脚(我相信插头上的引脚13为GPIO27),内置微控制器使用shutdown -h now
该引脚,并从rc.local运行python脚本来告诉Pi 该引脚何时变为低电平-如果按下UPS“关机”按钮,或者在主电源出现故障时电池电源严重不足,就会发生这种情况。作为记录,脚本是:
#!/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
鉴于它init
具有处理电源事件的内置功能,因此这给我带来一点挑战。我应该重申,我在Raspbian Jessie上使用sysVinit,而不是该版本的默认systemd(出于个人喜好和熟悉性原因)。
首先,我想用上面的脚本替换上面的脚本,该脚本告诉init powerfailnow
在引脚变为低电平时执行它- powerokwait
如果随后返回高电平,则执行a 。最后,我也想查询串行端口,并保持眼睛上的响应@rpi
,@bat
以及@ups
其对皮的5V轨返回当前的电压下,锂聚合物电池和UPIS分别持有的MicroUSB输入-这样的皮可以给一个警告/处理电源故障(用户应powerfail
采取初始化操作,并让Pi向我报告电源丢失状态-假设我还没准备好注意!)
但是,我很难找出Linux UPS设备如何发信号通知应执行中定义init
的powerfail
\ powerwait
\ powerfailnow
\ powerokwait
命令\etc\inittab
。
例如,谁能告诉我“成长”的UPS如何告诉普通PC上的Linux内核正在发生“电源”事件,以及我如何在Pi的该系统中重现该事件?