Search Active Devices Protocol (SADP)

This module covers basic operations and classes related to the UDP broadcast communication with hikvision devices.

Interface

hiktools.sadp.unmarshal(root: Element)

Tries to de-serialize an XML-String.

Possible object types are: DiscoveryPacket, DeviceSafeCodePacket, ActionResponse, and BasicDictObject for messages that are not implemented yet.

Arguments:
root: xml.etree.ElementTree.Element

The XML root element (non null).

Returns:

A qualified object instance or None if the given argument was None or the input could not be converted.

Return type:

BasicDictObject, None

hiktools.sadp.hik_code(serial: str, timestamp: tuple) str

Generates the old Hikvision reset code.

Arguments: :param serial: The device’s serial number. :type serial: str :param timestamp: A timestamp of the following format: (day, month, year) :type timestamp: str

Returns:

The generated reset code (can be used within a reset packet).

Return type:

str

hiktools.sadp.fromdict(value: dict) SADPMessage

Converts a dict object into an SADPMessage object.

Parameters:

value (dict) – The input dict containing the XML nodes.

Returns:

An message object containing all nodes of the given dict object converted into an XML string.

Return type:

SADPMessage

Classes

Client

class hiktools.sadp.SADPClient(port: int = 37020, timeout: int = 2)

A simple UDP wrapper client.

This clas implements basic funtionalities of an UDP socket sending data from UDP broadcast. The with directive can be used and __iter__ is also implemented in order to iterate over reveiced SADPMessages.

Example usage

from hiktools import sadp

with sadp.SADPClient(timeout=3) as client:
  # send data with client.write
  client.write(some_message)

  # receive bytes with client.recv_next() or just iterate
  # over next SADPMessages:
  for message in client:
    if message is None: break
    # de-serialize message
    response = sadp.unmarshal(message)

Response Classes

class hiktools.sadp.ActionResponse(root: Element | None = None)

A ‘reset’ message response packet.

The response packet just contains one field of interest named ‘Result’. It applies to the following values: failure, success, denied

__msg__ = 'reset'

The message type name of this class.

property success: bool

Returns whether the action invocation was successful.

class hiktools.sadp.DiscoveryPacket(root: Element | None = None)

A simple discovery packet response wrapper.

Contains all information related to the inquiry response packet. Possible nodes are:

DeviceType, DeviceDescription, CommandPort, HttpPort, MAC, Ipv4Address, Ipv4SubnetMask, Ipv4Gateway, Ipv6Address, Ipv6Masklen, Ipv6Gateway, DHCP, AnalogChannelNum, DigitalChannelNum, DSPVersion, Activated and PasswordResetAbility.

class hiktools.sadp.SafeCode(code: bytes)

The device’s safe code wrapper class.

A safe code is requested by the SADP Tool to export it and send it to the customer service. An unlock code should be returned which can reset the device.

SAFECODE_FLAG = '03000000'

Safe code header value

property checksum: c_uint

The checksum stored in the safe code.

property code: str

The full safe code as a string

class hiktools.sadp.DeviceSafeCodePacket(root: Element | None = None)

A response packet for the ‘getcode’ message.

This class can contain the following nodes:

MAC, Uuid, Code, Types

property code: str

The base64 safecode string.

get_safecode() SafeCode

Returns the converted safecode as a SafeCode object.