sesame-kit 0.4.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +106 -73
- package/README.md +76 -43
- package/clients/js/sesame-client.mjs +2 -2
- package/clients/python/__pycache__/sesame_client.cpython-313.pyc +0 -0
- package/clients/python/sesame_client.py +2 -2
- package/docs/{architecture.md → en/architecture.md} +7 -7
- package/docs/en/ble.md +65 -0
- package/docs/{commands.md → en/commands.md} +26 -11
- package/docs/en/index.md +20 -0
- package/docs/en/integration.md +181 -0
- package/docs/{library.md → en/library.md} +6 -5
- package/docs/en/migration.md +13 -0
- package/docs/en/quickstart.md +51 -0
- package/docs/{architecture.ja.md → ja/architecture.md} +37 -37
- package/docs/ja/ble.md +65 -0
- package/docs/{commands.ja.md → ja/commands.md} +54 -39
- package/docs/ja/index.md +20 -0
- package/docs/ja/integration.md +181 -0
- package/docs/{library.ja.md → ja/library.md} +6 -5
- package/docs/ja/migration.md +13 -0
- package/docs/ja/quickstart.md +51 -0
- package/package.json +4 -1
- package/src/cli/serve.js +1 -1
- package/src/cli.js +9 -9
- package/src/client.js +2 -2
- package/src/config.js +1 -1
- package/src/paths.js +5 -5
- package/src/tokens.js +1 -1
- package/types/client.d.ts +1 -1
- package/docs/migration.ja.md +0 -13
- package/docs/migration.md +0 -13
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
<!-- [English](
|
|
1
|
+
<!-- [English](../en/architecture.md) | 日本語 -->
|
|
2
2
|
|
|
3
3
|
# アーキテクチャ / 設計ノート
|
|
4
4
|
|
|
5
|
-
> English
|
|
5
|
+
> [English](../en/architecture.md) · [ドキュメント目次](./index.md)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
実装の出自、設計判断、ファイル構成をまとめます。README は使い方を、ここは「なぜそうなっているか」を扱います。
|
|
8
8
|
|
|
9
9
|
## 出自 (Lineage)
|
|
10
10
|
|
|
11
|
-
本実装は **公式 biz3 管理 Web (https://github.com/CANDY-HOUSE/biz.candyhouse.co, MIT)** を Node.js に port
|
|
11
|
+
本実装は **公式 biz3 管理 Web (https://github.com/CANDY-HOUSE/biz.candyhouse.co, MIT)** を Node.js に port したものです。主要部の port 関係:
|
|
12
12
|
|
|
13
13
|
| この実装 | biz3 vendor 元 |
|
|
14
14
|
|---|---|
|
|
@@ -20,73 +20,73 @@
|
|
|
20
20
|
| `src/crypto.js` | `references_web/src/utils/Cmac.js` + `biz3utils.js` + `constants/cmdCode.js` (CMAC は `node-aes-cmac` で実装) |
|
|
21
21
|
|
|
22
22
|
**biz3 との唯一の機能的相違**: Cognito Client ID を biz3 の `21u50hboia4s5q0sbk6pbdfmss` から、公式
|
|
23
|
-
iOS/Android アプリと同じ Consumer Client `6ialca0p8u0lsgvbmvsljfm305`
|
|
24
|
-
refreshToken
|
|
23
|
+
iOS/Android アプリと同じ Consumer Client `6ialca0p8u0lsgvbmvsljfm305` に差し替えています。これにより
|
|
24
|
+
refreshToken が事実上失効しなくなります。biz3 の MIT ライセンス本文は [LICENSE.biz3](../../LICENSE.biz3) として同梱しています。
|
|
25
25
|
|
|
26
26
|
## クラウド / BLE の統合設計(経路は葉)
|
|
27
27
|
|
|
28
28
|
クラウドと BLE は公式 SesameSDK と同様、**命令の正体 (itemCode) とデバイス能力モデルを共有**し、
|
|
29
|
-
最後の送信経路 (transport)
|
|
29
|
+
最後の送信経路 (transport) だけが葉として差し替わる単一設計です。
|
|
30
30
|
|
|
31
|
-
- itemCode は `src/itemcodes.js` の 1 ソース(クラウドは `crypto.js` の `CMD`、BLE は `protocol.js` の
|
|
32
|
-
`ITEM`
|
|
33
|
-
- 能力は `devicemodel.js` が **型 × 経路**
|
|
31
|
+
- itemCode は `src/itemcodes.js` の 1 ソース(クラウドは `src/crypto.js` の `CMD`、BLE は `src/ble/protocol.js` の
|
|
32
|
+
`ITEM` という別名で同じものを参照します)。
|
|
33
|
+
- 能力は `src/ble/devicemodel.js` が **型 × 経路** で持ちます(各 kind に `cloud:[...]` と `ble:[...]` の op 集合)。
|
|
34
34
|
**操作できる op = 両者の和集合**で、session の対象・操作メニュー・`pickTransport` の経路選択はすべて
|
|
35
|
-
|
|
35
|
+
この和集合から導きます。
|
|
36
36
|
- 例: ロックは `ble` に autolock があり `cloud` に無い → autolock は BLE 専用。
|
|
37
37
|
- OS2 ロックは `ble` 空・`cloud` に lock/unlock/toggle → クラウドのみで操作可。
|
|
38
38
|
- Hub3 は `cloud` に ir/relay/led。
|
|
39
|
-
-
|
|
39
|
+
- 既定は経路を意識しない**オート**で、固定したいときだけ `--ble-only` / `--cloud-only`。
|
|
40
40
|
|
|
41
41
|
## irType の非対称トラップ(自己学習リモコン)
|
|
42
42
|
|
|
43
|
-
リモコンの種別は整数コード (= 実デバイスの `remote.type`)
|
|
43
|
+
リモコンの種別は整数コード (= 実デバイスの `remote.type`) です。主な値: `49152`(0xc000)=エアコン /
|
|
44
44
|
`8192`(0x2000)=テレビ / `57344`=照明 / `32768`=扇風機 / **`65024`(0xFE00)=自己学習**。
|
|
45
45
|
|
|
46
46
|
⚠️ **学習だけ非対称**: 公式 biz3 のメニューでは各項目に id が振られ、エアコン/テレビ等のプリセットは
|
|
47
|
-
「メニュー id = 実デバイスの type
|
|
48
|
-
実際に作られるリモコンの type は **`0xFE00`(65024)
|
|
49
|
-
|
|
50
|
-
(`0xFEFF`
|
|
47
|
+
「メニュー id = 実デバイスの type」で一致します。ところが「学習」のメニュー id は `0xFEFF` なのに、学習して
|
|
48
|
+
実際に作られるリモコンの type は **`0xFE00`(65024)** です。`0xFEFF` は「学習メニューを押した」という UI 上の印に
|
|
49
|
+
すぎず、デバイスや通信には現れません。**自己学習リモコンを指すときは必ず実 type `0xFE00` を使うこと**
|
|
50
|
+
(`0xFEFF` を渡すとサーバ照合が一致せずリモコンが見つかりません)。当ツールは `0xFE00` を採用しています。
|
|
51
51
|
|
|
52
52
|
## autolock はクラウド経由では設定できない
|
|
53
53
|
|
|
54
|
-
autolock (= `SesameItemCode` 11)
|
|
55
|
-
`success:true`
|
|
54
|
+
autolock (= `SesameItemCode` 11) の設定はクラウド経由では実機に反映されません。`biz3TriggerLocker` は cmd=11 に
|
|
55
|
+
`success:true` を返しますが、ロック本体の autolock 秒数は変化しません。biz3 web/SDK にも設定系のクラウド送信経路は無く
|
|
56
56
|
(`useIotCtrl.js` の IoT cmd は ADD/REMOVE_SESAME・LED・RELAY 等のみで autolock は "Unsupported")、公式アプリは
|
|
57
|
-
autolock を BLE
|
|
58
|
-
`lock.triggerItemCommand` / `lock.setAutolock`
|
|
57
|
+
autolock を BLE 直送します。よって autolock は BLE の `sesame autolock` のみで提供します。ライブラリには汎用レール
|
|
58
|
+
`lock.triggerItemCommand` / `lock.setAutolock` がありますが、クラウドでは lock/unlock/toggle/bot 以外は実機に効きません。
|
|
59
59
|
|
|
60
|
-
`biz3TriggerLocker` は同期 ack (`{code:200, success:true}`)
|
|
61
|
-
この ack
|
|
60
|
+
`biz3TriggerLocker` は同期 ack (`{code:200, success:true}`) を返します。`unlock`/`lock`/`toggle`/`bot` は
|
|
61
|
+
この ack で完了判定します (push 待ちのみだと「サーバ受理済みなのに timeout」と誤判定するため)。
|
|
62
62
|
|
|
63
63
|
## BLE 直接制御の設計
|
|
64
64
|
|
|
65
65
|
プロトコル層 (`src/ble/protocol.js`: CMAC セッション鍵 / AES-CCM / セグメント / フレーム) と
|
|
66
|
-
セッション層 (`src/ble/session.js`) は **OS 非依存の純 JS
|
|
67
|
-
(`src/ble/transport.js`、既定 noble) に閉じ込めてあり、Web Bluetooth
|
|
66
|
+
セッション層 (`src/ble/session.js`) は **OS 非依存の純 JS** です。無線 I/O だけを差し替え可能なアダプタ
|
|
67
|
+
(`src/ble/transport.js`、既定 noble) に閉じ込めてあり、Web Bluetooth 等の別アダプタも注入できます。
|
|
68
68
|
デバイス型モデル (`src/ble/devicemodel.js`) は公式 SesameSDK の `CHProductModel` と能力定義を移植したもので、
|
|
69
|
-
`productType`/`model` → 種別 (lock5/bot2/bike2/…) → 対応操作・mechStatus
|
|
70
|
-
|
|
69
|
+
`productType`/`model` → 種別 (lock5/bot2/bike2/…) → 対応操作・mechStatus 解釈を引きます。`SesameBle` はこの能力に
|
|
70
|
+
従って操作を許可/拒否します。プロトコルは Android SesameSDK / ESP32 リファレンス実装から移植しています。
|
|
71
71
|
|
|
72
72
|
## config の単一 `devices{}` 設計
|
|
73
73
|
|
|
74
|
-
**デバイスは単一の `devices{}`
|
|
75
|
-
サーバの device レコードを (巨大な `stateInfo` を除き)
|
|
76
|
-
どの操作 view (lock / hub3) に出すかは `category`
|
|
77
|
-
(Hub3 が「解錠」と誤表示される等)
|
|
78
|
-
(親 Hub3 + irType + 学習 keys)
|
|
74
|
+
**デバイスは単一の `devices{}` に丸ごと保存します** — ロック / Bot / Bike / Hub3 を型ごとに分けず、
|
|
75
|
+
サーバの device レコードを (巨大な `stateInfo` を除き) そのまま格納します。型は `deviceModel` から導出し、
|
|
76
|
+
どの操作 view (lock / hub3) に出すかは `category` で分類します。`model`/`secretKey` の取りこぼし
|
|
77
|
+
(Hub3 が「解錠」と誤表示される等) を構造的に防ぐための設計です。`remotes` は device ではない子エンティティ
|
|
78
|
+
(親 Hub3 + irType + 学習 keys) なので独立コレクションのままです。
|
|
79
79
|
|
|
80
80
|
## `sesame serve` 言語非依存バックエンド
|
|
81
81
|
|
|
82
|
-
1 コア + 5 フレーミングで、単一常駐 `SesameHub3`
|
|
83
|
-
[言語非依存バックエンド](
|
|
82
|
+
1 コア + 5 フレーミングで、単一常駐 `SesameHub3` に全機能を一様公開します。詳細は README の
|
|
83
|
+
[言語非依存バックエンド](../../README.ja.md#言語非依存バックエンド-sesame-serve) を参照。
|
|
84
84
|
|
|
85
85
|
- **コア**: `src/serve/jsonrpc.js`(JSON-RPC 2.0、transport 非依存)+ `registry.js`(`NAMESPACE_OPS` から
|
|
86
86
|
メソッドを自動公開 + OpenRPC)+ `daemon.js`(直列化 / 購読一元 / 背圧 / shutdown)。
|
|
87
87
|
- **フレーミング**: `framing/` 配下に stdio / socket(UDS) / http(+SSE) / ws / grpc + token。
|
|
88
|
-
- **型抽出**: `scripts/gen-rpc-schema.mjs` が `.d.ts` から param
|
|
89
|
-
`scripts/gen-grpc-proto.mjs` が型付き `sesame.proto`
|
|
88
|
+
- **型抽出**: `scripts/gen-rpc-schema.mjs` が `.d.ts` から param 型を抽出し (`rpc-params.generated.json`)、
|
|
89
|
+
`scripts/gen-grpc-proto.mjs` が型付き `sesame.proto` を生成します。両者は drift-guard テストで保護しています。
|
|
90
90
|
|
|
91
91
|
## ファイル構成
|
|
92
92
|
|
|
@@ -126,7 +126,7 @@ sesame-kit/
|
|
|
126
126
|
│ ├── transport.js # noble アダプタ (optionalDependency, 遅延require)
|
|
127
127
|
│ └── index.js # SesameBle ファサード
|
|
128
128
|
├── iot.js / account.js / schedule.js / org.js / company.js / access.js / devices.js
|
|
129
|
-
├── config.js # ConfigStore (~/.config/sesame-
|
|
129
|
+
├── config.js # ConfigStore (~/.config/sesame-kit/config.json)
|
|
130
130
|
├── tokens.js # FileTokenStore
|
|
131
131
|
└── paths.js # 設定ディレクトリ解決
|
|
132
132
|
```
|
package/docs/ja/ble.md
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<!-- [English](../en/ble.md) | 日本語 -->
|
|
2
|
+
|
|
3
|
+
# BLE 直接制御
|
|
4
|
+
|
|
5
|
+
> [English](../en/ble.md) · [ドキュメント目次](./index.md)
|
|
6
|
+
|
|
7
|
+
登録済みの SESAME を、クラウドを経由せず PC から Bluetooth で直接操作します。オフラインで動作し、**クラウドでは変更できないオートロックなどの設定も、BLE 経由ならデバイスに反映されます**。BLE のみの操作にログインは不要です。
|
|
8
|
+
|
|
9
|
+
## コマンド
|
|
10
|
+
|
|
11
|
+
BLE 制御は独立したコマンドではありません。デバイス操作に `--ble-only` を付けます(`autolock` は BLE 必須のため、フラグなしでも BLE を使います)。
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
sesame front status --ble-only # current state (locked / unlocked, position)
|
|
15
|
+
sesame front unlock --ble-only # unlock (lock / Bike)
|
|
16
|
+
sesame front lock --ble-only # lock
|
|
17
|
+
sesame front toggle --ble-only # toggle based on current state
|
|
18
|
+
sesame kitchen click --ble-only # SESAME Bot click (Bot2 / Bot3)
|
|
19
|
+
sesame front autolock 30 # autolock (BLE required; actually takes effect)
|
|
20
|
+
sesame front autolock 0 # disable
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
`--ble-only` を付けない場合、経路(クラウド / BLE)は自動で選ばれます。`--cloud-only` でクラウドに固定します。
|
|
24
|
+
|
|
25
|
+
## デバイス型ごとの能力(公式 SesameSDK に準拠)
|
|
26
|
+
|
|
27
|
+
操作セットはデバイス型ごとに異なります。公式 SDK は能力を型ごとに非対称に定義しており、この CLI は設定の `model` からそれを再現します。サポートされない操作は拒否されます(例: Bot に対する `lock` → 「click を使う」)。
|
|
28
|
+
|
|
29
|
+
| 型(例: モデル) | BLE 操作 | mechStatus |
|
|
30
|
+
|---|---|---|
|
|
31
|
+
| Lock `sesame_5` / `_pro` / `sesame_6` / `_pro` / `_us` / `miwa` | `lock` `unlock` `toggle` `autolock` `status` | locked / unlocked + position |
|
|
32
|
+
| Bot `bot_2` / `bot_3` | `click` `status` | locked / unlocked (no position) |
|
|
33
|
+
| Bike `bike_2` / `bike_3` | `unlock` `status` | locked / unlocked (no position) |
|
|
34
|
+
| Touch / Face / Sensor / Remote, Hub3, WiFiModule2 | (BLE ロック操作なし) | — |
|
|
35
|
+
| OS2 `sesame_2` / `_4`, `ssmbot_1`, `bike_1` | BLE 未実装(鍵導出 / 暗号方式が異なる)。クラウド経由で操作 | — |
|
|
36
|
+
|
|
37
|
+
> OS3 では「locked / unlocked」は `isInLockRange` のみに基づく 2 値で、中間(動作中)の状態はありません(Sesame2 など OS2 デバイスのみが持ちます)。
|
|
38
|
+
|
|
39
|
+
## 結果コード
|
|
40
|
+
|
|
41
|
+
デバイスが非ゼロの結果を返すと、ライブラリは `BleResultError`(`.resultCode` / `.resultName`)をスローします。`resultName` は公式 SesameSDK の `SesameResultCode`(`success` / `invalidFormat` / `notSupported` / `invalidSig` / `notFound` / `unknown` / `busy` / `invalidParam` / `invalidAction`)と一致するため、これで分岐できます。
|
|
42
|
+
|
|
43
|
+
これはデバイス層(SesameOS3)の分類で、BLE 経由でのみ得られます。クラウド経路ではこれらのコードは表面化せず、`sesame serve` の `kind` にも現れません。
|
|
44
|
+
|
|
45
|
+
## 要件
|
|
46
|
+
|
|
47
|
+
- BLE アダプタ `@abandonware/noble`。`optionalDependency` のため `npm install` が自動で試行し、非対応プラットフォームでもインストールは壊れません(BLE が単に無効化されるだけです)。手動でインストールする場合は `npm i @abandonware/noble`。
|
|
48
|
+
- **macOS ではターミナルに Bluetooth 権限が必要です**(システム設定 → プライバシーとセキュリティ → Bluetooth)。これは OS レベルの権限で、どの BLE 実装でも避けられません。
|
|
49
|
+
- ロックの Bluetooth 通信圏内にいること。
|
|
50
|
+
|
|
51
|
+
## ライブラリとして
|
|
52
|
+
|
|
53
|
+
```js
|
|
54
|
+
import { SesameBle } from "sesame-kit"; // or: import { ble } from "sesame-kit"
|
|
55
|
+
|
|
56
|
+
await SesameBle.use({ deviceUUID, secretKey }, async (lock) => {
|
|
57
|
+
await lock.unlock();
|
|
58
|
+
await lock.autolock(30);
|
|
59
|
+
console.log(lock.lastStatus); // { state, isInLockRange, position, batteryRaw, ... }(batteryRaw は電圧 ADC 生値)
|
|
60
|
+
});
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## 対象範囲
|
|
64
|
+
|
|
65
|
+
**SesameOS3**(SESAME 5 / 5 Pro / Touch など)を対象とします。新規ペアリング(未登録デバイスの登録)はサポートせず、登録済みデバイスの操作のみを扱います。設計上の補足は [architecture.md](./architecture.md) を参照してください。
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
<!-- [English](
|
|
1
|
+
<!-- [English](../en/commands.md) | 日本語 -->
|
|
2
2
|
|
|
3
3
|
# コマンドリファレンス
|
|
4
4
|
|
|
5
|
-
> English
|
|
5
|
+
> [English](../en/commands.md) · [ドキュメント目次](./index.md)
|
|
6
6
|
|
|
7
|
-
> CLI
|
|
8
|
-
> `sesame serve`
|
|
7
|
+
> CLI のコマンドを領域別にまとめています。各サブコマンドの全オプションは `sesame <cmd> --help` で引けます。
|
|
8
|
+
> `sesame serve` 経由で他言語から叩く場合は、`sesame rpc`(または `rpc.discover`)で全メソッドと引数を機械可読に取得できます。
|
|
9
9
|
|
|
10
10
|
## デバイス操作(デバイス主語)
|
|
11
11
|
|
|
12
|
-
主語は**デバイス**です。`sesame <device> <action>` は SDK の `device.action()`
|
|
12
|
+
主語は**デバイス**です。`sesame <device> <action>` は SDK の `device.action()` と同じ並びです。
|
|
13
13
|
device は名前(部分一致可)。action 省略でそのデバイスの対話メニュー、device も省略で全デバイスの
|
|
14
|
-
対話メニュー(= `session
|
|
14
|
+
対話メニュー(= `session`)になります。
|
|
15
15
|
|
|
16
16
|
```bash
|
|
17
17
|
sesame front unlock # front.unlock() (部分一致可: sesame 玄関 unlock)
|
|
@@ -25,22 +25,22 @@ sesame front # front の対話メニュー
|
|
|
25
25
|
sesame # 全デバイスの対話メニュー (session)
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
action: `unlock` / `lock` / `toggle` / `click` / `status` / `autolock
|
|
28
|
+
action: `unlock` / `lock` / `toggle` / `click` / `status` / `autolock <秒>`(**使える操作は型で変わります** — 後述)。
|
|
29
29
|
|
|
30
|
-
### 経路 (transport)
|
|
30
|
+
### 経路 (transport) は「オート」が既定
|
|
31
31
|
|
|
32
|
-
-
|
|
33
|
-
- `--ble-only` / `--cloud-only`
|
|
34
|
-
- BLE 接続を保持して連続操作するモードは `sesame session` (= `sesame <device>` の複数版)
|
|
32
|
+
- 既定はオートです。経路は自動で選ばれます。cloud で運べる op は cloud、`autolock` のような BLE 必須の op だけ BLE 接続します (BLE のスキャン/接続コストを毎回は払いません)。
|
|
33
|
+
- `--ble-only` / `--cloud-only` で経路を固定します。`--ble-only` は接続に数秒かかります。`--cloud-only` は一部操作が制限されます。
|
|
34
|
+
- BLE 接続を保持して連続操作するモードは `sesame session` (= `sesame <device>` の複数版) です。
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
|
-
sesame front unlock #
|
|
37
|
+
sesame front unlock # オート (ツールが経路を選ぶ)
|
|
38
38
|
sesame front autolock 30 # BLE 必須の op → 自動で BLE 接続
|
|
39
39
|
sesame front lock --ble-only # BLE に固定 (接続に数秒)
|
|
40
40
|
sesame front lock --cloud-only # クラウドに固定
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
-
> 設計の詳細(クラウド/BLE の能力モデル統合)は [architecture.md](./architecture.
|
|
43
|
+
> 設計の詳細(クラウド/BLE の能力モデル統合)は [architecture.md](./architecture.md) を参照してください。
|
|
44
44
|
|
|
45
45
|
ロック定義の管理は `locks` グループ:
|
|
46
46
|
|
|
@@ -55,7 +55,7 @@ sesame locks rm front
|
|
|
55
55
|
|
|
56
56
|
クラウド操作の応答は同期 ack (`biz3TriggerLocker`, `success:true`) を待ってから戻ります (timeout 10s)。
|
|
57
57
|
|
|
58
|
-
> autolock はクラウド経由では設定できません (BLE のみ)。`sesame autolock`
|
|
58
|
+
> autolock はクラウド経由では設定できません (BLE のみ)。`sesame <device> autolock <秒>`(例: `sesame front autolock 30`、`0`=無効)を使ってください。背景は [architecture.md](./architecture.md)。
|
|
59
59
|
|
|
60
60
|
---
|
|
61
61
|
|
|
@@ -94,8 +94,21 @@ sesame ir search ac ダイキン # メーカー DB 検索 (max 1000)
|
|
|
94
94
|
sesame ir match ac <hex波形> # 学習波形 → 既知リモコン照合
|
|
95
95
|
```
|
|
96
96
|
|
|
97
|
-
> 自己学習リモコンを指すときは `irType` に実 type `0xFE00`(65024)
|
|
98
|
-
>
|
|
97
|
+
> 自己学習リモコンを指すときは `irType` に実 type `0xFE00`(65024) を使います。メニュー id の `0xFEFF` を渡すと
|
|
98
|
+
> サーバ照合が一致せずリモコンが見つかりません。詳細は [architecture.md](./architecture.md)。
|
|
99
|
+
|
|
100
|
+
### リモコンと Hub3 の登録
|
|
101
|
+
|
|
102
|
+
`send` / `ir learn` を使うには、先にリモコン(とその Hub3)を config に取り込む必要があります。サーバから一括取り込みが最速です:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
sesame hub3 sync-from-devices # Hub3 を取り込む
|
|
106
|
+
sesame remote sync-from-devices # リモコンを取り込む (Hub3・irType は自動判定) + キーも取得
|
|
107
|
+
sesame remote ls # 登録済みリモコン一覧
|
|
108
|
+
sesame remote set-default ac # 引数なし `sesame send <key>` で使う既定リモコン
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
1 つずつ追加するなら `sesame hub3 add` / `sesame remote add`(どちらも一覧から選ぶ。UUID/irType の手打ち不要)。`sesame remote sync-keys [name]` でリモコンのキー一覧を取り込み直します。
|
|
99
112
|
|
|
100
113
|
---
|
|
101
114
|
|
|
@@ -117,7 +130,7 @@ sesame firmware # 配信中ファームウェア一覧
|
|
|
117
130
|
|
|
118
131
|
## WebAPI proxy
|
|
119
132
|
|
|
120
|
-
biz3 dev console で発行する REST API key (apiKeyId) を `config.apiKeyId` に設定すると、任意の REST WebAPI を WebSocket 経由で proxy
|
|
133
|
+
biz3 dev console で発行する REST API key (apiKeyId) を `config.apiKeyId` に設定すると、任意の REST WebAPI を WebSocket 経由で proxy 呼び出しできます:
|
|
121
134
|
|
|
122
135
|
```bash
|
|
123
136
|
# config.json に "apiKeyId": "..." を入れた状態で:
|
|
@@ -152,13 +165,13 @@ sesame access cards owner <cardID> [ownerSubUUID] # 所有者割
|
|
|
152
165
|
sesame access passcodes ls --device <uuid> # 暗証番号一覧
|
|
153
166
|
```
|
|
154
167
|
|
|
155
|
-
> `rm` (delCards/delPasscodes) は biz3 に応答ハンドラが無く **fire-and-forget
|
|
168
|
+
> `rm` (delCards/delPasscodes) は biz3 に応答ハンドラが無く **fire-and-forget**。完了応答は返りません。
|
|
156
169
|
|
|
157
170
|
---
|
|
158
171
|
|
|
159
172
|
## 会社 / 組織管理 (biz3 enterprise)
|
|
160
173
|
|
|
161
|
-
|
|
174
|
+
複数会社・社員・役割・デバイスグループを扱う法人向け機能です。`companyID` はログイン情報から自動補完されます。
|
|
162
175
|
|
|
163
176
|
```bash
|
|
164
177
|
# 会社
|
|
@@ -178,8 +191,8 @@ sesame org keys device <deviceUUID> # デバイス側の鍵保有従業員を
|
|
|
178
191
|
|
|
179
192
|
### ゲスト共有 (鍵共有 URL / QR)
|
|
180
193
|
|
|
181
|
-
SESAME アプリが読む共有 QR と同じ `ssm://UI?t=sk&sk=…&l=…&n=…` URL
|
|
182
|
-
`--level 2` (ゲスト) のときだけ使い捨て `guestKeyId`
|
|
194
|
+
SESAME アプリが読む共有 QR と同じ `ssm://UI?t=sk&sk=…&l=…&n=…` URL を生成します。
|
|
195
|
+
`--level 2` (ゲスト) のときだけ使い捨て `guestKeyId` を発行して埋め込みます (biz3 と同じ挙動)。
|
|
183
196
|
|
|
184
197
|
```bash
|
|
185
198
|
sesame org keys share-url --device <uuid> --level 2 --name "来客用" # ゲスト共有 URL
|
|
@@ -188,8 +201,8 @@ sesame org keys share-url --device <uuid> --qr # 端末に
|
|
|
188
201
|
```
|
|
189
202
|
|
|
190
203
|
> 共有 URL の組み立て・解析は biz3 `generateInviteGuestQRCodeByInfo` / `readQrcode` を 1:1 移植。
|
|
191
|
-
> **画像化ライブラリ非依存**で、出力 URL を任意の QR
|
|
192
|
-
> 作成/更新系の多くは構造体を `--json '<…>'`
|
|
204
|
+
> **画像化ライブラリ非依存**で、出力 URL を任意の QR 生成器に貼っても共有できます。
|
|
205
|
+
> 作成/更新系の多くは構造体を `--json '<…>'` で受けます(各サブコマンドの `--help` に例あり)。
|
|
193
206
|
> `org employee confirm <email>` は biz3 仕様上、成功時に現セッションを signout する点に注意。
|
|
194
207
|
|
|
195
208
|
---
|
|
@@ -200,18 +213,20 @@ Hub3 本体への直接コマンド (LED 調光・LTE リレー・ファーム
|
|
|
200
213
|
`--device <hub3UUID> --secret <hex>` を渡すか、対話時は接続デバイスから選択。
|
|
201
214
|
|
|
202
215
|
```bash
|
|
203
|
-
sesame iot led 80 --device <uuid> --secret <hex> # LED 調光 (0-
|
|
216
|
+
sesame iot led 80 --device <uuid> --secret <hex> # LED 調光 (duty 0-255)
|
|
204
217
|
sesame iot led --get --device <uuid> --secret <hex># 現在の調光取得
|
|
205
218
|
sesame iot relay on --device <uuid> --secret <hex># LTE リレー開閉
|
|
206
219
|
sesame iot firmware-update --device <uuid> --secret <hex> --wait 60
|
|
207
220
|
sesame iot matter-code --device <uuid> --secret <hex> # Matter ペアリングコード
|
|
208
221
|
```
|
|
209
222
|
|
|
223
|
+
> `relay` は fire-and-forget で、Hub3 から応答が返りません(送信成功=切替成功ではありません)。`off` の opcode 割当は公式ソース上で未確認で、実機では別挙動になる可能性があります。
|
|
224
|
+
|
|
210
225
|
---
|
|
211
226
|
|
|
212
227
|
## プリセット IR リモコン (HXD command)
|
|
213
228
|
|
|
214
|
-
エアコン等を「学習」ではなく **プリセット DB の命令で**
|
|
229
|
+
エアコン等を「学習」ではなく **プリセット DB の命令で** 発射します。Hub3 を `--device` に指定:
|
|
215
230
|
|
|
216
231
|
```bash
|
|
217
232
|
sesame preset-ir air --device <hub3uuid> --code <n> --power --temp 26 --mode 1 --fan 2
|
|
@@ -220,14 +235,14 @@ sesame preset-ir send --device <hub3uuid> --command <hex> --irtype 49152 # 生
|
|
|
220
235
|
```
|
|
221
236
|
|
|
222
237
|
> プリセットの command 生成 (biz3 の HXDCommandProcessor) は未移植のため、プリセット発射は現状機能しません。
|
|
223
|
-
> 自己学習リモコン (`sesame ir learn`) を使ってください([既知の制限](
|
|
238
|
+
> 自己学習リモコン (`sesame ir learn`) を使ってください([既知の制限](../../README.ja.md#健全性--既知の制限))。
|
|
224
239
|
|
|
225
240
|
---
|
|
226
241
|
|
|
227
242
|
## BLE 直接制御 (クラウド非経由)
|
|
228
243
|
|
|
229
|
-
PC の Bluetooth から登録済み SESAME
|
|
230
|
-
オフラインでも動き、**クラウドでは不可だった `autolock`
|
|
244
|
+
PC の Bluetooth から登録済み SESAME を**直接**操作します。クラウド (WS) を介さないので
|
|
245
|
+
オフラインでも動き、**クラウドでは不可だった `autolock` 等の設定系が実機に反映されます**。
|
|
231
246
|
|
|
232
247
|
BLE 操作は専用コマンドではなく、デバイス主語の操作に **`--ble-only` を付ける**だけ
|
|
233
248
|
(`autolock` は BLE 必須なので無指定でも自動で BLE):
|
|
@@ -243,16 +258,16 @@ sesame front autolock 0 # 無効化
|
|
|
243
258
|
```
|
|
244
259
|
|
|
245
260
|
> **BLE エラーは `SesameResultCode` で意味づけ済み** — デバイスが非 0 の結果を返すと、ライブラリは
|
|
246
|
-
> `BleResultError`(`.resultCode` / `.resultName
|
|
261
|
+
> `BleResultError`(`.resultCode` / `.resultName`)を投げます。`resultName` は公式 SesameSDK の
|
|
247
262
|
> `SesameResultCode`(`success`/`invalidFormat`/`notSupported`/`invalidSig`/`notFound`/`unknown`/
|
|
248
|
-
> `busy`/`invalidParam`/`invalidAction
|
|
249
|
-
> 注: これは**デバイス層 (SesameOS3) の taxonomy** で、BLE
|
|
250
|
-
> (クラウド経路はこの code を surface しないため `sesame serve` の `kind`
|
|
263
|
+
> `busy`/`invalidParam`/`invalidAction`)に一致し、機械的に分岐できます。
|
|
264
|
+
> 注: これは**デバイス層 (SesameOS3) の taxonomy** で、BLE 直接経路でのみ取得できます
|
|
265
|
+
> (クラウド経路はこの code を surface しないため `sesame serve` の `kind` には乗りません)。
|
|
251
266
|
|
|
252
267
|
### デバイス型ごとの操作 (公式 SesameSDK 準拠)
|
|
253
268
|
|
|
254
|
-
|
|
255
|
-
`model`
|
|
269
|
+
操作セットはデバイスの種別で異なります。SDK では能力が型ごとに非対称に定義されており、本 CLI もそれを `config` の
|
|
270
|
+
`model` から判定して同じ非対称性を再現します。対応外の操作はコマンドが拒否されます(例: Bot に `lock` → 「click を使え」)。
|
|
256
271
|
|
|
257
272
|
| 種別 (model 例) | BLE 操作 | mechStatus |
|
|
258
273
|
|---|---|---|
|
|
@@ -262,8 +277,8 @@ sesame front autolock 0 # 無効化
|
|
|
262
277
|
| Touch/Face/Sensor/Remote, Hub3, WiFiModule2 | (BLE 施錠操作なし) | — |
|
|
263
278
|
| OS2 `sesame_2`/`_4`, `ssmbot_1`, `bike_1` | BLE 未実装 (鍵導出/暗号が別系統)。クラウド経由で操作 | — |
|
|
264
279
|
|
|
265
|
-
> 「施錠/解錠」は OS3 では `isInLockRange` の有無による **2 値**のみ。OS3 に中間状態 (moved)
|
|
266
|
-
> (Sesame2 等 OS2 系のみ moved
|
|
280
|
+
> 「施錠/解錠」は OS3 では `isInLockRange` の有無による **2 値**のみ。OS3 に中間状態 (moved) はありません
|
|
281
|
+
> (Sesame2 等 OS2 系のみ moved を持ちます)。BLE 実装の設計は [architecture.md](./architecture.md) を参照してください。
|
|
267
282
|
|
|
268
283
|
ライブラリとしても利用可:
|
|
269
284
|
|
|
@@ -282,7 +297,7 @@ await SesameBle.use({ deviceUUID, secretKey }, async (lock) => {
|
|
|
282
297
|
|
|
283
298
|
## 対話セッション
|
|
284
299
|
|
|
285
|
-
対話セッション(`sesame` / `sesame <device>` / `sesame session
|
|
300
|
+
対話セッション(`sesame` / `sesame <device>` / `sesame session`)は**アプリ的なオート**です。
|
|
286
301
|
**操作できるデバイスを全部**載せます: ロック/Bot/Bike(BLE+クラウド)と、ログイン済みなら **Hub3**(クラウド: IR 送信 / リレー / LED)。
|
|
287
302
|
BLE を best-effort で張りつつ、**BLE が 0 でも終了しません**: 圏外/権限なしのデバイスはログイン済みなら
|
|
288
303
|
**クラウドで操作**します(BLE が張れたデバイスは BLE を優先=低遅延+autolock 可)。
|
|
@@ -303,7 +318,7 @@ $ sesame # 全デバイス (alias: sesame session / watch)
|
|
|
303
318
|
```
|
|
304
319
|
|
|
305
320
|
各デバイスの末尾タグ `·BLE` / `·cloud` が経路。**`autolock` は BLE 必須**なので、cloud のデバイスでは
|
|
306
|
-
「近づいて再試行」と案内します。接続が 1
|
|
321
|
+
「近づいて再試行」と案内します。接続が 1 個だけならデバイス選択を省略します。
|
|
307
322
|
|
|
308
323
|
**ライブ更新**: 画面は **Ink (React for CLI)** 製のライブダッシュボードで、BLE の状態変化や
|
|
309
324
|
バックグラウンド接続の完了を受けて**その場で再描画**します(cloud→BLE への昇格もリアルタイム)。
|
|
@@ -311,6 +326,6 @@ $ sesame # 全デバイス (alias: sesame session / watch)
|
|
|
311
326
|
|
|
312
327
|
**前提**:
|
|
313
328
|
- 鍵は既存の `config.locks`(`sesame locks sync-from-devices` で取り込んだ deviceUUID/secretKey)を再利用。新規登録は不要。
|
|
314
|
-
- BLE アダプタ `@abandonware/noble` が必要。`optionalDependency` なので `npm install`
|
|
329
|
+
- BLE アダプタ `@abandonware/noble` が必要。`optionalDependency` なので `npm install` で**自動導入**を試み、未対応環境でもインストール自体は壊れません (BLE だけ無効)。手動で入れるなら `npm i @abandonware/noble`。
|
|
315
330
|
- **macOS は Terminal/iTerm に Bluetooth 権限が必要**(システム設定 → プライバシーとセキュリティ → Bluetooth)。
|
|
316
331
|
- ロックの BLE 圏内(近接)にいること。
|
package/docs/ja/index.md
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!-- [English](../en/index.md) | 日本語 -->
|
|
2
|
+
|
|
3
|
+
# sesame-kit ドキュメント
|
|
4
|
+
|
|
5
|
+
> [English](../en/index.md) · [← README へ戻る](../../README.ja.md)
|
|
6
|
+
|
|
7
|
+
使い方に合わせてガイドを選んでください。
|
|
8
|
+
|
|
9
|
+
## はじめに
|
|
10
|
+
- [Quickstart](./quickstart.md) — インストール、サインイン、数分でロックを解錠。
|
|
11
|
+
|
|
12
|
+
## ガイド(用途別)
|
|
13
|
+
- [CLI](./commands.md) — `sesame` CLI の全コマンドリファレンス。
|
|
14
|
+
- [BLE 直接制御](./ble.md) — クラウドを介さず Bluetooth でロックを操作(オートロック、権限、デバイスごとの能力)。
|
|
15
|
+
- [Node ライブラリ](./library.md) — Node.js アプリに sesame-kit を組み込む(`SesameHub3.use()`、直接 API、イベント)。
|
|
16
|
+
- [任意の言語から連携](./integration.md) — `sesame serve` 経由で全機能を JSON-RPC から呼ぶ(Python / JS / HTTP / WebSocket / gRPC)。
|
|
17
|
+
|
|
18
|
+
## リファレンス & 設計
|
|
19
|
+
- [アーキテクチャ](./architecture.md) — 系譜、設計判断、ファイル構成。
|
|
20
|
+
- [マイグレーション](./migration.md) — 旧バージョンからのアップグレード。
|