MacでSwitchBot Meter(温度計)の値を読む

SwitchBotはAPIが公開されており、ごにょごにょできるみたいなことを目にしました。そこで、まず調査のために手元のMacを使って通信を読んでみることにしました。

環境

  • Mac Book Pro MacBook Pro (13-inch, 2016, Four Thunderbolt 3 Ports)
    • MacOS 10.15.4 (Catalina)
  • Xcode 11.4.1(11E503a)
  • Bluetooth Explorer 7.0.0(7.0.0d101)

手順

Xcodeについてはインストール済みの前提です。Xcodeのバージョン8以降はBluetooth Explorerのインストール方法が変わっているそうですが、このブログではXcode8以降がインストールされているとして話を進めていきます。

Bluetooth Explorerのインストール

これはMacのBluetooth関連のデバッグなどを行うツールで、Additional Toolsに内包されています。
参照: Bluetooth – Apple Develope

まずは[サインイン – Apple](https://developer.apple.com/downloads/?name=Additional)にて、Apple IDでログインします。
利用規約とデベロッパーになりますか?的なことを聞かれたと思うので、チェックを入れてデベロッパーになります。

Additional Tools for Xcode バージョンをダウンロード

自分の環境は 11.4なので、これを選択。

ダウンロードしたdmgファイルを開き、中のHardware>Bluetooth Explorer.appを開きます。(アプリケーションフォルダにコピーしておくと、今後使うときに便利)

使い方

Bluetoth Explorerを起動したら、上のバーからDevices > Low Energy Devicesと進みます。

ウィンドウが開いたら、左上のStart Scanningを選択

スマホアプリから、見たい端末(Switch Botの温度計)のMacアドレス(?)を確認しておきます。

SwitchBot MeterのMacアドレス

しばらくするとスマホアプリで確認したMacアドレスと同じ端末がみつかります。(見つからない場合にはスマホから一度、温度を見に行くといいかも)
デバイスを選択すると、詳しい情報が下に表示されます。

ダークモードだと下の詳細が見づらいです。。

(PCの外観モードは設定 > 一般 > ライトで変更できます。)

この中で、
Service Data:{
0D00 = {length = 6, bytes = 0x541064099b3a};
}
と書かれている部分がデータになります。
(テキトにデータが見れたら左上のStop Scannningでスキャンを止めておきます。

データの読み方

無事に0x541064099b3aというデータを読み取ることができました。このデータのフォーマットはMeter BLE open API · OpenWonderLabs/python-host Wikiに公開されています。個人でまとめてくださっているSwitchBot 温湿度計の測定値を BLE Advertisement パケットから直接読み取る – Qiitaのブログが非常にわかりやすかったです。

取得したデータ541064099b3aを詳しく見てみます。
まずは2進数に変換して1バイト(8ビット)ごとに区切って見やすくします。

54|10|64|07|9d|2d
01010100|00010000|01100100|00000111|10011101|00101101

左を0バイト目、一番右を5バイト目としたとします。(0|1|2|3|4|5バイト目)
この中で温度の情報は、4バイト目の下位(右側)7bitが整数部、3バイト目の下位4bitが小数点以下の情報です。これを10進数にすると、
0011101 => 29
0111 => 7
となり、温度は29.7℃となります。
(4バイト目の上位1bitは”Positive/Negative temperature flag”で0だと温度がマイナスになります。)

同様に湿度(humidity)は5バイト目の下位7bitで0101101 => 45%となります。

ディスプレイされている数値

…ちょっと値が違いますが、値を読み取ったタイミングと写真を撮ったタイミングが異なるので、、本当はピッタリと一致していました。その他にもバッテリーの情報やアラートの設定などが書かれているようです。

まとめ

MacのBluetoothからSwitchBot Meterの情報を読み取ってみました。本来はプログラムを書いて連携したかったのですが、Python3系でプログラムを書こうとライブラリを調べたところイマイチいいものが見つからずに、とりあえず数値を解読するだけとなりました。

BLEの仕様については全然知らないのですが、Bluetoothスピーカのようなペアリング(認証)操作もなく、軽量のデータが送られ続けているのはなかなかおもしろいな〜と。

今後はRasPiかESP32あたりで何かゴニョゴニョしたいなーなんて考えてます!

参考資料
Pocket
このエントリーを Google ブックマーク に追加

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください