主题
1.4 HTTP
「HTTP」子标签把寄存器定时发到 HTTP 服务器(POST / GET),同时按点位表把响应 JSON 的字段落进寄存器。一次请求往返同时完成上报和拉取,不需要写一行 Lua。
当前只放出软 PLC 模拟器
HTTP 是配置式 DTU 第一期的两个新标签之一,第一期只放出 LP6666 软 PLC 模拟器。真机(ESP32 / ESP32-S3)二期逐个平台放开。 看不到这个标签说明当前固件还没编进 HTTP 模块,对照 支持哪些设备与能力。
这一页在做什么
HTTP 是请求 / 响应模型:一行 URL 就是一次往返,没有连接需要保持。所以这一页只有一个分组——请求组,每组里同时配上行(发什么)和下行(收什么)。
- GET:参数拼在 URL 的问号后面,常用于拉取服务器配置
- POST:参数放在请求体里,常用于上报数据
GET 没有请求体,「仅变化时发送」对 GET 无效(POST 才有请求体可比)。HTTP 没有「连接」,链路状态通过请求计数与错误计数判断。
怎么配
路径:上位机 → 设备详情页 → DTU 功能 → HTTP 子标签 → 打开「启用 HTTP DTU」。
打开后出现两块:连接参数(共用一份)和 请求组。
连接参数(必填)
| 字段 | 填什么 | 备注 |
|---|---|---|
| 服务器地址 | 必须以 http:// 开头,如 http://192.168.1.100:8080 | 第一期不支持 https,详见下方提示 |
| 设备标识 | 模板里 {id} 的取值 | 写 {id} 占位符会在写入时替换成设备序列号 |
点 「连接参数」 卡里的 「展开高级选项」 能看到设备标识(client_id)字段。
全局 HTTP 头(所有请求共享)
最常用的一条是 POST Content-Type:
| 字段 | 典型填法 |
|---|---|
| 启用 | 勾选 |
| 名称 | Content-Type |
| 值 | application/json |
也可以加 Authorization: Bearer xxxx 做简单的鉴权。值留空等于删掉这条头,是合法用法不是漏填。
上限 16 条头。
第一期只支持 http://
设备上的 HTTP 客户端走裸 socket,没有 TLS。https:// 在连接阶段就会失败——不是返回错误码、是连接根本起不来。需要加密传输的场景请改用 1.3 MQTT 走 TLS Broker 或自建反向代理。
请求组(一次往返完成上报 + 下行)
点「添加请求组」展开一组卡片:
| 字段 | 填什么 |
|---|---|
| 名称 | 卡片标题 |
| 请求方法 | GET / POST,第一期只支持这两个 |
| 请求路径 | 必须以 / 开头,可含 {占位符};GET 把参数写在问号后面,POST 把参数写在请求体里 |
| 请求周期 | 默认 5000ms,最小 1000ms,最大 24 小时 |
| 仅变化时发送 | 仅 POST 生效(GET 没请求体可比);模板里有 ts / ms / datetime 时永远不同,相当于未启用 |
| 请求体模板 | 仅 POST 显示 |
| 收到标志位 | 默认留空,要写必须是位软元件(M / S / X / Y / TS / CS) |
| 响应点位列表 | 关键字段,5 个属性见下表 |
上限 16 个请求组,每组占一个定时器。
请求体模板怎么写(仅 POST)
模板是 JSON 字符串,里面用 {地址:类型} 占位符替换寄存器的当前值:
| 占位符 | 含义 |
|---|---|
{id} | 设备序列号 |
{ts} | 当前 Unix 时间戳(秒) |
{ms} | 毫秒时间戳 |
{datetime} | YYYY-MM-DD HH:MM:SS |
{D200} | 读 D200 的 16 位整型 |
{D210:int32} | 读 D210(占 D210/D211)的 32 位整型 |
{D200:float} | 读 D200(占 D200/D201)的浮点 |
{M0} | 读线圈 M0(0 / 1) |
输入框下面是实时样例预览(按类型填典型值)。改一个字符就能看到设备将要发的请求体。
GET 的参数写在路径里的问号后面,例如 /api/status?dev={id}&t={D200:float}。{id} 同样在写入时被替换。
响应点位(5 个属性)
| 字段 | 填什么 |
|---|---|
| 启用 | 勾选才生效 |
| JSON 路径 | 从响应体取值的路径,如 data.setpoint,数组用 values.1(从 1 起) |
| 目标寄存器 | D400 / M10 等;建议后续在梯形图里读它 |
| 类型 | int16 / int32 / float;int32 / float 占两个连续 D,只能在 D 区 |
| 缩放 | 值乘以这个系数再写入;scale=100 表示服务器发 25.5 实际写 2550 |
| 最小值 / 最大值 | 都填 0 表示不钳位;只填下限(上限 0)会把值再钳一次到 0,小心恒 0 |
上限 每组 64 条响应点位。
收到标志位有 "配了不用" 的情况
recv_flag 只在该请求组至少有 1 条启用的响应点位时才被置位。固件在解析前会先判断 response_points 是否为空;为空时不发起请求(直接返回),标志位永远不变 —— 配了反而让人以为设备没收到响应。
一键添加响应点位
卡片里有 「粘贴 JSON 样例」 输入框,粘贴一段服务器返回的 JSON,点 「解析」 自动列出所有可写字段,每行右侧 「+ 添加」 直接挂到 response_points 上。无需手工抄写 path。
写入并重启
配完点 💾 写入配置 → 🔄 重启生效。不重启,HTTP 客户端还在按旧配置跑。
怎么算成功
按顺序检查三处,任一处不通就在那一处停:
| 检查点 | 看到什么算成功 |
|---|---|
| 配置没被拒 | 面板顶部红色 错误清单 为空(http:// 开头、路径以 / 开头、占位符语法都过) |
| 服务器被请求到 | 「已发请求」> 0,间隔到了就 +1 |
| 响应落进寄存器 | 给对应接口发一条请求,看「收到响应」+1;recv_flag 线圈通,对应寄存器被改写 |
| 不是错配 | 「错误次数」始终是 0,最后一条错误框为空 |
运行状态每 2 秒刷新一次,且仅在 HTTP 子页可见时轮询,离开本页面就停。
常见误区
本节列出最常见的几类错配,详细排查见 A. 常见问题与排查。
| 看到的现象 | 通常原因 |
|---|---|
| 配置一点就报红 | 错误清单有提示,常见的是 https:// 没改成 http://、路径漏 / 开头、占位符花括号没闭合 |
| 服务器收不到请求 | 服务器地址 https:// 没改 http://;端口错;服务器防火墙拦截;URL 拼出来是 http://192.168.1.100:8080api/data —— 路径漏了开头的 / |
| 收到了但寄存器不变 | path 写错(大小写或层级错),先在「解析」处粘贴回放的 JSON 看能不能列出字段 |
配了 recv_flag 但从来不亮 | 该请求组没有任何启用的响应点位 |
| 「仅变化时发送」开了流量没省 | 模板里有 ts / ms / datetime,每次渲染都不同;GET 上该开关无效 |
| 响应慢 / 寄存器滞后 | 周期低于 1000ms + 服务器响应慢,请求堆在 Lua 消息队列里。第一期周期下限 1000ms |
相关文档
- 服务器侧 HTTP 接口:服务器数据对接 · 设备端 HTTP 上报
- 需要 TLS:1.3 MQTT 走 TLS Broker
- 写 Lua 做更灵活的请求