首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Influxdb Json (MQTT)用通配符重命名字段

Influxdb Json (MQTT)用通配符重命名字段
EN

Stack Overflow用户
提问于 2021-12-24 16:07:11
回答 1查看 464关注 0票数 0

我需要帮助,我有一个问题,我有发送我的Zigbee温度计的数据流入,通过telegraf。

这是路径: Zigbee Sonoff SNZB-02 -> Tasmota ZBBridge -> MQTT -> Telegraf -> InfluxDB

zigbee温度计的id:0x4EF9可能会更改,因为它是随机分配给设备的,在Tasmota中,我可以指定一个“友好名称”,在本例中是:

对于简单的tasmota设备,我没有问题,我在MQTT主题中有该设备的一个条目,Telegraf很好地处理了这些条目。我的问题是来自Zigbee的数据,因为它有一个单一的主题,而且在流入中的输出有点难以处理:

例如,Zigbee温度计的MQTT消息:

代码语言:javascript
复制
tele/tasmota_ABDCEF/ZB_Sonoff_Temp01/SENSOR {"ZbReceived":{"0x4EF9":{"Device":"0x4EF9","Name":"ZB_Sonoff_Temp01","Humidity":94.84,"Endpoint":1,"LinkQuality":34}}}

数据采用Json格式,如您所见,在Telegraf中,我使用的是mqtt_consumer,下面是config: /etc/telegraf/telgraf.d/mqtt.conf

代码语言:javascript
复制
[[inputs.mqtt_consumer]]
  servers = ["tcp://192.168.10.10:1883"]

  ## Topics that will be subscribed to.
  topics = [
    "tele/tasmota_ABCDEF/ZB_Sonoff_Temp01/SENSOR"
  ]

  qos = 0
  connection_timeout = "30s"
  username = "user"
  password = "password"

  data_format = "json"

[[outputs.influxdb]]
  urls = ["http://localhost:8086"]
  database = "test_temp"
#  skip_database_creation = true

这是我的/etc/telegraf/telgraf.conf:

代码语言:javascript
复制
[global_tags]

[agent]
  logfile = "/var/log/telegraf/telegraf.log"
  interval = "10s"
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = "0s"
  flush_interval = "10s"
  flush_jitter = "0s"
  precision = ""
  hostname = ""
  omit_hostname = false

以下是大量涌入的数据:

代码语言:javascript
复制
time                           ZbReceived_0x4EF9_Endpoint ZbReceived_0x4EF9_Humidity ZbReceived_0x4EF9_LinkQuality ZbReceived_0x4EF9_Temperature host          topic
----                           -------------------------- -------------------------- ----------------------------- ----------------------------- ----          -----
2021-12-24T15:43:55.26962955Z  1                          99.99                      26                            32.24                         influxdb-test tele/tasmota_ABCDEF/ZB_Sonoff_Temp01/SENSOR
2021-12-24T15:43:55.560162845Z 1                                                     21                            25.18                         influxdb-test tele/tasmota_ABDCEF/ZB_Sonoff_Temp01/SENSOR

这是可以的,因为我可以通过“主题”字段选择设备,但问题是"ZbReceived_0x4EF9_Temperature“字段在与zigbee重新关联时更改ID时”理智“,这可能会发生。

我找到的解决方法是为字段添加一个重命名:

代码语言:javascript
复制
[[processors.rename]]
  [[processors.rename.replace]]
    field = "ZbReceived_0x4EF9_Temperature"
    dest = "Temperature"
  [[processors.rename.replace]]
    field = "ZbReceived_0x4EF9_Humidity"
    dest = "Humidity"
  [[processors.rename.replace]]
    field = "ZbReceived_0x4EF9_Endpoint"
    dest = "Endpoint"
  [[processors.rename.replace]]
    field = "ZbReceived_0x4EF9_LinkQuality"
    dest = "LinkQuality"

它可以根据我的需要改变字段(没有湿度,但并不总是被推送,所以没关系,我在更改之间删除db ):

代码语言:javascript
复制
time                           Endpoint LinkQuality Temperature host          topic
----                           -------- ----------- ----------- ----          -----
2021-12-24T15:47:09.992947108Z 1        21          23          influxdb-test tele/tasmota_ABCDEF/ZB_Sonoff_Temp01/SENSOR
2021-12-24T15:47:25.868416967Z 1        13          27.06       influxdb-test tele/tasmota_ABCDEF/ZB_Sonoff_Temp01/SENSOR

我不太喜欢这个解决方案,因为它有硬编码在telegraf配置中的设备it,所以当我添加或更改传感器时,我需要编辑telegraf。

我现在遇到的问题是,我希望找到一个通配符或一种方法来独立于设备id更改字段,例如:

代码语言:javascript
复制
[[processors.rename]]
  [[processors.rename.replace]]
    field = "*_Temperature"
    dest = "Temperature"

但是我找不到它,我已经阅读了方法的所有文档(也是字符串),但我无法找到实现这一目标的方法。

你有什么能帮我的提示吗?

非常感谢您,祝您节日快乐!

EN

回答 1

Stack Overflow用户

发布于 2021-12-25 00:02:37

我需要使用processors.regex.field_rename,但是我的telegraf版本比最新版本(1.21.1-1)超过了(1.20.2-1),所以field_rename是不可用的。

我用过的正则表达式:

代码语言:javascript
复制
[[processors.regex]]
  [[processors.regex.field_rename]]
    pattern = '(^ZbReceived_)\w+_'
    replacement = "${2}"

结果:

代码语言:javascript
复制
time                           Endpoint Humidity LinkQuality Temperature host          topic
----                           -------- -------- ----------- ----------- ----          -----
2021-12-24T23:51:48.289677669Z 1                 0           25.26       influxdb-test tele/tasmota_ABCDEF/ZB_Sonoff_Temp01/SENSOR
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70474713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档