主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ
書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。
2023/07/23
SwitchBot 、便利ですよね。
そこそこ安くて、かつ一応 SwitchBot にロックインされるということもないので、わたしも使っています。
ところで、 SwitchBot の温湿度計やプラグでは、 API 経由で各種値が取得できます。
今回はそれらを VictoriaMetrics という時系列データベースに保存し、 Grafana で可視化してみようと思います。
今回は、 Vultr VPS 上にある Alpine Linux に Docker 経由でインストール、設定するということを想定します (自鯖欲しかったけどね。。。)
ということで、まずは Docker のインストールから。
# apk add docker
# rc-update add docker boot
# service docker start
起動したら各種コンポーネントの設定を行っていきます。
今回は別件で Alpine Linux 上で別の Web サービスをホストしているので、とりあえず Grafana だけ見られるようにします。
version: "3.7"
services:
victoriametrics:
image: victoriametrics/victoria-metrics:stable
container_name: victoriametrics
restart: always
volumes:
- vmdata:/storage
command:
- "--storageDataPath=/storage"
networks:
- vm_net
grafana:
image: grafana/grafana:10.0.2
depends_on:
- victoriametrics
environment:
GF_FEATURE_TOGGLES_ENABLE: publicDashboards
# 他あれば雑に
restart: always
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
- ./datasources:/etc/grafana/provisioning/datasources/
networks:
- vm_net
volumnes:
vmdata:
grafana-data:
networks:
vm_net:
あとは、 Grafana に対して、プロビジョニング用のデータソースも設定しておきます。
datasources:
- name: VictoriaMetrics
type: prometheus
url: "http://victoriametrics:8428/"
必要最低限の設定はこんな感じ。
この状態で docker compose up
すると、起動して Grafana のダッシュボード上にサンプルデータが表示されます。
データソースとして、 VictoriaMetrics が登録されていることも確認しておきましょう。
ただし、中身は虚無なので、ここから SwitchBot との連携を行っていきます。
docker-compose.yml
に下記を追加します。
services:
switchbot:
image: nasa9084/switchbot-exporter:0.3.0
container_name: switchbot
environment:
SWITCHBOT_OPENTOKEN: ${SWITCHBOT_ACCESS_TOKEN}
SWITCHBOT_SECRETKEY: ${SWITCHBOT_CLIENT_SECRET}
restart: always
networks:
- vm_net
また、 VictoriaMetrics の設定として下記のデータも追加します。
scrape_configs:
- job_name: SwitchBot
metrics_path: /metrics
scrape_interval: 5m
static_configs:
- targets:
- "SWITCHBOT_DEVICE_BLE_MAC" # 設定画面のデバイス情報の BLE MAC アドレスから `:` を除いたものが ID になる
relabel_configs:
- source_labels:
- __address__
target_label: __param_target
- source_labels:
- __param_target
target_label: instance
- target_label: __address__
replacement: "switchbot:8080"
scrape_interval
は SwitchBot の API リミットに引っかからない程度にしましょう。
GitHub のドキュメントによると、 10000 req/day らしいので、1 デバイスなら 1m とかでも余裕です。
追加したら、これも設定してあげましょう。
services:
vmagent:
image: victoriametrics/vmagent:stable
container_name: vmagent
depends_on:
- victoriametrics
- switchbot
restart: always
ports:
- "8429:8429"
volumes:
- vmagentdata:/vmagentdata
- "./exporters/prometheus.yml:/etc/prometheus/prometheus.yml"
command:
- "--promscrape.config=/etc/prometheus/prometheus.yml"
- "--remoteWrite.url=http://victoriametrics:8428/api/v1/write"
networks:
- vm_net
volumes:
vmagentdata:
あとは雑に docker compose up
してあげれば、 SwitchBot から定期的にデータが取得され、保存、閲覧できるようになります。
割と簡単 (ダッシュボードは自分で設定してね)。