概要
スイッチボットのセンサーとハブを使ってリモートで通知する方法をまとめました。
ランニングコストを最安にするために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 ハブミニ
スイッチボットアプリのセットアップ
詳細はスイッチボットアプリのチュートリアルを参照してください。
大まかな手順は以下です。
- アプリをスマホにインストール
- ユーザー登録後、アプリにログイン
- スマホからbluetoothでセンサー、ミニハブと接続
- センサーをハブミニに接続
- ミニハブをwi-fiに接続(後述の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に接続できるようになります。