地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

Mackerelでスマートホーム化計画 1

※Mackerelアンバサダープログラムに参加しています


https://pbs.twimg.com/media/HGjKPJWaAAAW0C-?format=jpg&name=large

スマートホーム始めてみました。室温とか湿度とかがAPIで取れるようになったのでせっかくならMackerelと連携させてなんか可視化とかしてアラート設定して自動化したら面白のではないだろうかということでやってた記事です。

最近引っ越しをしてその前までは音声操作できる家電にハマって家電と話す毎日だったのですが話さずに自動化できる可能性があることに気づいたのでそちらに挑戦してみようという感じです。すでにそこそこの課金をしてしまったので元を取れるように遊んでいきますw

トークン取得

SwithBotからメトリクスを取るためにトークンが必要なので以下の方法で取得して控えておきます。タップ15回で出現するモードってなんでこんな作りなんだろうかw

support.switch-bot.com

作ったもの

github.com

smarthome という Python の CLI を作りました。SwitchBot のメトリクスを取って Mackerelに投げるところから始めて、ダッシュボード自動生成・温度アラート契機での家電制御まで一通り入れています。今後アラート設定や別の家電を増やしたくなったときに、サブコマンドを足すだけで拡張できる感じにしたので今後散財してデバイスが増えても安心です。

  $ uv run smarthome --help
   Usage: smarthome [OPTIONS] COMMAND [ARGS]...

   SwitchBot Hub3 → Mackerel metrics forwarder.

デバイスリストを取る

SWITCHBOT_HUB3_DEVICE_IDS に何を入れたらいいんだっけ、というのを毎回ググるのが面倒なので、まず手元のアカウントで見えるデバイスをそのまま列挙するサブコマンドを用意しました。

$ uv run smarthome devices list
     DEVICE_ID     DEVICE_TYPE     DEVICE_NAME
     ------------  --------------  ---------------
     BXXXXXX  Circulator Fan  サーキュレーターLite 28
     BXXXXXX  Hub 3           Switchbot Hub3
     BXXXXXX  Hub 2           ハブ2

Mackerelのダッシュボードを作る

自動生成機能も入れてみました。

温度のアラート契機でサーキュレーターをオンにしたい

やってみました。ngrokでWebサービスを起動させておいてMackerelのアラートをフックに動かすという構成にしました。ラズパイとかでMackerel Agentでcheck監視を仕込むなどすればもっと手軽にできそうな気がします。

気温的にはまだまだ寒いのでオンにされると困るのでこの機能は一旦オフにしました。

人感センサーの検知

人のセンサーでアラートを飛ばす仕組みです。外にいる時に何かあったら通知を飛ばすことができます。これはMackerelを使う必要がないことに実装中に気づいてしまいお蔵入りにしました。

今後やりたい

とりあえず何がやれて何がやれなそうなのかがパッとわかったのでしばらく遊べそうです。

  • 登録したユーザーが近づくことを検知してPagerDutyを鳴らす仕組み
  • カレンダーを見て自動で起きる時間を設定してカーテンを開けるようにする
  • パトランプを光らせる