Experiment record
SwitchBot Plug Mini OpenAPIで電力値が更新されず、同じ値が長時間返る現象の調査
SwitchBot Plug Mini (JP)のOpenAPIで消費電力や電流などの値が長時間更新されず同じ値が返る現象を追跡し、メーカー確認済みの段階別報告メカニズムと、weight fieldが瞬時有効電力を表す可能性が高いという副次的な結論に至った公開実験ログ。
概要
SwitchBot Plug Mini (JP) は、家庭用コンセントと電気機器の間に接続し、電源のON/OFF制御や電力関連情報の取得ができるスマートプラグです。
本実験では、このPlug Miniの状態をSwitchBot OpenAPI v1.1から定期取得していたところ、APIリクエスト自体は成功しているにもかかわらず、消費電力や電流などの値が10〜20分以上更新されず、同じ値が繰り返し返る現象を確認しました。
原因を調べるため、短周期でのAPI取得、長時間ログの比較、異なるロガー環境からの観測、Plug Miniのリセット、スマートフォンのBluetooth・Wi-Fi接続条件の変更、SwitchBotアプリ通信の観測、SwitchBotサポートへの問い合わせを順に行いました。
その結果、SwitchBotサポートから、Plug Miniには負荷変化量に応じて新しい値を報告する段階別の報告メカニズムがあるとの回答を得ました。今回の約110 W負荷についてメーカーは30 Wの変化量を報告条件として説明し、あわせて提示された表では300 W以内の帯の条件を「30 W超」としています。
また、この調査の途中でOpenAPIのweight fieldについて解析した結果、実験データとの整合性から瞬時有効電力 [W] を表している可能性が高いという副次的な結論にも至りました。
実験の背景
家庭内の電力消費を長期的に記録する目的で、SwitchBot Plug Miniの状態をOpenAPIから定期取得する仕組みを試していました。
取得対象には主に次のfieldが含まれていました。
| OpenAPI field | 本実験での扱い |
|---|---|
voltage | 電圧 |
electricCurrent | 電流(取得値はmA) |
weight | 電力に相当すると考えられる値 |
electricityOfDay | 当日の使用時間 [min] とみられる値 |
ログを確認すると、これらの値が複数回のAPI取得にわたって完全に一致する区間がありました。
例えばAPIを1分間隔で取得していても、返ってくる値が20分近くまったく変化しないことがあります。
このため、APIを1分ごとに取得していることと、Plug Miniが1分ごとに新しい測定値を報告していることは同じではない可能性が出てきました。
そこで、OpenAPIから取得できる値がどのような条件で更新されるのかを調べました。
実験方法
SwitchBot Plug Mini
本実験では、日本向けのSwitchBot Plug Miniを使用しました。使用個体の型番は W2001401 で、本体ラベルから確認しました。
Plug MiniはSwitchBotアプリやクラウド経由で電源を操作でき、OpenAPIからもデバイス状態を取得できます。
SwitchBot OpenAPI
データ取得にはSwitchBot OpenAPI v1.1を使用しました。
今回問題になったのはAPIリクエストが失敗することではありません。APIからは正常なレスポンスが返っているにもかかわらず、レスポンスに含まれる電力関連の値が長時間変化しないことでした。
データ取得経路
同じPlug Miniに対し、異なる実行環境からOpenAPIを取得しました。
- Pythonによるロガー
- Google Apps Scriptによるロガー
異なる環境から同じ値が返るかを比較することで、特定のロガープログラムや実行環境だけに原因がある可能性を切り分けました。
実験ログ
2026-08-12 — 5秒周期で取得
まず、OpenAPIを短い間隔で取得し、値がどの程度の頻度で変化するのか確認しました。
5秒周期で約12分32秒取得し、151点のデータを得ました。
この範囲ではweightとelectricCurrentは変化していました。また、electricityOfDayはおおむね60秒ごとに1増加しました。したがって、Plug Miniから新しい値がまったく報告されていないわけではありませんでした。
2026-08-12 — 1秒周期で取得
さらに取得間隔を1秒まで短くしました。
約3分43秒の間に223点を取得しました。
1秒ごとにAPIを取得しても、毎回新しい値になるわけではありませんでした。同じ値が複数回連続して返り、値の変化は主に2〜3秒程度の間隔で確認されました。
この結果から、OpenAPIを呼び出す周期と、Plug Mini側から新しい値が報告されるタイミングは別ではないかと考えました。
2026-08-12 — 約20分間、同じ値が続く区間を確認
長時間ログを確認すると、短周期取得で見られた数秒程度の値の重複とは明らかに異なる現象がありました。
voltage、electricCurrent、weight、electricityOfDayなど複数のfieldが、長時間まったく同じ値を維持していました。
代表的な例では、約20分間同じ値が続いた後、複数のfieldが新しい値へ変化しました。
この結果から、APIを高頻度に取得したとしても、必ずしも高頻度で新しい測定値を得られるわけではないことが分かりました。
2026-08-12 — PythonとGoogle Apps Scriptの結果を比較
Pythonによる1分周期ロガーと、Google Apps Scriptによる5分周期ロガーの結果を比較しました。
両者は異なる実行環境で動作していますが、同じ時間帯に同じ値を取得していました。
このため、Python側だけで古い値が保持されている、あるいはGoogle Apps Script側だけでキャッシュが発生している、といった単一のロガー環境に限定した説明では考えにくくなりました。
2026-08-12 — SwitchBotアプリの詳細画面を開く
OpenAPIの値が長時間変化していない最中に、スマートフォンのSwitchBotアプリで対象Plug Miniの詳細画面を開きました。
その後のOpenAPI取得で値が更新する現象を複数回確認しました。アプリに表示された使用時間と、更新後のelectricityOfDayが一致する例もありました。
この時点では、アプリの詳細画面を表示すると、Plug Miniまたはクラウドとの間で何らかの状態取得や同期処理が行われているのではないかと考えました。
ただし、この観測だけでは、アプリが実際にどのような通信を行っているのかは分かりませんでした。
2026-08-12 — BluetoothをOFFにして確認
スマートフォンのBluetoothをOFFにした状態でも同じ操作を行いました。
この条件でも、SwitchBotアプリの詳細画面を開いた後にOpenAPIの値が更新する現象を確認しました。
少なくとも、この現象をスマートフォンとPlug MiniのBluetooth直接通信だけで説明するのは難しくなりました。
2026-08-12 — Wi-FiをOFFにし、携帯回線のみで確認
次にスマートフォンのWi-FiをOFFにし、携帯電話回線のみでSwitchBotアプリを使用しました。
この条件でも、アプリ詳細画面を開いた後のOpenAPI値更新を確認しました。
この結果から、スマートフォンがPlug Miniと同一LAN内にいることは、この現象の必須条件ではないと考えられます。
一方で、詳細画面の表示によって具体的にどのような同期処理が行われているのかは、この実験では分かりませんでした。
2026-08-12 — mitmproxyでアプリ通信を確認
アプリ詳細画面を表示したときの通信をmitmproxy経由で観測しました。
詳細画面の「接続中…」表示に対応する明確な新規HTTP refreshリクエストは特定できませんでした。一方、アプリのメタデータにはデバイスごとのpub/sub風のtopic情報が見つかりました。
この観測だけでは、具体的な通信プロトコルや、詳細画面が送るrefresh commandの内容までは特定できませんでした。
2026-08-13 — Plug Miniをリセット
機器側の一時的な異常の可能性を確認するため、Plug Miniをリセットしました。
しかし、その後も長時間同じ値が返る挙動を確認しました。
このため、単純な一時的不具合だけでは今回の現象を説明しにくくなりました。
2026-08-13 — SwitchBotサポートへ問い合わせ
ここまでの結果から、OpenAPI利用者側からは確認できないデバイス側またはクラウド側の報告仕様が存在する可能性があると考え、SwitchBotサポートへ問い合わせました。
問い合わせでは主に、OpenAPIから長時間同じ値が返ること、異なるロガーでも同じ値になること、Plug Miniをリセットしても挙動が変わらないことを伝えました。
2026-08-16 — 開発部門で確認
SwitchBotサポートから、内容を開発部門へ確認しているとの連絡がありました。
この時点では、値が更新されない理由について具体的な回答はまだありませんでした。
2026-08-19 — 段階別の報告メカニズムについて回答
SwitchBotサポートから、開発部門の確認結果として、Plug Miniには負荷変化量に応じた段階別(レイヤー)の報告メカニズムがあるとの回答がありました。
回答された変化量は次のとおりです。
| 負荷の目安 | 新しい報告に必要な変化量 |
|---|---|
| 10 W以内 | 4 W超 |
| 100 W以内 | 10 W超 |
| 300 W以内 | 30 W超 |
| 500 W以内 | 50 W超 |
| 700 W以内 | 70 W超 |
| 1000 W以内 | 100 W超 |
| 1500 W以内 | 100 W超 |
今回の実験時の負荷は約110 Wでした。
メーカーはこの条件について30 Wの変化量を報告条件として説明し、あわせて提示された表では300 W以内の帯の条件を「30 W超」としています。
これは、それまで実験結果から考えていた、一定以上の変化が起きた場合にのみ新しい測定値をクラウドへ報告する仕組みが存在するのではないか、という考えと整合します。
感度変更について
メーカーからは、調査対象デバイスについて100〜300 W帯のしきい値を30 Wから10 Wへ変更可能との説明もありました。
そのため、30 Wから10 Wへの変更を依頼しました。
ただし、その後のやり取りでは、実際に変更処理が完了したことを確認できる回答や測定結果は得られていません。
2026-08-19 — 追加質問
さらに、メーカーへ次の2点を質問しました。
- 電力変化がしきい値を超えた場合、
voltage、electricCurrent、electricityOfDayも同時に更新されるのか。 - SwitchBotアプリの詳細画面を開いたとき、通常の段階別報告とは別に、デバイス状態を取得・同期する処理が行われるのか。
2026-08-21 — 追加質問は開発部門で確認中
追加質問について、SwitchBotサポートから開発部門へ確認しているとの回答がありました。
この時点では、上記2点について具体的な仕様回答は得られていません。
結論
主な結論 — 段階別報告メカニズム
今回調査したPlug Miniには、負荷変化量に応じて新しい値を報告する段階別の報告メカニズムがあります。
今回の約110 W負荷について、メーカーは30 Wの変化量を報告条件として説明し、提示された表では300 W以内の帯を「30 W超」としています。
実験中には、1秒周期でAPIを取得しても同じ値が複数回返ること、複数の電気量fieldが約20分間同じ状態を維持する場合があること、PythonとGoogle Apps Scriptという異なる取得経路で同じ値が得られること、SwitchBotアプリの詳細画面を開いた後にOpenAPI値が更新することなどを直接確認しました。
副次的な結論 — weight fieldの意味
OpenAPIの値が更新されない原因を調べる過程で、weight fieldが何を表しているのかについても解析しました。
1秒周期で取得した223点について、
weight [W] / (voltage [V] × electricCurrent [A])
を計算した解析では、平均約0.893、中央値約0.945となりました。OpenAPIのelectricCurrentはmAで返るため、この計算ではAへ換算しています。
もしvoltageが実効電圧、electricCurrentが実効電流、weightが有効電力を表しているとすると、この比は交流回路における力率に相当します。得られた値は家庭用交流負荷として物理的に不自然な範囲ではありませんでした。
この結果から、今回取得したデータでは、weight fieldは瞬時有効電力 [W] を表している可能性が高いと考えられます。
一方、weightというfield名の正式な意味をメーカー仕様として直接確認できる資料は、今回確認できた資料にはありませんでした。
証拠区分のまとめ
このExperimentで得られた情報のEvidence Stateは次のとおりです。
| 記録内容 | Evidence State |
|---|---|
| 負荷変化量に応じた段階別報告メカニズムがあり、今回の約110 W条件についてメーカーが30 Wの変化量を報告条件として説明し、提示された300 W以内の帯が30 W超とされていること | VERIFIED |
| 1秒周期でも同値が返ること、約20分の同値継続、独立ロガー間の一致、アプリ表示後の更新などの直接観測 | OBSERVED |
weight fieldが瞬時有効電力 [W] を表している可能性が高いという解釈 | INFERRED |
各Evidence Stateの意味はEvidence State(証拠状態)を参照してください。
未解決事項
2026-08-22時点の保持Evidenceでは、次の点を確定できません。
- 電力変化がしきい値を超えた際、他の電気量fieldも必ず同時に更新されるか。
- SwitchBotアプリの詳細画面表示によって、特定の状態同期処理が実行されるか。
- その同期処理がある場合、どのプロトコルや通信経路が使われているか。
- 同じしきい値がすべてのPlug Mini (JP)のハードウェア・ファームウェアで共通か。
- メーカーへ依頼した30 Wから10 Wへの感度変更が実際に適用されたか。
これらを確定するには、メーカー仕様の追加確認または該当する報告・同期挙動の直接観測が必要です。
運用上の示唆
今回の結果から、OpenAPIを取得した時刻と、Plug Mini側で新しい値が生成・報告された時刻は別に考える必要があります。
例えば1分ごとにAPIを取得していても、Plug Miniが1分ごとに新しい測定値を報告しているとは限りません。
家庭内電力の長期時系列データとして利用する場合は、少なくとも次の情報を区別する必要があります。
- APIを取得した時刻
- 同じ値が継続した時間
- 新しい値へ変化した時刻
- デバイス側で実際に測定値が更新された時刻を確認できるかどうか
特に、OpenAPIレスポンスの取得周期をそのままセンサーの測定周期として扱うと、実際より細かい時間分解能を持つデータであるかのように解釈してしまう可能性があります。
実験データについて
短周期取得で得られたサンプル数、取得時間、代表的な統計値などは、当時の実験記録に残っています。
一方、元のロガーが生成した完全な生データファイルは、現在確認できる記録には残っていません。
そのため、このページに記載した集計値や代表値だけから、当時の全時系列データを完全に復元することはできません。
この点は、この実験を後から詳細に再解析する際の制約になります。
再現に必要なもの
本実験で使用した機材・実験環境と、実験結果とは区別した現在の購入情報を次のページにまとめています。
SwitchBot Plug Mini OpenAPI — 使用機材・実験環境と購入情報
機械可読な実験記録
このExperimentの機械可読な正本記録をJSONとして公開しています。