Mercurial > code > home > repos > homeauto
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 ]) |