Sesamiデバイスのバッテリー残量をAPIから取得してMackerelで表示する

Sesami というスマートロックのブランドがあります。CANDY HOUSE が開発・販売している商品ですが、なんと嬉しいことに外部向け API が提供されています。

https://document.candyhouse.co/demo/webapi-ja

この記事では、 Sesami API を使用してバッテリー残量を取得し、Mackerel にメトリクスとして送信する方法を解説していきます。

まずは完成品

こんな感じに表示されます。1日1回 API を叩き、残量を Mackerel に表示している。最近電池を入れ替えたばっかりなので100%のままなので全く面白みがないが、アラート設定とかしておけると便利。

Mackerelのスクリーンショット

API の使用

さて、プログラムを作る前にまずは Sesami API について知っておく必要があります。さすが CANDY HOUSE というべきか丁寧にドキュメントが用意されているのでこれを参考に叩けることを確認しましょう

https://document.candyhouse.co/demo/webapi-ja

API の取得には API_KEY というものが必要のようです。これは Sesami Biz のページから取得できるようなので以下の手順で取得してください。 Sesami Biz のログインはスマホでログインしているメールアドレスを使うことでそのまま登録されているデバイスが表示できるようです。
プランは複数ありますが今回は Free プランで行きます。Free では APIリクエスト上限 3,000 回 という制限がありますが、今回の実装では1日1回を予定しているので問題なさそうです。

biz.candyhouse.co

バッテリー残量は 1、Sesame ステータスの取得 から取得できるようなので実際にこの API を叩いてみましょう。 HTTPie を使って実際に叩いてみます。

ちなみに、 sesame2_uuid は Sesami Biz 内のデバイス詳細ページにデバイスUUIDというのが載っているのでこれを使います。

API KEY は X-Api-Key というヘッダーに付与します。

正しく取得できることを確認できました。レスポンスのBodyは以下のようなフィールドになっているようです。

type Response = {
  batteryPercentage: number,
  CHSesame2Status: 'locked' | 'unlocked' | 'moved',
  timestamp: number,
  wm2State: boolean,
};

この中の batteryPercentage がバッテリー残量です。ドキュメントでは batteryVoltage が書かれているのですが、実際にはそんなフィールドは存在しないようです。おそらくバージョンアップなどで消された?と思います。

Mackerel にメトリクスを送信する

さて、次にこの API のレスポンスを Mackerel に送信します。Mackerel にはホストメトリックとサービスメトリックを送信できますが、今回はより簡単なサービスメトリクスを送信しようと思います。

こちらもドキュメントが用意されているので、以下のドキュメントを参考にメトリクスを送信できます。

mackerel.io

value にバッテリー残量を、time には Sesami API のレスポンスにある timestamp を使うと良さそうです。

プログラムを書いていく

さて、見通しが立ったので実際にプログラムを書いていきましょう。今回は Go を使用して docker compose で実行します。

ぶっちゃけプログラムはただ書くだけなので説明はしません。 Claude Code や Codex に書かせるか以下の私の実装を参考にしてください。

github.com

TODO: 詳しく書く

という感じでした

最後面倒くさくなってしまいましたが、 Sesami API を使ったサービスを作ってみました。今後色々試せると良さそうです

(余談)History の type 対応表

Sesami API の 2、Sesame 履歴の取得 で返ってくる type の対応表を調査したので貼っておきます。多分これ以上に type の定義はあると思いますが、自分の環境では見つけられませんでした。

Type 説明
1 オープンセンサ施錠
2 オープンセンサ解錠
8 手動解錠
90 ドア解錠
91 ドア施錠