修改运行时间为每差分1分钟或者跨天时主动上报,防止上报过快或过慢
This commit is contained in:
@@ -650,7 +650,15 @@ static void jbUnpackDps(const uint8_t *bitmap, const uint8_t *values,
|
||||
/* ════════════════════════════════════════════════════════════════
|
||||
* jbBuildDiffMask — 比较上次与当前值,为变化的可上报 DP 置 mask 位
|
||||
* 返回: 1 = 有 DP 发生变化, 0 = 全部未变化
|
||||
* DP18 运行记录:今天累计秒数相对上次上报满 JB_RUNREC_DIFF_SEC 才进差分;
|
||||
* 其它日期格变化(跨天旋转)立刻进差分。0x05 读 / 10min 全量仍带完整 124B。
|
||||
* ════════════════════════════════════════════════════════════════ */
|
||||
static uint32_t jbRunrecTodaySec(const uint8_t *rec)
|
||||
{
|
||||
return ((uint32_t)rec[0] << 24) | ((uint32_t)rec[1] << 16)
|
||||
| ((uint32_t)rec[2] << 8) | (uint32_t)rec[3];
|
||||
}
|
||||
|
||||
static uint8_t jbBuildDiffMask(const jb_data_point_t *last,
|
||||
const jb_data_point_t *cur,
|
||||
uint8_t *mask)
|
||||
@@ -754,11 +762,20 @@ static uint8_t jbBuildDiffMask(const jb_data_point_t *last,
|
||||
mask[DP_ID_TIME_CONFIG7 / 8] |= (1 << (DP_ID_TIME_CONFIG7 % 8));
|
||||
hasChange = 1;
|
||||
}
|
||||
/* DP18 运行记录 */
|
||||
if (memcmp(last->run_record, cur->run_record, 124))
|
||||
/* DP18 运行记录:今天秒数差分满 1 分钟,或后 30 天格变了(跨天) */
|
||||
{
|
||||
mask[DP_ID_RUN_RECORD / 8] |= (1 << (DP_ID_RUN_RECORD % 8));
|
||||
hasChange = 1;
|
||||
uint32_t last_today = jbRunrecTodaySec(last->run_record);
|
||||
uint32_t cur_today = jbRunrecTodaySec(cur->run_record);
|
||||
uint32_t delta = (cur_today > last_today)
|
||||
? (cur_today - last_today)
|
||||
: (last_today - cur_today);
|
||||
|
||||
if ((delta >= JB_RUNREC_DIFF_SEC)
|
||||
|| memcmp(&last->run_record[4], &cur->run_record[4], 120))
|
||||
{
|
||||
mask[DP_ID_RUN_RECORD / 8] |= (1 << (DP_ID_RUN_RECORD % 8));
|
||||
hasChange = 1;
|
||||
}
|
||||
}
|
||||
/* DP20 设备故障使能 */
|
||||
if (last->fault_en != cur->fault_en)
|
||||
@@ -942,7 +959,19 @@ static void jbReportPolicy(jb_data_point_t *data)
|
||||
(now - jbProtocol.lastChangeTime > REPORT_DEBOUNCE))
|
||||
{
|
||||
jbSendReport(data, diffMask);
|
||||
memcpy(&jbProtocol.lastData, data, sizeof(jb_data_point_t));
|
||||
/* 未带 DP18 时保留上次记录基准,避免喷淋开关等上报把 1 分钟差分冲掉 */
|
||||
if (!(diffMask[DP_ID_RUN_RECORD / 8] & (1u << (DP_ID_RUN_RECORD % 8))))
|
||||
{
|
||||
uint8_t keep[124];
|
||||
|
||||
memcpy(keep, jbProtocol.lastData.run_record, 124);
|
||||
memcpy(&jbProtocol.lastData, data, sizeof(jb_data_point_t));
|
||||
memcpy(jbProtocol.lastData.run_record, keep, 124);
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(&jbProtocol.lastData, data, sizeof(jb_data_point_t));
|
||||
}
|
||||
jbProtocol.lastChangeTime = now;
|
||||
jbProtocol.lastReportTime = now;
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user