Python
RaspberryPi
UPS

Raspberry Pi用の無停電装置(Pi-UpTimeUPS for Raspberry Pi Zero W)

AlchemyからRaspberry Pi用の無停電装置が出たので、さっそく購入してみた。
自分の用途としては、Raspberry Piでdumpを使ってflightrader24やAPRSを運用しているので、そのための無停電装置として使用するつもりである。

ハードウェア

IMG_1601.jpg

ハードウェアの購入はPimoroniで購入できるので、お奨めである。
Raspberry Pi用の無停電装置は、このPi-UpTimeUPS以外でも数点出ているが、購入価格や設定の有無などを考えて行くと、恐らくこの製品がマストといえるだろう。
接続方法は、基本的にはGPIOの直差しして、UPSのINに電源元のUSBを刺せばお終いである。
Pi-UpTimeUPS自体は、GPIO26でUPS元の電池の容量を監視し、電池容量がある一定以下になった段階でシャットダウンコマンドを行うというようだ。つまり、元電源が落ちた段階で直ちにシャットダウンを行うわけではないということを覚えて置いた方がいいだろう。
また、Raspberry Pi ZeroでGPIO端子がないものに関してもUSBを介して接続できるが、その場合はシャットダウンコマンドなどは利用できない。
重複になるかも知れないが、利点は次の様になっている。

  • 価格が安い(本体が25ドル、リチウム電池はamazonなどで1個数百円)
  • 管理が簡単である(Pythonアプリ1個で簡単に管理できる)
  • リチウム電池を利用するということで、電池容量にある程度余力がある
  • GPIOがUPS本体にあるので、これを付けたらGPIOが使えなくなったということがない
  • Raspberry PiにもRaspberry Pi Zeroにも利用できる

よく考えられた製品といえるんじゃないだろうか。

ソフトウェアの設定

GPIOに接続した場合を前提に話を進める。
設定は簡単で、まずはwget コマンドを次のように利用して、シャットダウン用のアプリをダウンロードする。

$ wget http://alchemy-power.com/wp-content/uploads/2017/06/GPIO-shutdown-sample.zip

本体はPythonプログラムであるが、まずはunzipコマンドを利用して解凍し、次のようにPythonプログラムを動かしてみる。その際、電源元のUSBを外しておくようにする。

$ sudo python GPIO-shutdown-sample.py

このコマンドを利用すると、10秒ごとにタイムスタンプが表示されるはずだ。
電源がある程度落ちた場合、シャットダウンコマンドが適用され、Raspberry Piがシャットダウンされる。
また、10秒ごとのタイムスタンプを表示しない場合は、GPIO-shutdown-sample.pyの78行をコメントアウトする。

print("Time is %s " % (time.ctime()))

シャットアウトが確認できたら、次にこのプログラムをcronで管理する。
その際、/usr/local/binに置く必要があるので、次のようにする。

$ sudo mkdir /usr/local/bin
$ chmod 755 /usr/local/bin
$ sudo cp GPIO-crontab.py /usr/local/bin/uptime-gpio.py
$ sudo chmod 755 /usr/local/bin/uptime-gpio.py

設定できたら、次のようにcronを設定する。

$ sudo crontab -e

cronの内容は次のように設定する。

*/2 * * * * python /usr/local/bin/uptime-gpio.py

これで、起動時にuptime-gpio.pyが起動され、電源を監視することになる。

他の無停電装置と違い、価格がかなり安く、また運用面を簡単にできるので、大変お奨めである。
また、UPS本体にGPIOが設置されているので、これを利用したらGPIOが使用できなくなるということがないのもおすすめポイントである。