
# Hikvision camera by HTTP

## Overview

This template is designed for the effortless deployment of Hikvision cameras monitoring by Zabbix via HTTP and doesn't require any external scripts.

[`Sample device overview page`](https://www.hikvision.com/en/products/IP-Products/Network-Cameras/)

## Requirements

Zabbix version: 7.0 and higher.

## Tested versions

This template has been tested on:
- DS-I220 
- DS-I450 
- DS-2CD2620F-I 
- DS-2CD1631FWD-I 
- DS-2CD2020F-I 
- DS-2CD2042WD-I 
- DS-2CD2T43G0-I5 
- DS-2DF5286-AEL 
- DS-2CD2T25FWD-I5 
- DS-2CD4A35FWD-IZHS 
- DS-I200 
- DS-2CD1031-I 
- DS-2CD2125FWD-IS 
- DS-I122 
- DS-I203 
- DS-N201 
- DS-2CD2622FWD-IZS 
- DS-2CD2023G0-I 

## Configuration

> Zabbix should be configured according to the instructions in the [Templates out of the box](https://www.zabbix.com/documentation/7.0/manual/config/templates_out_of_the_box) section.

## Setup

1. Set the hostname or IP address of the Hikvision ISAPI host in the `{$HIKVISION_ISAPI_HOST}` macro.

2. Set the user name and password in the `{$PASSWORD}` and `{$USER}` macros.

3. Change other macros according to your camera configuration if necessary.

### Macros used

|Name|Description|Default|
|----|-----------|-------|
|{$CPU.UTIL.CRIT}||`90`|
|{$HIKVISION_ISAPI_HOST}|
The hostname or IP address of the Hikvision ISAPI host.
|`<SET ISAPI HOST>`|
|{$HIKVISION_ISAPI_PORT}|
ISAPI port on device
|`80`|
|{$HIKVISION_MAIN_CHANNEL_ID}|
Main video stream ID
|`101`|
|{$HIKVISION_STREAM_HEIGHT}|
Main video stream image height
|`1080`|
|{$HIKVISION_STREAM_WIDTH}|
Main video stream image width
|`1920`|
|{$MEMORY.UTIL.MAX}||`95`|
|{$PASSWORD}||`1234`|
|{$USER}||`admin`|

### Items

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|Boot loader released date||Dependent item|hikvision_cam.boot_released_date
**Preprocessing**

- 
JSON Path: `$.DeviceInfo.bootReleasedDate`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `24h`

|
|Boot loader version||Dependent item|hikvision_cam.boot_version
**Preprocessing**

- 
JSON Path: `$.DeviceInfo.bootVersion`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `24h`

|
|CPU utilization|
CPU utilization in %
|Dependent item|hikvision_cam.cpu.util
**Preprocessing**

- 
JSON Path: `$.DeviceStatus.CPUList.CPU.cpuUtilization`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Current device time||Dependent item|hikvision_cam.current_device_time
**Preprocessing**

- 
JSON Path: `$.DeviceStatus.currentDeviceTime`

⛔️Custom on fail: Discard value

|
|Device description||Dependent item|hikvision_cam.device_description
**Preprocessing**

- 
JSON Path: `$.DeviceInfo.deviceDescription`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `24h`

|
|Device ID||Dependent item|hikvision_cam.device_id
**Preprocessing**

- 
JSON Path: `$.DeviceInfo.deviceID`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `24h`

|
|Device location||Dependent item|hikvision_cam.device_location
**Preprocessing**

- 
JSON Path: `$.DeviceInfo.deviceLocation`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `24h`

|
|Device name||Dependent item|hikvision_cam.device_name
**Preprocessing**

- 
JSON Path: `$.DeviceInfo.deviceName`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1d`

|
|Device type||Dependent item|hikvision_cam.device_type
**Preprocessing**

- 
JSON Path: `$.DeviceInfo.deviceType`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `24h`

|
|Encoder released date||Dependent item|hikvision_cam.encoder_released_date
**Preprocessing**

- 
JSON Path: `$.DeviceInfo.encoderReleasedDate`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `24h`

|
|Encoder version||Dependent item|hikvision_cam.encoder_version
**Preprocessing**

- 
JSON Path: `$.DeviceInfo.encoderVersion`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `24h`

|
|Firmware released date||Dependent item|hikvision_cam.firmware_released_date
**Preprocessing**

- 
JSON Path: `$.DeviceInfo.firmwareReleasedDate`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `24h`

|
|Firmware version||Dependent item|hikvision_cam.firmware_version
**Preprocessing**

- 
JSON Path: `$.DeviceInfo.firmwareVersion`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `24h`

|
|Get device info|
Used to get the device information
|HTTP agent|hikvision_cam.get_info
**Preprocessing**

- 
Check for not supported value: `any error`

⛔️Custom on fail: Set value to: `{"html":{"head":{"title":"Connection error"}}}`

- XML to JSON: 
⛔️Custom on fail: Set value to: `{"html":{"head":{"title":"Connection error"}}}`

|
|Get device info: Login status||Dependent item|hikvision_cam.get_info.login_status
**Preprocessing**

- 
JavaScript: `The text is too long. Please see the template.`

- 
Discard unchanged with heartbeat: `1h`

|
|Get system status|
It is used to get the status information of the device
|HTTP agent|hikvision_cam.get_status
**Preprocessing**

- 
Check for not supported value: `any error`

⛔️Custom on fail: Set value to: `{"html":{"head":{"title":"Connection error"}}}`

- XML to JSON: 
⛔️Custom on fail: Set value to: `{"html":{"head":{"title":"Connection error"}}}`

|
|Get system status: Login status||Dependent item|hikvision_cam.get_status.login_status
**Preprocessing**

- 
JavaScript: `The text is too long. Please see the template.`

- 
Discard unchanged with heartbeat: `1h`

|
|Get streaming channels|
Used to get the properties of streaming channels for the device
|HTTP agent|hikvision_cam.get_streaming
**Preprocessing**

- 
Check for not supported value: `any error`

⛔️Custom on fail: Set value to: `{"html":{"head":{"title":"Connection error"}}}`

- XML to JSON: 
⛔️Custom on fail: Set value to: `{"html":{"head":{"title":"Connection error"}}}`

|
|Get streaming channels: Login status||Dependent item|hikvision_cam.get_streaming.login_status
**Preprocessing**

- 
JavaScript: `The text is too long. Please see the template.`

- 
Discard unchanged with heartbeat: `1h`

|
|Hardware version||Dependent item|hikvision_cam.hardware_version
**Preprocessing**

- 
JSON Path: `$.DeviceInfo.hardwareVersion`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `24h`

|
|MACaddress||Dependent item|hikvision_cam.mac_address
**Preprocessing**

- 
JSON Path: `$.DeviceInfo.macAddress`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `24h`

|
|Memory utilization|
Memory utilization in %
|Dependent item|hikvision_cam.memory.usage
**Preprocessing**

- 
JSON Path: `$.DeviceStatus.MemoryList.Memory.memoryUsage`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Model||Dependent item|hikvision_cam.model
**Preprocessing**

- 
JSON Path: `$.DeviceInfo.model`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `24h`

|
|Serial number||Dependent item|hikvision_cam.serial_number
**Preprocessing**

- 
JSON Path: `$.DeviceInfo.serialNumber`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `24h`

|
|Supported beep||Dependent item|hikvision_cam.support_beep
**Preprocessing**

- 
JSON Path: `$.DeviceInfo.supportBeep`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `24h`

|
|Supported video loss||Dependent item|hikvision_cam.support_video_loss
**Preprocessing**

- 
JSON Path: `$.DeviceInfo.supportVideoLoss`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `24h`

|
|System contact||Dependent item|hikvision_cam.system_contact
**Preprocessing**

- 
JSON Path: `$.DeviceInfo.systemContact`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `24h`

|
|Telecontrol ID||Dependent item|hikvision_cam.telecontrol_id
**Preprocessing**

- 
JSON Path: `$.DeviceInfo.telecontrolID`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `24h`

|
|Uptime|
The system uptime expressed in the following format: "N days, hh:mm:ss".
|Dependent item|hikvision_cam.uptime
**Preprocessing**

- 
JSON Path: `$.DeviceStatus.deviceUpTime`

⛔️Custom on fail: Discard value

|

### Triggers

|Name|Description|Expression|Severity|Dependencies and additional info|
|----|-----------|----------|--------|--------------------------------|
|Hikvision: High CPU utilization|
The CPU utilization is too high. The system might be slow to respond.
|`min(/Hikvision camera by HTTP/hikvision_cam.cpu.util,5m)>{$CPU.UTIL.CRIT}`|Warning||
|Hikvision: Version has changed|
Hikvision camera version has changed. Acknowledge to close the problem manually.
|`last(/Hikvision camera by HTTP/hikvision_cam.firmware_version,#1)<>last(/Hikvision camera by HTTP/hikvision_cam.firmware_version,#2) and length(last(/Hikvision camera by HTTP/hikvision_cam.firmware_version))>0`|Info|**Manual close**: Yes|
|Hikvision: Authorisation error|
Check the correctness of the authorization data
|`last(/Hikvision camera by HTTP/hikvision_cam.get_info.login_status)=1 or last(/Hikvision camera by HTTP/hikvision_cam.get_streaming.login_status)=1 or last(/Hikvision camera by HTTP/hikvision_cam.get_status.login_status)=1`|Warning|**Manual close**: Yes|
|Hikvision: Error receiving data|
Check the availability of the HTTP port
|`last(/Hikvision camera by HTTP/hikvision_cam.get_info.login_status)=2 or last(/Hikvision camera by HTTP/hikvision_cam.get_streaming.login_status)=2 or last(/Hikvision camera by HTTP/hikvision_cam.get_status.login_status)=2`|Warning|**Manual close**: Yes|
|Hikvision: High memory utilization|
The system is running out of free memory.
|`min(/Hikvision camera by HTTP/hikvision_cam.memory.usage,5m)>{$MEMORY.UTIL.MAX}`|Average||
|Hikvision: Camera has been replaced|
Camera serial number has changed. Acknowledge to close the problem manually.
|`last(/Hikvision camera by HTTP/hikvision_cam.serial_number,#1)<>last(/Hikvision camera by HTTP/hikvision_cam.serial_number,#2) and length(last(/Hikvision camera by HTTP/hikvision_cam.serial_number))>0`|Info|**Manual close**: Yes|
|Hikvision: Camera has been restarted|
Uptime is less than 10 minutes.
|`last(/Hikvision camera by HTTP/hikvision_cam.uptime)<10m`|Info|**Manual close**: Yes|

### LLD rule PTZ discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|PTZ discovery||HTTP agent|hikvision_cam.ptz.discovery
**Preprocessing**

- XML to JSON: 
- 
JavaScript: `The text is too long. Please see the template.`

|

### Item prototypes for PTZ discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|Channel "{#PTZ_CHANNEL_ID}": Get PTZ info: Channel "{#PTZ_CHANNEL_ID}": Login status||Dependent item|hikvision_cam.get_ptz.login_status[{#PTZ_CHANNEL_ID}]
**Preprocessing**

- 
JavaScript: `The text is too long. Please see the template.`

- 
Discard unchanged with heartbeat: `1h`

|
|Channel "{#PTZ_CHANNEL_ID}": Get PTZ info|
High precision positioning which is accurate to a bit after the decimal point
|HTTP agent|hikvision_cam.get_ptz[{#PTZ_CHANNEL_ID}]
**Preprocessing**

- 
Check for not supported value: `any error`

⛔️Custom on fail: Set value to: `{"html":{"head":{"title":"Connection error"}}}`

- XML to JSON: 
⛔️Custom on fail: Set value to: `{"html":{"head":{"title":"Connection error"}}}`

|
|Channel "{#PTZ_CHANNEL_ID}": Absolute zoom||Dependent item|hikvision_cam.ptz.absolute_zoom[{#PTZ_CHANNEL_ID}]
**Preprocessing**

- 
JSON Path: `$.PTZStatus.AbsoluteHigh.absoluteZoom`

⛔️Custom on fail: Discard value

- 
Custom multiplier: `0.1`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Channel "{#PTZ_CHANNEL_ID}": Azimuth||Dependent item|hikvision_cam.ptz.azimuth[{#PTZ_CHANNEL_ID}]
**Preprocessing**

- 
JSON Path: `$.PTZStatus.AbsoluteHigh.azimuth`

⛔️Custom on fail: Discard value

- 
Custom multiplier: `0.1`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Channel "{#PTZ_CHANNEL_ID}": Elevation||Dependent item|hikvision_cam.ptz.elevation[{#PTZ_CHANNEL_ID}]
**Preprocessing**

- 
JSON Path: `$.PTZStatus.AbsoluteHigh.elevation`

⛔️Custom on fail: Discard value

- 
Custom multiplier: `0.1`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|

### Trigger prototypes for PTZ discovery

|Name|Description|Expression|Severity|Dependencies and additional info|
|----|-----------|----------|--------|--------------------------------|
|Hikvision: Channel "{#PTZ_CHANNEL_ID}": Authorisation error|
Check the correctness of the authorization data
|`last(/Hikvision camera by HTTP/hikvision_cam.get_ptz.login_status[{#PTZ_CHANNEL_ID}])=1`|Warning|**Manual close**: Yes
**Depends on**:

- Hikvision: Authorisation error
|
|Hikvision: Channel "{#PTZ_CHANNEL_ID}": Error receiving data|
Check the availability of the HTTP port
|`last(/Hikvision camera by HTTP/hikvision_cam.get_ptz.login_status[{#PTZ_CHANNEL_ID}])=2`|Warning|**Manual close**: Yes
**Depends on**:

- Hikvision: Error receiving data
|
|Hikvision: Channel "{#PTZ_CHANNEL_ID}": PTZ position changed|
The direction of the camera has changed
|`last(/Hikvision camera by HTTP/hikvision_cam.ptz.absolute_zoom[{#PTZ_CHANNEL_ID}],#1)<>last(/Hikvision camera by HTTP/hikvision_cam.ptz.absolute_zoom[{#PTZ_CHANNEL_ID}],#2) or last(/Hikvision camera by HTTP/hikvision_cam.ptz.azimuth[{#PTZ_CHANNEL_ID}],#1)<>last(/Hikvision camera by HTTP/hikvision_cam.ptz.azimuth[{#PTZ_CHANNEL_ID}],#2) or last(/Hikvision camera by HTTP/hikvision_cam.ptz.elevation[{#PTZ_CHANNEL_ID}],#1)<>last(/Hikvision camera by HTTP/hikvision_cam.ptz.elevation[{#PTZ_CHANNEL_ID}],#2)`|Info|**Manual close**: Yes|

### LLD rule Streaming channels discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|Streaming channels discovery||HTTP agent|hikvision_cam.streaming.discovery
**Preprocessing**

- XML to JSON: 
- 
JavaScript: `The text is too long. Please see the template.`

|

### Item prototypes for Streaming channels discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|Channel "{#CHANNEL_ID}": Constant bitRate||Dependent item|hikvision_cam.constant_bit_rate[{#CHANNEL_ID}]
**Preprocessing**

- 
JSON Path: `The text is too long. Please see the template.`

⛔️Custom on fail: Discard value

- 
JSON Path: `$.[0]`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Channel "{#CHANNEL_ID}": Fixed quality||Dependent item|hikvision_cam.fixed_quality[{#CHANNEL_ID}]
**Preprocessing**

- 
JSON Path: `The text is too long. Please see the template.`

⛔️Custom on fail: Discard value

- 
JSON Path: `$[0]`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Channel "{#CHANNEL_ID}": GovLength||Dependent item|hikvision_cam.gov_length[{#CHANNEL_ID}]
**Preprocessing**

- 
JSON Path: `The text is too long. Please see the template.`

⛔️Custom on fail: Discard value

- 
JSON Path: `$[0]`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Channel "{#CHANNEL_ID}": H264Profile||Dependent item|hikvision_cam.h264Profile[{#CHANNEL_ID}]
**Preprocessing**

- 
JSON Path: `The text is too long. Please see the template.`

⛔️Custom on fail: Discard value

- 
JSON Path: `$[0]`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Channel "{#CHANNEL_ID}": Key frame interval||Dependent item|hikvision_cam.key_frame_interval[{#CHANNEL_ID}]
**Preprocessing**

- 
JSON Path: `The text is too long. Please see the template.`

⛔️Custom on fail: Discard value

- 
JSON Path: `$[0]`

⛔️Custom on fail: Discard value

- 
Custom multiplier: `0.01`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Channel "{#CHANNEL_ID}": Frame rate (max)||Dependent item|hikvision_cam.max_frame_rate[{#CHANNEL_ID}]
**Preprocessing**

- 
JSON Path: `The text is too long. Please see the template.`

⛔️Custom on fail: Discard value

- 
JSON Path: `$[0]`

⛔️Custom on fail: Discard value

- 
Custom multiplier: `0.01`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Channel "{#CHANNEL_ID}": Smoothing||Dependent item|hikvision_cam.smoothing[{#CHANNEL_ID}]
**Preprocessing**

- 
JSON Path: `The text is too long. Please see the template.`

⛔️Custom on fail: Discard value

- 
JSON Path: `$[0]`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Channel "{#CHANNEL_ID}": Snapshot image type||Dependent item|hikvision_cam.snap_shot_image_type[{#CHANNEL_ID}]
**Preprocessing**

- 
JSON Path: `The text is too long. Please see the template.`

⛔️Custom on fail: Discard value

- 
JSON Path: `$[0]`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Channel "{#CHANNEL_ID}": VBR lower||Dependent item|hikvision_cam.vbr_lower_cap[{#CHANNEL_ID}]
**Preprocessing**

- 
JSON Path: `The text is too long. Please see the template.`

⛔️Custom on fail: Discard value

- 
JSON Path: `$[0]`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Channel "{#CHANNEL_ID}": VBR upper||Dependent item|hikvision_cam.vbr_upper_cap[{#CHANNEL_ID}]
**Preprocessing**

- 
JSON Path: `The text is too long. Please see the template.`

⛔️Custom on fail: Discard value

- 
JSON Path: `$[0]`

⛔️Custom on fail: Discard value

|
|Channel "{#CHANNEL_ID}": Video codec type||Dependent item|hikvision_cam.video_codec_type[{#CHANNEL_ID}]
**Preprocessing**

- 
JSON Path: `The text is too long. Please see the template.`

⛔️Custom on fail: Discard value

- 
JSON Path: `$[0]`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Channel "{#CHANNEL_ID}": Video quality control type||Dependent item|hikvision_cam.video_quality_control_type[{#CHANNEL_ID}]
**Preprocessing**

- 
JSON Path: `The text is too long. Please see the template.`

⛔️Custom on fail: Discard value

- 
JSON Path: `$[0]`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Channel "{#CHANNEL_ID}": Resolution height||Dependent item|hikvision_cam.video_resolution_height[{#CHANNEL_ID}]
**Preprocessing**

- 
JSON Path: `The text is too long. Please see the template.`

⛔️Custom on fail: Discard value

- 
JSON Path: `$[0]`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Channel "{#CHANNEL_ID}": Resolution width||Dependent item|hikvision_cam.video_resolution_width[{#CHANNEL_ID}]
**Preprocessing**

- 
JSON Path: `The text is too long. Please see the template.`

⛔️Custom on fail: Discard value

- 
JSON Path: `$[0]`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|
|Channel "{#CHANNEL_ID}": Video scan type||Dependent item|hikvision_cam.video_scan_type[{#CHANNEL_ID}]
**Preprocessing**

- 
JSON Path: `The text is too long. Please see the template.`

⛔️Custom on fail: Discard value

- 
JSON Path: `$[0]`

⛔️Custom on fail: Discard value

- 
Discard unchanged with heartbeat: `1h`

|

### Trigger prototypes for Streaming channels discovery

|Name|Description|Expression|Severity|Dependencies and additional info|
|----|-----------|----------|--------|--------------------------------|
|Hikvision: Channel "{#CHANNEL_ID}": Invalid video stream resolution parameters|
expected: {$HIKVISION_STREAM_WIDTH} px x {$HIKVISION_STREAM_HEIGHT} px
received: {ITEM.LASTVALUE2} x {ITEM.LASTVALUE1}
|`last(/Hikvision camera by HTTP/hikvision_cam.video_resolution_height[{#CHANNEL_ID}])<>{$HIKVISION_STREAM_HEIGHT} or last(/Hikvision camera by HTTP/hikvision_cam.video_resolution_width[{#CHANNEL_ID}])<>{$HIKVISION_STREAM_WIDTH}`|Warning|**Manual close**: Yes|
|Hikvision: Channel "{#CHANNEL_ID}": Parameters of video stream are changed||`last(/Hikvision camera by HTTP/hikvision_cam.fixed_quality[{#CHANNEL_ID}],#1)<>last(/Hikvision camera by HTTP/hikvision_cam.fixed_quality[{#CHANNEL_ID}],#2) or last(/Hikvision camera by HTTP/hikvision_cam.constant_bit_rate[{#CHANNEL_ID}],#1)<>last(/Hikvision camera by HTTP/hikvision_cam.constant_bit_rate[{#CHANNEL_ID}],#2) or last(/Hikvision camera by HTTP/hikvision_cam.video_quality_control_type[{#CHANNEL_ID}],#1)<>last(/Hikvision camera by HTTP/hikvision_cam.video_quality_control_type[{#CHANNEL_ID}],#2) or last(/Hikvision camera by HTTP/hikvision_cam.video_resolution_width[{#CHANNEL_ID}],#1)<>last(/Hikvision camera by HTTP/hikvision_cam.video_resolution_width[{#CHANNEL_ID}],#2) or last(/Hikvision camera by HTTP/hikvision_cam.video_resolution_height[{#CHANNEL_ID}],#1)<>last(/Hikvision camera by HTTP/hikvision_cam.video_resolution_height[{#CHANNEL_ID}],#2)`|Info|**Manual close**: Yes|

## Feedback

Please report any issues with the template at [`https://support.zabbix.com`](https://support.zabbix.com)

You can also provide feedback, discuss the template, or ask for help at [`ZABBIX forums`](https://www.zabbix.com/forum/zabbix-suggestions-and-feedback)

