docs: def data_received(self, data):
          """Message was received from device."""
          # A message might be split over several reads, so we store a buffer and
          # try to decode messages from that buffer
          self._buffer += data
          log_binary(_LOGGER, '<< Receive', Data=data)
  
          while self._buffer:
              # The variant tells us how much data must follow
              length, raw = read_variant(self._buffer)
              if len(raw) < length:
                  _LOGGER.debug(
                      'Require %d bytes but only %d in buffer', length, len(raw))
                  break
  
              data = raw[:length]  # Incoming message (might be encrypted)
              self._buffer = raw[length:]  # Buffer, might contain more messages
  
              try:
                  self._handle_message(data)
              except Exception:  # pylint: disable=broad-except
                  _LOGGER.error('Failed to handle message')