🥰

wi-fiがなくても安心!ラズパイとIoTデバイスで家族を見守る方法

2023/08/08に公開
2

概要

スイッチボットのセンサーとハブを使ってリモートで通知する方法をまとめました。
ランニングコストを最安にするために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に接続できるようになります。

参考

https://www.itmedia.co.jp/news/articles/2008/14/news042.html

https://qiita.com/NaotakaSaito/items/be29e5926faf20cf5502

https://soracom.jp/recipes_index/4171/

Discussion

RyoKubozonoRyoKubozono

無駄な通信を減らすための設定

通信量を監視するためのnethogsをインストール

sudo apt-get install nethogs
sudo nethogs ppp0

CLIモードに変更

パッケージの自動更新を停止

systemctl  status apt-daily.timer
systemctl  stop apt-daily.timer
systemctl disable apt-daily.timer
systemctl status apt-daily.service
systemctl stop apt-daily.service
systemctl disable apt-daily.service
/etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";
/etc/apt/apt.conf.d/02periodic
APT::Periodic::Enable  "0";

カーネル、ファームウェアの自動更新を停止

sudo apt-mark hold raspberrypi-kernel
sudo apt-mark hold firmware*
RyoKubozonoRyoKubozono

docomo 3Gサービスが2026年3月に終了するので、それまでにLTE対応のドングルに付け替える必要があります。