def write_output(self, register_type: Union[RegisterTypeEnum, CoilTypeEnum], value): if type(register_type) == 'str': register = registerByName(register_type) elif type(register_type) == RegisterTypeEnum: register = registers.get(register_type) elif type(register_type) == CoilTypeEnum: register = coils.get(register_type) if not register: raise Exception("Unknown register {}".format(register_type.name)) values = register.encode(value) response = False if register.is_coil(): self.client.write_coil(register.address, values, unit=self.unit) response = True elif register.is_discrete_input(): _logger.error("Cannot write discrete input {}".format(register_type.name)) pass elif register.is_input_register(): _logger.error("Cannot write input register {}".format(register_type.name)) pass else: self.client.write_registers(register.address, values, unit=self.unit) response = True return response
def read_input(self, register_type: Union[RegisterTypeEnum, CoilTypeEnum]): if type(register_type) == 'str': register = registerByName(register_type) elif type(register_type) == RegisterTypeEnum: register = registers.get(register_type) elif type(register_type) == CoilTypeEnum: register = coils.get(register_type) if not register: raise Exception("Unknown register {}".format(register_type.name)) if register.is_coil(): response = self.client.read_coils(register.address, register.size, unit=self.unit) elif register.is_discrete_input(): response = self.client.read_discrete_inputs(register.address, register.size, unit=self.unit) elif register.is_input_register(): response = self.client.read_input_registers(register.address, register.size, unit=self.unit) else: response = self.client.read_holding_registers(register.address, register.size, unit=self.unit) return register.decode(response)