summaryrefslogtreecommitdiff
path: root/src/home/mqtt/temphum.py
blob: 44810ef9683d9d8314030a815ed15bdbe96ef45a (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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import paho.mqtt.client as mqtt
import re

from enum import auto
from .payload.temphum import TempHumDataPayload
from .esp import MqttEspBase
from ..util import HashableEnum


class MqttTempHumNodes(HashableEnum):
    KBN_SH_HALL = auto()
    KBN_SH_BATHROOM = auto()
    KBN_SH_LIVINGROOM = auto()
    KBN_SH_BEDROOM = auto()

    KBN_BH_2FL = auto()
    KBN_BH_2FL_STREET = auto()
    KBN_BH_1FL_LIVINGROOM = auto()
    KBN_BH_1FL_BEDROOM = auto()
    KBN_BH_1FL_BATHROOM = auto()

    KBN_NH_1FL_INV = auto()
    KBN_NH_1FL_CENTER = auto()
    KBN_NH_1LF_KT = auto()
    KBN_NH_1FL_DS = auto()
    KBN_NH_1FS_EZ = auto()

    SPB_FLAT120_CABINET = auto()


class MqttTempHum(MqttEspBase):
    TOPIC_LEAF = 'temphum'

    def on_message(self, client: mqtt.Client, userdata, msg):
        if super().on_message(client, userdata, msg):
            return

        try:
            match = re.match(self.get_mqtt_topics(['data']), msg.topic)
            if not match:
                return

            device_id = match.group(1)
            subtopic = match.group(2)

            message = None
            if subtopic == 'data':
                message = TempHumDataPayload.unpack(msg.payload)

            if message and self._message_callback:
                self._message_callback(device_id, message)

        except Exception as e:
            self._logger.exception(str(e))