<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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