diff --git a/packages/modules/common/configurable_io.py b/packages/modules/common/configurable_io.py index fe1f2563f0..981bdfeb7d 100644 --- a/packages/modules/common/configurable_io.py +++ b/packages/modules/common/configurable_io.py @@ -18,7 +18,8 @@ class ConfigurableIo(Generic[T_IO_CONFIG], AbstractIoDevice): def __init__(self, config: T_IO_CONFIG, component_reader: Callable[[], IoState], - component_writer: Callable[[Dict[int, Union[float, int]]], Optional[IoState]]) -> None: + component_writer: Callable[[Dict[int, Union[float, int]]], Optional[IoState]], + initializer: Callable = lambda: None) -> None: self.config = config self.fault_state = FaultState(ComponentInfo(self.config.id, self.config.name, ComponentType.IO.value)) @@ -27,6 +28,7 @@ def __init__(self, with SingleComponentUpdateContext(self.fault_state): self.component_reader = component_reader self.component_writer = component_writer + initializer() def read(self): if hasattr(self, "component_reader"): diff --git a/packages/modules/io_devices/dimm_kit/api.py b/packages/modules/io_devices/dimm_kit/api.py index 7e953dd08d..02a9fc1f24 100644 --- a/packages/modules/io_devices/dimm_kit/api.py +++ b/packages/modules/io_devices/dimm_kit/api.py @@ -17,8 +17,12 @@ def create_io(config: IoLan): + version = False + client = None + def read(): nonlocal version + nonlocal client if version is False: try: parsed_answer = get_version_by_telnet(VALID_VERSIONS[0], config.configuration.host) @@ -53,15 +57,17 @@ def read(): ) for pin in DigitalOutputMapping}) def write(analog_output: Optional[Dict[str, int]], digital_output: Optional[Dict[str, bool]]) -> None: + nonlocal client for i, value in digital_output.items(): client.write_single_coil(DigitalOutputMapping[i].value, 1 if value is True else 0, unit=config.configuration.modbus_id) - version = False - client = ModbusTcpClient_(config.configuration.host, config.configuration.port) - for output, value in config.output["digital"].items(): - client.write_single_coil(DigitalOutputMapping[output].value, value, unit=config.configuration.modbus_id) - return ConfigurableIo(config=config, component_reader=read, component_writer=write) + def initializer(): + nonlocal client + client = ModbusTcpClient_(config.configuration.host, config.configuration.port) + for output, value in config.output["digital"].items(): + client.write_single_coil(DigitalOutputMapping[output].value, value, unit=config.configuration.modbus_id) + return ConfigurableIo(config=config, component_reader=read, component_writer=write, initializer=initializer) device_descriptor = DeviceDescriptor(configuration_factory=IoLan)