aboutsummaryrefslogtreecommitdiff
path: root/src/home/temphum/__init__.py
blob: 30a459ecbb6c1b8d87c10d19274903f71ebf4910 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from importlib import import_module

__all__ = [
    'SensorType',
    'TempHumSensor',
    'TempHumNodes',
    'create_sensor'
]


def __import_sensor(name):
    if name == 'si7021':
        return import_module('.si7021', __name__).Si7021
    elif name == 'dht12':
        return import_module('.dht12', __name__).DHT12
    else:
        raise ValueError(f'unexpected sensor type: {name}')


def __getattr__(name):
    if name == 'create_sensor':
        base = import_module('.base', __name__)

        def create_sensor(type: base.SensorType, bus: int) -> base.TempHumSensor:
            if type == base.SensorType.Si7021:
                return __import_sensor('si7021')(bus)
            elif type == base.SensorType.DHT12:
                return __import_sensor('dht12')(bus)
            else:
                raise ValueError(f'unexpected sensor type: {type}')

        return create_sensor

    elif name in ('SensorType', 'TempHumSensor'):
        return getattr(import_module('.base', __name__), name)

    elif name == 'TempHumNodes':
        return import_module('.nodes', __name__).TempHumNodes