Hikvision Doorbell / Videointercom integration

Can anybody confirm whether the DS-KV6114-MWBE1 doorbell works well? It’s a newer model, supposed to have a better camera and features, but I fear about the integration and the 2-way audio.

Ok i managed to get my hand on one unit @home and doing some api discovery ! i hope you will be able to use it. @pergola.fabio

Technical API Discovery for Hikvision DS-K1T502 (Access Control & Intercom Hybrid)
Device Model: DS-K1T502 (Access Control Terminal with Video Intercom functions) Firmware Version: 1.19 / 1.20 no major change between the two.

Some picture

  1. Handling the Doorbell (Call Button vs. Bell Button)**

The device has two buttons.

  • Call Button (Phone icon): Triggers a SIP/VoIP call. It does not appear in the HTTP push or alert stream.
    • Solution: Status must be polled via GET /ISAPI/VideoIntercom/callStatus?format=json.
    • Ringing state: {"CallStatus":{"status":"ring"}}
    • Idle state: {"CallStatus":{"status":"idle"}}
  • Doorbell Button (Bell icon): Acts as an alarm trigger.
    • Event: Major 5 / Sub 37. It is pushed instantly via HTTP Listening.
Category Action Major Sub Notes
Access Valid Badge 5 1 Returns cardNo and name
Access Valid PIN Code 5 181 Returns user name linked to PIN
Access Invalid Badge/PIN 5 9 Returns cardNo of the attempt
Relay Relay ON (Open) 5 21 Physical relay activation
Relay Relay OFF (Closed) 5 22 Physical relay de-activation
Door State Door “Remain Open” 5 19 Logic state: Locked Open
Door State Door “Normal” 5 20 Logic state: Back to Normal
Commands Remote Open 3 1024 Via App/Cloud
Commands Remote Close 3 1025 Force Close command
Commands Remote Remain Open 3 1026 Keep Open command
Alarms Tamper Triggered 1 1028 Device removed from wall
Alarms Tamper Restored 1 1029 Device re-installed

3. Remote Call Control

To programmatically handle the ringing state from Home Assistant:

  • Cancel/Reject Call:
    • PUT /ISAPI/VideoIntercom/callSignal?format=json
    • Payload: {"CallSignal":{"cmdType":"cancel"}}
    • Note: Using cancel successfully stops the ringing on the device, indoor stations, and Hik-Connect simultaneously.

4. Integration Suggestion

For hybrid devices like the DS-K1T series, it would be beneficial to:

  1. Implement an optional polling mechanism (2s interval) for callStatus to detect incoming calls, as the alert stream is blind to them.
  2. Add a Webhook listener capable of parsing multipart/form-data to catch the specific Major/Sub events listed above, which provides much more detail than the standard stream for these specific models.

**== Warning the Httplistener must be set in the webUI interface.
System and maintenance / network / network Service / http Listening

5. Remote Door Control (Opening the Relay)

To trigger the door relay (Lock) from Home Assistant or via API, you must send an XML payload. Note that this model requires a PUT request.

  • URL: http://<device_ip>/ISAPI/AccessControl/RemoteControl/door/1
  • Method: PUT
  • Authentication: Digest
  • Payload (XML):
<RemoteControlDoor version="2.0" xmlns="http://www.isapi.org/ver20/XMLSchema">
    <cmd>open</cmd>
</RemoteControlDoor>

Home Assistant rest_command example:

rest_command:
  hikvision_open_door:
    url: "http://192.168.2.74/ISAPI/AccessControl/RemoteControl/door/1"
    method: put
    username: admin
    password: YOUR_PASSWORD
    auth: digest
    content_type: "application/xml"
    payload: '<RemoteControlDoor version="2.0" xmlns="http://www.isapi.org/ver20/XMLSchema"><cmd>open</cmd></RemoteControlDoor>'

I have validated all these endpoints using manual CURL commands and Webhook interception. I hope this helps improve the integration for this device family!

Thnx for sharing, but all those commands are already part of my addon, have you tried it? Does it allow SDK?

I think this is the problem on this doorbell:
Port 80 respond :

[2026-04-25 23:29:36.899][INF] COM_Logout[-1][1]
[2026-04-25 23:29:36.900][INF] Login dev 192.168.2.74:80.
[2026-04-25 23:29:36.901][INF] Private connect 192.168.2.74:80 sock=135 this=0x6156f184 cmd=0x10000 port=33658
[2026-04-25 23:29:36.901][INF] LogonDev1 in[192.168.2.74:80]
2026-04-25 23:29:41.914 | WARNING  | __main__:retry_connection:51 - Retry for K1T502 Doorbell failed: ('Error while logging into K1T502 Doorbell', 10, 'Timeout when receiving data from the device.')
[2026-04-25 23:29:41.914][ERR] LogonDev1[192.168.2.74]
[2026-04-25 23:29:41.914][ERR] [192.168.2.74:80]PRO_LoginHikDevice fail[err=10].[0x00000000,0x00000000]
[2026-04-25 23:29:41.914][ERR] CMemberMgrBase::AllocIndex2, MemberStart Failed, iIndex[0]
2026-04-25 23:30:11.945 | INFO     | __main__:retry_connection:27 - Retrying connection for K1T502 Doorbell (Index 0)...
2026-04-25 23:30:11.946 | DEBUG    | doorbell:__init__:73 - Setting up doorbell: K1T502 Doorbell
2026-04-25 23:30:11.947 | DEBUG    | doorbell:logout:124 - SDK logout result 0
2026-04-25 23:30:11.947 | DEBUG    | doorbell:authenticate:81 - Logging into doorbell
[2026-04-25 23:30:11.947][INF] COM_Logout[-1][1]
[2026-04-25 23:30:11.947][INF] Login dev 192.168.2.74:80.
[2026-04-25 23:30:11.949][INF] Private connect 192.168.2.74:80 sock=135 this=0x6156f184 cmd=0x10000 port=51848
[2026-04-25 23:30:11.949][INF] LogonDev1 in[192.168.2.74:80]
2026-04-25 23:30:16.961 | WARNING  | __main__:retry_connection:51 - Retry for K1T502 Doorbell failed: ('Error while logging into K1T502 Doorbell', 10, 'Timeout when receiving data from the device.')
[2026-04-25 23:30:16.961][ERR] LogonDev1[192.168.2.74]
[2026-04-25 23:30:16.961][ERR] [192.168.2.74:80]PRO_LoginHikDevice fail[err=10].[0x00000000,0x00000000]
[2026-04-25 23:30:16.961][ERR] CMemberMgrBase::AllocIndex2, MemberStart Failed, iIndex[1]
2026-04-25 23:30:46.993 | INFO     | __main__:retry_connection:27 - Retrying connection for K1T502 Doorbell (Index 0)...
2026-04-25 23:30:46.993 | DEBUG    | doorbell:__init__:73 - Setting up doorbell: K1T502 Doorbell
2026-04-25 23:30:46.994 | DEBUG    | doorbell:logout:124 - SDK logout result 0
2026-04-25 23:30:46.995 | DEBUG    | doorbell:authenticate:81 - Logging into doorbell
[2026-04-25 23:30:46.994][INF] COM_Logout[-1][1]
[2026-04-25 23:30:46.995][INF] Login dev 192.168.2.74:80.
[2026-04-25 23:30:46.996][INF] Private connect 192.168.2.74:80 sock=135 this=0x6156f184 cmd=0x10000 port=46144
[2026-04-25 23:30:46.996][INF] LogonDev1 in[192.168.2.74:80]
2026-04-25 23:30:52.009 | WARNING  | __main__:retry_connection:51 - Retry for K1T502 Doorbell failed: ('Error while logging into K1T502 Doorbell', 10, 'Timeout when receiving data from the device.')
[2026-04-25 23:30:52.008][ERR] LogonDev1[192.168.2.74]
[2026-04-25 23:30:52.008][ERR] [192.168.2.74:80]PRO_LoginHikDevice fail[err=10].[0x00000000,0x00000000]
[2026-04-25 23:30:52.008][ERR] CMemberMgrBase::AllocIndex2, MemberStart Failed, iIndex[0]

When trying to log to port 8000

2026-04-26 12:59:47.574 | DEBUG    | doorbell:authenticate:81 - Logging into doorbell
[2026-04-26 12:59:47.574][INF] Login dev 192.168.2.74:8000.
[2026-04-26 12:59:47.575][INF] Private connect 192.168.2.74:8000 sock=135 this=0x3100a184 cmd=0x10000 port=50544
[2026-04-26 12:59:47.575][INF] LogonDev1 in[192.168.2.74:8000]
2026-04-26 12:59:47.598 | WARNING  | __main__:retry_connection:51 - Retry for K1T502 Doorbell failed: 884 is not a valid DeviceType

884 is not a valid DeviceType !!

In some previous message someone say that the DS-K1T502 XXX aren’t compatible with the SDK But it seems that in the firmware there is some note about this compatibility (HCNetSDK) .

I am using a Hikvision KD-8003 doorbell camera, and an indoor display KH6320. When opening the stream via Scrypted webinterface (and via HomeKit) two-way audio works perfectly. However when ringing the doorbell, and then opening the stream via webinterface, two-way audio does not work. Because it is somehow streamed (though not picked up) to the indoor display. When I disconnect the indoor display, two-way audio works also after ringing the doorbell.

How can I get two-way audio to work in the display and scrypted webinterface at the same time when ringing?

I'm having an issue with my Hikvision door station (Model: DS-KV6124-WBE1).

I have successfully integrated it into Home Assistant, and the Add-on logs show the status as Idle.

The Problem:

Despite the connection being active, the binary sensors (specifically visitor_status and call_status) do not update when the doorbell button is pressed. It seems like the event stream is not being pushed to Home Assistant.

Details:

  • Model: DS-KV6124-WBE1
  • Status in HA: Idle
  • Issue: The ISAPI event stream doesn't seem to trigger. I can trigger the door relay (open the door) from HA, but I cannot receive button press events.

Do you see any event in addon when doorbell button is pressed? If not, then your device doesnt provide the event .. I have added a manually poll option in the addon

Tnx all for you
Thanks for the help! Could you please clarify what is the exact name of the parameter for the manual poll in the add-on configuration? I want to make sure I'm using the right key to enable it.
ISAPI request status is stuck on unknown, so it’s likely not providing events naturally.
I want to try the manual poll option you mentioned. Could you please tell me:
What is the exact name of the key/parameter I need to add to the Add-on configuration (YAML)?
Is it poll_interval or something else?

Hi. Call_state_poll , it's all in the docs

Hi Fabio,
I seem to have a similar issue as shikoil here above with my doorstation (Model: DS-KD8003-IME1(B)). I followed the steps as described, but the door station remains in idle status, when the doorbell is pressed. No status update is received or seems to be sent. I my case I am only interested in the event of the doorbell button press.

I already configured the polling (5 sec) but no improvement. So in short the details of my issue are:

  • Model: DS-KD8003-IME1(B)
  • Status in HA: Idle
  • Issue: The ISAPI event stream doesn't seem to trigger. I cannot receive button press events.
  • Polling (call_state_poll): activated (5 sec)

show me addon log
also look here for custom firmwares when you run 3.7.x firmware , those firmware dont support call state, but the custom one does....

Fabio,

this is the addon log:
2026-05-08 15:49:23.595 | WARNING | config:load_mqtt_config:152 - Partial MQTT config detected (missing host). This is likely browser autofill. Attempting Supervisor fallback.
2026-05-08 15:49:23.595 | DEBUG | config:mqtt_config_from_supervisor:40 - Requesting MQTT service configuration to supervisor
2026-05-08 15:49:23.603 | INFO | config:load_mqtt_config:165 - Using MQTT configuration provided by Home Assistant Supervisor
2026-05-08 15:49:23.617 | INFO | sdk.utils:loadSDK:44 - Using OS: Linux with architecture: x86_64
loop[2] find 2 mac and 3 ip
2026-05-08 15:49:23.809 | INFO | doorbell:authenticate:101 - Connected to doorbell: doorbell type: OUTDOOR
2026-05-08 15:49:23.809 | INFO | main:main:194 - Doorbell 0 (doorbell) authenticated.
2026-05-08 15:49:23.809 | INFO | event:init:87 - Setting up event handler: Console stdout
2026-05-08 15:49:23.809 | INFO | mqtt:init:117 - Setting up event handler: MQTT
2026-05-08 15:49:24.115 | INFO | mqtt:poll_call_sensor:185 - Call sensor polling for : doorbell changed to idle
2026-05-08 15:49:29.180 | INFO | mqtt:poll_call_sensor:185 - Call sensor polling for : doorbell changed to idle
2026-05-08 15:49:34.250 | INFO | mqtt:poll_call_sensor:185 - Call sensor polling for : doorbell changed to idle
2026-05-08 15:49:39.317 | INFO | mqtt:poll_call_sensor:185 - Call sensor polling for : doorbell changed to idle
2026-05-08 15:49:44.352 | INFO | mqtt:poll_call_sensor:185 - Call sensor polling for : doorbell changed to idle
2026-05-08 15:49:49.386 | INFO | mqtt:poll_call_sensor:185 - Call sensor polling for : doorbell changed to idle
2026-05-08 15:49:54.432 | INFO | mqtt:poll_call_sensor:185 - Call sensor polling for : doorbell changed to idle
2026-05-08 15:49:59.476 | INFO | mqtt:poll_call_sensor:185 - Call sensor polling for : doorbell changed to idle
2026-05-08 15:50:05.887 | INFO | mqtt:poll_call_sensor:185 - Call sensor polling for : doorbell changed to idle
2026-05-08 15:50:10.958 | INFO | mqtt:poll_call_sensor:185 - Call sensor polling for : doorbell changed to idle
2026-05-08 15:50:16.005 | INFO | mqtt:poll_call_sensor:185 - Call sensor polling for : doorbell changed to idle
2026-05-08 15:50:21.052 | INFO | mqtt:poll_call_sensor:185 - Call sensor polling for : doorbell changed to idle
2026-05-08 15:50:26.097 | INFO | mqtt:poll_call_sensor:185 - Call sensor polling for : doorbell changed to idle
2026-05-08 15:50:31.146 | INFO | mqtt:poll_call_sensor:185 - Call sensor polling for : doorbell changed to idle
2026-05-08 15:50:36.232 | INFO | mqtt:poll_call_sensor:185 - Call sensor polling for : doorbell changed to idle
2026-05-08 15:50:41.286 | INFO | mqtt:poll_call_sensor:185 - Call sensor polling for : doorbell changed to idle
2026-05-08 15:50:46.322 | INFO | mqtt:poll_call_sensor:185 - Call sensor polling for : doorbell changed to idle

Doorbell button pressed at approx. 15:50:30, no change whatsoever.
BTW I am indeed on firmware 3.7.1, the version thtt is now removed from the Hikvision site.
In an earlier attempt I also checked the response of the door bell with the curl command. Just after pressing the doorbell it still showed an idle status.

I will have al look at the custom firmware. Thanks for the information.

perfect, for now indeed use the custom, hikvsion promised to fix it in next baseline firmware

I saw your comment. Thanks for the support.

Hai Fabio,

I installed the custom firmware from the post by Sigfr3d: KS-KD8003 (revB) already posted earlier ...; is the 'KS-' a typo??.
Call status still does not change when pressing the button.

Tried it both with and without polling

2026-05-11 14:55:45.877 | INFO | mqtt:poll_call_sensor:185 - Call sensor polling for : doorbell changed to idle
2026-05-11 14:55:50.896 | INFO | mqtt:poll_call_sensor:185 - Call sensor polling for : doorbell changed to idle
2026-05-11 14:55:52.296 | INFO | mqtt_input:_call_status_callback:495 - Trying to get call status for doorbell: doorbell
2026-05-11 14:55:52.312 | INFO | mqtt_input:_call_status_callback:515 - Received call status: {
"CallStatus": {
"status": "idle"
}
} and show it as an attribute
2026-05-11 14:55:52.313 | INFO | mqtt_input:_call_status_callback:533 - Updated call sensor state to: idle
2026-05-11 14:55:55.913 | INFO | mqtt:poll_call_sensor:185 - Call sensor polling for : doorbell changed to idle

The above result is from clicking the 'Call Status' button just afterthe door bell has been pressed: no status change

hmm, do you have an indoor station? i think for DS-KD8003 polling , it always show idle when you have an indoor, so try adding the indoor station too
normally sdk call event should work on custom firmware, other users confirmed this

Nope, I do not have an indoor station. I wanted all house data (energy, etc.) in 1 interface, being Home Assistant. The indoor station would be a last resort.

so, when you are pressing the doorbutton on the 8003 device? what device is now actually ringing ?

Well, I hear the sound at the doorbell, but the status remains unchanged. I will go through the settings with a fine comb, see if certain changes will do the trick. Worst case scenario I'll reset to factory defaults. See what will happen.