annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1749
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
1 import json
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
2 import logging
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
3
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
4 from aiomqtt import Client
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
5 from prometheus_client import Counter, Gauge
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
6 from rdferry import StarletteServer
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
7
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
8 logging.basicConfig(level=logging.DEBUG)
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
9 log = logging.getLogger()
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
10
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
11 powermeter_reports = Counter('powermeter_reports', 'mqtt messages from powermeter', labelnames=['sensor'])
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
12 metrics = {}
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
13 for sensor_field, metric_name in [
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
14 ('Power', 'powermeter_w'),
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
15 ('ApparentPower', 'powermeter_apparent_power_va'),
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
16 ('ReactivePower', 'powermeter_reactive_power_var'),
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
17 ('Factor', 'powermeter_factor'),
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
18 ('Voltage', 'powermeter_voltage_v'),
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
19 ('Current', 'powermeter_current_a'),
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
20 ]:
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
21 metrics[sensor_field] = Gauge(metric_name, documentation='', labelnames=['sensor'])
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
22
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
23
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
24 async def subscribe_to_sensor(topic, sensor_label):
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
25 async with Client("mqtt2") as client:
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
26 await client.subscribe(topic)
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
27 async for message in client.messages:
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
28 msg = (json.loads(message.payload))
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
29 for sf, m in metrics.items():
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
30 m.labels(sensor=sensor_label).set(msg['ENERGY'][sf])
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
31 powermeter_reports.labels(sensor=sensor_label).inc()
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
32
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
33
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
34 server = StarletteServer()
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
35 server.serve(startup_tasks=[
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
36 subscribe_to_sensor(topic="tele/st-wall-power/SENSOR", sensor_label='st_wall'),
4b29ce991e59 cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff changeset
37 ])