アカウントへの紐付け¶
紐付けは一度だけの手順です。デバイスは使い捨ての紐付けトークンを受け取り、ポータルで恒久的なシークレットと交換し、シークレットを NVS に保存します。以後は再起動のたびに自分でポータルに接続します。シークレットがない間、デバイスは設定モードでトークンを待ちます。
iDryer アプリで¶
- デバイスはネットワーク上にあり(Wi-Fi を参照)、電話も同じネットワークにある。
- 新しいデバイスを接続 → ペアリング ステップ(デバイスがすでにネットワーク上なら、ウィンドウ上部のステップのチップをタップ)→ ペアリング。
- アプリはローカルネットワークでデバイスを見つけ、ポータルからトークンを取得してデバイスに渡し、デバイスがオンラインになったことをポータルが確認するまで待つ。
- ペアリングが完了しました の後、デバイスはポータルとアプリの一覧にある。
紐付け前のログ:
[BOOT] WiFi ok, logs enabled
[INFO ] CLOUD: WiFi connected, IP: 192.168.1.42, RSSI: -55 dBm, …
…
[INFO ] CLOUD: binding-v3: no secret — awaiting pairing token (SETUP)
紐付け後:
[INFO ] CLOUD: binding-v3: pairing token received (… chars)
[INFO ] CLOUD: binding-v3: activating with pairing token (serial=DEVICE_… mcu=-)
[INFO ] CLOUD: binding-v3: activated, deviceId=… -> Ready
…
[INFO ] MQTT: Connected! …
ファームウェアの Web インストーラーは、USB 経由で PAIR_TOKEN コマンドによりトークンを渡します(下記参照)。
紐付け解除¶
アプリまたはポータルでの紐付け解除は、revoke コマンドとしてデバイスに届きます。どのファームウェアにもハンドラーが必要です:
// アプリまたはポータルでの紐付け解除:シークレットを消去し、新しい紐付けを待つ。
s_link.onCommand("revoke", [](JsonObjectConst) { s_link.handleRevoke(); });
handleRevoke() はシークレットを消去し、ネットワークは残します。デバイスは再び紐付けを待ちます。ハンドラーがないとシークレットはデバイスに残り、WIPE_IDENTITY の後でないと再び紐付けできません。
USB コマンド¶
ネットワーク接続後、コアはシリアルポートで行を受け付けます(115200、各行は改行で終わる):
| コマンド | 応答 | 動作 |
|---|---|---|
STATUS |
STATUS:state=… wifi=… ip=… cloud=… serial=… mcu=… fw=… part=… |
状態:state は bound(紐付け済み)または setup(トークン待ち)、cloud は online/offline |
WIPE_IDENTITY |
WIPE_IDENTITY:OK |
revoke と同じくシークレットを消去。ネットワークは残る |
PAIR_TOKEN:<トークン> |
PAIR_TOKEN:OK、PAIR_TOKEN:ERROR、PAIR_TOKEN:ERROR:ALREADY_BOUND |
紐付けトークンを渡す。紐付け済みのデバイスは受け付けない |
STATUS
STATUS:state=setup wifi=1 ip=192.168.1.42 cloud=offline serial=DEVICE_… mcu=- fw=0.1.0 part=…
ネットワーク接続前はポートを Improv が使うため、コマンドは応答しません。IDRYER_DEV_REPL 付きのビルドではポートは製品のもので、これらのコマンドはありません。詳細設定 を参照。
うまくいかないとき¶
- アプリがデバイスを見つけない:電話とデバイスを同じネットワークに。ゲストネットワークはデバイス検出をよくブロックします;
PAIR_TOKEN:ERROR:ALREADY_BOUND、またはデバイスが別のアカウントのもの:ポータルで紐付けを解除するかWIPE_IDENTITYを送り、改めて紐付けます。