comparison 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
comparison
equal deleted inserted replaced
1748:d012c53c5ae8 1749:4b29ce991e59
1 import json
2 import logging
3
4 from aiomqtt import Client
5 from prometheus_client import Counter, Gauge
6 from rdferry import StarletteServer
7
8 logging.basicConfig(level=logging.DEBUG)
9 log = logging.getLogger()
10
11 powermeter_reports = Counter('powermeter_reports', 'mqtt messages from powermeter', labelnames=['sensor'])
12 metrics = {}
13 for sensor_field, metric_name in [
14 ('Power', 'powermeter_w'),
15 ('ApparentPower', 'powermeter_apparent_power_va'),
16 ('ReactivePower', 'powermeter_reactive_power_var'),
17 ('Factor', 'powermeter_factor'),
18 ('Voltage', 'powermeter_voltage_v'),
19 ('Current', 'powermeter_current_a'),
20 ]:
21 metrics[sensor_field] = Gauge(metric_name, documentation='', labelnames=['sensor'])
22
23
24 async def subscribe_to_sensor(topic, sensor_label):
25 async with Client("mqtt2") as client:
26 await client.subscribe(topic)
27 async for message in client.messages:
28 msg = (json.loads(message.payload))
29 for sf, m in metrics.items():
30 m.labels(sensor=sensor_label).set(msg['ENERGY'][sf])
31 powermeter_reports.labels(sensor=sensor_label).inc()
32
33
34 server = StarletteServer()
35 server.serve(startup_tasks=[
36 subscribe_to_sensor(topic="tele/st-wall-power/SENSOR", sensor_label='st_wall'),
37 ])