diff --git a/src/revpimodio2/device.py b/src/revpimodio2/device.py index 7f24cbc..347024a 100644 --- a/src/revpimodio2/device.py +++ b/src/revpimodio2/device.py @@ -354,8 +354,10 @@ class Device(object): elif bool(dict_io[key][7]): # Use IOBase for bit values io_new = IOBase(self, dict_io[key], iotype, "little", False) - elif isinstance(self, DioModule) and dict_io[key][3] in self._lst_counter: - # Counter IO on a DI or DIO + elif (isinstance(self, DioModule) or isinstance(self, MioModule)) and dict_io[key][ + 3 + ] in self._lst_counter: + # Counter IO on a DI, DIO or MIO module io_new = IntIOCounter( self._lst_counter.index(dict_io[key][3]), self, @@ -2030,6 +2032,23 @@ class DioModule(Device): super().__init__(parentmodio, dict_device, simulator=simulator) +class MioModule(Device): + """Represents a MIO module.""" + + __slots__ = "_lst_counter" + + def __init__(self, parentmodio, dict_device, simulator=False): + """ + Extended device class to recognize IntIOCounter. + + :rev: :func:`Device.__init__()` + """ + # String list of byte addresses that are a counter. + self._lst_counter = list(map(str, range(9, 17, 2))) + + super().__init__(parentmodio, dict_device, simulator=simulator) + + class RoModule(Device): """Relais output (RO) module with""" diff --git a/src/revpimodio2/modio.py b/src/revpimodio2/modio.py index 046e0ee..a34f0de 100644 --- a/src/revpimodio2/modio.py +++ b/src/revpimodio2/modio.py @@ -403,6 +403,9 @@ class RevPiModIO(object): elif pt == ProductType.RO: # RO dev_new = devicemodule.RoModule(self, device, simulator=self._simulator) + elif pt == ProductType.MIO: + # MIO + dev_new = devicemodule.MioModule(self, device, simulator=self._simulator) else: # All other IO devices dev_new = devicemodule.Device(self, device, simulator=self._simulator)