docs: async def _async_listen(self, callback=None):
          """Listen loop."""
          while True:
              if not self._running:
                  return
  
              try:
                  packet = await self.get_json(
                      URL_LISTEN.format(self._url), timeout=30, exceptions=True)
              except asyncio.TimeoutError:
                  continue
              except aiohttp.client_exceptions.ClientError as exc:
                  _LOGGER.warning("ClientError: %s", exc)
                  self._sleep_task = self.loop.create_task(asyncio.sleep(30))
                  try:
                      await self._sleep_task
                  except asyncio.CancelledError:
                      pass
                  self._sleep_task = None
                  continue
  
              if isinstance(packet, dict) and QS_CMD in packet:
                  _LOGGER.debug("callback( %s )", packet)
                  try:
                      callback(packet)
                  except Exception as err:  # pylint: disable=broad-except
                      _LOGGER.error("Exception in callback\nType: %s: %s",
                                    type(err), err)
              else:
                  _LOGGER.debug("unknown packet? %s", packet)