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))