V1.5: 新增实时功率上报(power字段,与energy同一条报文,策略同步)

This commit is contained in:
helei 2026-08-20 09:25:42 +08:00
parent e6f25bfa0b
commit 7e427fbfc4
5 changed files with 10 additions and 7 deletions

View File

@ -356,17 +356,17 @@ int NET_publish_power(int on)
} }
/* 上报累计电量: energy 字段,单位 kWh两位小数 */ /* 上报累计电量: energy 字段,单位 kWh两位小数 */
void NET_publish_energy(float kwh) void NET_publish_energy(float kwh, float power_w)
{ {
if (g_net_tx_busy) { log_info("> NET: energy 上报被丢弃 (发送忙)"); return; } if (g_net_tx_busy) { log_info("> NET: energy 上报被丢弃 (发送忙)"); return; }
if (net_at_trylock() != 0) { log_info("> NET: energy 上报被丢弃 (AT 忙)"); return; } if (net_at_trylock() != 0) { log_info("> NET: energy 上报被丢弃 (AT 忙)"); return; }
if (s_backend == NET_BACKEND_4G) { if (s_backend == NET_BACKEND_4G) {
CAT1_printf("AT+MPUB=\"/iot/data/up/%s\",0,0,\"{\\22header\\22:\\22iot.prop.post\\22,\\22body\\22:{\\22energy\\22:%.2f}}\"", CAT1_printf("AT+MPUB=\"/iot/data/up/%s\",0,0,\"{\\22header\\22:\\22iot.prop.post\\22,\\22body\\22:{\\22energy\\22:%.2f,\\22power\\22:%.1f}}\"",
MqttInfoStr.ClientID, kwh); MqttInfoStr.ClientID, kwh, power_w);
} else { } else {
char json[96]; char json[128];
snprintf(json, sizeof(json), snprintf(json, sizeof(json),
"{\"header\":\"iot.prop.post\",\"body\":{\"energy\":%.2f}}", kwh); "{\"header\":\"iot.prop.post\",\"body\":{\"energy\":%.2f,\"power\":%.1f}}", kwh, power_w);
net_wifi_publish_up(json); net_wifi_publish_up(json);
} }
log_debug("> NET: energy 已发布 %.2f", (double)kwh); log_debug("> NET: energy 已发布 %.2f", (double)kwh);

View File

@ -54,7 +54,7 @@ int NET_publish_status(int sw1, int feeding, int sw2, int sw3, int sw4,
void NET_publish_response(const char *cmd_id, int ok, const char *msg); void NET_publish_response(const char *cmd_id, int ok, const char *msg);
int NET_publish_power(int on); int NET_publish_power(int on);
void NET_publish_version(const char *ver); /* 上报代码版本字符串(FIRMWARE_VERSION_STR) */ /* 返回 0=已发出,-1=通道忙被丢弃 */ void NET_publish_version(const char *ver); /* 上报代码版本字符串(FIRMWARE_VERSION_STR) */ /* 返回 0=已发出,-1=通道忙被丢弃 */
void NET_publish_energy(float kwh); /* 上报累计电量,标识符 energy单位 kWh */ void NET_publish_energy(float kwh, float power_w); /* 上报累计电量,标识符 energy单位 kWh */
int NET_mqtt_report(const char *header, const char *ota_id, int val); /* 返回 0=送达 */ int NET_mqtt_report(const char *header, const char *ota_id, int val); /* 返回 0=送达 */
int NET_ota_confirm(void); /* 0=确认通知已送达 1=无挂起 -1=未送达(需重试) */ int NET_ota_confirm(void); /* 0=确认通知已送达 1=无挂起 -1=未送达(需重试) */

View File

@ -394,7 +394,7 @@ static void sys_task(void *arg)
} }
if (report) { if (report) {
energy_report_tick = HAL_GetTick(); energy_report_tick = HAL_GetTick();
NET_publish_energy(kwh); NET_publish_energy(kwh, pw);
} }
log_info(FMT_ENERGY, (double)kwh, log_info(FMT_ENERGY, (double)kwh,
(double)hlw8032_get_voltage_v(), (double)hlw8032_get_voltage_v(),

View File

@ -346,6 +346,7 @@ W25Q64 外部 Flash8MB
| `sw2~sw4` | 备用继电器状态 | 0/1 | | `sw2~sw4` | 备用继电器状态 | 0/1 |
| `pow` | 电量状态 | 1=正常0=低电量 | | `pow` | 电量状态 | 1=正常0=低电量 |
| `energy` | 累计消耗电量 | HLW8032 计量,单位 kWh两位小数>10W 每 30s否则首次+开关切换) | | `energy` | 累计消耗电量 | HLW8032 计量,单位 kWh两位小数>10W 每 30s否则首次+开关切换) |
| `power` | 实时功率 | HLW8032 计量,单位 W一位小数与 energy 同一条报文上报(策略同 energy |
| `iccid` | SIM 卡号 | 仅 4G 通道MQTT 连上后随 pow 上报一次,用于物联网卡套餐查询缴费 | | `iccid` | SIM 卡号 | 仅 4G 通道MQTT 连上后随 pow 上报一次,用于物联网卡套餐查询缴费 |
| `fwver` | 代码版本字符串 | 格式 `FIRMWARE_VERSION_STR`+`:`+EEPROM 版本序号(如 "1.5.0:15"),字符串类型,每次重启联网后上报一次(与状态大报文中的整数 `ver` OTA 版本号区分开) | | `fwver` | 代码版本字符串 | 格式 `FIRMWARE_VERSION_STR`+`:`+EEPROM 版本序号(如 "1.5.0:15"),字符串类型,每次重启联网后上报一次(与状态大报文中的整数 `ver` OTA 版本号区分开) |
| `GPS` | 定位坐标 | 仅 4G 通道(Air780EG)GCJ-02 高德坐标系,格式 `"经度,纬度"`,每 5 分钟上报 | | `GPS` | 定位坐标 | 仅 4G 通道(Air780EG)GCJ-02 高德坐标系,格式 `"经度,纬度"`,每 5 分钟上报 |

View File

@ -168,3 +168,5 @@
(原先要等踢线/重启/拨开关触发上报才更新) (原先要等踢线/重启/拨开关触发上报才更新)
- 修复重启后磅秤重量平台一直为 0首次重量上报被 AT 忙丢弃后不重试, - 修复重启后磅秤重量平台一直为 0首次重量上报被 AT 忙丢弃后不重试,
改为发布成功才置标志,失败下轮查询继续重试 改为发布成功才置标志,失败下轮查询继续重试
- 新增实时功率上报:标识符 power单位 W一位小数与 energy 合并同一条报文
>10W 每 30s否则首次+开关切换),平台物模型加 float 即可