diff --git a/addons/hw_drivers/iot_handlers/interfaces/PrinterInterface.py b/addons/hw_drivers/iot_handlers/interfaces/PrinterInterface.py index 371773b899e..4484f0d0c24 100644 --- a/addons/hw_drivers/iot_handlers/interfaces/PrinterInterface.py +++ b/addons/hw_drivers/iot_handlers/interfaces/PrinterInterface.py @@ -14,9 +14,10 @@ cups_lock = Lock() # We can only make one call to Cups at a time class PrinterInterface(Interface): _loop_delay = 120 connection_type = 'printer' + printer_devices = {} def get_devices(self): - printer_devices = {} + discovered_devices = {} with cups_lock: printers = conn.getPrinters() devices = conn.getDevices() @@ -35,8 +36,19 @@ class PrinterInterface(Interface): identifier = self.get_identifier(path) device.update({'identifier': identifier}) device.update({'url': path}) - printer_devices.update({identifier: device}) - return printer_devices + device.update({'disconnect_counter': 0}) + discovered_devices.update({identifier: device}) + self.printer_devices.update(discovered_devices) + # Deal with devices which are on the list but were not found during this call of "get_devices" + # If they aren't detected 3 times consecutively, remove them from the list of available devices + for device in list(self.printer_devices): + if not discovered_devices.get(device): + disconnect_counter = self.printer_devices.get(device).get('disconnect_counter') + if disconnect_counter >= 2: + self.printer_devices.pop(device, None) + else: + self.printer_devices[device].update({'disconnect_counter': disconnect_counter + 1}) + return dict(self.printer_devices) def get_identifier(self, path): if 'uuid=' in path: