見出し画像

【セサミ】スマートロックの電池/電圧について

アフィリエイト広告を利用しています

前回はスマートロックの手ぶら解錠についてNoteにしましたが、今回は電池/電圧についてです。
使用しているのはセサミロック。

※Amazonよりメーカー直販で購入したほうが、送料は別途かかりますが安く購入できます。

※この記事の手順を実行するならHub3も必要となります。

このキャンディハウスというメーカーの出す商品は競合他社と比較してほんと格安なんですが、やはりダメダメなところもあって、そのひとつがとにかく納期を守れない。
ハードウエアにしても、ソフトウエアにしても。
バッテリー低下時の通知機能さえいまだに実装されていません。
ただし、実装予定はあってメーカーHPには以下のようにあります。

縦軸を電圧、横軸を時間とするグラフを作成し、数ヶ月にわたりデータを収集・分析することで、電池残量の表示精度を99%に限りなく近づけ、突然異常な電圧低下が発生した場合、即座に通知を送信(12月末の予定)

元々はもっと早い実装予定だったのが、いつの間にやら12月予定になってました。

そこでSesameはAPIが公開されているので、それを利用してデータをエクセルファイルにため込んでグラフにしてみます。

とはいっても私がセサミを使い始めたのが8月末なのでまだ2か月もたってないのでデータはそこまでありません。

説明が長くなりそうですが、まずAPIで取得できる数値について。

{
  "batteryPercentage": 85,
  "batteryVoltage": 5.940175953079179,
  "position": 28,
  "CHSesame2Status": "locked",
  "timestamp": 1728970927,
  "wm2State": true
}

APIでコマンドを実行するとこんな感じで出力されます。
使用してる電池の定格3.0~3.2Vのはずなのに、なぜか最大6Vになってるっぽいです。
直列で3Vx2で6Vなのかな?
6Vを切る数字だとパーセンテージも100%以下になります。
ボルトの数字だけを見ると「0.000000000000001」単位で電圧の変化を記録しているのかとも思ったのですが、何度も同じ数値がでてくるのでそれもなさそうです。ここら辺は電池に詳しい人ならわかるのだろうか。
あと、タイムスタンプがエポック秒になっています。

拡大してみてね

エポック秒を日付、時間に変換して出力。うちはダブルロックなのでそれぞれの電圧とパーセンテージを出力。
1日に計6回LinuxのCronに仕込んでAPIで情報を取得。タイムスタンプを見てもらうと分かるのですが、バッテリーの状態はAPI取得時間の時刻ではなく、なにかイベントが起こったタイミングのデータっぽいですね。
つまりは、APIで取得したとしても同時刻の最新の情報は得られないということです。

気温の変化が直に電圧に影響してそうだったので、他社製品から気温もAPIで取得。ここらへんは住んでる地域の気温をスクレイピングしてもいいと思います。

最後のレコードIDというのは、これもAPIで取得できるものなのですが、セサミロックになにかイベントが発生した時に記録される連続した番号となります。これは手動で開け閉めした際にも記録されるし、内部時計の校正でもイベントとして記録されます。
なので厳密に電池を使った開閉回数という訳ではありません。
とは言っても、うちは手動での開閉は使用していないので、目安にはなります。
過去のレコードイベントを遡ってみてみると、はじめの数百番台までのレコードは私が使い始める前のタイムスタンプ(テストかな)だったので、もし同じように記録するのであれば、セサミを購入直後、または電池交換直後にその時点のレコードID番号を控えておくと良いと思います。
※データは一部非表示にしています。
※Sesame上の方が2週間ほど早く使い始めています。なのでレコード番号が大きい数字になっています。


拡大してみてね

まずは単純な電圧(縦軸)、時間(横軸)のグラフです。
ここで使用している電池はセサミ上と下で違うのを使用しています。
取得開始は2024年9月19日から。

折れ線グラフ青の方は、セサミ購入時についてくる1800mAの電池です。
電池単価350円。知らない方もいるかもしれませんが、メーカー直販でも電池などの消耗品は送料無料で送ってくれます。

折れ線グラフオレンジの方はAmazonで購入した格安電池。
電池容量は1600mA。
この電池は過去にキュリオロックを使用していた時も使っていたのでこれにしています。
毎月のようにセールをやるのでそのタイミングで購入したほうが良いと思います。
私が購入した時は単価184円。

たった1か月のグラフなので、今後どうなるか分かりませんが、現状を見る限りは格安電池の方が電圧の振れ幅が大きい感じです。


エクセルでピボットテーブルにしたデータ。
電圧とは違い、気温を取得しはじめたのが10/10なので、まだ5日分のデータしかありません。


拡大してみてね

折れ線グラフに気温を追加したもの。
電圧(左縦軸)、気温(右縦軸)、時間(横軸)のグラフです。
折れ線・黒色が気温となっています。
私はいままで家電製品の電圧なんて気にしたことなかった人間ですが、グラフを見る限り、気温にもろに影響されますね。

これから冬、そして来年また暑くなったらどう変化するのか。
また、電圧がどこまで低下したらセサミの開閉ができなくなるのか。記録していきたいと思います。
次はパナソニックの電池も使ってみます。

閾値をどこにするかはさておき、急激な電圧低下によるメール通知なんて、ソフトウエア的には数時間もあれば実装できそうなんですがねぇ。
ハードウエア的な制約がなにかあるんでしょうか。

私はとりあえず電圧が5.8V以下になった場合はメール通知されるように設定しました。

まぁ、現状はこの製品に満足しているので、メーカー側が12月にリリースされるであろう機能がちゃんと動作する事を願います。


それから、APIと聞くと難しく感じる方もいるかもしれませんが、データを表示させるだけなら、コマンドを使わなくても大丈夫です。
Sesame BizというサイトでログインすればGUIでAPIを実行できます。
https://biz.candyhouse.co/
APIキーを取得するサイトでもあります。

Sesame Bizのサイトにセサミのスマホアプリで使用している同じメールアドレスでログインしたら、左側メニューから「開発者向け」を選択し、「個人での登録済のデバイス」をクリックすれば、メールアドレスに紐付くセサミロックが表示されるので、それをクリック。
「ステータス取得」では電圧を
「履歴取得」ではレコードIDを
「デバイス操作」ではセサミの開閉がWeb上からできます。


最後にAPI取得のサンプルを載せておきます。エラー処理も何もしていないただのサンプルです。Pythonで作成しています。

import requests
from datetime import datetime
import openpyxl

api_key_sesame = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

uuid = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
headers = {'x-api-key': api_key_sesame}

url = f'https://app.candyhouse.co/api/sesame2/{uuid}' 

#ベースとなるディレクトリパス
CRENDIR ='./'

wb = openpyxl.load_workbook(f'{CRENDIR}sesame-battery.xlsx')
ws = wb["Sheet1"]  

max = ws.max_row
while True:
    if ws.cell(row=max, column=1).value == None:
        max -= 1
    else:
        max += 1
        break

res = requests.get(url, headers=headers, timeout=6.5)
resdict = res.json()
   
resbattery = resdict['batteryVoltage']
restime = resdict['timestamp']
respercent = resdict['batteryPercentage']

timestamp = datetime.fromtimestamp(restime)
day = timestamp.strftime('%Y/%m/%d')
daytime = timestamp.strftime('%H:%M')
   
ws.cell(column=1,row=max).value = day
ws.cell(column=2,row=max).value = daytime
ws.cell(column=3,row=max).value = resbattery
ws.cell(column=4,row=max).value = respercent

wb.save(f'{CRENDIR}sesame-battery.xlsx')
print(f'{daytime} セサミのバッテリー情報を取得しました')

・「sesame-battery.xlsx」という空のエクセルファイルを事前に作成しておく必要があります。また、エクセルを開いたままPythonを実行するとエラーになります。
・APIキーとデバイスIDはhttps://biz.candyhouse.co/から取得できるので「XXXXXXX」部分を書き換えます。
・たまにAPI取得が失敗します。その場合は値を取得できてないのでエラーになります。その時のリターンコードは201。
・はじめてVSCode(VisualStudioCode)等でPythonを実行する場合は、requestsやopenpyxlのモジュールは入ってないと思うのでpipでインストールしてください。

今回は以上です。

いいなと思ったら応援しよう!