no, it was created by Hikvision support upon request
OK. Thanks. A pity that they do not supply release notes.
I am in direct contact with Hikvision Israel. Letâs see what will happen. They work with the dev team in Europe.
yeah, i am also interested if the new official firmwares will include the ISAPI protocol from that custom release, keep us posted
omg @laszlojakab , i found the issue with linux version
centos is installed with python3.6 , i needed to use 3.8 or 3.9 , no error anymore
building now an addon, just 1 question
you have this line :
input("Press Enter to exit...\n")
it fails in a docker
how can i make your script active in a loop without that line?
loop[2] find 6 mac and 10 ip
Press Enter to exit...
Traceback (most recent call last):
File "/hik.py", line 93, in <module>
input("Press Enter to exit...\n")
EOFError: EOF when reading a line
@laszlojakab , i tried other example scripts, even the official included in the SDK, they are all giving wrong values on Linux ⌠too bad
anyway, back to ISAPI , i upgraded the firmare to custom, the callstatus was working now on DS-KD8003 series, but the alertstream was not working
after getting in touch with Hikvision, they told me to factory reset, and YES
i now see incoming events , like door Open , or illegal card swiped!!
gonna ask the developer of PyHik, to add this in the official HikVision HA integration, so there can be more binary sensors created
{
"ipAddress": "192.168.0.70",
"portNo": 80,
"protocol": "HTTP",
"dateTime": "Wed, 28 Jul 2021 20:36:29 GMT",
"activePostCount": 1,
"eventType": "AccessControllerEvent",
"eventState": "active",
"eventDescription": "Access Controller Event",
"AccessControllerEvent": {
"deviceName": "DS-KD8003",
"majorEventType": 5,
"subEventType": 25
}
}
Guys, who is good creating rest sensor? i just need 1 thing, then the whole integration for Hikvision is complete
the alert stream for events, is an infinite file/output, i dont know how to get those values in HA
created a new thread for this
hey @laszlojakab , iâm gonna submit a support request on the hikvision TPP portal, for sdk issues
I have an account there, as a company, if they want to more about the Linux SDK bug, can i give your contact details?
thnx
I think first of all we should create the same app in C++. If the same problems happen in C++ app then we can contact to HikVision support team. If no problem with C++ app then the problem should be in Python code which not related to the SDK so probably HikVision couldnât (or wonât) help to us.
hey, i tried the C++ code, there is a sample file in the downloaded SDK package (consoledemo)
if you start that in terminal, option 3 is to get the alert events
i just added some print commandos to actually see the commands and types, they were wrong too
Guys, integrating the Alertstream in a sensor, is not possible, since its an endless file, so polling it is a nogo
i developed a python script, change offcourse the variables , like username/pass/ip/bearer token
i fire the script with an automation upon start event on Home Assistant
automation:
- alias: Hikvision Door Sensor
initial_state: 'on'
trigger:
- platform: homeassistant
event: start
action:
- service: shell_command.hikvision_stream_sensor
shell command: (the nohup below, makes the script fire in background
hikvision_stream_sensor: nohup python3 /config/python_scripts/hikvision_stream.py $1 > /dev/null 2>&1 &
script:
from requests.auth import HTTPDigestAuth
from datetime import datetime
import requests
import time
import json
#Variables
username = "admin"
password = "XXX"
url = "http://YOUR_IP/ISAPI/Event/notification/alertStream"
headers = {
'Authorization': 'Bearer ¨XXXXX',
'content-type': 'application/json',
}
url_states = "http://localhost:8123/api/states/"
sensor_name = "sensor.hikvision_door"
#Creating Sensor
try:
timestamp = str(datetime.now())
data = json.dumps({'state': 'off', 'attributes': {'Time': timestamp}})
response = requests.post(url_states + sensor_name, headers=headers, data=data)
print("Creating Sensor on start script")
except:
print("Creating Sensor Failed")
while True:
try:
stream = requests.get(url, stream=True, auth=HTTPDigestAuth(username, password))
print("Status code: " , stream.status_code)
for line in stream.iter_lines(chunk_size=1):
str_line = line.decode("utf-8", "ignore")
print(str_line)
#Check for event
if str_line.find('"subEventType": 25') != -1:
result = str_line.find('eventState')
print("Found event!")
try:
timestamp = str(datetime.now())
data = json.dumps({'state': 'on', 'attributes': {'Time': timestamp}})
response = requests.post(url_states + sensor_name, headers=headers, data=data)
print("Door Open")
#put the sensor "on" for 5 seconds
time.sleep(5)
timestamp = str(datetime.now())
data = json.dumps({'state': 'off', 'attributes': {'Time': timestamp}})
response = requests.post(url_states + sensor_name, headers=headers, data=data)
print("Door Closed")
continue
except:
print("Updating sensor failed")
continue
if stream.status_code == 401 or stream.status_code == 403:
time.sleep(5)
except (ValueError,requests.exceptions.ConnectionError,requests.exceptions.ChunkedEncodingError) as err:
print("Connection Failed")
continue
Is it possible to get which room was called / which button was pressed on the outdoor station? There is not such property on the callStatus response body, but maybe thereâs some chance on the alert stream?
Hmm, no the Alertstream doesnât provide callstatus, maybe itâs possible with the SDK , SDK also provides info who opened the door
Hopefully someone can help me here.
Iâve got the DS-KD8003-IME1 running custom firmware V2.2.45 build 210721
I factory reset the device by going into iVMS, then system maintenance, and hit ârestore allâ.
Added back to the indoor station, reconnected, all working, implemented the rest sensor⌠except call status doesnât change from âidleâ.
What am I doing wrong? Did I do the correct factory reset?
Are you using the correct ISAPI url? I added one in first post⌠The callstatus url from 8003 is different then the others
The one in the rest sensor example is for other models, you need to change it to the one for 8003
Mine polling is setup to 3 , more then fast enough
Ah youâre right, I will change then test. Thanks!
That means HikVision support team should provide a working SDK with working C++ sample code.
yeah, i have a ticket open with Hikvision, i sended you a PM
btw, do you also want to work with the ISAPI ? would be nice to have this as an offcial integration into HA
you are a developer
the Hikvision integrtation , is already based on the same ISAPI url, its just the type of events thats needs to be changed in pyhik , and offcourse some changes in hikvision integration, so more binary sensors are created âŚ
Could anyone please share in what format does https://apiieu.hik-connect.com/v3/users/login/v2
expect username/password be submitted?
Tried to send âaccountâ & âpasswordâ key in raw format and getting in return ..."ERROR_MSG": "filed 'password', rejected value[xxxxxx];"
Why do you want to go that road? Everything and more is now possible with ISAPI , and faster
My doorbell DS-KB8113-IM doesnât support these ISAPI methods so Iâm thinking about possible alternatives.
First tried to intercept network traffic from the doorbell to indoor station, but with no luck. Now trying with Hikvision app API.
Managed to implement door unlock method with minor modifications though