SwitchBotの温湿度計の値をOBSに表示するアプリの改良
きっかけ
YouTube Liveで現在の室温と湿度を常に表示するために、元々オリジナルのコンソールアプリを作成していました。
OBS には指定ファイル内のテキストを画面に表示する機能があるため、これを利用した簡単なプログラムです。
SwitchBot温度計からBluetoothで室温・湿度を取得し、テキストファイルに書き出します。

Live画面の右上に、このプログラムでテキストファイルへ出力した温度と湿度が表示されるようにしています。

Claude Codeが使えるようになってから、このコンソールアプリを元にして新たにデスクトップアプリを作成してみることにしました。
複数の温度計の値をグラフで推移を見たり、履歴を残すことができるようにしました。もちろん元のYouTube Live用のファイル更新機能は残したまま機能追加です。
できたもの
WPF(.NET 8、C#)のデスクトップアプリです。
SwitchBot の温湿度計が出している Bluetooth の信号を拾って、次のことができます。
- 温度と湿度の現在値を一覧で表示(デバイスごとに別名と色を設定)
- 温度・湿度のグラフ表示(30分〜1年)
- 履歴を CSV に保存(1分間隔に間引き)
- 選んだ1台の値を、OBS で読み込めるテキストファイルに書き出し
以下のようなモダンなGUIを持つアプリができあがりました。自分ではコードを一切書いていません。
作りたいものを伝えて、動作が変なところをみつけたら都度修正を依頼しただけです。

HubからWiFi経由で情報を取得する事はできないため、Bluetoothの電波の届く範囲の温度計のみが記録できます。
ソースは GitHub に置きました(MIT ライセンス)
https://github.com/takesa03/SwitchBotMeter
グラフの見た目を調整
色の選択は、現在の色だけを表示して、クリックするとパレットが開く形にしてもらいました。
16色を 4×4 で並べています。
最初は湿度を点線にしていましたが、マーカーと相性が悪かったので実線に戻しました。
時間軸のラベルは斜めになるのが好きではないので、日付と時刻を2段に分けて表示しています。
ラベルの改行はグラフ部品(LiveCharts)の古いバージョンだと正しく表示されず、2.0.5 に上げることで解決したようです。
長時間動かしていたら受信が止まった
放置して動かしていると、ある日スキャンのログが更新されなくなり、データも取れなくなっていました。
停止ボタンも開始ボタンも反応しません。
Claude Codeで原因を切り分けました。
- スキャン用のオブジェクトを作り直しても受信できない
- アプリを新しく起動し直しても受信できない
- Windows の Bluetooth を OFF → ON にすると、すぐに受信が再開した
アプリの問題ではなく、Windows の Bluetooth 側が詰まっていたようです。
対策として、アプリ側で次の復旧処理を入れてもらいました。
- 3分間なにも受信しなければ、スキャンを作り直す
- 15分間なにも受信しなければ、Bluetooth の無線そのものを再起動する
2つ目はマウスやキーボードなど、ほかの Bluetooth 機器も切れてしまいます。
そのため、手動で実行するボタンには確認のダイアログを付けました。
CPU 負荷を下げるために間欠スキャンにした
スキャンを動かし続けていると、CPU の負荷が気になりました。
SwitchBot は1〜2秒ごとに信号を出していて、履歴も1分に1回しか記録していないので、常時スキャンする必要はなさそうです。
そこで、60秒のうち10秒だけスキャンする方式に変えてもらいました。
別の PC で動かしたときに、スキャン停止のログが出るタイミングが違う、という現象もありました。
停止の通知は OS やドライバが非同期で返すので、環境によってタイミングが変わるようです。
停止に入った時点でアプリ側からもログを出すようにして、見え方をそろえました。
別の PC に移したら起動しなかった
履歴や設定の保存先のフォルダは自分で選べるようにしてあります。
このパスは設定ファイルに書かれているので、別の環境にデータごと移すと、ドライブ文字が違って起動時に落ちてしまう問題が発生しました。
保存先のフォルダが開けないときは、メッセージを出してフォルダ選択ダイアログを表示するようにしました。
選び直した場所を新しい保存先として覚え、キャンセルしたらアプリを終了します。
データを消してしまった件
途中で、ビルドをやり直すために bin フォルダを削除したところ、そこに入れていた別名・色・履歴のデータも消えてしまいました。
設定の保存先が実行ファイルと同じフォルダにしていたためです。
再ビルド時にデータが消えてしまわないよう、保存先を好きなフォルダに変更できる機能を入れました。
はっきり言って、これだけのものが自分の手を動かさずに作り出せてしまうことに本当に驚きました。
しかも自分が作るよりも品質が高い。。。
