Google Doorbellで自分を認識したら自動でSesame3を解錠させてみた(Python初挑戦)


やりたかったこと

Google Doorbellが発売されたので、カメラが自分の姿を認識したときにSesame3を自動で解錠させたかった

困ったこと

・Sesame3がいまだにIFTTT連携してくれない(2021年8月現在)
⇒Python使ったことないのにpysesame3を使う羽目になった

やろうとしたこと

・GoogleDoorbellが認識済みの人物をとらえると、Homeアプリから人物名入りの通知が届く
・Homeアプリから飛んできた「人物」入りの通知をトリガーとして、MacrodroidからTasker実行
・pysesame3を使ったpythonプログラムを実行してSesame3を解錠

困ったこと2

・Android上でPythonを動かす環境の選択肢に最初に上がったのが下の2つ

Pydroid

・プログラムは作れたものの、Taskerから実行させる方法がなかった
・Macrodroid経由でアプリを起動することはできるが、それならSesameアプリからでも同じ

QPython

・なんか知らんけどpipからpysesame3をインストールできない
※ 正確にはPycryptodomeのインストールができない
⇒仕方ないのでWindowsにPython環境をインストールして、Pycryptodomeのディレクトリを移植
⇒それでも起動しない
※ 原因は、Windowsにインストールしたときにできるファイルがpyd(windowsDll)になってること
※ 当然WindowsDllなので、Androidにコピーしたところで動くわけがない

解決策

・Termuxを使用(Taskerプラグインも使える)

手順

1.AndroidにTermux、Taskerプラグインをインストール

2.TermuxにPythonをインストール
(参照:Androidスマホにtermuxからpythonをインストールする)

apt update
apt upgrade
apt install python

3.pipも自動でインストールされてるので、pysesame3をインストール

pip pysesame3

4.pysesame3を使って解錠するスクリプトを作成、ルートディレクトリに保存(unlock.pyとかにしました)
(参照:Sesame 3 APIを使う)

5.Termuxからルートディレクトリにアクセスするためのシンボリックリンクを作成
(参照:AndroidでLinuxターミナル!Termuxの初期設定)

termux-setup-storage

※ この時点で、以下のコマンドから解錠できます。

python storage/shared/unlock.py

6.TermuxでTaskerを使うためのディレクトリとシェルスクリプトを作成
(参照:【RPA】【MacroDroid】Termux の Tasker プラグインをMacrodroidで使う

mkdir -p ~/.termux/tasker
cd .termux
cd tasker
echo -n > unlock.sh

※ シェルスクリプトの編集はviを使いますが、なんかこの時点ではviが存在しなかったので、
エラーメッセージ通りにコマンド打てばインストールできました。
詳しい編集は上の参照記事から。中身自体は「python storage/shared/unlock.py」だけでいいと思います。

7.Macrodroidでマクロ作成
・トリガーに「通知が表示されたとき」、アプリは「Home」、テキストコンテンツに「含む」(人名)、を指定
・アクションに「アプリ」⇒「Taskerプラグイン」⇒「Termux:Tasker」⇒unlock.shを指定⇒使用変数は全部空白でOK

成功した

Sesame3は早くIFTTTに対応しろ

おまけ

pysesame3を作る記事の中の"MyScript"の部分が履歴の中身に表示されるので、

import sys #1行目に追加

device.unlock(history_tag=sys.argv[1])

Termux:Taskerでshを指定する時の引数に「hoge」を追加し、
unlock.shの中身を

python storage/shared/unlock.py $1

にすると、引数を順次読み込んで、Sesame3の履歴のほうに「hoge」が表示されます。
家族の名前ごとにトリガーしておくと、誰が帰ってきたのかわかるね!

免責

どう考えてもセキュリティはガバガバなので責任は取りません。

追記

sesame3の秘密鍵とUUIDの取得がちょっと面倒だったのでその手順(pythonインストール後)

  1. QRコードからテキストを取得 2.クエリ部分をコピー(具体的にはUI?以降の部分すべて) 3.以下のコマンドでクエリ復号
$ python //pythonモードに移行

>>>import urllib.parse
>>>urllib.parse.parse_qs('<copied_string>') //<>は不要

//出力されたもののうち、[sk]:の部分をコピー

4.以下のコマンドで秘密鍵とUUIDをそれぞれ取得

//pythonモード

>>> import base64
>>> base64.b64decode('<copied_string>')[1:17].hex() //出力されたものが「秘密鍵」
>>> base64.b64decode('<copied_string>')[83:99].hex() //出力されたものが「UUID」