AUo!は、Sesame 6 ProをWear OSの時計からBluetooth Low Energy(BLE)で直接施錠・解錠する実験的なアプリです。
通常操作に自前サーバー、Wi-Fiモジュール、スマートフォンは使用しません。時計が設定済みのSesame 6 ProのBluetooth圏内にある場合のみ動作します。
このプロジェクトは独立したオープンソースプロジェクトです。CANDY HOUSE、Bluetooth SIG、Google、Appleによる公式提供・提携・推奨ではありません。また、Apple Walletのホームキー機能を実装するものではありません。
AUo!は物理的な錠を操作します。テスト前に別の入室手段があることを確認し、建物へ入る唯一の手段として使用しないでください。本ソフトウェアはApache License 2.0に基づき、無保証で提供されます。
Sesameのデバイスシークレットは、設定した錠を操作できる秘密情報です。
- リポジトリへコミットしたり、第三者へ共有したりしない
- シークレットを含むログやスクリーンショットを公開しない
- シークレットを設定してビルドしたAPKも秘密情報として扱う
- 個人用APKをGitHub ReleasesやCIアーティファクトへアップロードしない
このリポジトリが配布するのはソースコードだけです。設定済みAPKは配布しません。
- 公式Sesameアプリへ登録済みのSesame 6 Pro
- Wear OS 3以降(
minSdk = 30) - CANDY HOUSE Sesame Android SDK
v3.0.266-843 - 時計と錠が直接BLE通信できる距離
現在、ほかのSesameモデルには対応していません。Wear OS端末やOSバージョンによって実機動作が異なる可能性があります。
wear/— Kotlin・Compose for Wear OSで実装した時計アプリdocs/— BLE接続と画面構成の実装方針
AUo!はSesame本体の初期化や新規登録を行いません。最初に公式アプリへSesame 6 Proを登録し、CANDY HOUSEの開発者画面からUUIDと完全なデバイスシークレットを取得します。
wear/local.properties.exampleを参考に、Git管理外のwear/local.propertiesへ次を設定してください。
SESAME_DEVICE_UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
SESAME_DEVICE_SECRET=32桁の16進数
# 公式3.7V充電池の場合はRECHARGEABLE_3_7V
SESAME_BATTERY_TYPE=CR123A共有鍵URL、公開鍵、Key Indexの入力は不要です。AUo!は所有者のKey Index 0000を使用します。
UUIDとシークレットはBuildConfigへ埋め込み、Sesame SDKのアプリ専用データベースへ保存します。そのため、ローカルでビルドしたAPKにも含まれます。
画面は縦方向の2ページ構成です。
- 現在の状態に応じて施錠と解錠を切り替える全画面の鍵ボタン
- BLE電圧から算出した推定電池残量を表示する状態更新ボタン
解錠時は確認画面を表示します。操作中は連続操作を防止し、設定不足、権限不足、認証失敗、BLEタイムアウトの場合は、新たな錠操作を送らずにエラーを表示します。
最初の状態更新または操作でGATT接続を確立し、アプリがフォアグラウンドにある間は接続を使い回します。接続後はBLEスキャンを停止します。エラー、タイムアウト、キャンセル、画面離脱時はGATT接続を切断してスキャンを停止します。
電池残量は、BLEで取得した電圧を電池種類別の曲線へ当てはめた推定値です。モーター駆動直後の一時的な電圧低下を避けるため、接続確立時の値を保持し、施錠・解錠直後の値では置き換えません。
Android Studioでwear/を開くか、次のコマンドを実行します。
cd wear
./gradlew :app:testDebugUnitTest :app:lintDebug :app:assembleDebug --no-daemonCIはUUIDとデバイスシークレットを設定せずにビルドします。CIが生成するデバッグAPKは設定不足を表示するだけで、Sesameへ接続できません。
実際の錠を操作する前に、次の順序で確認してください。
- 時計のBluetoothを有効にする
- Bluetoothスキャン、Bluetooth接続、位置情報の権限を許可する
- 所有鍵をローカル設定した非公開APKをビルドしてインストールする
- Sesame 6 Proの近くで、最初に状態更新を試す
- 状態取得の成功後に施錠・解錠を試す
マージ後のアプリマニフェストからSesame SDK由来のINTERNET権限を除去しているため、SDKの付随ネットワーク処理も利用できません。
プルリクエストを作成する前にCONTRIBUTING.mdを確認してください。セキュリティ上の問題はSECURITY.mdに従って非公開で報告し、物理錠の脆弱性や実デバイスのシークレットを公開Issueへ記載しないでください。
AUo!はApache License 2.0で提供します。第三者ソフトウェアにはそれぞれのライセンスが適用され、主要な依存関係はTHIRD_PARTY_NOTICES.mdに記載しています。
Sesameなどの製品名は互換性を説明する目的でのみ使用しています。このリポジトリにはBluetoothロゴや第三者の販促写真を含めません。
AUo! is an experimental Wear OS app that locks and unlocks a Sesame 6 Pro directly over Bluetooth Low Energy (BLE).
Normal operation does not use a custom server, Cloudflare Workers, a Wi-Fi module, or a smartphone. It works only while the watch is within Bluetooth range of the configured Sesame 6 Pro.
This is an independent open-source project. It is not affiliated with or endorsed by CANDY HOUSE, Bluetooth SIG, Google, or Apple. It does not implement Apple Wallet home keys.
AUo! controls a physical lock. Confirm that another entry method is available before testing it, and do not rely on this software as the only way to enter a property. The software is provided without warranty under the Apache License 2.0.
The Sesame device secret can operate the configured lock:
- never commit it to a repository or share it with another person;
- never publish logs or screenshots containing it;
- treat every APK built with it as secret;
- do not upload a personal APK to GitHub Releases or CI artifacts.
This repository distributes source code only. It does not provide a configured APK.
- Sesame 6 Pro already registered with the official Sesame app
- Wear OS 3 or later (
minSdk = 30) - CANDY HOUSE Sesame Android SDK
v3.0.266-843 - direct BLE range between the watch and lock
Other Sesame models are not currently supported. Real-device behavior can vary by Wear OS model and OS version.
wear/— Wear OS app built with Kotlin and Compose for Wear OSdocs/— BLE connection and UI design notes
AUo! does not initialize or register a Sesame device. First register the Sesame 6 Pro with the official app, then obtain its UUID and complete device secret from the CANDY HOUSE developer dashboard.
Copy wear/local.properties.example to the Git-ignored
wear/local.properties and set:
SESAME_DEVICE_UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
SESAME_DEVICE_SECRET=32-character-hexadecimal-secret
# Use RECHARGEABLE_3_7V for the official 3.7 V rechargeable battery.
SESAME_BATTERY_TYPE=CR123AA shared-key URL, public key, and Key Index are not required. AUo! uses owner
Key Index 0000.
The UUID and secret are injected into BuildConfig, then stored in the
Sesame SDK's app-private database. They are therefore also present in a locally
built APK.
The UI has two vertical pages:
- a full-screen lock button that switches between lock and unlock based on the current state;
- a refresh button with an estimated battery percentage calculated from the BLE voltage.
Unlocking requires confirmation. While an operation is running, repeated commands are blocked. Setup errors, missing permissions, authentication failures, and BLE timeouts are shown without sending another lock command.
The first refresh or command establishes a GATT connection. AUo! reuses that connection while the app remains in the foreground and stops BLE scanning once connected. It disconnects and stops scanning on an error, timeout, cancellation, or when the app leaves the foreground.
Battery percentage is an estimate based on a battery-specific voltage curve. To avoid the temporary voltage sag caused by motor operation, AUo! keeps the reading captured when the BLE connection was established instead of replacing it immediately after locking or unlocking.
Open wear/ in Android Studio, or run:
cd wear
./gradlew :app:testDebugUnitTest :app:lintDebug :app:assembleDebug --no-daemonCI builds without a UUID or device secret. Its debug APK only reports that setup is required and cannot connect to a Sesame device.
Before operating a real lock:
- Enable Bluetooth on the watch.
- Grant the requested Bluetooth scan, Bluetooth connection, and location permissions.
- Build and install a private APK with the local owner-key configuration.
- Test refresh first while near the Sesame 6 Pro.
- Test lock and unlock only after state retrieval succeeds.
The merged app manifest removes the Sesame SDK's INTERNET permission, so the
app cannot use the SDK's ancillary network operations.
See CONTRIBUTING.md before opening a pull request. Report security problems privately as described in SECURITY.md; do not disclose a physical-lock vulnerability or real device secret in a public issue.
AUo! is licensed under the Apache License 2.0. Third-party software keeps its own license; principal dependencies are listed in THIRD_PARTY_NOTICES.md.
Sesame and related product names are used only to describe compatibility. Bluetooth logos and third-party marketing photographs are not included in this repository.