Skip to main content

The client for HIKVISION cameras, DVR

Project description

CircleCI

Python Library for Hikvision Cameras

Simple and easy to use library for working with video equipment from Hikvision.

Install

pip install hikvisionapi

Examples

There are two formats for receiving a response:

from hikvisionapi import Client

cam = Client('http://192.168.0.2', 'admin', 'admin')


# Dict response (default)
response = cam.System.deviceInfo(method='get')

response == {
    u'DeviceInfo': {
        u'@version': u'2.0',
        '...':'...'
        }
    }


# xml text response
response = cam.System.deviceInfo(method='get', present='text')

response == '''<?xml version="1.0" encoding="UTF-8" ?>
        <DeviceInfo version="1.0" xmlns="http://www.hikvision.com/ver20/XMLSchema">
        <deviceName>HIKVISION</deviceName>
        </DeviceInfo>'''

Hints:

# to get the channel info
motion_detection_info = cam.System.Video.inputs.channels[1].motionDetection(method='get')


# to send data to device:
xml = cam.System.deviceInfo(method='get', present='text')
cam.System.deviceInfo(method='put', data=xml)


# to get events (motion, etc..)
# Increase timeout if you want to wait for the event to be received
cam = Client('http://192.168.0.2', 'admin', 'Password', timeout=30)
cam.count_events = 2 # The number of events we want to retrieve (default = 1)
response = cam.Event.notification.alertStream(method='get', type='stream')

response == [{
    u'EventNotificationAlert':{
        u'@version': u'2.0',
        u'@xmlns': u'http://www.hikvision.com/ver20/XMLSchema',
        u'activePostCount': u'0',
        u'channelID': u'1',
        u'dateTime': u'2018-03-21T15:49:02+08:00',
        u'eventDescription': u'videoloss alarm',
        u'eventState': u'inactive',
        u'eventType': u'videoloss'
        }
   }]

# Alternative solution to get events
cam = Client('http://192.168.0.2', 'admin', 'Password', timeout=1)
while True:
    try:
        response = cam.Event.notification.alertStream(method='get', type='stream')
        if response:
            print response
    except Exception:
        pass

# to get opaque data type and write to file
response = cam.System.configurationData(method='get', type='opaque_data')
with open('my_file', 'wb') as f:
    for chunk in response.iter_content(chunk_size=1024): 
        if chunk:
            f.write(chunk)
            
# Get and save picture from camera            
response = client.Streaming.channels[102].picture(method='get', type='opaque_data')
with open('screen.jpg', 'wb') as f:
    for chunk in response.iter_content(chunk_size=1024):
        if chunk:
            f.write(chunk)                

Examples (Async)

from hikvisionapi import AsyncClient

cam = AsyncClient('http://192.168.0.2', 'admin', 'admin')


# Dict response (default)
response = await cam.System.deviceInfo(method='get')

response == {
    u'DeviceInfo': {
        u'@version': u'2.0',
        '...':'...'
        }
    }


# xml text response
response = await cam.System.deviceInfo(method='get', present='text')

response == '''<?xml version="1.0" encoding="UTF-8" ?>
        <DeviceInfo version="1.0" xmlns="http://www.hikvision.com/ver20/XMLSchema">
        <deviceName>HIKVISION</deviceName>
        </DeviceInfo>'''

# to send data to device:
xml = cam.System.deviceInfo(method='get', present='text')
await cam.System.deviceInfo(method='put', data=xml)


# to get events (motion, etc..)
# Increase timeout if you want to wait for the event to be received (None for infinite)
async for event in cam.Event.notification.alertStream(method='get', type='stream', timeout=None):
    event == {
        u'EventNotificationAlert':{
            u'@version': u'2.0',
            u'@xmlns': u'http://www.hikvision.com/ver20/XMLSchema',
            u'activePostCount': u'0',
            u'channelID': u'1',
            u'dateTime': u'2018-03-21T15:49:02+08:00',
            u'eventDescription': u'videoloss alarm',
            u'eventState': u'inactive',
            u'eventType': u'videoloss'
            }
    }

# Get and save picture from camera
with open('screen.jpg', 'wb') as f:
    async for chunk in cam.Streaming.channels[102].picture(method='get', type='opaque_data'):
        if chunk:
            f.write(chunk)

How to run the tests

pipenv install --dev
pipenv run pytest
pipenv run pytest --cov-report html --cov hikvisionapi # to get coverage report in ./htmlcov/

# or you can get into the virtual env with:
pipenv shell
pytest

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hikvisionapi-0.3.2.tar.gz (6.4 kB view details)

Uploaded Source

Built Distribution

hikvisionapi-0.3.2-py3-none-any.whl (7.2 kB view details)

Uploaded Python 3

File details

Details for the file hikvisionapi-0.3.2.tar.gz.

File metadata

  • Download URL: hikvisionapi-0.3.2.tar.gz
  • Upload date:
  • Size: 6.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.10

File hashes

Hashes for hikvisionapi-0.3.2.tar.gz
Algorithm Hash digest
SHA256 7bdc14ecdbede027ff269dbf0f0c9e863f056f38759b16b3ec33c02e22904b30
MD5 280ffaeed6e6abaafc2639fd25a17b43
BLAKE2b-256 ba9c4118157078f4ba59e278eb7bd7f6a2bdf354d13f8c5ba453ec0734609624

See more details on using hashes here.

File details

Details for the file hikvisionapi-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: hikvisionapi-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 7.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.10

File hashes

Hashes for hikvisionapi-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5389a46cbef9a5d23b2eb1784310da9a7a25073f6e9c139bd0397c4c4d04e760
MD5 c4aaa204b22aa366d33c4a0693b7667a
BLAKE2b-256 08a2b84a6b6c2c94a7f3a5ff7a90c5aac175ec04fcf714f44bab22cbbf8798c8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page