wi-fiがなくても安心!ラズパイとIoTデバイスで家族を見守る方法
概要
スイッチボットのセンサーとハブを使ってリモートで通知する方法をまとめました。
ランニングコストを最安にするためにsoracom airとラズパイでwi-fiルーターを構築します。通信料は月300円程度になる見込みです。
今回はSwitchBot 開閉センサーがドアの開閉を検知し、リモートのアプリに通知が来るようにします。
通信のために使っているハブミニとラズパイは電源接続後、自動で起動します。再起動した時にそれぞれ自動で再接続してくれるので、停電後の復旧も安心です。
構成
ラズパイzero WH
ラズパイケース
micro SDカード 32GB
USB変換ケーブル(micro USB / USB-A)
SORACOM Air SIMカード plan-D サイズ:標準(データ通信のみ、月額300円)
3G対応データ通信端末 AK-020
SwitchBot 開閉センサー
SwitchBot ハブミニ
ラズパイ(+AK-020)とハブミニ
開閉センサー(仮固定)
スイッチボットアプリのセットアップ
詳細はスイッチボットアプリのチュートリアルを参照してください。
大まかな手順は以下です。
アプリをスマホにインストール
ユーザー登録後、アプリにログイン
スマホからbluetoothでセンサー、ミニハブと接続
センサーをハブミニに接続
ミニハブをwi-fiに接続(後述のAP設定後)
シーンを設定(センサーが検知したらアプリに通知する)
センサーの状態(アプリ)
シーン設定(アプリ)
ハブをAPに接続(アプリ)AP設定後
動作
センサーがドアの開閉を検知し、リモートにあるアプリに通知が来る。
ハブミニまたはラズパイが再起動後、自動で再接続する。
ハブミニは接続後、白く点灯する。問題があると点滅する。
データ通信端末は接続後、短く緑色に点滅する。接続に問題があると赤く点灯する。
soracomのオンデマンドリモートアクセスを使って、ラズパイにリモートからsshログインできる。
通知画面(アプリ)
履歴画面(アプリ)
ラズパイAPのセットアップ
OSをSDカードに書き込み
参照:https://www.raspberrypi.com/software/
Raspberry Pi Imagerを使用して書き込みました。
初期設定でssh有効、ユーザー&パスワード、wifi設定を含めることができます。
sshログイン
ラズパイをディスプレイに接続して、ipアドレスを確認します。
ターミナルでsshログインします。
ssh -p 22 user@192.168.1.100
パッケージアップデート
sudo apt-get update
sudo apt-get upgrade
dhcpcd, dnsmasq, hostapdをインストール
sudo apt-get install dnsmasq
sudo apt-get install iptables
sudo apt-get install hostapd
soracomのインストール
参照:https://soracom.jp/recipes_index/4171/
初期設定
curl -O https://soracom-files.s3.amazonaws.com/setup_air.sh
sudo bash setup_air.sh
初期設定後、データ通信端末を繋いだ状態だと3G回線が使用されます。
オンデマンドリモートアクセス
soracomのコンソールからオンデマンドリモートアクセスを有効にする。
ssh -p 12453 18-180-68-35.napter.soracom.io -l pi
dhcpcd, dnsmasq, hostapdの設定ファイルの変更
dhcpcdの設定
interface wlan0
static ip_address=192.168.11.1/24
nohook wpa_supplicant
dnsmasqの設定
interface=wlan0
dhcp-range=tag:wlan0,192.168.11.2,192.168.11.127,24h
dhcp-option=tag:wlan0,option:router,192.168.11.1
hostapdの設定
ssid=[ssid]
wpa_passphrase=[password]
interface=wlan0
country_code=JP
driver=nl80211
hw_mode=g
channel=6
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
DAEMON_CONF="/etc/hostapd/hostapd.conf"
サービス起動
rfkill unblock wifi
sudo systemctl restart dhcpcd
sudo systemctl start dnsmasq
sudo systemctl enable dnsmasq
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd
ルーティング
以下を有効化する
net.ipv4.ip_forward=1
iptablesを追加する。
sudo iptables -A FORWARD -i wlan0 -o ppp0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
設定ファイルに書き込む。
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
起動時に設定ファイルからiptablesを復元する。
iptables-restore < /etc/iptables.ipv4.nat
再起動してアクセスポイントを起動する
設定が上手くいっていれば外部からAPに接続できるようになります。
参考
Discussion
無駄な通信を減らすための設定
通信量を監視するためのnethogsをインストール
CLIモードに変更
パッケージの自動更新を停止
カーネル、ファームウェアの自動更新を停止
docomo 3Gサービスが2026年3月に終了するので、それまでにLTE対応のドングルに付け替える必要があります。