slee-Pi2 PlusでRaspberry piの電源が落ちた際の復旧を自動化（簡易UPS中級編）

# 概略

![s_Img25321.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580616/17f0e8ee-59f3-0067-b80c-4f9b7b9da1f9.jpeg)

## 目的

[こちらのブログ] (https://qiita.com/MechaTracks/items/b715f4712611e64df78e)（電源断時にラズパイを自動でシャットダウン）でRaspberry piの簡易型UPSの記事がありますが、[メカトラックス](https://www.mechatrax.com)社からslee-Pi2 Plusでの記事化を依頼されたので、リレー付き電源も付加してより本格的なUPS化を目指します。


## 仕組み

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

## 必要なもの

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

![all 2020-02-06 16.45.28.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580616/b5f77280-a692-8b8d-dff5-655538a6886c.jpeg)
左から Raspberry pi 4 model B, slee-Pi2 Plus, リレー

[Raspberry pi 4はMechatraxとしては非推奨](https://mechatrax.com/faq/#faq-rp1)とのことで、注意してください。

### slee-Pi2 Plus

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

![slee-Pi2 and slee-Pi2 Plus 2020-02-06 20.44.44.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580616/61d693fe-b70b-5e73-ec59-60ab46f95233.jpeg)
上：slee-Pi2標準モデル,下：slee-Pi2 Plus(右上に２つコネクタが増設されている)。いずれもRaspberry piに装着済み



### リレー

電源入でスイッチが入るリレーで、slee-Pi2 Plusの外部入力コネクタに接続する。このリレーは２つ準備したACアダプタのうち、高い電圧の方に接続します。

![Relay 2020-02-06 16.45.43.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580616/1d02975b-c516-8865-3115-00efab6cb5ca.jpeg)
また、電源はslee-Pi2 Plusの電源コネクタに接続する。
これで、リレーに接続したACアダプタに電源が入ると、外部入力のスイッチがonになる。これをトリガーとして、Raspberry piの起動が始まります。

![slee-Pi2 Plus 2020-02-06 16.45.38.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580616/128835b0-9569-b34e-ae06-550abe73d6c7.jpeg)
リレースイッチをslee-Pi2 Plusの外部入力コネクタ、電源ラインを電源コネクタに接続

### ACアダプタ(hi,Lo)

２系統の電源の電圧差を検出し、シャットダウンするので、電圧が異なるACアダプタを用意します。
![power 2020-02-09 09.57.16.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580616/15de353f-8443-bb8c-3d5a-5c1c16efe625.jpeg)

上：15V、下：12V(slee-Pi2標準モデル同梱)

# セットアップ

Raspberry pi、slee-Pi2 Plus、電源、リレー付き電源を接続し、Rasbianの設定を[前回ブログ](https://qiita.com/ackcell/items/ea71147b8603627ec5bf)で言及した[ansible playbook](https://github.com/ackcell/mechatrax-slee-Pi2-Mackerel)でセットアップします。

## 電圧確認
２系統ある電源の電圧を調べます。直接sleepi2ctl -g voltageを使ってもいいですが、せっかくなのでMackerelのログを見てみます。
![Screenshot_2020-02-09 RPi4B · Mechatrax-software(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580616/aad50580-7887-cc5b-86d4-4304a2e4743c.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 -r 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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580616/43893b75-35b7-7281-112d-79386bbda850.png)

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

# まとめ

この方式により、[以前のブログ](https://qiita.com/MechaTracks/items/b715f4712611e64df78e)にあった課題

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

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

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