资讯动态

AI-on-the-edge-device 自动轮询定时器(AutoTimer)配置指南:Interval 与已废弃的 AutoStart 参数详解

发布时间:2026/9/16 21:12:49 来源:尧图企业网站定制
AI-on-the-edge-device 自动轮询定时器AutoTimer配置指南Interval 与已废弃的 AutoStart 参数详解【免费下载链接】AI-on-the-edge-deviceEasy to use device for connecting old measuring units (water, power, gas, ...) to the digital world项目地址: https://gitcode.com/GitHub_Trending/ai/AI-on-the-edge-device导读本指南聚焦 AI-on-the-edge-device水表/电表/气表等模拟表计的数字化抄表设备中控制“抄表流程Digitization Round”自动执行频率的[AutoTimer]配置节。文章将详细说明当前唯一生效的Interval参数的作用机制、与手动触发REST API / MQTT的配合方式、以及已被移除的AutoStart参数的前世今生与迁移方法。读完本文你将能够根据抄表精度与设备功耗的平衡需求正确配置抄表间隔并理解设备底层定时任务的工作循环。1. 参数总览AutoTimer 配置节的现状AI-on-the-edge-device 的自动抄表功能由配置文件sd-card/config/config.ini实际部署时位于 SD 卡的config/config.ini中的[AutoTimer]小节控制。以仓库自带的默认配置为例[AutoTimer] Interval 5[AutoTimer]小节目前仅包含两个历史参数参数默认值单位状态Interval5分钟可用控制抄表流程的运行间隔AutoStarttrue-已废弃/不可用流程现在始终启用两个参数的完整说明分别见仓库文档 param-docs/parameter-pages/AutoTimer/Interval.md 与 param-docs/parameter-pages/AutoTimer/AutoStart.md。1.1 参数读取的源码依据从源码结构看[AutoTimer]小节由ClassFlowControll::ReadParameter负责解析ClassFlowControll.cpp当遇到INTERVAL且其值为数字时通过std::stof将字符串转换为浮点数存入成员变量AutoIntervalif ((toUpper(splitted[0]) INTERVAL) (splitted.size() 1)) { if (isStringNumeric(splitted[1])) { AutoInterval std::stof(splitted[1]); } }需要注意的是代码中仅解析INTERVAL并不解析任何 AutoStart 类参数——这正是“该参数已不可用”在实现层面的直接证据。同时ClassFlowControll::SetInitialParameter中保留了兜底默认值AutoInterval 10; // MinutesClassFlowControll.cpp即当配置文件中没有Interval时程序会退回到 10 分钟间隔。2.Interval参数详解抄表流程的运行节奏2.1 基本语义Interval的默认值为5单位是分钟含义如下设备启动后抄表流程Digitization Round会立即执行一次完成首次执行后按Interval给定的间隔周期性地再次执行如果某一轮抄表执行时间超过了该间隔那么下一轮不会被强行启动而是顺延——必须等当前这轮完整结束再按“完成时刻 间隔”决定下一轮起点如果抄表流程被MQTT 消息或REST API 调用手动触发则计时器会被自动重置从手动触发完成的那一刻重新计算下一轮间隔。2.2 定时循环的源码实现定时执行的循环体位于MainFlowControl.cpp的task_autodoFlow任务中MainFlowControl.cpp。任务启动后先执行初始化doInit()随后通过以下两行将配置好的间隔换算为毫秒并检查流程是否启用flowctrl.setAutoStartInterval(auto_interval); // 分钟 - 毫秒 autostartIsEnabled flowctrl.getIsAutoStart();其中setAutoStartInterval的换算逻辑在 ClassFlowControll.cppvoid ClassFlowControll::setAutoStartInterval(long _interval) { _interval AutoInterval * 60 * 1000; // AutoInterval: minutes - ms }主循环每完成一轮抄表doflow()返回后会记录该轮实际耗时fr_delta_ms然后扣除已耗时后再休眠剩余的等待时间MainFlowControl.cppfr_delta_ms (esp_timer_get_time() - fr_start) / 1000; if (auto_interval fr_delta_ms) { const TickType_t xDelay (auto_interval - fr_delta_ms) / portTICK_PERIOD_MS; vTaskDelay(xDelay); }这段代码精确印证了文档中“若本轮耗时超过间隔则顺延”的行为只有当auto_interval仍大于本轮已耗时fr_delta_ms时才会进入休眠休眠时长等于二者之差如果本轮已超时则立即进入下一轮循环。此外每轮结束后还会把完成耗时、CPU 温度、WiFi RSSI 等信息写入日志MainFlowControl.cpp方便用户判断间隔设置是否合理。2.3 手动触发与间隔重置文档指出“由 MQTT 消息或 REST API 调用启动流程时间隔自动重置”这在 REST API 侧有直接的接口证据register_server_main_flow_task_uri注册了/flow_start等 URIMainFlowControl.cpp在 MQTT 侧ClassFlowMQTT::Start会把间隔同步给 MQTT 服务ClassFlowMQTT.cppbool ClassFlowMQTT::Start(float AutoInterval) { roundInterval AutoInterval; // Minutes keepAlive roundInterval * 60 * 2.5; // Seconds, make sure it is greater than 2 rounds! ... mqttServer_setParameter(flowpostprocessing-GetNumbers(), keepAlive, roundInterval); }值得注意的是这里的keepAlive被设置为“间隔 × 60 × 2.5”秒即大于两轮抄表周期的时长用于保证 MQTT 客户端在等待期间不会因超时断连。roundInterval随后在 server_mqtt.cpp 中全局保存并在 Home Assistant Discovery 中作为interval诊断实体对外发布server_mqtt.cpp。3. 已废弃的AutoStart参数为什么不能再配置3.1 官方声明与废弃原因原AutoStart参数文档明确声明AutoStart.md警告该参数已不再可用抄表流程现在始终处于启用状态。如果你希望禁用它请设置一个足够大的间隔例如1440即 24 小时。从实现上看ClassFlowControll::getIsAutoStart()已经硬编码返回true并附有注释解释原因ClassFlowControll.cppbool ClassFlowControll::getIsAutoStart(void) { //return AutoStart; return true; // Flow must always be enabled, else the manual trigger (REST, MQTT) will not work! }也就是说流程必须保持常驻否则 REST API 与 MQTT 的手动触发机制将失去运行载体。因此“禁用自动抄表”这个需求被改由“调大间隔”来满足而不是关闭流程本身。3.2 旧配置的自动迁移为了兼容老版本配置固件在读取配置文件时会对[AutoTimer]小节执行自动迁移main.cppelse if (section [AutoTimer]) { migrated migrated | replaceString(configLines[i], Intervall, Interval); // 旧拼写 Intervall - Interval migrated migrated | replaceString(configLines[i], Autostart, ;UNUSED_PARAMETER); // 该参数不再使用 }迁移做了两件事将旧版本中拼写错误的Intervall双 l自动重命名为Interval将Autostart参数整体替换为注释行;UNUSED_PARAMETER使其不再生效。因此老配置文件即使保留Autostart行也不会报错但该行会被静默注释掉间隔行为完全由Interval决定。3.3 唯一的例外Setup 模式需要指出一个文档未展开的细节虽然流程“始终启用”但存在一个例外场景——Setup初始化向导模式。在task_autodoFlow中若检测到处于 Setup 模式会自动将autostartIsEnabled置为false跳过自动流程MainFlowControl.cppif (isSetupModusActive()) { LogFile.WriteToFile(ESP_LOG_INFO, TAG, We are in Setup Mode - Not starting Auto Flow!); autostartIsEnabled false; }这表明正常运行时自动抄表必然启用只有在设备处于首次配置的 Setup 模式时自动流程才会暂停等待用户完成向导。4. 实用配置建议4.1 如何“禁用”自动抄表由于AutoStart已不可用若想关闭周期性抄表唯一合规做法是把Interval设置得足够大。文档给出的参考值是[AutoTimer] Interval 1440 ; 1440 分钟 24 小时相当于每天只抄一次仓库的演示配置sd-card/demo/config.ini中则使用了Interval 1每分钟抄一次的激进配置用于演示场景可作为对照[AutoTimer] Interval 14.2 根据场景选择间隔日常抄表默认5分钟兼顾数据粒度与功耗即仓库默认配置sd-card/config/config.ini的值高精度监控/演示1分钟或更小Web 配置界面sd-card/html/edit_config_template.html中该字段的最小值约束为1即不允许小于 1 分钟低功耗/低频60或1440适用于对实时性要求不高的场景可显著降低摄像头与 SD 卡读写频率注意间隔只决定“触发节奏”若某一轮抄表拍照 图像处理 数字识别本身耗时超过间隔系统不会并行执行而是自动顺延因此无需担心轮次重叠见 2.2 节 的耗时补偿逻辑。4.3 修改与生效方式Interval的修改入口与设备其他参数一致有两种途径Web 配置界面进入设备 Web 管理页的配置编辑页面在 “AutoTimer / Round Interval” 项中填写分钟数并保存对应前端读写逻辑见 sd-card/html/edit_config_template.htmlAutoTimer_Interval_value1输入框与 sd-card/html/readconfigparam.js其中AutoStart的写入已被注释掉仅保留Interval直接编辑配置文件手动修改 SD 卡上的config/config.ini保存后重启设备使其生效。5. 常见问题Q1我的配置里还写着Autostart false为什么设备仍然自动抄表因为该参数已被固件标记为;UNUSED_PARAMETER见 3.2 节不再参与任何逻辑流程恒为启用。请改用大Interval实现等效的“停用”效果。Q2Intervall两个 l拼写还有效吗旧版本曾使用错误拼写Intervall固件会自动将其迁移为Interval建议在新配置中统一使用正确拼写。Q3手动触发一次抄表后下一次自动抄表什么时候发生根据文档语义MQTT 消息或 REST API如/flow_start触发后定时器被重置下一轮自动抄表从手动触发完成时刻起再等待一个Interval。Q4如何确认当前生效的间隔设备日志中会打印每轮抄表的“完成耗时”并与Interval换算出的毫秒值Interval × 60 × 1000比对若启用 MQTT 且开启 Home Assistant Discovery还可直接读取interval诊断实体获取当前值server_mqtt.cpp。6. 小结[AutoTimer]配置节是 AI-on-the-edge-device 抄表节奏的总开关Interval默认 5 分钟决定周期触发的频率支持顺延与手动触发重置AutoStart则已彻底退役其“始终启用”的设计由ClassFlowControll::getIsAutoStart()的硬编码true和固件迁移逻辑共同保障。理解这两个参数的历史与现状能帮助你在部署时准确配置抄表间隔避免误以为“关掉 AutoStart 就能停止抄表”的常见误区。【免费下载链接】AI-on-the-edge-deviceEasy to use device for connecting old measuring units (water, power, gas, ...) to the digital world项目地址: https://gitcode.com/GitHub_Trending/ai/AI-on-the-edge-device创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价