docs: public void writeProperty(Destination dst, int objIndex, int propID, int start,
  		int elements, byte[] data) throws KNXTimeoutException, KNXRemoteException,
  		KNXDisconnectException, KNXLinkClosedException
  	{
  		if (objIndex < 0 || objIndex > 255 || propID < 0 || propID > 255 || start < 0
  			|| start > 0xFFF || data.length == 0 || elements < 0 || elements > 15)
  			throw new KNXIllegalArgumentException("argument value out of range");
  		final byte[] asdu = new byte[4 + data.length];
  		asdu[0] = (byte) objIndex;
  		asdu[1] = (byte) propID;
  		asdu[2] = (byte) ((elements << 4) | ((start >>> 8) & 0xF));
  		asdu[3] = (byte) start;
  		for (int i = 0; i < data.length; ++i)
  			asdu[4 + i] = data[i];
  		final byte[] send = DataUnitBuilder.createAPDU(PROPERTY_WRITE, asdu);
  		final byte[] apdu = sendWait2(dst, priority, send, PROPERTY_RESPONSE, 4, 14);
  		// if number of elements is 0, remote app had problems
  		final int elems = (apdu[4] & 0xFF) >> 4;
  		if (elems == 0)
  			throw new KNXRemoteException("property write failed/forbidden");
  		if (elems != elements)
  			throw new KNXInvalidResponseException("number of elements differ");
  		if (data.length != apdu.length - 6)
  			throw new KNXInvalidResponseException("data lengths differ, bytes: "
  				+ data.length + " written, " + (apdu.length - 6) + " response");
  		// explicitly read back written properties
  		for (int i = 4; i < asdu.length; ++i)
  			if (apdu[2 + i] != asdu[i])
  				throw new KNXRemoteException("read back failed (erroneous property data)");
  	}