Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion packages/modules/common/configurable_io.py
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand All @@ -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"):
Expand Down
16 changes: 11 additions & 5 deletions packages/modules/io_devices/dimm_kit/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)