Hikvision Doorbell / Videointercom integration

ah thats not the proxy, for this you still need 1985 to be open… ?

yes, using port 1985

But I still have issues with the ISAP request on hangup button.
Not sure how that needs to be configured correctly…

Getting message:
“Die Aktion text/set_value konnte nicht ausgeführt werden. required key not provided @ data[‘value’]”

Guys, updated my advanced card tutorual using the proxy! much easier, no https needed anymore for go2rtc!! No open ports needed, no nginx :slight_smile:

Hi, does this extension works with EZVIZ CP7 Doorbell/Camera ?

You can try…

Hello,

I have a Hikvision Dormell DS-KV8113-WME1(C) (V3.7.0 build 250929). I have two issues:

  • I get always an error “[CHikProtocol::DoRealCommonRecvInFollow] 4.fatal head-packed data error” and the service needs to reconnect.
  • I get always an info “mqtt:update_door_entities:340 - Door 1 unlocked by 4849485755495554505700 , updating sensor and device trigger” but nobody opens the door?

Can me anyone tell me what the problem is? Below is my protocol. I marked three lines with ==>

Thank you Ludger

2026-01-25 21:02:43.840 | INFO     | sdk.utils:loadSDK:44 - Using OS: Linux with architecture: x86_64
2026-01-25 21:02:43.840 | DEBUG    | sdk.utils:loadSDK:57 - Loading library from lib-amd64/libhcnetsdk.so
2026-01-25 21:02:43.848 | DEBUG    | __main__:main:35 - Hikvision SDK loaded
2026-01-25 21:02:43.848 | DEBUG    | sdk.utils:setupSDK:86 - Initializing SDK
loop[2] find 2 mac and 3 ip
[2026-01-25 21:02:43.887][DBG] CCoreGlobalCtrlBase::LoadDSo, HPR_LoadDSo Succ, Path[/lib/x86_64-linux-gnu/libz.so.1.2.11], hHandleRet[-2069985744]
2026-01-25 21:02:43.887 | DEBUG    | sdk.utils:setupSDK:100 - SDK initialized
2026-01-25 21:02:43.888 | DEBUG    | doorbell:__init__:62 - Setting up doorbell: Klingel
[2026-01-25 21:02:43.887][INF] The COM:HCCoreBase ver is 6.1.4.15, 2020_03_05. Async:1.
[2026-01-25 21:02:43.887][INF] The COM:Core ver is 6.1.6.45, 2021_03_02. Async:1.
[2026-01-25 21:02:43.887][INF] This HCNetSDK ver is 6.1.6.45 Ver 2021_03_02.
2026-01-25 21:02:43.888 | DEBUG    | doorbell:authenticate:70 - Logging into doorbell
[2026-01-25 21:02:43.888][INF] Login dev 192.168.2.150:8000.
[2026-01-25 21:02:43.888][INF] dwTotalNum[2048]
[2026-01-25 21:02:43.890][INF] Private connect 192.168.2.150:8000 sock=135 this=0x84cfe8b4 cmd=0x10000 port=53680
[2026-01-25 21:02:43.890][INF] LogonDev1 in[192.168.2.150:8000]
[2026-01-25 21:02:43.890][DBG] CCoreGlobalCtrlBase::LoadDSo, HPR_LoadDSo Succ, Path[/app/lib-amd64/libcrypto.so], hHandleRet[-2065817216]
[2026-01-25 21:02:43.890][DBG] CCoreGlobalCtrlBase::LoadDSo, HPR_LoadDSo Succ, Path[/app/lib-amd64/libssl.so], hHandleRet[-2068799616]
[2026-01-25 21:02:43.890][INF] SSLTRANSAPI::LoadAPI, libeay, Load Real Path[/app/lib-amd64/libcrypto.so]
[2026-01-25 21:02:43.890][INF] SSLTRANSAPI::LoadAPI, libssl, Load Real Path[/app/lib-amd64/libssl.so]
[2026-01-25 21:02:43.890][INF] SSLTRANSAPI::IsAllAPILoaded, OpenSSL_version Unload
[2026-01-25 21:02:43.890][INF] OpenSSL, Not All Function Loaded!
[2026-01-25 21:02:43.890][INF] SSLTRANSAPI::PrintVersion, SSLeay_version info [OpenSSL 1.0.2t  10 Sep 2019]
[2026-01-25 21:02:43.890][INF] CSSLTrans::SSLCtxInit, dwSSLVersion[0], m_fnClientMethodV23
2026-01-25 21:02:43.931 | DEBUG    | doorbell:authenticate:87 - Login returned user ID: 0
2026-01-25 21:02:43.931 | DEBUG    | doorbell:authenticate:88 - Doorbell serial number: xxx, device type: VillaVTO
2026-01-25 21:02:43.931 | INFO     | doorbell:authenticate:90 - Connected to doorbell: Klingel
2026-01-25 21:02:43.931 | INFO     | event:__init__:87 - Setting up event handler: Console stdout
2026-01-25 21:02:43.932 | DEBUG    | event:register_handler:234 - Adding event handler ConsoleSTDOUT
2026-01-25 21:02:43.932 | INFO     | mqtt:__init__:114 - Setting up event handler: MQTT
2026-01-25 21:02:43.932 | DEBUG    | mqtt:__init__:126 - Setting up entities for Klingel
2026-01-25 21:02:43.932 | DEBUG    | sdk.utils:call_ISAPI:125 - Call ISAPI request method url body: GET /ISAPI/System/deviceInfo  
[2026-01-25 21:02:43.934][DBG] CComBase::Load, Load szDllPath[/app/lib-amd64/HCNetSDKCom/libHCVoiceTalk.so] SUCC
[2026-01-25 21:02:43.934][INF] AbilityAnalyze---Init-- start
[2026-01-25 21:02:43.934][DBG] AbilityAnalyze---Init-- over, DeviceList path [/app/lib-amd64/HCNetSDKCom/LocalXml/DeviceList.xml], load result[0]
[2026-01-25 21:02:43.935][INF] The COM:VoiceTalk ver is 6.1.6.45, 2021_03_02.
[2026-01-25 21:02:43.935][DBG] CComBase::Load, Load szDllPath[/app/lib-amd64/HCNetSDKCom/libHCGeneralCfgMgr.so] SUCC
[2026-01-25 21:02:43.935][INF] The COM:HCGeneralCfgMgr ver is 6.1.6.45, 2021_03_02.
[2026-01-25 21:02:43.935][DBG] CComBase::Load, Load szDllPath[/app/lib-amd64/HCNetSDKCom/libHCPlayBack.so] SUCC
[2026-01-25 21:02:43.936][INF] The COM:HCPlayback ver is 6.1.6.45, 2021_03_02.
[2026-01-25 21:02:43.936][DBG] CComBase::Load, Load szDllPath[/app/lib-amd64/HCNetSDKCom/libHCIndustry.so] SUCC
[2026-01-25 21:02:43.936][INF] The COM:HCIndustry ver is 6.1.6.45, 2021_03_02.
[2026-01-25 21:02:43.936][DBG] CComBase::Load, Load szDllPath[/app/lib-amd64/HCNetSDKCom/libHCDisplay.so] SUCC
[2026-01-25 21:02:43.936][INF] The COM:HCDisplay ver is 6.1.6.45, 2021_03_02.
[2026-01-25 21:02:43.936][DBG] CComBase::Load, Load szDllPath[/app/lib-amd64/HCNetSDKCom/libHCPreview.so] SUCC
[2026-01-25 21:02:43.936][INF] The COM:Preview ver is 6.1.6.45, 2021_03_02.
[2026-01-25 21:02:43.937][DBG] CComBase::Load, Load szDllPath[/app/lib-amd64/HCNetSDKCom/libHCAlarm.so] SUCC
[2026-01-25 21:02:43.937][INF] The COM:HCAlarm ver is 6.1.6.45, 2021_03_02.
[2026-01-25 21:02:43.938][INF] Private connect 192.168.2.150:8000 sock=135 this=0x84cfe8b4 cmd=0x117000 port=53688
2026-01-25 21:02:43.946 | DEBUG    | sdk.utils:call_ISAPI:165 - Response output: <?xml version="1.0" encoding="UTF-8"?> .....
2026-01-25 21:02:43.989 | DEBUG    | doorbell:user_config:429 - Using the configured number of switches: 1
2026-01-25 21:02:43.990 | DEBUG    | mqtt:__init__:199 - Configuring 1 door switches
2026-01-25 21:02:43.994 | DEBUG    | event:register_handler:234 - Adding event handler MQTT
2026-01-25 21:02:43.994 | DEBUG    | mqtt_input:__init__:21 - Setting up MQTTInput
2026-01-25 21:02:43.995 | DEBUG    | sdk.utils:call_ISAPI:125 - Call ISAPI request method url body: GET /ISAPI/System/deviceInfo  
[2026-01-25 21:02:43.998][INF] Private connect 192.168.2.150:8000 sock=139 this=0x84cfe8b4 cmd=0x117000 port=53692
2026-01-25 21:02:44.005 | DEBUG    | sdk.utils:call_ISAPI:165 - Response output: <?xml version="1.0" encoding="UTF-8"?> .....
[2026-01-25 21:02:44.005][DBG] SimpleSTDCommandToDvr with out cmd[GET /ISAPI/System/deviceInfo], input size[0], max segment length[262144]
2026-01-25 21:02:44.039 | DEBUG    | event:start:255 - Registering callback function using SDK
2026-01-25 21:02:44.040 | DEBUG    | doorbell:setup_alarm:101 - Arming the device via SDK
2026-01-25 21:02:44.044 | DEBUG    | input:loop_forever:29 - Waiting for input command
[2026-01-25 21:02:44.041][INF] Private connect 192.168.2.150:8000 sock=169 this=0x84cfe8b4 cmd=0x111020 port=53704
==> [2026-01-25 21:02:45.553][ERR] [CHikProtocol::DoRealCommonRecvInFollow] 4.fatal head-packed data error, captured len=0, this=0x27bf6478, linkid=84cfe8b4 <==
[2026-01-25 21:02:49.059][INF] [0] CArmingSession::TimeoutCallBack Create ReConnectThread SUCC
[2026-01-25 21:02:49.059][DBG] Alarm chan [0] reconnect thread start!
[2026-01-25 21:02:49.060][DBG] Alarm chan [0] LinkToDVR!
[2026-01-25 21:02:49.061][INF] Private connect 192.168.2.150:8000 sock=169 this=0x84cfe8b4 cmd=0x111020 port=37516
[2026-01-25 21:02:49.071][DBG] Alarm chan [0] ReConnect Success!
[2026-01-25 21:02:49.071][DBG] Alarm chan [0] reconnect thread Exit!
2026-01-25 21:02:49.560 | DEBUG    | event:_handle_callback:220 - Callback invoked from SDK
2026-01-25 21:02:49.562 | DEBUG    | event:_invoke_handlers:192 - Invoking 2 handlers
2026-01-25 21:02:49.562 | INFO     | mqtt:video_intercom_event:404 - Video intercom event authentication_log detected on Klingel
2026-01-25 21:02:49.562 | DEBUG    | sdk.utils:call_ISAPI:125 - Call ISAPI request method url body: GET /ISAPI/System/deviceInfo  
[2026-01-25 21:02:49.560][INF] Alarm[0] IP[192.168.2.150] data_len[568] alarm_len[568] status[431]
[2026-01-25 21:02:49.564][INF] Private connect 192.168.2.150:8000 sock=172 this=0x84cfee98 cmd=0x117000 port=37528
2026-01-25 21:02:49.572 | DEBUG    | sdk.utils:call_ISAPI:165 - Response output: <?xml version="1.0" encoding="UTF-8"?> ......
[2026-01-25 21:02:49.572][DBG] SimpleSTDCommandToDvr with out cmd[GET /ISAPI/System/deviceInfo], input size[0], max segment length[262144]
2026-01-25 21:02:49.575 | INFO     | mqtt:handle_device_trigger:530 - Invoking device trigger automation{'name': 'authentication_log', 'type': 'event', 'subtype': 'authentication log'}
2026-01-25 21:02:49.575 | INFO     | event:video_intercom_event:109 - Video intercom event from Klingel
2026-01-25 21:02:50.330 | DEBUG    | event:_handle_callback:220 - Callback invoked from SDK
2026-01-25 21:02:50.331 | DEBUG    | event:_invoke_handlers:192 - Invoking 2 handlers
2026-01-25 21:02:50.331 | WARNING  | mqtt:video_intercom_alarm:424 - Received unknown alarm type: 0
2026-01-25 21:02:50.331 | INFO     | event:video_intercom_alarm:120 - Video intercom alarm from Klingel
[2026-01-25 21:02:50.330][INF] Alarm[0] IP[192.168.2.150] data_len[568] alarm_len[568] status[430]
[2026-01-25 21:02:51.595][ERR] [CHikProtocol::DoRealCommonRecvInFollow] 4.fatal head-packed data error, captured len=0, this=0x27bf6478, linkid=84cfe8b4
[2026-01-25 21:02:54.066][DBG] Alarm chan [0] reconnect thread start!
[2026-01-25 21:02:54.067][DBG] Alarm chan [0] LinkToDVR!
[2026-01-25 21:02:54.067][INF] [0] CArmingSession::TimeoutCallBack Create ReConnectThread SUCC
[2026-01-25 21:02:54.068][INF] Private connect 192.168.2.150:8000 sock=169 this=0x84cfe8b4 cmd=0x111020 port=37530
[2026-01-25 21:02:54.070][DBG] Alarm chan [0] ReConnect Success!
[2026-01-25 21:02:54.070][DBG] Alarm chan [0] reconnect thread Exit!
2026-01-25 21:02:55.225 | DEBUG    | event:_handle_callback:220 - Callback invoked from SDK
2026-01-25 21:02:55.226 | DEBUG    | event:_invoke_handlers:192 - Invoking 2 handlers
==> 2026-01-25 21:02:55.226 | INFO     | mqtt:update_door_entities:340 - Door 1 unlocked by 4849485755495554505700 , updating sensor and device trigger <==
2026-01-25 21:02:55.226 | DEBUG    | sdk.utils:call_ISAPI:125 - Call ISAPI request method url body: GET /ISAPI/System/deviceInfo  
[2026-01-25 21:02:55.225][INF] Alarm[0] IP[192.168.2.150] data_len[568] alarm_len[568] status[431]
[2026-01-25 21:02:55.228][INF] Private connect 192.168.2.150:8000 sock=173 this=0x84cfee98 cmd=0x117000 port=37532
2026-01-25 21:02:55.241 | DEBUG    | sdk.utils:call_ISAPI:165 - Response output: <?xml version="1.0" encoding="UTF-8"?> ......
==> 2026-01-25 21:02:55.243 | INFO     | mqtt:handle_device_trigger:530 - Invoking device trigger automation{'name': 'Door unlocked', 'type': 'door open', 'subtype': 'door 0', 'payload': {'control_source': '4849485755495554505700'}} <==
2026-01-25 21:02:55.244 | INFO     | event:video_intercom_event:109 - Video intercom event from Klingel

those door unlock events are old events, first time starting the addon , its downloading the complete backlog, so its quuite busy …

For the ones interested to try out the beta addon, i have added an image entity , you can take a snapshot , also on incoming ring event, it should create a snapshot automaticly, its also stored on the /media drive…

Hello,

Great project, thank you very much.
I’ve come quite a long way, but now I’ve been stuck on a problem for many hours: I can’t communicate with the outdoor station in the sense of two-way communication. No microphone is displayed in the camera card. With the help of AI, I’ve already tried “everything possible” without success.
Video stream is running (prepared on a Raspberry Pi by Frigate NVR with go2RTC and WebRTC). The camera is stored there as follows:

go2rtc:
  streams:
    Doorbell:
      - rtsp://admin:[email protected]:554/h264/ch1/main/av_stream
      - isapi://admin:[email protected]:80/

In Home Assistant (OS on Proxmox, other computer on the same network), the HIKvivion integration is running (the MQRTT entities appear to be all set up), I can also cancel/stop a call and open the door (relay) and hear the sound from the outdoor station, but I can’t get it to work with the microphone.

The Frigate, WebRTC, and go2RTC integrations are also running.

The devices are:
Outdoor station:
DS-KD8003Y-IME2/NS#EU
Firmware_V3.7.1_250819 (latest)

Indoor:
2x DS-KH6320Y-WTE2 (V2.2.96 build 241111)

How can I get the 2-way audio to work? Under 192.168.178. IP-HIKvison:1984 > on the left it says “Video+audio” (2-way audio is not checked). In Frigate, the stream info also says “Two-way communication is not possible for this stream.”

I think it’s a problem with http/https (I don’t really know much about that).The AI said something like that and suggested I try “flag” (“Insecure origins treated as secure”) to get around the problem, i.e., activate the IP of HP and webRTC-stream of HIK-visoin as secure.

Do I need to adjust any settings in the HIK UI? The AI suggested various options, but I can’t find them.

Can anyone help me?

Best regards,
Florian

There is guide on my GitHub page to use it with the advanced card

Hello,

I missed that! Sorry. Yes, that’s how it works.

Thank you very much!

1 Like

Hello Fabio
I use a DS-KV8213-WME1(B) doorstation.
When i press the shnapshot button, the activity says the snapshot is taken, but there is no file in /media folder of HA.
Is there any advanced configuration necessary?

Best regards

Can you look at the addon log? Was it succesfull? Do you see it on the image entity?

This ist the printout of the addon log:
2026-01-27 18:23:13.558 | INFO | mqtt_input:_take_snapshot_callback:436 - Received take snapshot command, doorbell: Videotürklingel

Nothing more then that? What beta version are you running? Can you try to enable debug mode in the system options and try again? Can you post it on GitHub instead?

I don’t use a beta version. I use Version3.0.27.

can you try stop addon, and install 3.0.0-beta.116
you can just copy over the config, and start the beta
lots of things changed in the code
test again with also DEBUG enabled

Hi Fabio

This is the log from my system. Running HA OS on Proxmox VM

> 2026-01-27 20:51:09.648 | INFO     | event:video_intercom_alarm:120 - Video intercom alarm from Doorbell
> 2026-01-27 20:51:09.648 | INFO     | mqtt:video_intercom_alarm:437 - Doorbell ringing, updating sensor 
> settings: mqtt=MQTT(host='192.168.20.212', port=1883, username=None, password=None, client_name=None, use_tls=False, tls_key=None, tls_certfile=None, tls_ca_cert=None, discovery_prefix='homeassistant', state_prefix='hmd', client=None) entity=SensorInfo(component='sensor', device=DeviceInfo(name='Doorbell', model='DS-KV8113-WME1(C)', manufacturer='Hikvision', sw_version='V3.7.0', hw_version='1-0-0', identifiers='6883457586564949514587406741484950485052485750546978708151495149564953', connections=None, configuration_url=None, suggested_area=None, via_device=None), device_class=None, enabled_by_default=None, entity_category=None, expire_after=None, force_update=None, icon='mdi:bell', name='Call state', object_id=None, qos=None, unique_id='6883457586564949514587406741484950485052485750546978708151495149564953-call_state', unit_of_measurement=None, state_class=None, value_template=None, last_reset_value_template=None, suggested_display_precision=None, options=None) debug=False manual_availability=True
> topic_prefix: sensor/Doorbell/Call-state
> config_topic: homeassistant/sensor/Doorbell/Call-state/config
> state_topic: hmd/sensor/Doorbell/Call-state/state
> wrote_configuration: True
>         
> 2026-01-27 20:51:09.785 | INFO     | doorbell:_save_snapshot_result:326 - Snapshot saved: /media/doorbell/snapshot_20260127_205109.jpg
> 2026-01-27 20:51:09.786 | INFO     | mqtt_input:_publish_snapshot_image:572 - Published snapshot image for doorbell: Doorbell
> 2026-01-27 20:51:09.786 | INFO     | mqtt:take_and_publish_snapshot:459 - Auto-snapshot published to MQTT: /media/doorbell/snapshot_20260127_205109.jpg
> 2026-01-27 20:51:14.365 | INFO     | event:video_intercom_alarm:120 - Video intercom alarm from Doorbell
> 2026-01-27 20:51:14.365 | INFO     | mqtt:video_intercom_alarm:476 - Call dismissed, updating sensor 
> settings: mqtt=MQTT(host='192.168.20.212', port=1883, username=None, password=None, client_name=None, use_tls=False, tls_key=None, tls_certfile=None, tls_ca_cert=None, discovery_prefix='homeassistant', state_prefix='hmd', client=None) entity=SensorInfo(component='sensor', device=DeviceInfo(name='Doorbell', model='DS-KV8113-WME1(C)', manufacturer='Hikvision', sw_version='V3.7.0', hw_version='1-0-0', identifiers='6883457586564949514587406741484950485052485750546978708151495149564953', connections=None, configuration_url=None, suggested_area=None, via_device=None), device_class=None, enabled_by_default=None, entity_category=None, expire_after=None, force_update=None, icon='mdi:bell', name='Call state', object_id=None, qos=None, unique_id='6883457586564949514587406741484950485052485750546978708151495149564953-call_state', unit_of_measurement=None, state_class=None, value_template=None, last_reset_value_template=None, suggested_display_precision=None, options=None) debug=False manual_availability=True
> topic_prefix: sensor/Doorbell/Call-state
> config_topic: homeassistant/sensor/Doorbell/Call-state/config
> state_topic: hmd/sensor/Doorbell/Call-state/state
> wrote_configuration: True

The media folder is from absolute path, not with in the Www/media folder

Perfect, it works… There is also an new image entity in the MQTT device… What model do you have?