La mappa dei codici (fonte ufficiale)
Dalla documentazione OpenWonderLabs/SwitchBotAPI — verificata il 22/08/2026:battery: 0 quasi mai significa batteria scarica
Questa è la trappola che è costata più tempo di tutte.
1
Lo schema ufficiale della Smart Lock Pro non contiene onlineStatus
I campi documentati sono
deviceId, deviceType, hubDeviceId, battery, version, lockState, doorState, calibrate. Il campo onlineStatus è documentato solo per il Robot Vacuum S1 (API v1.0). Sulla serratura è un campo extra, non contrattuale: è la vista del cloud sul collegamento Bluetooth con la serratura.2
Quando il device è davvero irraggiungibile, l'API non restituisce un body
Restituisce un codice d’errore (
161 o 171) con body: {}. Non ti dà battery, lockState o doorState: non li conosce.3
Quindi un 100 con onlineStatus offline è uno snapshot vecchio
Se leggi
statusCode: 100 e dentro il body trovi onlineStatus: "offline", il cloud ti sta servendo l’ultimo stato noto. In quello snapshot battery: 0 vuol dire “non ho un valore aggiornato”, non “batteria scarica”.La batteria è una diagnosi legittima in un solo caso: il device risponde
100 con uno stato fresco (onlineStatus: "online", o device che non espone quel campo) e il valore di batteria è basso. In tutti gli altri casi la batteria non c’entra e va esclusa dalle ipotesi.Albero diagnostico
Tre domande in ordine. Ognuna si risponde con una chiamata in sola lettura: nessun comando viene inviato alla serratura.1
Il device esiste per queste credenziali? Il Cloud Service è attivo?
GET /v1.1/devices — cerca il deviceId nella lista.- Non c’è →
152/ device rimosso o account sbagliato → problema nostro, non del cliente. - C’è ma
enableCloudService: false→ il device non è pilotabile via API. Il cliente deve riattivare “Servizi cloud” nell’app. - C’è e
enableCloudService: true→ prosegui. Annota il suohubDeviceId.
2
La serratura risponde?
GET /v1.1/devices/<lock>/status100con stato fresco → la serratura è viva. Se la batteria è bassa, ora è una diagnosi legittima.100cononlineStatus: "offline", oppure161→ la serratura non è raggiungibile. Prosegui: non sai ancora di chi è la colpa.401/429/ nessuna risposta → non è un guasto della serratura: è un problema nostro o un transitorio. Fermati qui e non dire nulla al cliente sullo stato della porta.
3
L'hub risponde?
GET /v1.1/devices/<hub>/status171(o161sull’hub) → HUB OFFLINE: il guasto è a monte della serratura, in casa del cliente.100→ l’hub c’è, la serratura no: il guasto è nel collegamento hub↔serratura.
Gli Hub (Hub Mini compreso) non hanno una sezione “Device Status” nella documentazione: rispondono
100 con un body vuoto. L’hub quindi non si giudica dal contenuto della risposta, ma dall’assenza di 171/161.Cosa chiedere al cliente, caso per caso
Chiedere le cose giuste evita il giro di messaggi da tre giorni. Una domanda per ipotesi, non un elenco generico.Non dire mai all’ospite
Tre frasi da non usare mai, perché affermano un fatto che non è stato verificato:- “La batteria è scarica” — a meno che il device non sia raggiungibile e riporti davvero un valore basso.
- “Il dispositivo è offline” quando la chiamata è andata in timeout o in rate limit: in quel caso non lo sai.
- “La serratura è rotta” quando il codice è
401: è un problema di configurazione nostro, la serratura potrebbe essere perfettamente funzionante.
SwitchBot API (docs)
Codici, schemi per device, comandi
Metodo troubleshooting
Le 5 mosse