En este manual relatamos el proceso de configuración de un control de acceso por reconocimiento facial Hikvision a través del protocolo ISAPI para estas pruebas se configurara la terminal de reconocimiento facial DS-K1T344MBFWX-E1 a una IP especifica que sera interpretada por nuestro receptor de eventos HTTP.
Las credenciales del dispositivo varían dependiendo de cada uno en este caso en particular tenemos:
Usuario: admin
Contraseña: Syscom2025
IP: 192.168.50.12
1. Consulta de Capacidades del Dispositivo
Para verificar las capacidades del dispositivo en cuanto a notificaciones HTTP, puedes utilizar el siguiente comando modificando los valores a sus propias credenciales:
curl --digest -u admin:password --location "http://<IP_MINMOE>/ISAPI/Event/notification/httpHosts/capabilities"
Por ejemplo en este caso seria:
curl --digest -u admin:Syscom2025 --location "http://192.168.50.12/ISAPI/Event/notification/httpHosts/capabilities"
Obteniendo un resultado como el siguiente:
<?xml version="1.0" encoding="UTF-8" ?>
<HttpHostNotificationCap xmlns="http://www.isapi.org/ver20/XMLSchema">
<hostNumber>2</hostNumber>
<urlLen min="0" max="128"/>
<protocolType opt="HTTP,HTTPS,EHome"/>
<parameterFormatType opt="XML,JSON"/>
<addressingFormatType opt="ipaddress,hostname"/>
<hostName min="1" max="64"/>
<ipAddress opt="ipv4"/>
<portNo min="0" max="65535"/>
<userNameLen min="1" max="32"/>
<passwordLen min="8" max="16"/>
<httpAuthenticationMethod opt="MD5digest,none,basic"/>
<SubscribeEventCap>
<heartbeat min="1" max="30"/>
<eventMode opt="all,list"/>
<EventList>
<Event>
<type>AccessControllerEvent</type>
<minorAlarm opt="0x40a,0x40b,0x40c,0x404,0x405,0x408,0x409"/>
<minorException opt="0x26,0x27,0x400,0x407,0x408,0x428,0x429,0x409,0x40a,0x40f,0x410,0x960,0x961"/>
<minorOperation opt="0x50,0x5a,0x5d,0x5e,0x70,0x71,0x76,0x77,0x79,0x7a,0x7b,0x7e,0x86,0x87,0xf0,0xf1,0x137,0x138,0x400,0x401,0x402,0x403,0x404,0x405,0x406,0x407,0x40a,0x40b,0x40c,0x40e,0x419,0x41a,0x421,0x422,0x42f,0x430,0x431,0x432,0x433,0x2601,0x41f,0x420,0x436,0x982,0x983"/>
<minorEvent opt="0x1,0x6,0x7,0x8,0x9,0xa,0xb,0xc,0xd,0xe,0xf,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1f,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x31,0x33,0x4b,0x4c,0x50,0x5e,0x68,0x75,0x82,0x84,0x8e,0x97,0x98,0x9b,0xa4,0xa8,0xb5,0xc1,0x9f,0xa0,0x2,0x3,0x4,0x5,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x99,0x9a,0xaf,0xb0,0xd0,0xd4,0xe3,0xe4,0x813,0x1d,0x1e,0xa2,0xa9,0x77,0xa3,0xaa,0x9c,0x9d,0xd9,0x25,0x822,0xf3,0xf4,0xef"/>
<pictureURLType opt="binary,cloudStorageURL"/>
</Event>
<Event>
<type>LocalUserChange</type>
</Event>
</EventList>
</SubscribeEventCap>
</HttpHostNotificationCap>
Donde podemos observar es un archivo de configuración XML que define las capacidades de notificación HTTP de un sistema de control de acceso donde se describe que soporta hasta 2 hosts, ademas de tener enlistados los códigos de los eventos específicos de un sistema de control de acceso, los cuales podemos encontrar listados en el siguiente manual:
2. Ver host configurados
Ademas de comprobar las capacidades del sistema podemos ver los hosts configurados anteriormente con el comando:
curl --digest -u admin:password --location "http://<IP_MINMOE>/ISAPI/Event/notification/httpHosts"
O en nuestro caso utilizamos:
curl --digest -u admin:Syscom2025 --location "http://192.168.50.12/ISAPI/Event/notification/httpHosts"
Obteniendo un resultado como el siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<HttpHostNotificationList version="2.0" xmlns="http://www.isapi.org/ver20/XMLSchema">
<HttpHostNotification>
<id>1</id>
<url>/lectura</url>
<protocolType>HTTP</protocolType>
<parameterFormatType>XML</parameterFormatType>
<addressingFormatType>ipaddress</addressingFormatType>
<ipAddress>192.168.50.252</ipAddress>
<portNo>8083</portNo>
<httpAuthenticationMethod>none</httpAuthenticationMethod>
<SubscribeEvent><heartbeat>30</heartbeat><eventMode>all</eventMode><EventList><Event><type>AccessControllerEvent</type><minorAlarm></minorAlarm><minorException></minorException><minorOperation></minorOperation><minorEvent></minorEvent><pictureURLType>binary</pictureURLType></Event></EventList></SubscribeEvent>
</HttpHostNotification>
<HttpHostNotification>
<id>2</id>
<url></url>
<protocolType>EHome</protocolType>
<parameterFormatType>JSON</parameterFormatType>
<addressingFormatType>ipaddress</addressingFormatType>
<ipAddress>0.0.0.0</ipAddress>
<portNo>0</portNo>
<httpAuthenticationMethod>none</httpAuthenticationMethod>
</HttpHostNotification>
</HttpHostNotificationList>
Donde si el dispositivo no tiene ninguna configuración anterior ambos dado que en este dispositivo se pueden configurar dos host saldrán como 0.0.0.0.
3. Configurar mediante Hostname
Para configurar nuestro puerto debemos de utilizar el siguiente comando:
curl --digest -u admin:Syscom2025 --location --request PUT "http://192.168.50.12/ISAPI/Event/notification/httpHosts/1" \
--header "Content-Type: application/xml" \
--data '<?xml version="1.0" encoding="UTF-8"?>
<HttpHostNotificationList xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
<HttpHostNotification>
<id>1</id>
<url>/lectura</url>
<protocolType>HTTPS</protocolType>
<parameterFormatType>XML</parameterFormatType>
<addressingFormatType>hostname</addressingFormatType>
<hostName>ingenieria.syscom.mx</hostName>
<portNo>443</portNo>
<httpAuthenticationMethod>none</httpAuthenticationMethod>
<SubscribeEvent>
<eventMode>all</eventMode>
<EventList>
<Event>
<type>AccessControllerEvent</type>
<pictureURLType>binary</pictureURLType>
</Event>
</EventList>
</SubscribeEvent>
</HttpHostNotification>
</HttpHostNotificationList>'
Al ejecutar este comando con sus respectivas modificaciones para ser adaptado a cada host en especifico obtendremos una respuesta como la siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<ResponseStatus version="2.0" xmlns="http://www.hikvision.com/ver20/XMLSchema">
<requestURL></requestURL>
<statusCode>1</statusCode>
<statusString>OK</statusString>
<subStatusCode>ok</subStatusCode>
</ResponseStatus>
4. Configurar mediante Dirección IP
Para hacer el procedimiento anterior pero en vez de utilizar hostname utilizamos ip para enviar notificaciones a la dirección 192.168.50.252, puerto 8083, en el recurso /lectura utilizamos el siguiente comando:
curl --digest -u admin:Syscom2025 --location --request PUT "http://192.168.50.12/ISAPI/Event/notification/httpHosts/2" \
--header "Content-Type: application/xml" \
--data '<?xml version="1.0" encoding="UTF-8"?>
<HttpHostNotificationList xmlns="http://www.isapi.org/ver20/XMLSchema" version="2.0">
<HttpHostNotification>
<id>2</id>
<url>/lectura</url>
<protocolType>HTTP</protocolType>
<parameterFormatType>XML</parameterFormatType>
<addressingFormatType>ipaddress</addressingFormatType>
<ipAddress>192.168.50.252</ipAddress>
<portNo>8083</portNo>
<httpAuthenticationMethod>none</httpAuthenticationMethod>
<SubscribeEvent>
<eventMode>all</eventMode>
<EventList>
<Event>
<type>AccessControllerEvent</type>
<pictureURLType>binary</pictureURLType>
</Event>
</EventList>
</SubscribeEvent>
</HttpHostNotification>
</HttpHostNotificationList>'
Obteniendo una respuesta como la siguiente al ejecutar este comando:
<?xml version="1.0" encoding="UTF-8"?>
<ResponseStatus version="1.0" xmlns="http://www.hikvision.com/ver10/XMLSchema">
<requestURL></requestURL>
<statusCode>1</statusCode>
<statusString>OK</statusString>
<subStatusCode>ok</subStatusCode>
</ResponseStatus>
5. Explicacion de etiquetas XML
<HttpHostNotificationList> : Contenedor principal que agrupa todos los hosts de notificación configurados. Puede contener múltiples <HttpHostNotification> según el número de destinos que soporte el dispositivo.
version="2.0" : Versión de la API ISAPI que se está utilizando.
<HttpHostNotification> : Contiene la configuración de un host específico.
<id>1</id> / <id>2</id> : Identificador único del host de notificación, permite configurar múltiples destinos según lo permita el dispositivo.
<url>/ruta</url> : Ruta específica en el servidor donde se enviarán las notificaciones. Ejemplo: /lectura, /webhook/control-acceso/4.
<protocolType>HTTP|HTTPS|EHome</protocolType> : Define el protocolo de comunicación.
- HTTP: rápido pero sin cifrado.
- HTTPS: cifrado seguro.
- EHome: protocolo propietario de Hikvision.
<parameterFormatType>XML|JSON</parameterFormatType> : Formato de los datos enviados.
- XML: más estructurado y compatible con ISAPI.
- JSON: más ligero, usado en APIs modernas.
<addressingFormatType>ipaddress|hostname</addressingFormatType> : Método de direccionamiento del servidor destino.
- ipaddress: usa dirección IP directa.
- hostname: usa nombre de dominio.
<ipAddress>192.168.50.252</ipAddress> : Dirección IP del servidor receptor (solo si se usa ipaddress).
<hostName>ejemplo.dominio.com</hostName> : Nombre de dominio del servidor receptor (solo si se usa hostname).
<portNo>8083 | 443</portNo> : Puerto de conexión que debe coincidir con el protocolo seleccionado.
<httpAuthenticationMethod>none|basic|MD5digest</httpAuthenticationMethod> : Método de autenticación HTTP.
- none: sin credenciales.
- basic: usuario/contraseña en texto.
- MD5digest: más seguro, usando hash MD5.
<SubscribeEvent> : Contenedor que define qué eventos se enviarán al host.
<eventMode>all|list</eventMode> : Determina qué eventos se envían.
- all: todos los eventos posibles.
- list: solo los especificados en <EventList>.
<EventList> : Lista de los eventos específicos a los que se suscribe el host.
<Event> : Definición individual de un evento.
<type>AccessControllerEvent</type> : Tipo principal de evento que se va a capturar. Ejemplos: AccessControllerEvent, LocalUserChange.
<minorAlarm>, <minorException>, <minorOperation>, <minorEvent> : Subtipos de eventos (códigos Major & Minor) que permiten filtrar qué notificaciones se envían.
- Se pueden indicar códigos específicos separados por comas, según la tabla oficial de eventos de MinMoe.
- Si se dejan vacíos, algunos dispositivos pueden enviar eventos periódicos “latidos”.
<pictureURLType>binary</pictureURLType> : Define cómo se enviarán las imágenes asociadas a los eventos.
- binary: datos de imagen codificados directamente.
6. Extra
Podemos descargar el proyecto Demo - Receptor de eventos mediante HTTP para validar el envío de los eventos y para inspeccionar el contenido.