私はPi Model B Rev 2.0(私は思う)を持っていますが、それをホームオートメーションシステムに使用するつもりです。電力供給に前払いメーターがあるので、時々電子が足りなくなり、家の主電源を回ります。
問題を回避するために、私はPiModulesによって作成されたUPis Basicの形式でUPSを入手しました。Piのシリアルポートを介して供給電圧をポーリングできるように構成しました(デフォルトの構成ではなく、マニュアルに記載されているサポートされているセットアップ)。
現在、専用のGPIOピン(ヘッダーのピン13、GPIO27と思います)を使用しており、組み込みのマイクロコントローラーがそれとrc.localから実行されているpythonスクリプトを使用してshutdown -h now
、ピンがローになったことを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ではありません(個人的な好みと親しみやすさの理由から)。
最初に、上記のスクリプトをpowerfailnow
、ピンがローになったときにそれを実行し、その後ピンがpowerokwait
ハイに戻った場合に実行するようにinitに指示するものに置き換えたいと思います。結局私は、シリアルポートをポーリングし、への応答に目を維持したい@rpi
、@bat
と@ups
Piは上の警告を与えることができますので、 -そのそれぞれパイの5Vレール、リポバッテリーとUPis自身のmicroUSB入力に直流電圧を返します/ handle電源障害(これによりpowerfail
initアクションが発生し、Piが電源喪失状態をユーザーに報告する必要があります-私はまだ気づいていないと想定しています!)
しかし、Linux UPSデバイスがで定義されinit
たpowerfail
\ powerwait
\ powerfailnow
\ powerokwait
コマンドを実行する\etc\inittab
必要があることを通知する方法を見つけるのが困難です。
たとえば、「成長した」UPSが「電源」イベントが発生していることを通常のPCのLinuxカーネルにどのように伝え、Pi上のこのシステムで同じように再現できるかを誰かに教えてもらえますか?