view convert.py @ 2:579df3a4e62d

rewrite converters as register'able functions
author drewp@bigasterisk.com
date Fri, 09 Aug 2024 17:37:00 -0700
parents
children cd1b8d7bda78
line wrap: on
line source

converters = []


def topic(topic_pattern: str):

    def decorator(func):
        func.topic_pattern = topic_pattern
        converters.append(func)
        return func

    return decorator


@topic(r'([^-]+)-air-quality/sensor/particulate_matter__10_0__m_concentration/state')
def pm(message, topicGroups: tuple[str]):
    return {
        'name': 'air_quality_pm',
        'labels': [{
            'labelName': 'location',
            'labelValue': topicGroups[0],
        }, {
            'labelName': 'size',
            'labelValue': '10',
        }],
        'value': message['payload'],
    }


@topic(r'([^-]+)-air-quality/sensor/air_temperature_c/state')
def air_temp(message, topicGroups: tuple[str]):
    return {
        'name': 'air_temperature_f',
        'labels': [{
            'labelName': 'location',
            'labelValue': topicGroups[0],
        }],
        'value': (float(message['payload']) * 9 / 5) + 32,
    }