Bugfix: Missing core. IOs in MQTT on RevPi FLAT devices

Change the function to find direct core IOs on all actual and upcoming devices.
To set a MQTT output (bool) the special value true/false as payload is now case-insensitive.
This commit is contained in:
2022-03-13 09:04:23 +01:00
parent 63d8d73d1a
commit a47fae5b7a

View File

@@ -167,27 +167,10 @@ class MqttServer(Thread):
# CoreIOs prüfen und zu export hinzufügen # CoreIOs prüfen und zu export hinzufügen
lst_coreio = [] lst_coreio = []
if self._rpi.core: if self._rpi.core:
if self._rpi.core.a1green.export: for obj_name in self._rpi.core.__slots__:
lst_coreio.append(self._rpi.core.a1green) obj = getattr(self._rpi.core, obj_name)
if self._rpi.core.a1red.export: if isinstance(obj, revpimodio2.io.IOBase):
lst_coreio.append(self._rpi.core.a1red) lst_coreio.append(obj)
if self._rpi.core.a2green.export:
lst_coreio.append(self._rpi.core.a2green)
if self._rpi.core.a2red.export:
lst_coreio.append(self._rpi.core.a2red)
if self._rpi.core.wd.export:
lst_coreio.append(self._rpi.core.wd)
# Connect-IOs anhängen
if type(self._rpi.core) == revpimodio2.device.Connect:
if self._rpi.core.a3green.export:
lst_coreio.append(self._rpi.core.a3green)
if self._rpi.core.a3red.export:
lst_coreio.append(self._rpi.core.a3red)
if self._rpi.core.x2in.export:
lst_coreio.append(self._rpi.core.x2in)
if self._rpi.core.x2out.export:
lst_coreio.append(self._rpi.core.x2out)
# IOs exportieren und Events anmelden # IOs exportieren und Events anmelden
for io in lst_coreio: for io in lst_coreio:
@@ -292,9 +275,9 @@ class MqttServer(Thread):
proginit.logger.error("can not convert value '{0}' to fitting bytes".format(value)) proginit.logger.error("can not convert value '{0}' to fitting bytes".format(value))
return return
elif value == "false" and not io_needbytes: elif value.lower() == "false" and not io_needbytes:
value = 0 value = 0
elif value == "true" and not io_needbytes: elif value.lower() == "true" and not io_needbytes:
value = 1 value = 1
else: else:
proginit.logger.error("can not convert value '{0}' for output '{1}'".format(value, ioname)) proginit.logger.error("can not convert value '{0}' for output '{1}'".format(value, ioname))