docs: def _send_and_wait(self, **kwargs):
          """
          Send a frame to either the local ZigBee or a remote device and wait
          for a pre-defined amount of time for its response.
          """
          frame_id = self.next_frame_id
          kwargs.update(dict(frame_id=frame_id))
          self._send(**kwargs)
          timeout = datetime.now() + const.RX_TIMEOUT
          while datetime.now() < timeout:
              try:
                  frame = self._rx_frames.pop(frame_id)
                  raise_if_error(frame)
                  return frame
              except KeyError:
                  sleep(0.1)
                  continue
          _LOGGER.exception(
              "Did not receive response within configured timeout period.")
          raise exceptions.ZigBeeResponseTimeout()