概要
Switchbot社のIoT製品をZabbixでSwitchotAPIを使って、データ取得して監視する手順
環境
HW:GZBOXミニPC
OS:Alma Linux 9.6
Web:httpd-2.4.62-4
AP:PHP-8.3.19-1
DB:mysql-8.0.41-2
Zabbix:7.4.1
Switchbot:9.15
前提
SwitchbotのHubで設定し、アプリで情報が取得可能な状態
概要手順
A.Switchbot APIを取得するためのトークン、クライアントシークレットの取得
B.各SwitchbotのデバイスIDを確認
C.ZabbixServerに外部スクリプトの有効化
D.Pythonのスクリプト実行環境準備
E.Pythonの外部スクリプト設置
F.ZabbixのSwitchbot監視用テンプレート作成
G.ZabbixのSwitchbot監視用アイテム作成
H.Switchbotのホスト作成
詳細手順
A.Switchbot APIを取得するためのトークン、クライアントシークレットの取得
01.AndroidもしくはiPhoneのアプリケーションを起動
02.「プロフィール」-「設定」-「開発者向けオプション」でトークン、クライアントシークレットの取得を取得
03.トークン、クライアントシークレットの値を作業するPCにGmailなどの方法でコピーする
B.各SwitchbotのデバイスIDを確認
01.ZabbixServerにSSHでログインし、コマンドからAPIでデバイスIDを取得します。
※後述の手順でデバイスIDが必要になります。
"Authorization:トークン"はA-03で取得したトークンの値を代入してください。
$curl -H "Authorization:トークン" -X GET "https://api.switch-bot.com/v1.0/devices" | jq
C.ZabbixServerに外部スクリプトの有効化
01.zabbix_server.confのコメントアウトされているExternalScripts
の項目をコメント解除します。
デフォルトだと、「/usr/lib/zabbix/externalscripts」ですが、
必要な場合は、別のパスを指定してください。
vi /etc/zabbix/zabbix_server.conf
#ExternalScripts=/usr/lib/zabbix/externalscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
02.ZabbixServerのサービスを再起動します。
$systemctl restart zabbix-server
D.Pythonのスクリプト実行環境準備
※PIPとrequestsがインストール済みの場合は、この手順は不要です。
01.PIPのインストール
$ curl -kL https://bootstrap.pypa.io/get-pip.py | python
02.requestsのインストール
$python -m pip install requests
E.Pythonの外部スクリプト設置
01.d_yanさんが作成いただいたPythonスクリプト「switchbot_api.py」を「/usr/lib/zabbix/externalscripts」に配置する。
https://qiita.com/d_yan/items/805f50a6f1139fa94215
02.スクリプトのパーミッションの設定
$chmod 0755 switchbot_api.py
03.スクリプトのオーナーを変更
$chown zabbix:zabbix switchbot_api.py
04.スクリプトの権限を確認
$ls -l switchbot_api.py
-rwxr-xr-x 1 zabbix zabbix 1439 switchbot_api.py
05.スクリプトの動作確認
Pythonのスクリプトに前述した手順で取得したトークン、クライアントシークレット、デバイスIDを代入し、実行結果を確認する。
$ ./switchbot_api.py トークン クライアントシークレット デバイスID
F.ZabbixのSwitchbot監視用テンプレート作成
※Switchbot社のすべてのアイテム
01.Zabbixの左ペインの「データ収集」-「テンプレート」から
「テンプレートの作成」ボタンをクリックする
02.新規テンプレート画面から
テンプレート
テンプレート名:Swichbot_meter
テンプレートグループ:Swichbot
※項目の入力は必達だが、識別しやすい文字列
テンプレート-マクロ
前述の手順で取得した情報をマクロに入力する
{$AUTHORIZATION}:トークン
{$CLIENT_SECRET}:クライアントシークレット
{$DEVICEID}:デバイスID
G.ZabbixのSwitchbot監視用テンプレートアイテム作成
01.API取得用共通アイテムを作成
アイテム-アイテム
名前 :switchbot.api ※任意
タイプ :外部チェック
キー :switchbot_api.py[{$AUTHORIZATION},{$CLIENT_SECRET},{$DEVICEID}]
データ型:テキスト
監視間隔:Xm
※SwitchbotのAPI取得回数は1日1万という制限があるため、
取得デバイスの状況次第では監視間隔を広げる必要があります。
1分で取得する場合は6デバイスが1万回になります。
アイテム-保存前処理
名前 :JSONPath
パラメータ:$.body
02.各製品に合わせたアイテム作成
各製品によって取得できるアイテムが異なります。
Eの手順で作成したスクリプトを実行し、取得されるアイテムを確認します。
取得されたアイテムのデータ型については、参考URLからデータ型を設定します。
参考URL
https://github.com/OpenWonderLabs/SwitchBotAPI?tab=readme-ov-file#python-3-example-code
H.Switchbotのホスト作成
01.左ペインの「ホスト」-「ホストの作成」ボタンをクリック
02.「ホスト」-「ホスト」作成
ホスト名:識別しやすい名称
テンプレート:前述の手順でテンプレートを作成
ホストグループ:識別しやすい名称
03.「ホスト」-「マクロ」作成
{$AUTHORIZATION}:トークン
{$CLIENT_SECRET}:クライアントシークレット
{$DEVICEID}:デバイスID
補足
APIの取得制限にあたる1万回にいたらない頻度を計算すると、以下になります。
参考
1日=24時間=1440分=86400秒
1分監視の場合
1デバイスx(1日=1440分÷1分)=1440回
6デバイスx(1日=1440分÷1分)=8640回
7デバイスx(1日=1440分÷1分)=10080回
2分監視の場合
1デバイスx(1日=1440分÷2分)=720回
13デバイスx(1日=1440分÷2分)=9360回
14デバイスx(1日=1440分÷2分)=10080回
5分監視の場合
1デバイスx(1日=1440分÷2分)=288回
34デバイスx(1日=1440分÷5分)=9792回
35デバイスx(1日=1440分÷5分)=10080回