SwitchBot 、便利ですよね。
そこそこ安くて、かつ一応 SwitchBot にロックインされるということもないので、わたしも使っています。
ところで、 SwitchBot の温湿度計やプラグでは、 API 経由で各種値が取得できます。
今回はそれらを VictoriaMetrics という時系列データベースに保存し、 Grafana で可視化してみようと思います。
今回は、 Vultr VPS 上にある Alpine Linux に Docker 経由でインストール、設定するということを想定します (自鯖欲しかったけどね。。。)
ということで、まずは Docker のインストールから。
$ sudo apk add docker $ sudo rc-update add docker boot $ sudo 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 から定期的にデータが取得され、保存、閲覧できるようになります。
割と簡単 (ダッシュボードは自分で設定してね)。