Mercurial > code > home > repos > mqtt_metrics
annotate convert.py @ 5:8390d5d0d512
one mqtt message can convert to multiple measurements
author | drewp@bigasterisk.com |
---|---|
date | Sat, 10 Aug 2024 23:02:51 -0700 |
parents | cd1b8d7bda78 |
children | bc2a93b306e9 |
rev | line source |
---|---|
4 | 1 ''' |
2 Note that these functions need to parse the message['payload'] into a float | |
3 ''' | |
2
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
4 converters = [] |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
5 |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
6 |
5
8390d5d0d512
one mqtt message can convert to multiple measurements
drewp@bigasterisk.com
parents:
4
diff
changeset
|
7 def f_from_c(c): |
8390d5d0d512
one mqtt message can convert to multiple measurements
drewp@bigasterisk.com
parents:
4
diff
changeset
|
8 return (c * 9 / 5) + 32 |
8390d5d0d512
one mqtt message can convert to multiple measurements
drewp@bigasterisk.com
parents:
4
diff
changeset
|
9 |
8390d5d0d512
one mqtt message can convert to multiple measurements
drewp@bigasterisk.com
parents:
4
diff
changeset
|
10 |
2
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
11 def topic(topic_pattern: str): |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
12 |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
13 def decorator(func): |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
14 func.topic_pattern = topic_pattern |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
15 converters.append(func) |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
16 return func |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
17 |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
18 return decorator |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
19 |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
20 |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
21 @topic(r'([^-]+)-air-quality/sensor/particulate_matter__10_0__m_concentration/state') |
5
8390d5d0d512
one mqtt message can convert to multiple measurements
drewp@bigasterisk.com
parents:
4
diff
changeset
|
22 def pm(message, topicGroups: tuple[str]) -> list[dict]: |
8390d5d0d512
one mqtt message can convert to multiple measurements
drewp@bigasterisk.com
parents:
4
diff
changeset
|
23 return [{ |
2
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
24 'name': 'air_quality_pm', |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
25 'labels': [{ |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
26 'labelName': 'location', |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
27 'labelValue': topicGroups[0], |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
28 }, { |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
29 'labelName': 'size', |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
30 'labelValue': '10', |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
31 }], |
4 | 32 'value': float(message['payload']), |
5
8390d5d0d512
one mqtt message can convert to multiple measurements
drewp@bigasterisk.com
parents:
4
diff
changeset
|
33 }] |
2
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
34 |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
35 |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
36 @topic(r'([^-]+)-air-quality/sensor/air_temperature_c/state') |
5
8390d5d0d512
one mqtt message can convert to multiple measurements
drewp@bigasterisk.com
parents:
4
diff
changeset
|
37 def air_temp(message, topicGroups: tuple[str]) -> list[dict]: |
8390d5d0d512
one mqtt message can convert to multiple measurements
drewp@bigasterisk.com
parents:
4
diff
changeset
|
38 return [{ |
2
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
39 'name': 'air_temperature_f', |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
40 'labels': [{ |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
41 'labelName': 'location', |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
42 'labelValue': topicGroups[0], |
579df3a4e62d
rewrite converters as register'able functions
drewp@bigasterisk.com
parents:
diff
changeset
|
43 }], |
5
8390d5d0d512
one mqtt message can convert to multiple measurements
drewp@bigasterisk.com
parents:
4
diff
changeset
|
44 'value': f_from_c(float(message['payload'])), |
8390d5d0d512
one mqtt message can convert to multiple measurements
drewp@bigasterisk.com
parents:
4
diff
changeset
|
45 }] |