from enum import auto from .._node import MqttNode from .._module import MqttModule from .._payload import MqttPayload from ...util import HashableEnum two_digits_precision = lambda x: round(x, 2) MODULE_NAME = 'MqttTempHumModule' class TempHumDataPayload(MqttPayload): FORMAT = '=ddb' UNPACKER = { 'temp': two_digits_precision, 'rh': two_digits_precision } temp: float rh: float error: int 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 MqttTempHumModule(MqttModule): def init(self, mqtt: MqttNode): mqtt.subscribe_module('temphum/data', self) def handle_payload(self, mqtt: MqttNode, topic: str, payload: bytes): if topic == 'temphum/data': message = TempHumDataPayload.unpack(payload) self._logger.debug(message)