add telegraf output script
This commit is contained in:
parent
6056a639cb
commit
263b166c93
1 changed files with 72 additions and 0 deletions
72
telegraf.py
Normal file
72
telegraf.py
Normal file
|
@ -0,0 +1,72 @@
|
|||
import logging
|
||||
from sys import argv
|
||||
from tomllib import load
|
||||
|
||||
import paho.mqtt.client as mqtt
|
||||
|
||||
with open(argv[1], "rb") as f:
|
||||
config = load(f)
|
||||
|
||||
MQTT_SUB = "{}/".format(config["mqtt"]["prefix"])
|
||||
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def out(keys, value):
|
||||
print(
|
||||
"{},{} value={}".format(
|
||||
config["telegraf"]["measurement"],
|
||||
",".join([f"{k}={v}" for k, v in keys.items()]),
|
||||
value,
|
||||
),
|
||||
flush=True,
|
||||
)
|
||||
|
||||
|
||||
def on_connect(client, userdata, flags, rc):
|
||||
LOG.info(f"Connected to mqtt server")
|
||||
mqtt.subscribe(f"{MQTT_SUB}#")
|
||||
LOG.info(f"subscribing to {MQTT_SUB}")
|
||||
|
||||
|
||||
def on_disconnect(client, userdata, rc):
|
||||
LOG.info(f"Disconnected from mqtt server")
|
||||
|
||||
|
||||
def on_message(client, userdata, msg):
|
||||
try:
|
||||
topic = msg.topic[len(MQTT_SUB) :]
|
||||
if "/" in topic:
|
||||
k1, k2 = topic.split("/", 1)
|
||||
out(
|
||||
{
|
||||
"measurement": k1,
|
||||
"line": k2,
|
||||
},
|
||||
msg.payload.decode(),
|
||||
)
|
||||
else:
|
||||
out(
|
||||
{
|
||||
"measurement": topic,
|
||||
},
|
||||
msg.payload.decode(),
|
||||
)
|
||||
except Exception:
|
||||
LOG.exception(f"could not parse {msg.topic!r} {msg.payload!r}")
|
||||
|
||||
|
||||
try:
|
||||
LOG.info("mooooin!")
|
||||
mqtt = mqtt.Client()
|
||||
mqtt.on_connect = on_connect
|
||||
mqtt.on_disconnect = on_disconnect
|
||||
mqtt.on_message = on_message
|
||||
mqtt.connect(config["mqtt"]["host"], config["mqtt"]["port"], 10)
|
||||
|
||||
LOG.info("starting loop")
|
||||
mqtt.loop_forever()
|
||||
LOG.info("bye")
|
||||
except Exception:
|
||||
LOG.exception("oops")
|
Loading…
Reference in a new issue