Вызывные панели HiWatch, iFlow и других брендов на базе Hikvision поддерживают управление замком через API-интерфейс ISAPI. Это позволяет открывать дверь удалённо — например, интегрировать домофон в систему «умный дом» или управлять доступом через сценарии. В этой статье разберём готовый рабочий пример и объясним, как он работает.
Рабочий пример команды
Для дистанционного открытия замка используется HTTP-запрос типа PUT к устройству с XML-телом. Вот готовый рабочий curl-запрос, который открывает дверь:
curl --insecure -u admin:Pa$$w0rD --digest -X PUT -d "<RemoteControlDoor><cmd>open</cmd></RemoteControlDoor>" http://192.168.100.137/ISAPI/AccessControl/RemoteControl/door/1
Этот пример взят из реальной практики интеграции панелей HiWatch с системами автоматизации и гарантированно открывает замок при корректных учётных данных и IP-адресе.
Как это работает: разбор команды
| Параметр | Значение | Пояснение |
|---|---|---|
--insecure | (флаг) | Отключает проверку SSL-сертификата — полезно, если на панели самоподписанный сертификат |
-u admin:Pa$$w0rD | логин:пароль | Учётные данные от веб-интерфейса панели (администратор) |
--digest | (флаг) | Включает Digest-аутентификацию — обязательный тип авторизации для Hikvision ISAPI |
-X PUT | метод запроса | Используется метод PUT для отправки команды управления |
-d "<RemoteControlDoor>...</RemoteControlDoor>" | XML-тело | Команда открытия замка в формате XML |
http://192.168.100.137/.../door/1 | URL | Адрес устройства, путь ISAPI, номер двери — 1 |
Почему обязателен --digest
Hikvision и его суббренды (HiWatch, iFlow) используют Digest-аутентификацию для ISAPI-запросов. Без этого флага устройство вернёт ошибку аутентификации 401 или badAuthorization . Это стандарт безопасности, который защищает пароль от перехвата.
curl с флагом --digest автоматически выполняет двухшаговую процедуру: сначала получает от устройства nonce (случайное число), затем отправляет запрос с хешем, сгенерированным из пароля и этого числа.
Где взять IP-адрес и пароль
- IP-адрес панели можно узнать:
- В интерфейсе вашего роутера (список подключённых устройств)
- Через программу SADP (для Hikvision/HiWatch)
- В меню самой панели (если есть дисплей)
- Логин и пароль — это учётная запись администратора панели. Обычно:
- Логин:
admin - Пароль: тот, который вы установили при активации панели. Заводской пароль
12345работает только до первой активации — после принудительной смены он перестаёт действовать.
- Логин:
Альтернативная структура XML
В некоторых случаях требуется более полная XML-структура с указанием xmlns и version. Для таких ситуаций подходит следующий вариант:
curl --digest -u admin:Pa$$w0rD 'http://192.168.100.137/ISAPI/AccessControl/RemoteControl/door/1' -X 'PUT' -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' --data-raw '<RemoteControlDoor xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0"><cmd>open</cmd></RemoteControlDoor>' --insecure
Обе версии (краткая и полная) рабочие, но полная рекомендуется для совместимости с разными моделями и прошивками.
Дополнительные команды
Помимо открытия замка, через тот же эндпоинт можно отправить и другие команды :
| Команда | XML-тело | Назначение |
|---|---|---|
| Открыть | <RemoteControlDoor><cmd>open</cmd></RemoteControlDoor> | Импульсное открытие замка |
| Держать открытым | <RemoteControlDoor><cmd>alwaysOpen</cmd></RemoteControlDoor> | Открывает замок и удерживает его в открытом состоянии (до команды resume) |
| Вернуть в обычный режим | <RemoteControlDoor><cmd>resume</cmd></RemoteControlDoor> | Возвращает замок в обычный режим после alwaysOpen |
Когда использовать alwaysOpen и resume
Команда alwaysOpen полезна, если нужно временно разблокировать дверь для пропуска группы людей или въезда автомобиля. Однако важно помнить, что дверь останется открытой до получения команды resume. Если забыть вернуть замок в обычный режим, это создаст уязвимость в системе безопасности.
Проверка доступных команд
Чтобы узнать, какие команды поддерживает ваша панель, отправьте GET-запрос к эндпоинту capabilities:
curl --digest -u admin:Pa$$w0rD 'http://192.168.100.137/ISAPI/AccessControl/RemoteControl/door/capabilities' --insecure
Ответ покажет, какие команды разрешены и какой диапазон номеров дверей доступен:
<RemoteControlDoor xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
<doorNo min="1" max="2"/>
<cmd opt="open,close,alwaysOpen,resume"/>
</RemoteControlDoor>
Если в ответе нет open, значит, замок не поддерживает дистанционное открытие через ISAPI — либо требуется другая версия протокола.
Частые ошибки и их решение
| Ошибка | Причина | Решение |
|---|---|---|
401 Unauthorized или badAuthorization | Отсутствует Digest-аутентификация или неверный логин/пароль | Добавьте флаг --digest, проверьте пароль |
404 Not Found | Неверный путь или номер двери | Проверьте путь: /ISAPI/AccessControl/RemoteControl/door/1. Попробуйте door/2 или door/0 |
Invalid Operation | Команда не поддерживается | Используйте только open, alwaysOpen, resume |
badXmlContent | Неверный формат XML или кодировка | Используйте полную структуру с xmlns и version="2.0" |
403 Forbidden | Недостаточно прав у пользователя | Убедитесь, что используется учётная запись администратора |
Интеграция в системы автоматизации
Этот API-вызов можно использовать в различных сценариях:
- Home Assistant: через RESTful-команду с указанием метода PUT, типа аутентификации
digestи XML-тела - Node-RED: через HTTP Request node с телом запроса и Digest Auth
- ioBroker: через соответствующий адаптер или прямые HTTP-запросы
- Собственные скрипты: на Python, JavaScript или любом языке, поддерживающем HTTP
В любом случае структура запроса остаётся той же: PUT к эндпоинту /ISAPI/AccessControl/RemoteControl/door/1 с XML-телом <RemoteControlDoor><cmd>open</cmd></RemoteControlDoor> и обязательной Digest-аутентификацией.
