def __model_subscription_status_handler(self, opcode, message): status, element_address = struct.unpack("<BH", message.data[0:3]) status = AccessStatus(status) self.logger.info("Model subscription status: %s", status) if status == AccessStatus.SUCCESS: # address = struct.unpack("<H", message[3:5]) address = self._tmp_address self._tmp_address = None model_id = mt.ModelId.unpack(message.data[5:]) model = self.model_get(element_address, model_id) if address not in model.subscribe: model.subscribe.append(mt.group_address(address)) self.db_save() self.logger.info("Added subscription %r to model %r at element %04x", address, model_id, element_address)
def __model_sig_subscription_list_handler(self, opcode, message): status, element_address, model_id = struct.unpack( "<BHH", message.data[0:5]) status = AccessStatus(status) self.logger.info("SIG Model Subscription List status: %s", status) if status == AccessStatus.SUCCESS: if len(message.data) > 5: addresses = struct.unpack( "<" + "H" * (len(message.data[5:]) // 2), message.data[5:]) addresses = [mt.group_address(a) for a in addresses] else: addresses = [] model = self.model_get(element_address, mt.ModelId(model_id)) model.subscribe = addresses self.db_save() self.logger.info("SIG model %04x has addresse(s) %r bound", model_id, addresses)