Mercurial > code > home > repos > homeauto
view service/powerEagle/plugs/exporter.py @ 1749:4b29ce991e59
cloudfree plug sends mqtt metrics, which we export to victoriametrics
author | drewp@bigasterisk.com |
---|---|
date | Sun, 28 Apr 2024 16:01:38 -0700 |
parents | |
children |
line wrap: on
line source
import json import logging from aiomqtt import Client from prometheus_client import Counter, Gauge from rdferry import StarletteServer logging.basicConfig(level=logging.DEBUG) log = logging.getLogger() powermeter_reports = Counter('powermeter_reports', 'mqtt messages from powermeter', labelnames=['sensor']) metrics = {} for sensor_field, metric_name in [ ('Power', 'powermeter_w'), ('ApparentPower', 'powermeter_apparent_power_va'), ('ReactivePower', 'powermeter_reactive_power_var'), ('Factor', 'powermeter_factor'), ('Voltage', 'powermeter_voltage_v'), ('Current', 'powermeter_current_a'), ]: metrics[sensor_field] = Gauge(metric_name, documentation='', labelnames=['sensor']) async def subscribe_to_sensor(topic, sensor_label): async with Client("mqtt2") as client: await client.subscribe(topic) async for message in client.messages: msg = (json.loads(message.payload)) for sf, m in metrics.items(): m.labels(sensor=sensor_label).set(msg['ENERGY'][sf]) powermeter_reports.labels(sensor=sensor_label).inc() server = StarletteServer() server.serve(startup_tasks=[ subscribe_to_sensor(topic="tele/st-wall-power/SENSOR", sensor_label='st_wall'), ])