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
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 [
1751
610beb3248d1 renames and cleanup
drewp@bigasterisk.com
parents: 1749
diff changeset
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
610beb3248d1 renames and cleanup
drewp@bigasterisk.com
parents: 1749
diff changeset
17 ('Factor', 'powermeter_factor'),
610beb3248d1 renames and cleanup
drewp@bigasterisk.com
parents: 1749
diff changeset
18 ('Voltage', 'powermeter_voltage_v'),
610beb3248d1 renames and cleanup
drewp@bigasterisk.com
parents: 1749
diff changeset
19 ('Current', 'powermeter_current_a'),
610beb3248d1 renames and cleanup
drewp@bigasterisk.com
parents: 1749
diff changeset
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
610beb3248d1 renames and cleanup
drewp@bigasterisk.com
parents: 1749
diff changeset
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
3cf5333f2f30 add sensor
drewp@bigasterisk.com
parents: 1751
diff changeset
37 subscribe_to_sensor(topic="tele/ki-fridge/SENSOR", sensor_label='ki_fridge'),
1753
add4ce853035 another sensor
drewp@bigasterisk.com
parents: 1752
diff changeset
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 ])