code: public boolean update(String url, String md5) throws CommandExecutionException {
          if (url == null || md5 == null) throw new CommandExecutionException(CommandExecutionException.Error.INVALID_PARAMETERS);
          if (md5.length() != 32) throw new CommandExecutionException(CommandExecutionException.Error.INVALID_PARAMETERS);
          JSONObject params = new JSONObject();
          params.put("mode","normal");
          params.put("install", "1");
          params.put("app_url", url);
          params.put("file_md5", md5);
          params.put("proc", "dnld install");
          return sendOk("miIO.ota", params);
      }
docs: Command the device to update
  @param url The URL to update from
  @param md5 The MD5 Checksum for the update
  @return True if the command has been received. This does not mean that the update was successful.
  @throws CommandExecutionException When there has been a error during the communication or the response was invalid.