Kopplung mit dem Konto¶
Die Kopplung ist ein einmaliger Vorgang: das Gerät bekommt ein einmaliges Kopplungstoken, tauscht es beim Portal gegen ein dauerhaftes Geheimnis und speichert das Geheimnis im NVS. Danach verbindet es sich nach jedem Neustart selbst mit dem Portal. Solange es kein Geheimnis hat, ist das Gerät im Einrichtungsmodus und wartet auf ein Token.
In der iDryer-App¶
- Das Gerät ist im Netz (siehe WLAN), das Telefon im selben Netz.
- Neues Gerät verbinden → Schritt Kopplung (ist das Gerät schon im Netz, oben im Fenster auf den Chip des Schritts tippen) → Koppeln.
- Die App findet das Gerät im lokalen Netz, holt beim Portal ein Token, übergibt es dem Gerät und wartet, bis das Portal bestätigt, dass das Gerät online ist.
- Nach Gerät gekoppelt steht das Gerät in der Liste im Portal und in der App.
Das Log vor der Kopplung:
[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)
Danach:
[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! …
Der Web-Installer für Firmware übergibt das Token über USB mit dem Befehl PAIR_TOKEN (siehe unten).
Entkopplung¶
Eine Entkopplung in der App oder im Portal erreicht das Gerät als Befehl revoke. Jede Firmware braucht den Handler:
// Entkopplung in der App oder im Portal: Geheimnis löschen und auf neue Kopplung warten.
s_link.onCommand("revoke", [](JsonObjectConst) { s_link.handleRevoke(); });
handleRevoke() löscht das Geheimnis, das Netz bleibt: das Gerät wartet wieder auf eine Kopplung. Ohne Handler bleibt das Geheimnis im Gerät, und neu koppeln lässt es sich erst nach WIPE_IDENTITY.
USB-Befehle¶
Nach dem Beitritt zum Netz nimmt der Kern Zeilen über die serielle Schnittstelle an (115200, jede Zeile endet mit einem Zeilenumbruch):
| Befehl | Antwort | Wirkung |
|---|---|---|
STATUS |
STATUS:state=… wifi=… ip=… cloud=… serial=… mcu=… fw=… part=… |
Zustand: state ist bound (gekoppelt) oder setup (wartet auf Token), cloud ist online/offline |
WIPE_IDENTITY |
WIPE_IDENTITY:OK |
löscht das Geheimnis wie revoke; das Netz bleibt |
PAIR_TOKEN:<Token> |
PAIR_TOKEN:OK, PAIR_TOKEN:ERROR, PAIR_TOKEN:ERROR:ALREADY_BOUND |
übergibt ein Kopplungstoken; ein gekoppeltes Gerät nimmt kein Token an |
STATUS
STATUS:state=setup wifi=1 ip=192.168.1.42 cloud=offline serial=DEVICE_… mcu=- fw=0.1.0 part=…
Bevor das Gerät im Netz ist, belegt Improv den Port, und die Befehle antworten nicht. In einem Build mit IDRYER_DEV_REPL gehört der Port dem Produkt, und diese Befehle gibt es nicht: siehe Ausführliche Einrichtung.
Wenn es nicht klappt¶
- die App findet das Gerät nicht: Telefon und Gerät im selben Netz; Gastnetze blockieren oft die Gerätesuche;
PAIR_TOKEN:ERROR:ALREADY_BOUNDoder das Gerät gehört zu einem anderen Konto: im Portal entkoppeln oderWIPE_IDENTITYsenden und neu koppeln.