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