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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4
cd1b8d7bda78 get metrics writing to victoriametrics
drewp@bigasterisk.com
parents: 2
diff changeset
1 '''
cd1b8d7bda78 get metrics writing to victoriametrics
drewp@bigasterisk.com
parents: 2
diff changeset
2 Note that these functions need to parse the message['payload'] into a float
cd1b8d7bda78 get metrics writing to victoriametrics
drewp@bigasterisk.com
parents: 2
diff changeset
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
cd1b8d7bda78 get metrics writing to victoriametrics
drewp@bigasterisk.com
parents: 2
diff changeset
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 }]