docs: async def scan(self, timeout=1):
          """Return a list of local IP addresses on interfaces with LIFX bulbs."""
          adapters = await self.loop.run_in_executor(None, ifaddr.get_adapters)
          ips = [ip.ip for adapter in ifaddr.get_adapters() for ip in adapter.ips if ip.is_IPv4]
  
          if not ips:
              return []
  
          tasks = []
          discoveries = []
          for ip in ips:
              manager = ScanManager(ip)
              lifx_discovery = LifxDiscovery(self.loop, manager)
              discoveries.append(lifx_discovery)
              lifx_discovery.start(listen_ip=ip)
              tasks.append(self.loop.create_task(manager.lifx_ip()))
  
          (done, pending) = await aio.wait(tasks, timeout=timeout)
  
          for discovery in discoveries:
              discovery.cleanup()
  
          for task in pending:
              task.cancel()
  
          return [task.result() for task in done]