きっかけは生成AI

つい先日、ローカル生成AIのためにGPUを搭載したマシンを購入しました。

さすがGPU搭載マシン、なかなかの消費電力量です。

GPU搭載マシンの電源を小型のUPSに無邪気につないでいたら、GPU利用にあわせてUPSの最大電力量を超過したためにビープ音が鳴り、UPSが落ちてちょっとダメージを受けました。

そんな時に、「以前買っていたSwitchBotのプラグがあるな…」と思い出したのがこの記事のきっかけです。

  • 生成AI使いたい→GPUマシン欲しい→GPUマシンの消費電力知りたい→
  • SwitchBotのプラグで測定したい→どうせなら自宅Zabbixでメトリクス取って見たい→
  • メトリクス取得にSwitchBotのハブが必要→どうせなら温湿度も見たい

こんな動機で、あれよあれよという間にSwitchBotの機器が増えていきました。

まさか掃除機まで買うことになるとは。ブラックフライデーだし仕方ないね。

本日は、そんな私のZabbixとSwitchBotを組み合わせた活用方法をご紹介します。

現在は、こんなダッシュボードを作って活用しています。

自宅IoTダッシュボード
自宅IoTダッシュボード

※図面は例示用に、一般社団法人日本CLT協会様のHPよりお借りしました。

読むのが面倒な人向けの自作テンプレートの共有

先行してデータを共有しておきます。

  • 自作テンプレート(2025/11/23時点)
  • 使い方…ホストマクロで{$API_TOKEN}を定義してください。
  • 取得頻度…温湿度計…2分、防水温湿度計…2分、スマートプラグ…1分としています。
  • ご利用の環境に合わせて、お好みで調整してください。

環境情報

SwitchBotを含む仕組みの概要構成図がこちらです。

環境概要図
環境概要図

SwitchBotは初挑戦だったので、以下のところに最初は戸惑いました。

  • 各種デバイス単独ではクラウドデータ送信ができず、スイッチボットハブが必要
  • 温湿度計とハブ間はWifiではなくBluetoothで通信する。
  • そのため、フロアが分かれる場合には各フロアにハブを置くなど、環境に合わせてハブ台数を用意する必要がある
  • ハブミニ2は温度湿度の情報は表示できるが、アプリ限定。API経由では情報を取得できない。

主な環境情報

項目値備考
Zabbixバージョン7.0.217.2からGPUのメトリクスが取れるらしいので近くVerup予定
SwitchBot APIバージョン1.01.1推奨のようですが、ZabbixのJavaScript単独では利用できず。外部スクリプト必須になりそうなのでひとまず棚上げ。温湿度情報とスマートプラグ情報だけなら、1.0で十分です。なお、1.0はEoLのため、いつ利用できなくなってもおかしくありません。あらかじめご了承ください。

購入したSwitchBotデバイス

このほかに、ロボット掃除機&スティッククリーナー一体型のデバイスも購入しましたが、この記事には一切関係ありません。

作業のためのステップ

(1)SwitchBot APIのためのトークンの取得

SwitchBot APIを利用するためには、トークンを取得する必要があります。

公式HPにトークン取得方法の解説があるため、こちらをご参照ください。

アプリ側だけで出力できるというのはお手軽でよいですね。連続タップという操作はAndroidのバージョン確認方法を思い出します。

(2) SwitchBot APIの利用に関する設計

SwitchBot APIは、1日に10,000リクエストまで、という上限があります。

Request limit
The amount of API calls per day is limited to 10000 times. Going over that limit will return "Unauthorized."

※APIリファレンスより抜粋

それを超えると、「too many request」というエラーが出て値が取得できなくなります。

そのため、以下の点を考える必要があります。

  • 取得対象デバイス数はいくつか?…A
  • そのデバイスで取得したいメトリクスの種類はいくつか?…B
  • メトリクスの更新頻度はどの程度か?…C

A/B/Cの組み合わせは、SwitchBotのデバイスの種類によって変わると思いますが、対象を温湿度計とした場合、活用しそうなデータは以下の3つです。

  • 温度(temperature)
  • 湿度(humidity)
  • デバイスのバッテリー(battery)

仮にCを2分間隔で取得すると仮定し、アイテムごとにAPIリクエストをすると、1日のAPIリクエスト数は「A×3×720(1時間に30回×24時間)」となり、素直に実装するとデバイス数は4台までが上限になってしまいます。

(3) Zabbixでのアイテム取得の設計と再計算

上記の点をカバーするため、Zabbixでは以下のような構成にします。

アイテム取得設計
アイテム取得設計

この形だと、デバイス毎に取得するメトリクスの種類(B)がいくらあっても、消費するAPIリクエスト数は1になります。

これを踏まえて、取得間隔と利用可能台数を再計算した結果を以下の表に示します。

取得間隔と利用可能台数

取得間隔温湿度計の利用可能台数
2分13台(9,360リクエスト)
5分34台(9,792リクエスト)
実際には、ディスカバリでの消費や、他デバイス(私の場合は電源プラグ)の情報も取得したいはずなので、上限いっぱいまでは厳しいと思います。参考値としてご利用ください。

(4) Zabbixでのディスカバリの実装

次に、このアイテムの形を複数ホストに適用できるようにするため、テンプレート化し、ディスカバリの定義を行います。

ディスカバリについても、APIの使用回数を最小限にするために、以下のような形で実装しました。

テンプレートの構造
テンプレートの構造

普段は、テンプレート内にアイテムを作ることはそこまで多くないのですが、今回はAPI利用回数の上限が存在することもあり、少しでも数を減らす必要があります。

そのため、ホスト用アイテム、データ用アイテムなどすべてテンプレート内アイテム化し、可能な限り親子関係を活用する形で実装しています。

上記のディスカバリ用のコードなどは、無料版Geminiくんに助けてもらいました。AIすごい。

細かい解説はしませんので、興味のある方はテンプレートを覗いてみてください。保存前処理などを多数活用しています。

また、温湿度計については、「室内用(Meter)」と「防水温湿度計(WoIOSensor)」でデバイスタイプの種類が異なるため、わかりやすさ重視でディスカバリは分けています。

こちらについては、実際戻ってくる値は両者とも変わらないため、必要に応じて統合してもよいと思います。(その場合はJavaScript側の一致条件を修正する)

詳細については、テンプレートをご確認ください。

(5) ホストとの紐づけ

テンプレートをダウンロードしたら、ホストを定義して紐づけします。

とはいっても、ここを見に来られる方はZabbixに精通された方が多いと思いますので説明は不要だと思いますが、ホストについては名前以外どうでもよいです。

ホストを作成し、上記でアップロードしているテンプレートを紐づけてください。また、その際にホストマクロにて、{$API_TOKEN}という変数を定義し、(1)で取得したトークン情報を設定してください。

ホストマクロの設定
ホストマクロの設定

(6) 初回ディスカバリの実行

APIケチケチプランで作成しているテンプレートなので、アイテム作成されるまでに結構時間がかかります。

気が長い方はそのままお待ちいただければ問題ないのですが、気が短い方は、手動でアイテム情報の取得などを実行してください。

ディスカバリ自体の元にしているアイテム情報の取得は2時間に設定しています。そんなにアイテムやデバイス増えたり、ホスト名が変わったりしない、という前提の値です。こちらも利用環境に合わせて適宜調整をしてください。

ディスカバリ用のアイテム
ディスカバリ用のアイテム

「データ収集」→「ホスト」→「アイテム」から、上記アイテムを選択し、「監視データ取得」のボタンを押せば、早めにアイテムが作られます。

(7) ダッシュボードの作成

SwitchBotの情報をAPIで取得する記事は他にも沢山あるため、おそらくこの記事をご覧の方は「この人はどういう観点で情報をみているのだろう」が直接的に表れる、ダッシュボードを見たい方も多いのかな、という気がしています。

私は、以下のような形でダッシュボードを作成しました。

  • 取得したアイテムを分類ごとに横並びにするグラフを作成する
    • 温度・湿度用のグラフがメイン。一応温湿度計のバッテリーのグラフやスマートプラグの消費電力なども少し離して並べています。
  • 取得したアイテムの現在データをハニカムで表示する。
  • 取得したアイテムについて、Mapにポイントし、各部屋の物理的なレイアウトと紐づける。

各々の構成要素について、少しだけ解説します。

残念ながら、ダッシュボードテンプレートではアイテムテンプレートなどが利用できないため、提示しているテンプレート内に含められず申し訳ありません。詳細が確認したい方は、Twitterなどでお知らせください。

(7-1) 各アイテムのグラフを作成する

Zabbixでは、ホスト内で完結するグラフの他に、複数ホストをまたいだグラフなどを作成できる機能が存在します。

残念なことに、「ディスカバリ」で見つけたアイテムなどは、グラフテンプレートで事前定義ができないため、ここでは手動で作成します。

対象ホストでアイテムが取得できたことを確認したら、お好みのダッシュボードでグラフウィジェットを選択し、確認観点毎に必要な温湿度計などのアイテムを並べます。

※我が家ではそれほど数も多くないので全部1つのグラフとして並べていますが、フロアごと・建屋ごとなどお好みの観点で組み合わせるとよいでしょう。

グラフのウィジェット
グラフのウィジェット

(7-2)ハニカムでの表示

割とこだわったポイントです。なお、このハニカム機能はZabbix7.0以降でないと利用できません。

気持ち的には、上位ホストなどで利用できるインジケーターが使いたかったのですが、今回の実装では厳しそうでした。(API取得先元のホストの登録を分ければ実現できますが、アイテム数がかさんでしまう)

グラフでは、過去の累積データが確認できますが、「で、結局今はどうなの?」が若干わかりにくいです。トリガーで閾値を設定すればアラート通知も可能ですが、それよりも感覚的に状況を俯瞰したい、というケースもあると思います。

そういう場合にハニカムは非常に役に立ちます。色で状態を視認したり、色補間ができるのも良いポイントですね。

テンプレートでは、各アイテムに「type」というタグ情報を付与しています。それを利用して、ハニカムのウィジェットを作るときには、以下のようにすると簡単に作れるようにしました。

  • とりあえず、取得できたアイテムは全選択する
  • そのうえで、ハニカムでアイテムタグで表示したいアイテムをフィルタする
    • 温度のデータを表示したいとき…type = temperature を定義する
    • 湿度のデータを表示したいとき…type = humidity を定義する
    • バッテリーのデータを表示したいとき…type = battery を定義する
ウィジェット作成画面のアイテムタグの指定方法
ウィジェット作成画面のアイテムタグの指定方法

(7-3) Mapデータの貼り付け

ウィジェット内にMapの情報を組み込むことができるため、それを活用しています。

Mapは以下のような形で作成しています。

  • 図面…実際の建物の図面をイメージ図として「管理」→「一般設定」→「イメージ」から「背景」としてアップロードし、Mapの背景画像に設定
  • 実際の温湿度計設置場所に、「ホスト」アイテムを作成して配置
    • 「ホスト」にした理由は、バッテリーのアラートなどをMapに表示させる目的
  • アイテムのラベルに以下のような形で実際の値を表示するよう設定
    • 温湿度計+デバイスIDが「AABBCCDDEE」の場合…
温度:{?last(/{HOST.HOST}/switchbot.meter.temperature[AABBCCDDEE] )}
湿度:{?last(/{HOST.HOST}/switchbot.meter.humidity[AABBCCDDEE] )}
  • 当日の各地域の予想最高・最低気温については、別途気象庁のHPから取得した値を採用

(7-4) 最終的に出来上がったダッシュボード

再掲になりますが、上記(7-1)~(7-3)を利用することで、以下のようなダッシュボードになりました。

完成したダッシュボード
完成したダッシュボード

後は各自お好みでダッシュボードをいじってみてください!!

なお、私は「今の状況」を左側に寄せるように作りました。理由としては、スマートフォンで見たときにスライドさせずに画面内に入る場所だからです。

結局生成AIマシンの話はどうなったの?

  • 生成AIマシンをつかうとGPUのファンが回ってスマートプラグも電力消費量が上昇し
  • 結果、周辺の温度が上がり
  • 湿度が下がることが数値で証明されました(当たり前)

終わりに

今回、SwitchBotのAPIを利用した、データ取得とダッシュボード作成などを簡単に解説させていただきました。

Zabbixさんの主催されているダッシュボードコンテストや、Twitter上でのダッシュボード共有など、アイディアの参考になるような情報をお待ちしております!!

今年のエントリー作品がこちら!

Zabbix Conference Japan 2025

今年のダッシュボードコンテストの優勝作品はこちらでした!

Dashboard Contest 優勝作品

同じテーマで、私のダッシュボードよりかっちょいい!!目的は各々異なるので、様々な見せ方がとても勉強になります。チャットの組み込みなんてできるんですね。目から鱗でした。

自分もローカルLLMがんばらねばー。


https://tenko.hatenablog.jp/entry/2025/11/23/193750

バックアップ日時: 2026年11月11日