SwitchBot APIのGoクライアント、go-switchbotを書いた


1 min read
SwitchBot APIのGoクライアント、go-switchbotを書いた

SwitchBotは所謂IoT機器を扱っているメーカーで、温度計を専用のハブ経由でインターネットに接続し、アプリから室温を確認したり、室温によってエアコンの設定を変更する、などといったホームオートメーションに役立つガジェットを複数販売しています。

しかし、それらのデータを確認できるのはSwitchBotのアプリからか、Bluetooth経由だけ、という状況で、私もHTTPのAPIを用意してくれたら良いのに、とずっと思っていました。

ところが昨日、社のSlackで、こちらのissueを共有してもらい、どうやら昨年12月ごろにはHTTPのAPIが使えるようになっていたっぽいことが分かりました。

我が家にはHub Miniもあり、インターネットに接続してある状態ですから、早速次の手順でtokenを手に入れて試してみました:

  1. スマホでSwitchBotのアプリを開く
  2. プロフィールタブ > 設定と進み、アプリバージョンを10回連打する
  3. 開発者向けオプションが表示されるので、開いてトークンを取得する
  4. Authorizationヘッダにトークンを入れ、https://api.switch-bot.com/v1.0/devices にGETでリクエストを投げてみる

結果、確かに自宅のSwitchBotデバイスの一覧を取得することができました。

こうしちゃいられねぇ!と深夜に書いたGolang用のSwitchBotクライアントがこちらです:

https://github.com/nasa9084/go-switchbot

ドキュメントはpkg.go.inなどで見て下さい: https://pkg.go.dev/github.com/nasa9084/go-switchbot
今回はFunctional Option PatternとGoogleっぽいAPIの合わせ技構成にしてみました。

例えば、デバイスの一覧を取得したい場合は次の様にすると取得することができます。

client := switchbot.New("SET_YOUR_SWITCHBOT_OPEN_TOKEN")

physical, virtual, _ := client.Device().List(context.Background())

第一返値のphysicalはSwitchbotデバイスの事で、第二返値のvirtualは赤外線で通信するデバイスの事です。SwitchBot APIでは、SwitchBotデバイスの事を物理デバイス、赤外線で接続するデバイス(エアコンなど)のことをvirtual remote deviceと区別して扱います。

API rate limitは1,000 request / dayとなっていて、あまり多いという訳ではないですが、例えば数分に一回、あるいは一時間に一回室温を取って記録するようなPrometheus Exporterを記述するといったことが捗ると思いますので、SwitchBotデバイスを使っている方は是非使ってみて下さい!


Firefox 83で導入されたピンチズームを無効にする
Previous article

Firefox 83で導入されたピンチズームを無効にする

11月7日にリリースされたFirefox 83では、タッチスクリーン/タッチパッドを搭載したデバイスでのピンチズームがサポートされました。 が、私としてはスクロールしたいだけなのにズームされてしまったりと誤動作が多く、使いづらいなーと感じましたので、無効化しましたが、設定画面からは無効化できなかったのでメモを残しておきます。 about:configを開く zoomで検索しapz.allow_zoomingをfalseに設定する 以上です。

switchbot-exporterを書いた
Next article

switchbot-exporterを書いた

先だって、SwitchBot APIのGo言語用クライアント実装であるgithub.com/nasa9084/go-switchbotを書いた、という記事を書きましたが、これを使用してPrometheusでSwitchBot温湿度計の情報を収集できるswitchbot-exporterを書いてみたので紹介します。 switchbot-exporterはblackbox exporterのように、起動時にはターゲットを指定せず、Prometheusがメトリクスを収集する際にrelabel_configでターゲットを与えるタイプのexporterです。 起動時に必要な情報はSwitchBotアプリから取得できるOpenTokenのみです。OpenTokenはコマンドラインオプションか、環境変数SWITCHBOT_OPENTOKEN経由で渡すことができます。 $ switchbot-exporter -switchbot.opentoken=blahblahblah # or $ SWITCHBOT_OPENTOKEN=blahblahblah


Related Articles

RAMマウントをQi対応にする
2 min read
Desk Tour 2021.04
4 min read
switchbot-exporterを書いた
2 min read
Soundcore Life Q30
3 min read

GO TOP

🎉 You've successfully subscribed to something tech.!
OK