拓冰建站拓冰建站
首页 / 资讯中心 / 正文

AI-on-the-edge-device 的 InfluxDB 参数 `Field` 完全指南:配置 `main.Field` 定义数据字段与源码解析

AI-on-the-edge-device 的 InfluxDB 参数Field完全指南配置main.Field定义数据字段与源码解析【免费下载链接】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-deviceAI-on-the-edge-device 是一套将旧式计量仪表水表、电表、气表等接入数字化世界的开源固件。当开启 InfluxDB 上报后Field参数决定了每个读数序列NUMBER在 InfluxDB 行协议中使用的 field 名称。本文以 param-docs/parameter-pages/InfluxDB/NUMBER.Field.md 为骨架结合固件中 InfluxDB v1/v2 的解析与发送源码讲清该参数的含义、默认值、前缀规则、配置方式及其在数据写入链路中的真实作用。参数一览项目说明参数名Field在配置文件中写作NUMBER.Field如main.Field所属配置段[InfluxDB]v1与[InfluxDBv2]v2默认值undefined未定义作用为某个读数序列指定存入 InfluxDB 的 field 名称例如watermeter/value粒度按NUMBER区分每个在 ROI 中定义的读数序列可拥有独立的 FieldField的职责是“字段命名”它把固件识别出的读数值value以你指定的名字写入时序数据库供 Grafana 等可视化工具按名查询。它不决定测量名Measurement——那是 NUMBER.Measurement.md 参数负责的两者组合起来才构成一条完整的 InfluxDB 行协议数据点。为什么要加NUMBER前缀按读数序列隔离字段文档特别强调手动编辑配置文件时必须用NUMBER加英文点号作为前缀例如main.Field。原因在于该参数对每个NUMBER都是独立的——NUMBER是你在 ROI感兴趣区域中定义的读数序列名称。在 sd-card/config/config.ini 中可以看到NUMBER的实际形态[InfluxDB] ;Uri undefined ;Database undefined ;user undefined ;password undefined ;main.Measurement undefined ;main.Field undefined [InfluxDBv2] ;Uri undefined ;Bucket undefined ;Org undefined ;Token undefined ;main.Measurement undefined ;main.Field undefined这里的main就是读数序列名称与[Digits]/[Analog]段中main.dig1、main.ana1等 ROI 行共享同一命名空间。如果一张表同时有main和second两个序列你可以分别写main.Field watermeter/main second.Field watermeter/second源码中的前缀解析逻辑固件在解析配置文件时正是通过“点号前的名称”来匹配读数序列的。见 ClassFlowInfluxDB.cpp 中的handleFieldnamevoid ClassFlowInfluxDB::handleFieldname(string _decsep, string _value) { string _digit, _decpos; int _pospunkt _decsep.find_first_of(.); if (_pospunkt -1) _digit _decsep.substr(0, _pospunkt); // 取点号前的 NUMBER else _digit default; // 无前缀则视为 default for (int j 0; j flowpostprocessing-NUMBERS.size(); j) { if (_digit default) // 先应用到所有序列 flowpostprocessing-NUMBERS[j]-FieldV1 _value; if (flowpostprocessing-NUMBERS[j]-name _digit) flowpostprocessing-NUMBERS[j]-FieldV1 _value; } }这段代码揭示了几条重要行为参数名中不包含点号时如直接写Field ...会被当作default处理并应用到所有读数序列参数名包含点号时点号前的字符串必须与某个序列的name完全相等才会被写入该序列的FieldV1Field参数最终被存入 ClassFlowDefineTypes.h 中NumberPost结构的FieldV1v1/FieldV2v2字段。InfluxDB v2 的解析逻辑完全相同见 ClassFlowInfluxDBv2.cpp。默认值行为不配置时固件如何自动生成 field 名Field的默认值是undefined也就是说不配置该参数时固件会按既定规则自动推导 field 名绝不会漏发数据。推导逻辑位于 ClassFlowInfluxDB.cpp 的doFlow中if ((*NUMBERS)[i]-FieldV1.length() 0) { namenumber (*NUMBERS)[i]-FieldV1; // 优先使用显式配置的 Field } else { namenumber (*NUMBERS)[i]-name; // 否则退回序列名 if (namenumber default) namenumber value; // 未命名序列退化为 value else namenumber namenumber /value; // 否则为 序列名/value }因此默认情况下的实际字段名规则是场景生成的 field 名显式配置main.Field watermeter/valuewatermeter/value未配置序列名为mainmain/value未配置序列名为defaultvalueInfluxDB v2 的doFlow采用完全一致的回退策略见 ClassFlowInfluxDBv2.cpp。这一设计保证即使你在配置文件中完全省略Field固件也会把每个序列的读数以序列名/value的形式写入数据库便于快速验证 InfluxDB 链路是否打通。从配置到写入Field在数据链路中的位置Field的值最终进入 InfluxDB 行协议line protocol的keyvalue部分。固件通过 HTTP POST 发送数据见 interface_influxdb.cpp 的InfluxDBPublishpayload _measurement _key _content nowTimestamp; // 示例: watermeter watermeter/value12345.6 1750000000000000000其中_measurement来自Measurement参数_key正是本文主角Fieldnamenumber_content是后处理流水线ClassFlowPostProcessing产出的读数结果时间戳取 NTP 同步后的 UTC 时间。v1 通过/write?dbdatabase接口配合 Basic Auth 发送v2 则通过/api/v2/write?orgorgbucketbucket配合Token请求头发送两种协议共用同一 payload 构造逻辑。命名时的注意事项从源码看Field是完整字符串拼接进 payload 的不经过转义处理。因此需要注意避免使用空格、逗号、等号、引号等 InfluxDB 行协议中的保留字符防止写入失败或字段被截断Measurement与Field建议配套规划保证 Grafana 中SELECT watermeter/value FROM watermeter这类查询语义清晰若一个序列需要同时上报多个值如读数与速率目前 v1/v2 各只有一个Field配置位需按序列拆分或借助后处理规则。参数读取与默认值说明Field在[InfluxDB]/[InfluxDBv2]配置段中以splitted[0]为参数名、splitted[1]为参数值读取见 ClassFlowInfluxDB.cpp。参数名对大小写不敏感统一经过toUpper比较但参数值原样保留大小写会直接影响写入 InfluxDB 的字段名配置时请按查询习惯精确书写。在 Web 界面中Field通过edit_config_template.html的InfluxDB_Field_value1v1与InfluxDBv2_Field_value1v2输入框编辑并以$TOOLTIP_InfluxDB_NUMBER.Field显示说明见 sd-card/html/edit_config_template.html 与 sd-card/html/edit_config_template.html。从源码结构看该参数在界面中属于按序列NUNBERSAkt逐项读写的条目与配置文件中的NUMBER.Field前缀规则一一对应。小结Field虽是一个单行配置项却是 AI-on-the-edge-device 时序数据出口的关键命名开关它决定每个读数序列在 InfluxDB 中“叫什么名字”进而决定你后续的查询语句与面板配置。掌握三点即可正确使用手动编辑配置时必须加NUMBER.前缀如main.Field不带前缀会作为default应用到所有序列不配置时固件自动回退为序列名/value或value链路不会中断字段名会原样拼入 InfluxDB 行协议避免使用特殊字符以保证写入与查询的稳定性。【免费下载链接】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),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门