MECHATRAXのブログ
弊社製品やサービスに関するブログです。企画や開発の際の参考になれば幸いです。
Pi-protectで停電検知時にSMSでアラート送信
Pi-protectで停電検知時にSMSでアラート送信
始めに
今回は弊社製品のラズパイ防塵防水IoTゲートウェイ「Pi-protect」で、停電検知時にシャットダウンを行う前にSMSでアラートを送信する方法をご紹介いたします。
Pi-protectは簡易UPS基板を搭載しており、デフォルトの設定で停電を検知すると自動的にラズパイをシャットダウンします。
使用するもの
- Pi-protect
- SMS付きSIMカード(標準サイズ)
- USB-シリアル変換ケーブル
- PC
手順①sms_sending.pyの作成
任意のディレクトリに下記のようなプログラムを作成します。ここでは/home/mtxpi/に作成しました。
PHONE_NUMBERにはSMSの送信先の電話番号を入れてください。
import gi
gi.require_version('ModemManager', '1.0')
from gi.repository import Gio, ModemManager
PHONE_NUMBER = '00000000000' # SMSの送信先の電話番号を設定
def sending_sms():
message = ("シャットダウンしました。")
mngr = ModemManager.Manager.new_sync(
Gio.bus_get_sync(Gio.BusType.SYSTEM, None),
Gio.DBusObjectManagerClientFlags.DO_NOT_AUTO_START,
None)
obj = mngr.get_objects()[0]
msg = obj.get_modem_messaging()
prop = ModemManager.SmsProperties.new()
prop.set_number(PHONE_NUMBER)
prop.set_text(message)
sms = msg.create_sync(prop)
sms.send_sync()
msg.delete_sync(sms.get_path())
if __name__ == '__main__':
sending_sms()
次に、PythonからSMSの送受信等を行うModemManagerと対話するために、ラズパイにgir1.2-modemmanager-1.0をインストールしてください。
sudo apt install gir1.2-modemmanager-1.0
手順②98-sending_sms.shの作成
Pi-protectは構成基板のslee-Piで停電の検知を行っており、デフォルトの設定でCN1に入力される電圧が3秒以上10V以下になると、/etc/sleepi3-monitor/voltage-1.dにあるスクリプトを実行します。この時、ラズパイはPi-protectに搭載された簡易UPS基板からの給電で動作します。
/etc/sleepi3-monitor/voltage-1.dにはデフォルトで99-shutdown.shを用意してあり、このスクリプトによって停電時のシャットダウンを行っています。
(参考:https://github.com/mechatrax/pi-protect/wiki/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2#etcsleepi3-monitorvoltage-1d)
停電時のシャットダウン前にSMSの送信を行うため、/etc/sleepi3-monitor/voltage-1.dに98-sending_sms.shを作成します。
/etc/sleepi3-monitor/voltage-1.d/98-sending_sms.sh#!/bin/bash
sudo python3 /home/mtxpi/sending_sms.py
スクリプトを作成したら権限を付与し、sleepi3-monitor.serviceを再起動します。
sudo chmod +x /etc/sleepi3-monitor/voltage-1.d/98-sending_sms.sh
sudo systemctl restart sleepi3-monitor.service
設定は以上になります。
sleepi3-monitor でよく使われるスクリプトの例はgithub上にも公開しております。よろしければこちらもご覧ください。
https://github.com/mechatrax/sleepi3-monitor/tree/bullseye/examples