1. ackcell

    No comment

    ackcell
Changes in body
Source | HTML | Preview

概略

目的

こちらのブログでRaspberry piの簡易型UPSの記事がありますが、リレー付き電源を付加してより本格的なUPS化を目指す。

仕組み

slee-Pi2 Plusの2系統ある電源入力の電圧差を利用して電源断を検出し、shutdownする。
slee-Pi2 Plusに外部入力コネクタに電源と連動したリレーから入力し、電源復帰とともにRaspberry piの再起動を実現する。

必要なもの

  • Raspberry pi 4 model B w/ Rasbian buster lite 2019-09-26
  • slee-Pi2 Plus
  • ACアダプタ2つ(Hi, Lo)
  • 電源と連動するリレー
  • スイッチ付きテーブル・タップ

all 2020-02-06 16.45.28.jpg
左から Raspberry pi 4 model B, slee-Pi2 Plus, リレー

slee-Pi2 Plus

既存の標準モデルslee-Pi2に外部入力コネクタが増設されたモデル。

slee-Pi2 and slee-Pi2 Plus 2020-02-06 20.44.44.jpg
上:slee-Pi2標準モデル,下:slee-Pi2 Plus(右上に2つコネクタが増設されている)。いずれもRaspberry piに装着済み

リレー

電源入でスイッチが入るリレーで、slee-Pi2 Plusの外部入力コネクタに接続する。

Relay 2020-02-06 16.45.43.jpg
また、電源はslee-Pi2 Plusの電源コネクタに接続する。
これで、リレーに接続したACアダプタに電源が入ると、slee-Pi2 Plusに電源が入り、外部入力のスイッチがonになる。これをトリガーとして、Raspberry piの起動が始まる。

slee-Pi2 Plus 2020-02-06 16.45.38.jpg
リレースイッチをslee-Pi2 Plusの外部入力コネクタ、電源ラインを電源コネクタに接続

ACアダプタ(hi,Lo)

2系統の電源の電圧差を検出し、シャットダウンするので、電圧が異なるACアダプタを用意します。
power 2020-02-09 09.57.16.jpg

左:15V、右:12V(slee-Pi2標準モデル同梱)

セットアップ

Raspberry pi、slee-Pi2 Plus、電源、リレー付き電源を接続し、Rasbianの設定を前回ブログで言及したansible playbookでセットアップします。

電圧確認

2系統ある電源の電圧を調べます。直接sleepi2ctl -g voltageを使ってもいいですが、せっかくなのでMackerelのログを見てみます。
Screenshot_2020-02-09 RPi4B · Mechatrax-software(1).png

テーブルタップのスイッチをカチカチとやって、期待通りの電圧がでているか確認します。
15vと12vでThresholdをその間に設定すればいけそうです。リレーに連動する電源(ACアダプタ)が高い方(15v)であることを確認し、sleepi2-monitor.confでvoltageのthresholdを13vに設定します。

/etc/sleepi2-monitor.conf
[voltage]
command = "shutdown -h now"
oneshot = true
threshold = 13000

thresholdに13000mvを設定して、sleepi2monを再起動するか、Raspberry piを再起動すると、13vが閾値になります。

systemctl restart sleepi2-monitor.service 
shutdown -h now

実働テスト

これで高い電圧(15v)のACアダプタの電源を切ると、電圧の低い電源(12v)で稼働し続けますが、sleepi2monによるthreshold監視により"shutdown -h now"が実行されます。
Raspberry piが動作を停止し、再び高い電圧のACアダプタの電源を入れると、連動したリレーがslee-pi2 Plusの外部入力にトリガーを与え、Raspberry piが再起動します。

起動・停止時にslackに投稿するメッセージが以下のようになります。
Screenshot_2020-02-09 Slack mackerel-io mechatrax-software.png

起動時のwakeup-flagが"extin"になっており、外部入力がトリガーになっているのが分かります。

まとめ

この方式により、以前のブログにあった課題

・電源復旧までの稼動維持は求めない(電源断⇒シャットダウン出来ればOK)
・電源断の頻度が少ない(1次電池を使用するため、高頻度だと電池交換も高頻度になりツライ)
・対象となる台数が少ない(電源復帰時に自動起動ができないので)

の内、最後は解消できます。残りはどのような電源が準備できるかに依存します。また、2系統の電圧の差がある電源を準備しなければなりません。

電源断時に、alertを上げるトリガ(mailやslackなど)とshutdown処理を行うトリガの2つのthresholdで検出できれば、便利かもと思いました。