Tengo un Pi Model B Rev 2.0 (creo) y tengo la intención de usarlo para un sistema de automatización del hogar. Como tengo un medidor de prepago en mi suministro de electricidad, ocasionalmente me quedo sin electrones para recorrer el suministro de energía de mi casa.
Para evitar problemas, he obtenido un UPS en forma de UPis Basic hecho por PiModules . Lo configuré para que pueda sondear los voltajes de suministro a través del puerto serie del propio Pi (no la configuración predeterminada sino una configuración compatible documentada en el manual ).
En la actualidad, usa un pin GPIO dedicado (pin 13 en el encabezado, GPIO27, creo) y el microcontrolador incorporado lo usa y un script de Python que se ejecuta desde rc.local para indicarle al Pi shutdown -h now
cuándo se baja el pin. que ocurre cuando se presiona el botón "Apagar" del UPS o si el suministro de la batería se agota críticamente en caso de falla del suministro principal. Para el registro el guión es:
#!/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
Esto me parece un poco poco elegante dado que init
tiene la capacidad incorporada de manejar eventos de energía. Debo reiterar que estoy usando sysVinit en Raspbian Jessie NO el systemd predeterminado para esa versión (por razones de preferencia personal y familiaridad).
Inicialmente, me gustaría reemplazar el script anterior con algo que le indique a init que haga su función powerfailnow
cuando el pin powerokwait
esté bajo, y que haga un si posteriormente regresa alto. Eventualmente también quiero sondear el puerto serie y mantener un ojo en las respuestas a @rpi
, @bat
y @ups
que devuelven las tensiones actuales en el carril 5V del Pi, la batería Li-Po y los Upis son dueños de entrada microUSB, respectivamente - de modo que el Pi puede dar una alerta de / manejar una falla de energía (debería resultar en una powerfail
acción de inicio y dejar que el Pi me informe el estado de la pérdida de energía, el usuario, ¡suponiendo que no lo haya notado!)
Sin embargo estoy teniendo dificultades para encontrar la manera de dispositivos Linux UPS señal de init
que el powerfail
\ powerwait
\ powerfailnow
\ powerokwait
comandos se define en \etc\inittab
debe ser realizada.
¿Alguien puede aconsejarme, por ejemplo, cómo UPS "adulto" le dice a un kernel de Linux en una PC normal que están ocurriendo eventos de "alimentación" y cómo puedo reproducir lo mismo en este sistema en un Pi?