J'ai un Pi Model B Rev 2.0 (je pense) et j'ai l'intention de l'utiliser pour un système domotique. Comme j'ai un compteur à prépaiement sur mon alimentation électrique, je manque parfois d'électrons pour contourner l'alimentation secteur de ma maison!
Pour éviter les problèmes, j'ai obtenu un onduleur sous la forme d'un UPis Basic fabriqué par PiModules . Je l'ai configuré pour pouvoir interroger les tensions d'alimentation via le propre port série du Pi (pas la configuration par défaut mais une configuration prise en charge documentée dans le manuel ).
À l'heure actuelle, il utilise une broche GPIO dédiée (broche 13 sur l'en-tête, GPIO27 je crois) et le micro-contrôleur intégré utilise cela et un script python exécuté depuis rc.local pour indiquer au Pi shutdown -h now
quand la broche est prise basse - ce qui se produit lorsque le bouton "Arrêt" de l'onduleur est enfoncé ou si l'alimentation de la batterie est extrêmement faible en cas de panne de l'alimentation principale. Pour mémoire, le script est:
#!/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
Cela me semble un peu inélégant étant donné qu'il init
a la capacité intégrée de gérer les événements d'alimentation. Je dois répéter que j'utilise sysVinit sur Raspbian Jessie PAS le systemd par défaut pour cette version (pour des raisons de préférence personnelle et de familiarité).
Je voudrais, dans un premier temps, remplacer le script ci-dessus par quelque chose qui dit à init de faire son powerfailnow
quand la broche devient basse - et de faire un powerokwait
s'il revient par la suite haut. Finalement , je veux aussi interroger le port série et garder un œil sur les réponses à @rpi
, @bat
et @ups
qui renvoient les tensions actuelles sur le rail de 5 V du Pi, la batterie LiPo et les Upis possèdent entrée microUSB respectivement - de sorte que Pi peut donner une alerte sur / gérer une coupure de courant (cela devrait entraîner une powerfail
action init et laisser le Pi me signaler l'état de la perte de puissance, l'utilisateur - en supposant que je n'ai pas encore remarqué!)
Cependant, j'ai du mal à savoir comment les périphériques Linux UPS signalent init
que les commandes powerfail
\ powerwait
\ powerfailnow
\ powerokwait
définies dans \etc\inittab
doivent être exécutées.
Quelqu'un peut-il me dire, par exemple, comment un onduleur «adulte» peut dire à un noyau Linux sur un PC normal que des événements de «puissance» se produisent et comment je pourrais reproduire le même dans ce système sur un Pi?