<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.vlen.net/index.php?action=history&amp;feed=atom&amp;title=Vlen_socket_v600</id>
	<title>Vlen socket v600 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.vlen.net/index.php?action=history&amp;feed=atom&amp;title=Vlen_socket_v600"/>
	<link rel="alternate" type="text/html" href="https://wiki.vlen.net/index.php?title=Vlen_socket_v600&amp;action=history"/>
	<updated>2026-04-05T18:36:51Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://wiki.vlen.net/index.php?title=Vlen_socket_v600&amp;diff=3&amp;oldid=prev</id>
		<title>Nichen：​创建页面，内容为“= VLen六路水族排插 - 机智云WiFi类设备接入协议文档（MCU方案） = ; 产品名称 : VLen六路水族排插 ; 产品类型 : 电工/排插/自定义多路排插 ; 生成日期 : 2023-06-20  本页为 MCU 与 WiFi 通讯模组的串口通讯协议（机智云标准接入协议 v4.3.1）的 **单页 MediaWiki** 版。完整覆盖 1~4 章，字段逐条展开，并在各命令下以表格列出“字段名 / 字节长度 / 说明”。  == 1. 设…”</title>
		<link rel="alternate" type="text/html" href="https://wiki.vlen.net/index.php?title=Vlen_socket_v600&amp;diff=3&amp;oldid=prev"/>
		<updated>2025-10-02T05:36:53Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“= VLen六路水族排插 - 机智云WiFi类设备接入协议文档（MCU方案） = ; 产品名称 : VLen六路水族排插 ; 产品类型 : 电工/排插/自定义多路排插 ; 生成日期 : 2023-06-20  本页为 MCU 与 WiFi 通讯模组的串口通讯协议（机智云标准接入协议 v4.3.1）的 **单页 MediaWiki** 版。完整覆盖 1~4 章，字段逐条展开，并在各命令下以表格列出“字段名 / 字节长度 / 说明”。  == 1. 设…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= VLen六路水族排插 - 机智云WiFi类设备接入协议文档（MCU方案） =&lt;br /&gt;
; 产品名称 : VLen六路水族排插&lt;br /&gt;
; 产品类型 : 电工/排插/自定义多路排插&lt;br /&gt;
; 生成日期 : 2023-06-20&lt;br /&gt;
&lt;br /&gt;
本页为 MCU 与 WiFi 通讯模组的串口通讯协议（机智云标准接入协议 v4.3.1）的 **单页 MediaWiki** 版。完整覆盖 1~4 章，字段逐条展开，并在各命令下以表格列出“字段名 / 字节长度 / 说明”。&lt;br /&gt;
&lt;br /&gt;
== 1. 设备通讯信息 ==&lt;br /&gt;
* 通讯方式：UART&lt;br /&gt;
* 波特率：9600&lt;br /&gt;
* 数据位：8&lt;br /&gt;
* 奇偶校验：无&lt;br /&gt;
* 停止位：1&lt;br /&gt;
* 数据流控：无&lt;br /&gt;
* 供电：3.3V，电流（Max）150 mA&lt;br /&gt;
&lt;br /&gt;
== 2. 约定 ==&lt;br /&gt;
=== 2.1 传输字节序 ===&lt;br /&gt;
默认采用 **大端** 编码（高字节在前，低字节在后）。&lt;br /&gt;
&lt;br /&gt;
=== 2.2 通信交互形式 ===&lt;br /&gt;
* 采用 **一问一答**；每条命令需要接收方给出 ACK 确认；&lt;br /&gt;
* 超时时间 **200 ms**，超时后重发；最多 **重发 3 次**；其后丢弃该包。&lt;br /&gt;
&lt;br /&gt;
=== 2.3 协议格式 ===&lt;br /&gt;
==== 指令总体结构 ====&lt;br /&gt;
* 包头（2B）= `0xFFFF`。注意：**非包头部分**如出现 `0xFF`，发送方需在其后**插入** `0x55`；接收方检测到非包头的 `0xFF 55` 需要**移除**该 `0x55`。该填充字节**不计入**包长度及校验和。  &lt;br /&gt;
* 包长度（2B）：**从命令开始**至**校验和**的字节数（含命令与校验和）。&lt;br /&gt;
* 命令（1B）。&lt;br /&gt;
* 包序号 SN（1B）：由发起方给出，自 0 递增，超过 255 后回绕；ACK 回复需回填收到的 SN。&lt;br /&gt;
* Flags（2B）：高字节为**通用标记**（跨命令），低字节为**命令内私有标记**（仅本命令意义）。&lt;br /&gt;
* 有效负载：由产品数据点/业务定义。&lt;br /&gt;
* 校验和（1B）：对 **[包长度…有效负载]** 做逐字节求和，再取 **mod 256**。&lt;br /&gt;
&lt;br /&gt;
== 3. 基本通讯协议（必须） ==&lt;br /&gt;
&lt;br /&gt;
=== 3.1 获取设备信息 ===&lt;br /&gt;
WiFi 模组上电后向 MCU 查询设备信息，成功后方可正常工作。&lt;br /&gt;
&lt;br /&gt;
==== WiFi → MCU（请求） ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 序号 !! 字段名称 !! 长度（B） !! 内容说明&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 固定包头 || 2 || 0xFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 包长度 || 2 || len(命令…校验和)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 命令 || 1 || 0x01&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 包序号 || 1 || 0x##&lt;br /&gt;
|-&lt;br /&gt;
| 5 || flags || 2 || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 校验和 || 1 || 0x##&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== MCU → WiFi（应答） ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! # !! 字段名称 !! 长度（B） !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 固定包头 || 2 || 0xFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 包长度 || 2 || len(命令…校验和)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 命令 || 1 || 0x02&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 包序号 || 1 || 回填请求 SN&lt;br /&gt;
|-&lt;br /&gt;
| 5 || flags || 2 || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 通用串口协议版本号 || 8 || 字符串，如 “00000004”&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 业务协议版本号 || 8 || 字符串，如 “00000002”&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 硬件版本号 || 8 || 字符串&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 软件版本号 || 8 || 字符串&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 产品标识码 ProductKey || 32 || 字符串&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 可绑定状态失效时间 || 2 || 秒（大端）。0=随时可绑定；&amp;gt;0 为进入可绑定后的失效秒数&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 设备属性 attributes || 8 || bit0…bit63 定义（见下）&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 产品秘钥 ProductSecret || 32 || Hex 字符串&lt;br /&gt;
|-&lt;br /&gt;
| 14 || DataLen || 2 || 环境参数长度；0=无 Data&lt;br /&gt;
|-&lt;br /&gt;
| 15 || Data || DataLen || 环境参数字符串（键值对，见下）&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 校验和 || 1 || 0x##&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; 设备属性 attributes（bit0→bit63，自右向左）&lt;br /&gt;
* bit0=1：设备是**中控**；  &lt;br /&gt;
* bit1=1：**自动化生成代码**；&lt;br /&gt;
* bit2~bit5（当 bit0=1 生效）：中控重置范围：&lt;br /&gt;
** 0000：中控重置&lt;br /&gt;
** 0001：中控重置 + **所有子设备**重置&lt;br /&gt;
** 0010：中控重置 + **所有子设备与用户绑定关系**&lt;br /&gt;
** 0011：中控重置 + **部分子设备**重置（与该中控有关联的子设备）&lt;br /&gt;
** 0100：**所有子设备**重置&lt;br /&gt;
** 0101：**所有子设备与用户绑定关系**&lt;br /&gt;
** 0110：**部分子设备**重置&lt;br /&gt;
** 0111：**部分子设备与用户绑定关系**&lt;br /&gt;
* bit6=1：UDP **加密**；&lt;br /&gt;
* bit7=1：**变长数据点**；&lt;br /&gt;
* bit8=1：设备是**网关**；&lt;br /&gt;
* bit9~bit12（当 bit8=1 生效）：网关重置范围：&lt;br /&gt;
** 0000：网关重置&lt;br /&gt;
** 0001：网关重置 + 所有子设备重置&lt;br /&gt;
** 0010：所有子设备重置&lt;br /&gt;
* bit13=1：**低功耗**产品；&lt;br /&gt;
* bit14~bit63：**预留**（保持 0 以免影响云端连接）。&lt;br /&gt;
&lt;br /&gt;
; 环境参数 Data（key=value，用‘&amp;amp;’连接；示例：&lt;br /&gt;
  &amp;quot;wechatId=...&amp;amp;server=...&amp;amp;port=...&amp;amp;apName=...&amp;amp;apPwd=...&amp;amp;m2mKeepAL=...&amp;amp;m2mHT=...&amp;amp;tz=...&amp;amp;LocalHT=...&amp;amp;LocalAckT=...&amp;amp;nwcName=...&amp;amp;cfgMode=...&amp;amp;tScanNum=...&amp;amp;tCon=...&amp;amp;runMode=...&amp;quot;）&lt;br /&gt;
# wechatId：设备微信设备公众号 ID&lt;br /&gt;
# server：默认服务器域名&lt;br /&gt;
# port：默认服务器端口&lt;br /&gt;
# apName：SoftAP 热点名，**后缀追加 4 位 MAC**&lt;br /&gt;
# apName0：SoftAP 热点名，**不追加 MAC**&lt;br /&gt;
# apPwd：SoftAP 热点密码；为空=Open&lt;br /&gt;
# m2mKeepAL：M2M keepalive 秒&lt;br /&gt;
# m2mHT：M2M 心跳秒&lt;br /&gt;
# tz：默认时区&lt;br /&gt;
# LocalHT：串口心跳秒&lt;br /&gt;
# LocalAckT：串口等待 ACK 基础时间（毫秒）&lt;br /&gt;
# nwcName：网卡名，例 &amp;quot;eth0&amp;quot;&lt;br /&gt;
# cfgMode：初始化运行模式（1=SoftAP，2=AirLink）&lt;br /&gt;
# tScanNum：初始化扫描热点次数（默认 2）&lt;br /&gt;
# tCon：产测是否连路由（0=否，1=是（默认））&lt;br /&gt;
# runMode：运行模式（1=单通道（默认）；2=双通道，如 Wi‑Fi+BLE/4G+BLE）&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3.2 WiFi 模组控制设备 ===&lt;br /&gt;
WiFi → MCU，命令 `0x03`，`action=0x11`；MCU 回复 `0x04`（ACK）。&lt;br /&gt;
&lt;br /&gt;
==== 帧格式 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! # !! 字段 !! 长度（B） !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 固定包头 || 2 || 0xFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 包长度 || 2 || len(命令…校验和)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 命令 || 1 || 0x03&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 包序号 || 1 || 0x##&lt;br /&gt;
|-&lt;br /&gt;
| 5 || flags || 2 || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 6 || action || 1 || 0x11&lt;br /&gt;
|-&lt;br /&gt;
| 7 || attr_flags || 6 || **是否设置标志位位图**（见下）&lt;br /&gt;
|-&lt;br /&gt;
| 8 || attr_vals || Max 249 || **按位顺序紧凑排列**的数据值（见下）&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 校验和 || 1 || 0x##&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; 规则&lt;br /&gt;
* `attr_flags` 中**某位=1**，表示 `attr_vals` 中**对应字段**的**数值存在且有效**；为 0 表示该字段**忽略**。&lt;br /&gt;
* `attr_vals` 的字段顺序与 `attr_flags` 的位定义一一对应，按**从低位到高位**、从**bool → 标量 → binary** 的**固定顺序**连续排列。&lt;br /&gt;
&lt;br /&gt;
==== attr_flags 位定义（共 48 位，bit0→bit47） ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 位 !! 字段 !! 类型 / 说明&lt;br /&gt;
|-&lt;br /&gt;
| bit0 || switch_1 || bool（开关 1）&lt;br /&gt;
|-&lt;br /&gt;
| bit1 || switch_2 || bool（开关 2）&lt;br /&gt;
|-&lt;br /&gt;
| bit2 || switch_3 || bool（开关 3）&lt;br /&gt;
|-&lt;br /&gt;
| bit3 || switch_4 || bool（开关 4）&lt;br /&gt;
|-&lt;br /&gt;
| bit4 || switch_5 || bool（开关 5）&lt;br /&gt;
|-&lt;br /&gt;
| bit5 || switch_6 || bool（开关 6）&lt;br /&gt;
|-&lt;br /&gt;
| bit6 || power || bool（总电源）&lt;br /&gt;
|-&lt;br /&gt;
| bit7 || High_temperature_alarm || bool&lt;br /&gt;
|-&lt;br /&gt;
| bit8 || Low_temperature_alarm || bool&lt;br /&gt;
|-&lt;br /&gt;
| bit9 || High_Humidity_alarm || bool&lt;br /&gt;
|-&lt;br /&gt;
| bit10 || Low_Humidity_alarm || bool&lt;br /&gt;
|-&lt;br /&gt;
| bit11 || High_tds_alarm || bool&lt;br /&gt;
|-&lt;br /&gt;
| bit12 || Low_tds_alarm || bool&lt;br /&gt;
|-&lt;br /&gt;
| bit13 || High_ph_alarm || bool&lt;br /&gt;
|-&lt;br /&gt;
| bit14 || Low_ph_alarm || bool&lt;br /&gt;
|-&lt;br /&gt;
| bit15 || humidity || uint8（0..100，y=1*x+0）&lt;br /&gt;
|-&lt;br /&gt;
| bit16 || ph_value || uint8（0..140，**y=0.1*x**）&lt;br /&gt;
|-&lt;br /&gt;
| bit17 || switch_mode_1 || uint8（0..10）&lt;br /&gt;
|-&lt;br /&gt;
| bit18 || switch_mode_2 || uint8（0..10）&lt;br /&gt;
|-&lt;br /&gt;
| bit19 || switch_mode_3 || uint8（0..10）&lt;br /&gt;
|-&lt;br /&gt;
| bit20 || switch_mode_4 || uint8（0..10）&lt;br /&gt;
|-&lt;br /&gt;
| bit21 || switch_mode_5 || uint8（0..10）&lt;br /&gt;
|-&lt;br /&gt;
| bit22 || switch_mode_6 || uint8（0..10）&lt;br /&gt;
|-&lt;br /&gt;
| bit23 || Temperature_alarm_max || uint8（0..100）&lt;br /&gt;
|-&lt;br /&gt;
| bit24 || Temperature_alarm_min || uint8（0..100）&lt;br /&gt;
|-&lt;br /&gt;
| bit25 || Humidity_alarm_max || uint8（0..100）&lt;br /&gt;
|-&lt;br /&gt;
| bit26 || Humidity_alarm_min || uint8（0..100）&lt;br /&gt;
|-&lt;br /&gt;
| bit27 || ph_alarm_max || uint8（0..140，y=0.1*x）&lt;br /&gt;
|-&lt;br /&gt;
| bit28 || ph_alarm_min || uint8（0..140，y=0.1*x）&lt;br /&gt;
|-&lt;br /&gt;
| bit29 || temp_current_1 || uint16（0..1200，**y=1*x-200**）&lt;br /&gt;
|-&lt;br /&gt;
| bit30 || temp_current_2 || uint16（0..1200，**y=1*x-200**）&lt;br /&gt;
|-&lt;br /&gt;
| bit31 || Total_dissolved_solids || uint16（0..5000）&lt;br /&gt;
|-&lt;br /&gt;
| bit32 || current_voltage || uint16（0..5000）&lt;br /&gt;
|-&lt;br /&gt;
| bit33 || Current_power || uint16（0..10000）&lt;br /&gt;
|-&lt;br /&gt;
| bit34 || tds_alarm_max || uint16（0..5000）&lt;br /&gt;
|-&lt;br /&gt;
| bit35 || tds_alarm_min || uint16（0..5000）&lt;br /&gt;
|-&lt;br /&gt;
| bit36 || urt_value || uint32（0..600000）&lt;br /&gt;
|-&lt;br /&gt;
| bit37 || Current_current || uint32（0..100000）&lt;br /&gt;
|-&lt;br /&gt;
| bit38 || cur_timestamp || uint32（Unix 秒）&lt;br /&gt;
|-&lt;br /&gt;
| bit39 || cycle_mode_set || binary（24B，数组 [1,2,3…]）&lt;br /&gt;
|-&lt;br /&gt;
| bit40 || temperature_mode_set || binary（12B）&lt;br /&gt;
|-&lt;br /&gt;
| bit41 || humidity_mode_set || binary（12B）&lt;br /&gt;
|-&lt;br /&gt;
| bit42 || time_mode_set_1 || binary（30B）&lt;br /&gt;
|-&lt;br /&gt;
| bit43 || time_mode_set_2 || binary（30B）&lt;br /&gt;
|-&lt;br /&gt;
| bit44 || time_mode_set_3 || binary（30B）&lt;br /&gt;
|-&lt;br /&gt;
| bit45 || time_mode_set_4 || binary（30B）&lt;br /&gt;
|-&lt;br /&gt;
| bit46 || time_mode_set_5 || binary（30B）&lt;br /&gt;
|-&lt;br /&gt;
| bit47 || time_mode_set_6 || binary（30B）&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; attr_vals 编码顺序与示例（节选）&lt;br /&gt;
* bool 组合位（byte0）：`switch_1…switch_6` + `power` + 各报警位，**bit0→bit7**；&lt;br /&gt;
* 接着是 `switch_mode_1…6`（6×uint8）→ `Temperature_alarm_max/min`（2×uint8）→ `Humidity_alarm_max/min`（2×uint8）→ `ph_alarm_max/min`（2×uint8，y=0.1x）→ `tds_alarm_max/min`（2×uint16）→ `cur_timestamp`（uint32）→ `cycle/temperature/humidity_mode_set`（binary）→ `time_mode_set_1…6`（各 30B）。&lt;br /&gt;
&lt;br /&gt;
==== MCU → WiFi（ACK） ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! # !! 字段 !! 长度（B） !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 固定包头 || 2 || 0xFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 包长度 || 2 || len(命令…校验和)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 命令 || 1 || 0x04&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 包序号 || 1 || 回填请求 SN&lt;br /&gt;
|-&lt;br /&gt;
| 5 || flags || 2 || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 校验和 || 1 || 0x##&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; 实施建议&lt;br /&gt;
* 无论状态是否改变，**执行控制后建议立即上报一次**最新设备状态（参见 3.4 上报）。&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3.3 WiFi 模组读取设备的当前状态 ===&lt;br /&gt;
WiFi → MCU：命令 `0x03`，`action=0x12`；MCU → WiFi：命令 `0x04`，`action=0x13`。&lt;br /&gt;
&lt;br /&gt;
==== 请求 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! # !! 字段 !! 长度（B） !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 固定包头 || 2 || 0xFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 包长度 || 2 || len(命令…校验和)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 命令 || 1 || 0x03&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 包序号 || 1 || 0x##&lt;br /&gt;
|-&lt;br /&gt;
| 5 || flags || 2 || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 6 || action || 1 || 0x12&lt;br /&gt;
|-&lt;br /&gt;
| 7 || attr_flags || 6 || 与控制命令一致（筛选需要返回的状态）&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 校验和 || 1 || 0x##&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== 应答（含 dev_status） ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! # !! 字段 !! 长度（B） !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 固定包头 || 2 || 0xFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 包长度 || 2 || len(命令…校验和)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 命令 || 1 || 0x04&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 包序号 || 1 || 0x##&lt;br /&gt;
|-&lt;br /&gt;
| 5 || flags || 2 || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 6 || action || 1 || 0x13&lt;br /&gt;
|-&lt;br /&gt;
| 7 || attr_flags || 6 || 与控制命令一致&lt;br /&gt;
|-&lt;br /&gt;
| 8 || dev_status || Max 270 || **设备状态**（字段顺序/类型与 3.2 对应）&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 校验和 || 1 || 0x##&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; dev_status 字段说明&lt;br /&gt;
* 位/字段定义与 3.2 `attr_flags` 一致，**编码顺序**与 3.2 的 `attr_vals` 相同；&lt;br /&gt;
* 定标公式：同 3.2 中各字段（例如 `ph_value`、`ph_alarm_*` 为 0.1x；温度 current_* 为 1*x-200）。&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3.4 设备 MCU 主动上报当前状态 ===&lt;br /&gt;
MCU → WiFi：命令 `0x05`，`action=0x14`，负载为 `dev_status`。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! # !! 字段 !! 长度（B） !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 固定包头 || 2 || 0xFFFF&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 包长度 || 2 || len(命令…校验和)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 命令 || 1 || 0x05&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 包序号 || 1 || 0x##&lt;br /&gt;
|-&lt;br /&gt;
| 5 || flags || 2 || 0x0000&lt;br /&gt;
|-&lt;br /&gt;
| 6 || action || 1 || 0x14&lt;br /&gt;
|-&lt;br /&gt;
| 7 || attr_flags || 6 || 按需设置（哪些状态有效即置位）&lt;br /&gt;
|-&lt;br /&gt;
| 8 || dev_status || Max 270 || 状态体（字段/顺序同 3.2/3.3）&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 校验和 || 1 || 0x##&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; 上报策略（建议）&lt;br /&gt;
* 接收到“控制设备”命令后，**立即上报**被控制后的数据点组合；&lt;br /&gt;
* 因用户手动或环境变化导致设备状态改变时，仅上报**发生变化**的数据点组合；&lt;br /&gt;
* 可设置**定期上报**（例如每 10 分钟一次）。&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== 3.5 心跳 ===&lt;br /&gt;
* WiFi → MCU：`0x07`；MCU → WiFi：`0x08`。&lt;br /&gt;
&lt;br /&gt;
=== 3.6 通知 WiFi 模组进入配置模式 ===&lt;br /&gt;
* 命令：`0x09`（请求）/ `0x0A`（应答）；支持 SoftAP / AirLink / BLE 等。&lt;br /&gt;
&lt;br /&gt;
=== 3.7 重置 WiFi 模组 ===&lt;br /&gt;
* 命令：`0x0B`（请求）/ `0x0C`（应答）；清除 SSID/密码/DID/Passcode，恢复出厂。&lt;br /&gt;
&lt;br /&gt;
=== 3.8 推送 WiFi 模组工作状态 ===&lt;br /&gt;
* 命令：`0x0D`（WiFi 状态上报）/ `0x0E`（ACK）；状态包含 SoftAP/Station/Onboarding/绑定状态/RSSI/蓝牙模式等。&lt;br /&gt;
&lt;br /&gt;
=== 3.9 非法数据包通知 ===&lt;br /&gt;
* 命令：`0x11`（WiFi→MCU）/ `0x12`（MCU→WiFi）；&lt;br /&gt;
* 错误码：1=校验和错误；2=命令不可识别；3=其他错误；4=文件类型不匹配。&lt;br /&gt;
&lt;br /&gt;
=== 3.10 MCU 通知 WiFi 模组进入可绑定模式 ===&lt;br /&gt;
* 命令：`0x15`（请求）/ `0x16`（应答）；倒计时（可绑定失效秒）见 3.1 字段。&lt;br /&gt;
&lt;br /&gt;
=== 3.11 MCU 重启通讯模组 ===&lt;br /&gt;
* 命令：`0x29`（请求）/ `0x2A`（应答）；ACK 成功后模组再重启。&lt;br /&gt;
&lt;br /&gt;
== 4. 扩展通讯协议（可选） ==&lt;br /&gt;
&lt;br /&gt;
=== 4.1 重启 MCU ===&lt;br /&gt;
* WiFi → MCU：`0x0F`（请求）；MCU → WiFi：`0x10`（应答）。&lt;br /&gt;
* 注意：MCU **在回复 ACK 后等待 ~600 ms** 再重启，避免 WiFi 端未收到 ACK 而重复请求。&lt;br /&gt;
&lt;br /&gt;
=== 4.2 MCU 请求 WiFi 模组进入产测模式 ===&lt;br /&gt;
* MCU → WiFi：`0x13`；WiFi → MCU：`0x14`。&lt;br /&gt;
&lt;br /&gt;
=== 4.3 MCU 请求获取网络时间 ===&lt;br /&gt;
* MCU → WiFi：`0x17`；WiFi → MCU：`0x18`（返回本地时区时间 + NTP 秒）。&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 字段 !! 长度（B） !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| year || 2 || 年（大端），如 2015&lt;br /&gt;
|-&lt;br /&gt;
| month || 1 || 月&lt;br /&gt;
|-&lt;br /&gt;
| day || 1 || 日&lt;br /&gt;
|-&lt;br /&gt;
| hour || 1 || 时&lt;br /&gt;
|-&lt;br /&gt;
| minute || 1 || 分&lt;br /&gt;
|-&lt;br /&gt;
| second || 1 || 秒&lt;br /&gt;
|-&lt;br /&gt;
| ntp || 4 || NTP 秒计数&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 4.4 大数据下发：发起者请求 ===&lt;br /&gt;
* WiFi → MCU：`0x19`；MCU → WiFi：`0x1A`。  &lt;br /&gt;
负载含：**数据大小**、**文件类型**、**MD5**。&lt;br /&gt;
&lt;br /&gt;
=== 4.5 大数据下发：接收者确认 ===&lt;br /&gt;
* MCU → WiFi：`0x1B`；WiFi → MCU：`0x1C`。  &lt;br /&gt;
负载含：**分片大小**（建议 128B）。&lt;br /&gt;
&lt;br /&gt;
=== 4.6 大数据下发：分片传输 ===&lt;br /&gt;
* WiFi → MCU：`0x1D`；MCU → WiFi：`0x1E`。  &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 字段 !! 长度（B） !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| total_packets || 2 || 总分片数&lt;br /&gt;
|-&lt;br /&gt;
| packet_index || 2 || 当前分片号（0 起）&lt;br /&gt;
|-&lt;br /&gt;
| data || N || 分片数据&lt;br /&gt;
|}&lt;br /&gt;
* Flags.bit1 = 1 表示**最后一包**。&lt;br /&gt;
&lt;br /&gt;
=== 4.7 大数据下发：发起者取消 ===&lt;br /&gt;
* WiFi → MCU：`0x1F`；MCU → WiFi：`0x20`。&lt;br /&gt;
&lt;br /&gt;
=== 4.8 大数据下发：接收者取消 ===&lt;br /&gt;
* MCU → WiFi：`0x27`；WiFi → MCU：`0x28`。&lt;br /&gt;
&lt;br /&gt;
=== 4.9 MCU 获取通讯模组信息 ===&lt;br /&gt;
* MCU → WiFi：`0x21`；WiFi → MCU：`0x22`。  &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! # !! 字段 !! 长度（B） !! 说明&lt;br /&gt;
|-&lt;br /&gt;
| 1 || module_type || 8 || 模组类型（字符串）&lt;br /&gt;
|-&lt;br /&gt;
| 2 || protocol_version || 8 || 协议版本（字符串）&lt;br /&gt;
|-&lt;br /&gt;
| 3 || hardware_version || 8 || 硬件版本（字符串）&lt;br /&gt;
|-&lt;br /&gt;
| 4 || software_version || 8 || 软件版本（字符串）&lt;br /&gt;
|-&lt;br /&gt;
| 5 || mac || max 13 || 以 &amp;#039;\\0&amp;#039; 结尾的字符串，例如 &amp;quot;5CF9388AE8F0\\0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ip || max 16 || 以 &amp;#039;\\0&amp;#039; 结尾的字符串，例如 &amp;quot;192.168.100.254\\0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 7 || attributes || 8 || 模组属性（预留）&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 校验和 || 1 || 0x##&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== A. 附录：数据点/字段的缩放与边界 ==&lt;br /&gt;
* `ph_value`、`ph_alarm_*`：**y=0.1*x**；  &lt;br /&gt;
* `temp_current_1/2`：**y=1*x-200**（原始 0..1200）；  &lt;br /&gt;
* `humidity`、`Temperature/Humidity_alarm_*`：**y=1*x+0**；  &lt;br /&gt;
* `Total_dissolved_solids`、`tds_alarm_*`：uint16（0..5000）；  &lt;br /&gt;
* `current_voltage`：uint16（0..5000）；`Current_power`：uint16（0..10000）；  &lt;br /&gt;
* `urt_value`：uint32（0..600000）；`Current_current`：uint32（0..100000）；  &lt;br /&gt;
* `cur_timestamp`：uint32（Unix 秒）。&lt;br /&gt;
&lt;br /&gt;
== B. 附录：布尔组合位（byte0）编码 ==&lt;br /&gt;
* bit0…bit5 = `switch_1…switch_6`；bit6=`power`；bit7..bit14=各报警位（高温/低温/高湿/低湿/高 TDS/低 TDS/高 pH/低 pH）。&lt;br /&gt;
&lt;br /&gt;
[[Category:协议文档]]&lt;br /&gt;
[[Category:水族智能设备]]&lt;/div&gt;</summary>
		<author><name>Nichen</name></author>
	</entry>
</feed>