MECHATRAXのブログ
弊社製品やサービスに関するブログです。企画や開発の際の参考になれば幸いです。
slee-Pi3でラズパイ用UPSを構築(電源復旧を検知してラズパイを自動起動)
slee-Pi3でラズパイ用UPSを構築(電源復旧を検知してラズパイを自動起動)
本記事では、slee-Pi3を使用してラズパイ用のUPSを構築する手順ついて説明します。
slee-Pi3を使うと、停電時にラズパイOSを安全にシャットダウンし、復電時にラズパイを自動起動することができます。
手順①電源接続
ラズパイにslee-Pi3をスタックして、電源を接続します。
slee-Pi3の電源は2系統接続できます(CN1およびCN2)。
今回の場合、CN1に主電源、CN2にバックアップ用のバッテリー電源を接続します。
電源が2系統接続されている場合、電圧の高い方から電力が供給されます。
バッテリー電源電圧は6V以上で主電源電圧より小さいものを使用します。
今回の場合は単三電池(1.5V)を7個直列にして使用しました。
バッテリー電源の駆動能力が不十分だとslee-Pi3が誤動作する場合がありますのでご注意ください。
slee-Pi3のCN1・CN2の入力電圧を確認します。
mtx@raspberrypi:~ $ sleepi3ctl get voltage 1
11999
mtx@raspberrypi:~ $ sleepi3ctl get voltage 2
10753
手順②電源電圧監視設定(sleepi3-monitor)
sleepi3-monitorの設定ファイルを編集します。
threshold(電圧の閾値)を主電源電圧とバッテリー電圧の中間値に設定します。
今回の場合は11000mV(=11V)に設定しました。
history_size=3 にすることで、電源入力が3秒間継続して11Vを下回った場合に/etc/sleepi3-monitor/voltage-1.d/
配下のスクリプトファイルを実行します。
...
voltage1:
history_size: 3
commands:
- exec: /etc/sleepi3-monitor/voltage-1.d/
condition: under
threshold: 11000
oneshot: true
...
手順③停電時に実行するスクリプトの配置
停電発生時に実行するスクリプトとして2つ用意します。
1つ目は復旧電圧(restore-voltage)を設定するスクリプトです。
restore-voltageを設定することで、スリープ状態のslee-Pi3基板がCN1の電源復旧を検知して
ラズパイを起動させることができます。
#!/bin/bash
sleepi3ctl set measurement-interval 10
sleepi3ctl set restore-voltage $THRESHOLD
$THRESHOLD には/etc/sleepi3-monitor/monitor.yml
で設定した閾値電圧が適用されます。
この設定によりslee-Pi3はCN1とCN2のどちらかが閾値電圧を超えた時点でラズパイを起動します。
そのため閾値電圧はCN1とCN2の中間値を設定する必要があり、バッテリー電圧は主電源電圧よりも低い必要があります。
2つ目はシャットダウンを実行するスクリプトです。
/etc/sleepi3-monitor/voltage-1.d/99-shutdown.sh#!/bin/bash
logger "CN1 power outage detected"
shutdown -h now
忘れずに実行権限を付与します。
mtx@raspberrypi:~ $ sudo chmod +x /etc/sleepi3-monitor/voltage-1.d/99-shutdown.sh
設定は以上です。設定反映のためsleepi3-monitor.serviceを再起動します。
mtx@raspberrypi:~ $ sudo systemctl restart sleepi3-monitor.service
CN1の電源電圧が11Vを下回るとOSシャットダウンし、11Vを上回るとラズパイを自動で起動します。
sleepi3-monitor でよく使われるスクリプトの例はラズパイ上の以下のディレクトリ配下に
ありますのでコピーしてそのままお使いいただけます。/usr/share/doc/sleepi3-monitor/examples