Identity, configuration and inventory
Every format below excludes the outer braces in the explanatory tables but includes the CRC field in the shown wire schema.
CN: device identity and online presence
Uplink
{CN,deviceId,address,firmware,rssi,info1,<info2>,<info3>,<info4>,crc}
| Network | address | info1 | info2 | info3 | info4 |
|---|---|---|---|---|---|
| 2G/4G | Modem IMEI | SIM ICCID | LAC | CI | VPN label, optional |
| Wi-Fi | Module MAC | Local IP | SSID | Wi-Fi password | Reserved |
Downlink acknowledgement
{CN,confirmedDeviceId,settings,crc}
settings is a semicolon-delimited list: KEY1:VALUE1;KEY2:VALUE2;. Supported keys are DOMAIN, PORT, HB (heartbeat seconds), BP (inventory seconds), UN, PW, ID, DM and TP (power-bank brand isolation). Omit keys that are not being changed. If the server does not acknowledge, the cabinet repeats CN every 60 seconds.
CS: network and station configuration
Downlink request: {CS,messageId,operation,param1,param2,crc}
Uplink result: {CS,sameMessageId,operation,result,reserved,crc}
Uplink query result: {CS,sameMessageId,currentProductKey,inventoryInterval,mqttHeartbeat,crc}
result is 1 for accepted and 0 for rejected. The device drops a command whose message ID is less than or equal to the last accepted ID; the comparison resets after reconnect.
| Operation | param1 | param2 | Effect |
|---|---|---|---|
RESETME | 0 | 0 | Restart cabinet |
RESETNET | 0 | 0 | Restart network module |
RECONNECT | 0 | 0 | Reconnect to server |
HEARTINFO | inventory seconds | MQTT heartbeat seconds | Set report intervals |
LEDCFG | LED mode value | 0 QR light off, 1 on | Set ambience and QR lights |
PBPOWER | 0 off, 1 on | 0 | Set power-bank supply mode |
PK | topic ProductKey | 0 | Set topic path / IoT ProductKey |
UN | MQTT/IoT username | 0 | Set connection username |
PW | MQTT/IoT password | 0 | Set connection password and CRC secret source |
ID | device ID | 0 | Set device ID |
DM | approved broker/IoT endpoint | 0 | Set server endpoint |
APN | APN value | 0 | Set cellular APN |
WIFI | SSID | password | Set Wi-Fi profile |
SAVECFG | 0 | 0 | Persist pending configuration |
Configuration-changing operations are privileged. Restrict them to authenticated operator roles, audit every request/result and never place production values in client-side logs.
LEDCFG values
| Effect | Value |
|---|---|
| Green | 5507B10064800000 |
| Blue | 5507B10064000080 |
| Red | 5507B10064005000 |
| White | 5507B10064808080 |
| Yellow | 5507B10064408000 |
| Purple | 5507B10064008068 |
| Pink | 5507B10064008017 |
| Seven-color breathing rotation | 5507B11464000000 |
| Marquee | 5507B11040000000 |
| Off | 5507B10064000000 |
These values are persisted through power loss by supported firmware.
GN: network status query
Downlink: {GN,messageId,crc}
4G uplink: {GN,sameMessageId,imei,iccid,rssi,lac,ci,networkStatus,crc}
Wi-Fi uplink: {GN,sameMessageId,mac,wifiModel,rssi,ip,ssid,wifiPassword,crc}
Treat IMEI, ICCID, MAC, IP, SSID and passwords as sensitive operational data. networkStatus is module/profile specific and must not be interpreted as an application success code without the firmware mapping.
DS: station configuration report
Uplink: {DS,messageId,deviceId,networkMode,ambientLight,powerBankSupply,qrLight,reversePowerSlot,crc}
Downlink acknowledgement: {DS,sameMessageId,deviceId,crc}
| Field | Values |
|---|---|
networkMode | 4G, WIFI, ETH |
ambientLight | 0 off, 1 on |
powerBankSupply | 0 off, 1 on |
qrLight | 0 off, 1 on |
reversePowerSlot | 0 external power present; otherwise the slot currently reverse-powering the cabinet |
The device repeats DS every 60 seconds until acknowledged.
AC: all-slot inventory report
Uplink
{AC,messageId,deviceId,address,networkInfo,rssi,firmware,totalSlots,slotRecord1,...,slotRecordN,crc}
Each slot record is:
slotId:returnState:powerBankId:battery:slotState
| Field | Meaning |
|---|---|
slotId | One-based slot number |
returnState | Return acknowledgement state, below |
powerBankId | Power bank ID, or NULL when empty/unreadable |
battery | 0..100 percent |
slotState | S1S2S3 on older firmware or S1S2S3S4 on newer firmware |
Slot-state digits
| Digit | Values |
|---|---|
S1 charging | 0 off, 1 on, 2 exception |
S2 charge class | 0 normal, 1 22 W, 2 unknown, 3 45 W, 4 65 W |
S3 lock | 0 not fully closed, 1 fully closed |
S4 availability | 0 enabled, 1 disabled, 2 lowest rental priority, 4 brand-prefix mismatch |
S4 is available on profiles whose firmware suffix is 240526.1 or later. Accept both three- and four-digit forms after profile negotiation.
Return state
| Value | Meaning |
|---|---|
0 | No accepted RS acknowledgement; resets to 0 after power cycle |
1 | Return accepted |
2 | Inserted but lock not seated; device retries RS after about three minutes |
3 | Last release failed/opening exception; slot receives lowest rental priority |
4 | Power-bank brand prefix mismatch |
The default AC interval is 180 seconds. A rental or return operation updates inventory only after the command-specific outcome described in Rental and return.
CQ: single-slot report and query
Periodic uplink: {CQ,messageId,slotId,powerBankId,battery,slotState,returnState,crc}
Downlink query: {CQ,messageId,slotId,crc}
slotId=0 requests all slots and the device replies with AC; a positive slot ID requests one slot and the device replies with CQ. Field semantics match AC.
AE: extended slot health report
Uplink
{AE,messageId,deviceId,totalSlots,slotExtended1,...,slotExtendedN,crc}
Each record is:
slotId:status:powerBankVersion:cycleCount:health:actualCapacity:realtimeElectrical
status | Meaning |
|---|---|
0 | Empty |
1 | Normal discharge/standby |
2 | Normal charging |
3 | Full |
201 | Over-voltage protection |
202 | Temperature protection |
203 | Cable abnormal |
health and actualCapacity are device-reported values. The final real-time electrical field has changed between firmware families (current/voltage representation); treat it as profile-defined until the exact cabinet firmware is selected. Default interval: 600 seconds.
CM: rental and return rule configuration
Downlink set: {CM,messageId,minBattery,borrowOp,returnOp,lockErrorOp,voiceOp,debugOp,crc}
Downlink query: {CM,messageId,0,0,0,0,0,0,crc}
Uplink result: {CM,sameMessageId,minBattery,borrowOp,returnOp,lockErrorOp,voiceOp,debugOp,disabledMask,inventoryInterval,heartbeatInterval,brandPrefix,crc}
| Field | Values |
|---|---|
minBattery | 0..100; 0 in a set request means unchanged; default 80 |
borrowOp | 101 authorization required; 100 no authorization; default 101 |
returnOp | 100 ignore lock limit / polling charge; 101 require lock limit / full-charge mode; 199 switch to polling mode immediately (reported as 99) |
lockErrorOp | 101 disable a lock-error slot; 100 ignore condition |
voiceOp | 100..115 Chinese volume 0..15; 200..215 English volume 0..15 |
disabledMask | Hex bitmask: bit 0 is slot 1; 1 means disabled |
inventoryInterval | Seconds |
heartbeatInterval | Seconds |
brandPrefix | 0 disables isolation; otherwise required power-bank ID prefix |
Unsupported operation values must be rejected, not coerced.
CC: available count
Downlink: {CC,messageId,crc}
Uplink: {CC,sameMessageId,availableCount,crc}
availableCount is the cabinet's current eligible count under its battery, slot, return-state, brand and charge-class rules. It is telemetry, not proof that a later release succeeded.