Dahua NetSDK Ошибка 36: NET_CONFIG_SET_FAILED — ошибка записи конфигурации
- Вызов
CLIENT_SetNewDevConfigилиCLIENT_SetConfigзавершается с возвратомFALSE(код 36). - Параметры детекции движения, видеокодека, сетевых настроек или расписания СКУД не применяются на камере.
- Устройство возвращает ошибки синтаксического анализа буфера конфигурации.
1. Проверка соответствия размера структуры (dwSize)
Наиболее частая причина ошибки — неинициализированное поле dwSize в структурах Dahua C-Style SDK:
CFG_ENCODE_INFO stEncode = { sizeof(CFG_ENCODE_INFO) };
// Обязательно заполните размер вложенных структур
stEncode.dwSize = sizeof(CFG_ENCODE_INFO);
char szBuffer[1024 * 64] = { 0 };
int nError = 0;
BOOL bRet = CLIENT_ParseData(CFG_CMD_ENCODE, &stEncode, szBuffer, sizeof(szBuffer), &nError);
if (!bRet) {
printf("ParseData failed with code: %d\n", nError);
}2. Использование универсального интерфейса JSON конфигураций
В современных прошивках бинарные структуры устарели. Используйте прямую отправку JSON строк через CLIENT_SetNewDevConfig:
char szOutBuffer[1024] = { 0 };
int nError = 0, nRestart = 0;
BOOL bSuccess = CLIENT_SetNewDevConfig(
lLoginHandle,
CFG_CMD_MOTIONDETECT, // Команда
0, // Индекс канала (nChannelID)
szJsonConfigBuffer, // Валидный JSON буфер
strlen(szJsonConfigBuffer),
&nError,
&nRestart,
5000 // Таймаут в мс
);3. Валидация JSON через RPC API камеры
Проверьте допустимость параметров и структуру конфигурации напрямую через HTTP-запрос:
curl -k --digest -u admin:Password123! -X POST -d '{"method":"configManager.getConfig","params":{"name":"MotionDetect"},"id":1}' "http://192.168.1.108/cgi-bin/configManager.cgi"4. Проверка прав пользователя на изменение системных настроек
Убедитесь, что учетная запись, под которой выполнен CLIENT_Login, входит в группу admin и имеет флаг SystemConfig.
Частые вопросы (FAQ)
Почему конфигурация с одинаковым кодом работает на NVR серии 4xxx, но падает на серии 5xxx?
Разные поколения устройств используют разные схемы структур конфигурации (Legacy Binary vs JSON API). Для кроссплатформенности используйте вызовы CLIENT_GetNewDevConfig/CLIENT_SetNewDevConfig с командами JSONRPC.
Что означает параметр nRestart, возвращаемый в CLIENT_SetNewDevConfig?
Если nRestart равен 1, то для вступления примененных параметров в силу требуется полная перезагрузка аппаратного устройства (CLIENT_RebootDev).
Как узнать точное поле JSON, вызвавшее ошибку валидации?
Анализируйте выходной параметр nError. Если он указывает на синтаксический сбой, включите SDK лог через CLIENT_LogOpen, где будет зафиксировано отброшенное поле схемы.
Нужно ли вызывать CLIENT_GetNewDevConfig перед CLIENT_SetNewDevConfig?
Да, строго рекомендуется сначала запросить текущую конфигурацию, изменить только целевые поля (например, FPS или битрейт) и отправить обратно полный объект во избежание сброса неописанных параметров в дефолт.