【簡単図解】Home AssistantでSwitchBotの温湿度計を連携してみる!

2022年9月23日

2022/9/23 追記
本記事では、自前で温湿度計データを取得する方法を紹介しています。
現在はSwitchBotインテグレーションで、温湿度計のデータを取得できるようになっています。
そのため、インテグレーションを使用するのが最も簡単です。

Home AssistantでSwitchBotを使うにはどうしたら良いんだろう?

そう思っている人には今回の記事がヒントになると思います。

前回まで、Home Assistantの基本的な使い方を説明してきました。

今回からは、より応用的な使い方を説明していくことになります。

まずは、SwitchBot温湿度計をHome Assistantに登録して、温湿度情報を取得する方法を解説します。

この記事でわかること
  • Home AssistantでSwitchBot温湿度計を連携してできること
  • SwitchBotの温湿度計を登録する方法・手順
  • SwitchBotの温湿度計の情報を取得するしくみ

私についてですが、スマートホームにはまってから、今では家中スマートホームデバイスが溢れています。遠隔操作、声で操作、GPSで操作、人が通ったら…などあらゆるシーンをスマート化しています。Home Assistantにも手を出して、色々なデバイスを連携させて、また、自分でコーディングをするくらいハマっています(笑)

そんな私がHome Assistantのノウハウをわかりやすく説明していきます。

Home AssistantでSwitchBot温湿度計を連携してできること

Home AssistantにSwitchBotの温湿度計を連携することで以下の情報をHome Assistant上で扱うことができます。

  • 温度
  • 湿度
  • バッテリー残量

これらをHome Assistantで扱うことができるということは、Home Assistantで温湿度をトリガーとしてオートメーションを作成することができることになります。SwitchBotの温湿度計をトリガーに色々なことができるのです。

SwitchBot温湿度計を登録する方法

自前でコーディングして作るのも良いのですが、先人の知恵が活用できるならば、どんどん活用していきましょう。

ということで、今回はHome AssistantでSwitchBotの温湿度計を連携するsbm2mqttを活用させていただきます。

GitHubで公開されています。

sbm2mqtt

sbm2mqttでHome Assistantで情報連携するしくみ

今回SwitchBotの温湿度計データをHome Assistantで扱うためにsbm2mqttを活用します。

このsbm2mqttがどうやってHome Assistantに温湿度情報を送っているかというしくみは以下の通りになります。

  1. SwitchBotの温湿度計はBLE(Bluetoothの1つ)で温湿度とバッテリー残量のデータを発信
  2. デバイス(Raspberry Piなど)でBLEスキャンして温湿度データ等を取得
  3. 取得したデータをMQTT(通信規格の1つ)を使ってHome Assistantに送信
  4. MQTTデータをHome Assistantで受信して表示

図解すると下のイメージです。

私はHome AssistantをRaspberry Piに構築しており、これを今回BLEスキャナー兼MQTTブローカーとして使っています。

温湿度計を登録する手順

早速、Home Assistantで使えるようにしていきます。

大きく3つやることがあります。

  1. Mosquitto brokerのインストール
  2. Configuration.yamlの編集
  3. smb2mqttの実行

1つ目は、事前準備としてMQTTを使える状態にすることです。Mosquitto brokerというアドオンをインストールします。このアドオンがMQTT通信の中継サーバーを担います。もし、既に使える状態にあるなら、この作業は不要です。

Mosquitto brokerをインストールするのは、先述の通り、SwitchBotの温湿度計データをMQTTと呼ばれる通信でHome Assistantに送るためです。

2つ目は、Home AssistantのConfigurationの編集です。

こちらはHome Assistantのダッシュボードに温湿度計の情報を表示するために行います。

3つ目は、smb2mqttの実行です。

事前設定が2つ目までで完了しているので、いよいよsmb2mqttを実行して、Home AssistantとSwitchBotの温湿度計を連携させます。

Mosquitto brokerの導入と設定

Mosquitto brokerのインストールは以下の手順です。

  1. アドオンのインストール
  2. ユーザーの作成
  3. インテグレーションの登録
  4. アドオンの設定

まずはアドオンをインストールします。

アドオンストアで「mqtt」と検索をかけると「Mosquitto broker」が表示されます。これをインストールします。

インストールが終わったら、MQTTによる通信を行うユーザーを登録します。

「設定」→「人とゾーン」→「ユーザー」に移動します。

そして、右下の「ユーザーを追加する」をクリックします。

登録するユーザーの情報を入力していきます。今回は実際のHome Assistantユーザーと言うわけではなく、MQTTの通信のやり取りをやってくれるMQTT用のユーザーを登録します。後ほどこのユーザー情報をMosquitto brokerなどに登録します。

ここでは以下のように設定しました。

表示名:MQTT
ユーザー名:mqtt_user
パスワード:(ご自身が忘れないように)

入力が終わったら、右下の「作成する」をクリックします。

次にインテグレーションの登録を行います。

「設定」→「デバイスとサービス」→「インテグレーション」に移動します。おそらくMQTTが表示されていると思いますので、「設定」をクリックします。

設定をクリックすると下記の画面が出てくるので、「送信」をクリックします。すると、Success!と表示され、設定が完了します。

完了したら、Mosquitto brokerのアドオン設定を行います。

「設定」→「アドオン、バックアップ、Supervisor」とクリックし、「アドオン」画面を表示します。

Mosquitto brokerをクリックして、Mosquitto brokerのアドオン画面にします。

上部の「設定」をクリックして、Mosquitto brokerの設定画面を表示します。

オプション内の記述内容で、赤枠のlogins:の部分に下記のように追加したユーザー情報を追記します。

logins:
  - username: mqtt_user
    password: (ご自身で決めたパスワード)

Configuration.yamlの編集

Configuration.yamlの編集を行います。これは取得した温湿度データをオーバービュー画面などに表示させるためです。

以下の手順で行います。

  1. 温湿度計のMACアドレスの確認
  2. Configuration.yamlの編集

1のMACアドレス確認は事前準備です。Configuration.yamlにMACアドレスを記載する箇所があるので確認をします。

確認はスマートフォンのSwitchBotアプリから可能です。

SwitchBotアプリを開き、温湿度計をタップして詳細画面に移動します。

右上のギヤマーク→「デバイス情報」をタップすると、「BLE MAC」という項目が表示されます。

ここに記載されているのがMACアドレスで後ほどConfiguration.yamlに記載するので控えておいてください。

では、早速Configlation.yamlの編集に移ります。

編集にはアドオンのFile editorなどのエディタを活用してください。インストールしていない場合は、アドオンストアからインストールをしてください。

ここではFile editorを使って編集していきます。

Home Assistantの左のメニューから「File editor」をクリックします。(左のメニューにない場合は、アドオンからWeb UIを起動してください。)

左上のフォルダアイコンをクリックして、「Configuration.yaml」を選択します。

Configlation.yamlの中身が右に表示されます。そこに以下のコードを追記します。

途中のxx:xx:xx:xx:xx:xxには先ほど確認したMACアドレスを入力してください。

またname: 部分はHome Assistant上での表示名です。任意の名前を設定できます。日本語もOKです。

また、注意事項としては過去にsensor: を記述している場合は、そこに追記が必要です。

sensor:
- platform: mqtt
  name: 'name_of_this_meter_temperature'
  state_topic: 'switchbot_meter/xx:xx:xx:xx:xx:xx' # MAC address of this meter
  value_template: '{{ value_json.temperature }}'
  unit_of_measurement: '°C' # Change to '°F' as appropriate
- platform: mqtt
  name: 'name_of_this_meter_humidity'
  state_topic: 'switchbot_meter/xx:xx:xx:xx:xx:xx' # MAC address of this meter
  value_template: '{{ value_json.humidity }}'
  unit_of_measurement: '%'
  icon: mdi:water-percent
- platform: mqtt
  name: 'name_of_this_meter_battery'
  state_topic: 'switchbot_meter/xx:xx:xx:xx:xx:xx' # MAC address of this meter
  value_template: '{{ value_json.battery }}'
  unit_of_measurement: '%'
  icon: mdi:battery

終わったら保存して、Home Assistantを再起動してください。

sbm2mqttの実行

さて、ここまで来たらsmb2mqttを実行します。基本的にはGitHubに書かれている通りの手順ですが、一部うまくいかなかった部分があったのでアレンジを加えています。

  1. ファイルをダウンロードし、解凍
  2. 解凍したフォルダをHome Assistantへコピー
  3. Dockerfileの修正
  4. インストール(Dockerのビルド)
  5. 実行(Docker run)

まずはsbm2mqttにアクセスしてダウンロードしてください。

sbm2mqtt

解凍した「sbm2mqtt-master」フォルダをHome Assistantのconfigフォルダにコピーします。コピーするときはHome AssistantとSamba shareで共有していると簡単でしょう。Samba shareはアドオンストアからインストールができます。

次にDockerfileを編集します。編集にはFile editorを使用します。左上のフォルダアイコンから「sbm2mqtt-master」フォルダを選択し、その中の「Dockerfile」を選択します。

この中のMQTT_USERとMQTT_PASSをユーザー追加で設定したものに直接書き換えてください。書き換えたら保存します。

GitHubのマニュアルには「sbm2mqtt_config.py」に記述すればOKみたいに書かれていますが、うまくいきませんでした。

# docker build . -t sbm2mqtt
# docker run --rm --net=host --privileged -it -e MQTT_HOST=xxx.xxx.xxx.xxx -e MQTT_PORT=xxxx -e MQTT_USER=xxxxxx -e MQTT_PASS=xxxxxx sbm2mqtt
FROM python:3.7
RUN apt-get update && apt-get install -y bluez bluetooth
RUN pip install bluepy paho-mqtt
ENV \
    MQTT_HOST=127.0.0.1 \
    MQTT_PORT=1883 \
    MQTT_USER=mqtt_user \
    MQTT_PASS=(自分で設定したパスワード)\
    MQTT_CLIENT=sbm2mqtt \
    MQTT_TOPIC=switchbot_meter \
    REPORTING_INTERVAL=300
      # in seconds
ENTRYPOINT sh docker_entrypoint.sh
COPY . .

ここまで来たら、Dockerをビルドして実行するだけです。

ビルドは「Terminal」から下記コマンドを打ってください。Terminalがインストールされていない場合はアドオンストアからインストールしてください。

cd config/sbm2mqtt-master
docker build . -t sbm2mqtt

うまくいくとこんなログが表示されます。

最後に実行します。下記のコマンドを打ちます。

docker run --rm --net host --privileged -i sbm2mqtt

成功すれば下記のようにログ上に温湿度などの情報が表示されます。

以上ですべて完了です。オーバービュー画面に下記のようにデーターが表示されているはずです。

まとめ

いかがだったでしょうか?

少し難しかったかもしれませんが、SwitchBot温湿度計をHome Assistantに連携させることができたと思います。今回は表示させることを目標に書きましたが、この時点でセンサー値としてHome Assistantは認識しているので、オートメーション等にも活用することができます。

つまり、オートメーションのトリガーにSwitchBotの温湿度計を活用することができます。

今回以降、Pythonを使ってコードを書いていきます。Pythonを知らなくてもほぼコピペするだけで動くように頑張って紹介していくつもりですが、Pythonの基本は知っておくことで、理解も深まりますし、アレンジもできるようになります。少し不安を感じる人は、以下の参考書を使って勉強してみることをおすすめします。

↓超入門書

↓初級本

次回はSwitchBotの開閉センサーを登録する方法です。

また、Home Assistantやスマートホーム関連の記事はこちらにまとめていますので、ぜひこちらも読んでみてください。

この記事を書いた人
author

ユキヒト

家電大好き+子育て真っ只中のブロガーです。
スマートホームを始めとする家電関連の記事や子育て・知育関連の記事を書いています。
質問や相談はいつでも受け付けています。お問い合わせフォームやTwitterからお待ちしております。(もちろん無料です)
どんなことでも構いません。
これまでにあった例としては、
「SwitchBotハブの設定ができないので教えてもらえませんか?」
「ベビーカメラの安いやつないですか?」
などです。全く記事と関係ない質問もOKです。
できる限り答えていきたいと思いますので、お気軽にどうぞ。
お問い合わせ
Twitter