comparison service/powerEagle/plugs/powermeter_exporter.py @ 1751:610beb3248d1

renames and cleanup
author drewp@bigasterisk.com
date Sun, 28 Apr 2024 17:12:06 -0700
parents service/powerEagle/plugs/exporter.py@4b29ce991e59
children 3cf5333f2f30
comparison
equal deleted inserted replaced
1750:00e04a98493d 1751:610beb3248d1
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 ]: # yapf: disable
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 ])