AT+MQTTPUB=0,"$sys/88GYN57yfz/device-001/thing/property/post","{\"id\":\"123\"\,\"params\":{\"Control119\":{\"value\":1\}}}",0,0 回复OK +MQTTSUBRECV:0,"$sys/88GYN57yfz/device-001/thing/property/post/reply",70,{"id":"123","code":2271,"msg":"bool type error:identifier:Control119"} 但是OneNet上并没有显示,还是undefined
时间: 2025-07-01 12:58:07 AIGC 浏览: 35
### 数据格式不正确导致 OneNet 接收失败
当使用 ESP8266 的 AT 指令通过 MQTT 协议向 OneNet 云平台发送布尔类型数据时,如果出现 `undefined` 或 `bool type error: identifier: Control119` 错误,通常是因为发送的数据格式不符合 OneNet 对布尔类型的要求。OneNet 平台在解析 MQTT 数据流时要求明确的布尔值表示方式,例如 JSON 格式中的 `true` 或 `false`,而不是整数或字符串形式的 `1`、`0` 或 `"true"`。
使用 `AT+MQTTPUB` 指令发送原始二进制数据时,如果没有构造符合 OneNet 数据规范的 JSON 负载,则可能导致平台无法识别该数据类型,从而报错[^1]。
#### 构造正确的 JSON 数据格式
为确保布尔类型数据能被 OneNet 正确解析,应构造标准的 JSON 数据结构,并使用合法的布尔字面量(`true` 或 `false`)。以下是一个通过 MQTT 发送布尔数据的示例:
```json
{
"datastreams": [
{
"id": "Control119",
"datapoints": [
{
"value": true
}
]
}
]
}
```
在 ESP8266 使用 AT 指令发送该 JSON 数据时,需将整个 JSON 字符串作为 MQTT 消息体发送到 OneNet 的指定主题(topic),例如 `/$sys/{product_id}/{device_name}/dp/post`,其中 `{product_id}` 和 `{device_name}` 需替换为实际的产品 ID 和设备名称。
#### 使用 AT 指令发送数据的完整流程
1. **连接 Wi-Fi 网络**:
```bash
AT+CWJAP="your_ssid","your_password"
```
2. **建立 TCP 连接(MQTT Broker)**:
```bash
AT+MQTTCONN=0,"mqtt.heclouds.com",1883,12345678
```
3. **发布数据到指定主题**:
```bash
AT+MQTTPUB=0,"/$sys/{product_id}/{device_name}/dp/post","{\"datastreams\":[{\"id\":\"Control119\",\"datapoints\":[{\"value\":true}]}]}",1,0
```
其中:
- `0` 表示连接索引;
- `1` 表示 QoS 等级;
- `0` 表示是否保留消息(retain flag)。
如果布尔值需要动态控制,可以在程序中拼接 JSON 字符串,根据变量状态插入 `true` 或 `false`,并确保没有语法错误(如遗漏逗号、引号未闭合等)。
#### 常见错误排查建议
- **检查 JSON 语法**:确保 JSON 格式无误,可使用在线 JSON 校验工具验证。
- **确认设备标识信息**:产品 ID 和设备名称必须与 OneNet 控制台中的一致。
- **验证 API 密钥权限**:用于 MQTT 连接的 API 密钥需具有对应设备的写入权限。
- **调试日志输出**:启用 ESP8266 的串口调试输出,查看 AT 指令返回的状态码和错误信息,有助于定位问题。
- **测试平台接收端**:可通过 OneNet 提供的 HTTP 接口手动发送相同格式的 JSON 数据,确认平台能否正常接收和解析。
###
阅读全文
相关推荐




















