docs: def group_read(self, addr, use_cache=True, timeout=1):
          """Send a group read to the KNX bus and return the result."""
          if use_cache:
              res = self.value_cache.get(addr)
              if res:
                  logging.debug(
                      "Got value of group address %s from cache: %s", addr, res)
                  return res
  
          cemi = CEMIMessage()
          cemi.init_group_read(addr)
  
          with self._lock:
              # There might be old messages in the result quue, remove them
              self.result_queue.queue.clear()
              self.send_tunnelling_request(cemi)
              # Wait for the result
              try:
                  res = self.result_queue.get(block=True, timeout=timeout)
              except queue.Empty:
                  return None
  
              self.result_queue.task_done()
              return res