У меня есть Pi Model B Rev 2.0 (я думаю), и я собираюсь использовать его для системы домашней автоматизации. Поскольку у меня есть счетчик предоплаты по электроснабжению, у меня иногда заканчиваются электроны, чтобы обойти электроснабжение моего дома!
Чтобы избежать проблем, я приобрел ИБП в форме UPis Basic производства PiModules . Я настроил его так, чтобы я мог опрашивать напряжение питания через собственный последовательный порт Pi (не конфигурация по умолчанию, а поддерживаемая установка, описанная в руководстве ).
В настоящее время он использует выделенный вывод GPIO (вывод 13 на заголовке, я полагаю, GPIO27), и встроенный микроконтроллер использует его и скрипт python, запущенный из rc.local, чтобы сообщить Pi, shutdown -h now
когда вывод выводится на низкий уровень - это происходит при нажатии кнопки «Выключение» ИБП или при критическом низком уровне заряда батареи в случае сбоя основного питания. Для записи скрипт:
#!/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
имеет встроенную возможность обрабатывать энергетические события. Я должен повторить, что я использую sysVinit на Raspbian Jessie, а не systemd по умолчанию для этого выпуска (по личным предпочтениям и из-за привычных причин).
Первоначально я хотел бы заменить вышеприведенный скрипт чем-то, что указывает init выполнить его, powerfailnow
когда пин становится низким, и делать, powerokwait
если впоследствии он возвращает высокий. В конце концов , я также хочу , чтобы опрашивать последовательный порт и следить за ответами на @rpi
, @bat
и @ups
которые возвращают текущее напряжение на 5V поручень Пи, то LiPo батареи и UPis собственный вход MicroUSB соответственно - так что Pi может дать предупреждение о / обрабатывать сбой питания (это должно привести к powerfail
действию инициализации и позволить Pi сообщать мне о состоянии потери питания, пользователю - при условии, что я еще не заметил!)
Однако у меня возникают трудности с выяснением того, как устройства ИБП Linux сигнализируют о init
том, что powerfail
\ powerwait
\ powerfailnow
\ powerokwait
команды, определенные в, \etc\inittab
должны быть выполнены.
Кто-нибудь может мне посоветовать, например, как «взрослые» ИБП сообщают ядру Linux на обычном ПК, что происходят события «питания» и как я могу воспроизвести то же самое в этой системе на Pi?