SwitchBotのセンサーデバイス(人感センサーやCO2センサーなど)は、エンジニア視点で見てもハードウェアとしての完成度が非常に高いガジェットです。コンパクトで省電力、かつデバイス単体であれば価格も手頃です。
しかし、これから試そうと思うエンジニアにとって、一つだけ「心理的なハードル」が存在します。それは、公式アプリでの自動化やクラウド連携を行うために、原則として SwitchBotハブ(定価4,000円程度)が必須となる点です。
「データ取得のためだけに専用ハブを買うのは気が引ける……」 「CO2センサーには興味があるので、まずは少し遊んでみたいな……」
そう考える方におすすめしたいのが、拙作の switchbot-actions です。これを使えば、専用ハブを介さず、デバイス1台からSwitchBotの可能性を引き出すことができます。
switchbot-actionsを使うメリット
switchbot-actions は、SwitchBotデバイスを制御・自動化するためのOSSです。このツールを導入する主なメリットは以下の3点です。
1. ハブ不要でスモールスタートが可能
switchbot-actions は、PCやRaspberry Piに搭載されたBluetooth機能を使い、デバイスと直接BLE通信を行います。つまり、一般的なSwitchBotユーザーが利用する公式の「SwitchBotハブ」を購入する必要がありません。 これはエンジニアにとって大きなメリットと言えるでしょう。
「まずはCO2センサーだけ購入して、手元のRaspberry Pi(ラズパイ)で値を取りたい」という場合でも、最小の手間とコストで始められます。
2. YAMLひとつでロジックを記述できる
公式アプリの自動化機能も進化していますが、複雑な条件分岐(条件Aかつ条件Bの時だけ……等)や、任意のSlack WebhookへのPOST送信といった柔軟な外部連携まではカバーしきれていません。
switchbot-actions では、動作のすべてを1つの config.yaml に記述します。
「温度が28度を超えたら」「開閉センサーのボタンが押されたら」といったトリガー条件や、Webhook、シェルコマンド実行といったアクションを、コードベースで柔軟に定義できます。
3. データを自分のものにできる
センサーの現在値を確認するだけでなく、時系列データとして蓄積・可視化したくなるのがエンジニアの性ではないでしょうか。 このツールでは Prometheus Exporter 機能を実装しています。設定を一行追加するだけで、Grafana等を用いて室温や湿度を簡単にグラフ化できるようになります。
実践:CO2センサーで作る「換気アラート」
では、実際に switchbot-actions を使って、実用的なシステムを作ってみましょう。
テーマは、在宅勤務の生産性を守る「CO2換気アラート」です。
やりたいこと
- 機材: SwitchBot CO2センサー、Raspberry Pi 3(BLEを搭載していればPCやMacでも動作します)
- 条件: CO2濃度が1000ppmを超えたら
- 動作: Slackに「換気してください」と通知を送る
設定ファイル (config.yaml)
やることはシンプルです。config.yaml を作成し、以下のように記述します。
# config.yaml # 1. デバイスの定義 (MACアドレスはデバイス裏面、またはスキャンコマンドで確認) devices: my-co2-meter: address: "AA:BB:CC:DD:EE:FF" # 2. 自動化ルールの定義 automations: - name: "換気アラート" # 頻繁に通知が来ないよう、一度発火したら1時間は静かにする cooldown: "1h" # トリガー設定 (IF) if: source: "switchbot" device: "my-co2-meter" conditions: # CO2濃度が1000ppmを超えたら発火 co2: "> 1000" # アクション設定 (THEN) then: - type: "webhook" url: "https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK" method: "POST" payload: text: "🚨 *換気アラート* 🚨\n現在のCO2濃度は *{co2}ppm* です。窓を開けましょう!"
解説
- 動作概要: ラズパイが直接CO2センサーのBLEアドバタイズ信号を拾い、YAMLの条件 (
co2: "> 1000") に合致した瞬間、インターネット経由でSlack APIを叩きます。 - プレースホルダー:
{co2}と記述するだけで、センサーから取得した実際の値をメッセージに埋め込めます。 - cooldown: 「1001ppm」と「999ppm」を行き来するたびに通知が来ると、実運用ではノイズになります。
cooldown: "1h"を設定すれば、「一度通知した後は1時間何もしない」といった制御も設定ファイルだけで完結します。
これだけの記述で、自分だけの換気アラートシステムが完成しました。
筆者はほぼ同じ仕組みを実用しています1。在宅勤務中に部屋を閉め切っているとCO2濃度が上がりやすいため、興味を持った方はぜひ試してみてください。 SwitchBot CO2センサーは少々値が張りますが、CO2センサー(NDIR方式)の部品単価自体が高価であることを考えると、完成品としてこの価格はコストパフォーマンスが高いと言えます。
導入手順
導入には Python 3.11 以上 が動く環境が必要です。システム環境を汚さないよう、 pipx でのインストールを推奨します。
1. インストール
# pipxが未インストールの場合はまずインストール # (Ubuntu/Debian系の場合: sudo apt install pipx) pipx ensurepath # switchbot-actionsのインストール pipx install switchbot-actions
2. デバイスのスキャン
まずは設定ファイルなし、かつデバッグモードで起動し、ラズパイからセンサーが見えているか確認します。
# -vv (verbose x 2) をつけるとDEBUGログが表示され、受信したBLEデータが見えます # Bluetoothへのアクセス権限が必要な場合があります switchbot-actions -vv
ログに Received advertisement from... と表示され、手持ちのセンサーのMACアドレスが見つかれば準備完了です。ここで確認したアドレスを config.yaml に記述してください。
3. 起動
先ほど作成した config.yaml を保存し、指定して起動します。
switchbot-actions -c config.yaml
これだけでラズパイがスマートホームハブになりました。
本格的に運用する場合は、リポジトリのドキュメントを参考に systemd や Docker で常時稼働させてください。筆者の自宅では半年ほど動き続けています。
まとめ
SwitchBot製品は、ハードウェアとしての完成度だけでなく、ユーザーが自由に遊べる余地が広い点も魅力です。switchbot-actions がそのハードルをさらに下げるツールになればと願っています。
- ハブを買わずに、センサー1個から始められる
- YAMLでロジックを記述できる
- 必要ならGrafanaで可視化できる
まずはデバイスひとつから、手作りIoTの実験をしてみてはいかがでしょうか。特に入門用として、以下の3つは安価でおすすめです。
- 筆者はGrafana Cloudで可視化・アラーティングをして、Slack通知しています。設定は面倒ですが、Slackにグラフ画像を出せるのがメリットです。↩



