Mercurial > code > home > repos > homeauto
annotate service/powerEagle/plugs/powermeter_exporter.py @ 1753:add4ce853035
another sensor
author | drewp@bigasterisk.com |
---|---|
date | Sun, 05 May 2024 17:59:05 -0700 |
parents | 3cf5333f2f30 |
children | 92999dfbf321 |
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 [ |
1751 | 14 ('Power', 'powermeter_w'), |
1749
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'), |
1751 | 17 ('Factor', 'powermeter_factor'), |
18 ('Voltage', 'powermeter_voltage_v'), | |
19 ('Current', 'powermeter_current_a'), | |
20 ]: # yapf: disable | |
1749
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: |
1751 | 28 msg = json.loads(message.payload) |
1749
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'), |
1752 | 37 subscribe_to_sensor(topic="tele/ki-fridge/SENSOR", sensor_label='ki_fridge'), |
1753 | 38 subscribe_to_sensor(topic="tt-console-power/SENSOR", sensor_label='tt_console'), |
1749
4b29ce991e59
cloudfree plug sends mqtt metrics, which we export to victoriametrics
drewp@bigasterisk.com
parents:
diff
changeset
|
39 ]) |