Skip to content

Instantly share code, notes, and snippets.

@thomo
Created October 12, 2020 22:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thomo/b568f330f7a8e47f84d0b53599899ac6 to your computer and use it in GitHub Desktop.
Save thomo/b568f330f7a8e47f84d0b53599899ac6 to your computer and use it in GitHub Desktop.
telegraf config to transform mbmd mqtt messages
# send messages with database-tag = mbmd to influxdb mbmd
[[outputs.influxdb]]
urls = ["http://influxdb.host:8086"]
database = "mbmd"
tagexclude = ["influxdb_database", "src", "measurement"]
[outputs.influxdb.tagpass]
influxdb_database = ["mbmd"]
###########################################################################################
# Read metrics from MQTT topic(s)
# and assign database-tag depending on topic
# mbmd/#
## add tag 'line' to with default value 'Total' to all mbmd messages
[[inputs.mqtt_consumer]]
servers = ["tcp://mqtt.thomo.de:1883"]
connection_timeout = "30s"
topics = ["mbmd/#"]
data_format = "value"
data_type = "float"
name_override = "mbmd"
[inputs.mqtt_consumer.tags]
influxdb_database = "mbmd"
line = "Total"
###########################################################################################
# name = mbmd
## put topic parts in tags
[[processors.regex]]
order = 30
namepass = ["mbmd"]
# set src tag
[[processors.regex.tags]]
key = "topic"
pattern = "^mbmd/([\\w-]+)/.*$"
replacement = "${1}"
result_key = "src"
# set name tag
[[processors.regex.tags]]
key = "topic"
pattern = "^mbmd/[\\w-]+/(\\w+)/?.*$"
replacement = "${1}"
result_key = "name"
# set line tag
[[processors.regex.tags]]
key = "topic"
pattern = "^mbmd/[\\w-]+/[\\w]+/(L.)$"
replacement = "${1}"
result_key = "line"
# name = mbmd
## revalue tags
[[processors.enum]]
order = 40
namepass = ["mbmd"]
# map src -> node
[[processors.enum.mapping]]
tag = "src"
dest = "node"
[processors.enum.mapping.value_mappings]
se1-1 = "inverter"
se1-1-1 = "energymeter"
# map src -> sensor
[[processors.enum.mapping]]
tag = "src"
dest = "sensor"
[processors.enum.mapping.value_mappings]
se1-1 = "SE15k"
se1-1-1 = "SE-MTR-3Y-400V-A"
# map src -> location
[[processors.enum.mapping]]
tag = "src"
dest = "location"
[processors.enum.mapping.value_mappings]
se1-1 = "pv"
se1-1-1 = "house-connection"
# map name -> measurement
[[processors.enum.mapping]]
tag = "name"
dest = "measurement"
[processors.enum.mapping.value_mappings]
ApparentPower = "power"
Cosphi = "cosphi"
Current = "current"
DCCurrent = "current"
DCPower = "power"
DCVoltage = "voltage"
Export = "work"
Frequency = "frequency"
Import = "work"
Power = "power"
ReactivePower = "power"
Voltage = "voltage"
# from node-red
PowerExport = "power"
PowerImport = "power"
PowerSelfConsumption = "power"
# name = mbmd
# set measurement to tag['name'] = value['value']
# e.g.
# before: mbmd name=PowerSelfConsumption,... value=242
# after : mbmd name=PowerSelfConsumption,... PowerSelfConsumption=242
[[processors.pivot]]
order = 50
namepass = ["mbmd"]
## Tag to use for naming the new field.
tag_key = "name"
## Field to use as the value of the new field.
value_key = "value"
# name = mbmd
# set name (not the tag 'name')
# e.g.
# before: mbmd measurement=power,... PowerSelfConsumption=242
# after : power ... PowerSelfConsumption=242
[[processors.converter]]
order = 60
namepass = ["mbmd"]
tagexclude = ["name", "topic", "src"]
[processors.converter.tags]
measurement = ["measurement"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment