先だって、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経由で渡すことができます。
| |
docker image も用意してありますので、例えばKubernetes上で動かすこともできます:
| |
このようにして起動した後、README に記載のあるようにprometheusの設定をします
| |
static_configsのtargetsには温湿度計のIDを記入します。IDは例えばget_switchbot_devices.go
の様な簡単なスクリプトで取得することができます。
relabel_configsで、__address_のreplacementにはprometheusがswitchbot-exporterにアクセスする際のURLやアドレスを記入します。
SwitchBot APIのrate limitが1000 requests/dayなので、一日すべての値を取得したい場合は途中でrate limitに引っかからないよう、scrape_intervalをうまく調整して下さい。
設定ができたら、温度はswitchbot_meter_temperatureで、湿度はswitchbot_meter_humidityで取得することができます。デバイスの名前はswitchbot_devicesに格納されていますので、group_leftなどでjoinすると良いでしょう:
switchbot_meter_temperature + ignoring (device_name) group_left(device_name) switchbot_device
後はGrafanaなどを使用すると良い感じにグラフを書くことができます。

できるだけAPI rate limitに影響を与えないよう、device_listはキャッシュして、起動時以降はdevice_listの取得をしないようにしてありますので、デバイスの増減があった場合はSIGHUPを送るか、/-/reloadにアクセスしてdevice_listを更新して下さい。
SwitchBot加湿器などは持っていないので現在のところ温湿度計のみの対応ですが、加湿器を持っていてメトリクスを収集したい、という場合はPull Requestを送ってください。お待ちしております。
