Metadata-Version: 2.4
Name: pysadp
Version: 0.1.1
Summary: Python bindings for Hikvision SADP SDK
Author: pysadp contributors
License-Expression: MIT
License-File: LICENSE
Keywords: ctypes,device-discovery,hikvision,sadp,sdk
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: Microsoft :: Windows
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: System :: Networking
Requires-Python: >=3.7
Requires-Dist: importlib-metadata>=1.0; python_version < '3.8'
Description-Content-Type: text/markdown

# pysadp

`pysadp` 是一个基于 `ctypes` 的海康威视 SADP SDK Python 封装。

当前实现依据官方文档《`SADPSDK_开发指南_V4.4_20231130.pdf`》整理，适合在 Windows 环境中调用。

## 已封装能力

- 启动和停止 SADP 服务
- 搜索同网段在线设备
- 手动刷新设备搜索
- 激活设备
- 修改设备网络参数
- 获取设备加密串
- 获取设备码
- 重置密码
- 透传 `SADP_GetDeviceConfig`
- 透传 `SADP_SetDeviceConfig`

## 兼容性说明

- 当前验证稳定的启动方式是 `SADP_Start_V40`
- `SADP_Start_V50` 与跨网段搜索接口在当前 DLL 上未完全匹配，所以库中默认不启用
- 重置密码接口优先尝试 `SADP_ResetPasswd_V50`，若 DLL 未导出，则自动回退到 `SADP_ResetPasswd_V40`

## 运行要求

- Windows
- Python 3.7+

如需实际搜索设备或操作网卡，通常需要管理员权限。

## 安装

```bash
pip install pysadp
```

如需使用自定义 SDK 目录，可通过 `sdk_dir` 参数或环境变量 `PYSADP_SDK_DIR` 指定。

## 快速示例

```python
from pysadp import SADPClient

with SADPClient() as client:
    client.set_log_to_file(level=3, log_dir="sadp_logs", auto_delete=False)
    client.start()
    devices = client.discover(timeout=5.0)
    for device in devices:
        print(device.ipv4_address, device.mac, device.serial_no, device.is_activated)
```

## 激活设备

```python
from pysadp import SADPClient

with SADPClient() as client:
    client.start()
    client.discover(timeout=5.0)
    client.activate_device("DS-2CDXXXXXXXXXXXX", "YourStrongPassword123")
```

## 修改网络参数

```python
from pysadp import NetworkParameters, SADPClient

with SADPClient() as client:
    client.start()
    devices = client.discover(timeout=5.0)
    device = devices[0]
    params = NetworkParameters.from_device(device)
    params.ipv4_address = "192.168.1.120"
    params.ipv4_subnet_mask = "255.255.255.0"
    params.ipv4_gateway = "192.168.1.1"
    client.modify_device_network(device, "YourPassword123", params)
```

## 获取加密串和设备码

```python
from pysadp import SADPClient

with SADPClient() as client:
    client.start()
    devices = client.discover(timeout=5.0)
    serial_no = devices[0].serial_no
    encrypt_string = client.get_encrypt_string(serial_no)
    safe_code = client.get_device_code(serial_no)
    print(encrypt_string.value)
    print(safe_code.value)
```

## 重置密码

```python
from pysadp import ResetPasswordParameters, SADPClient

with SADPClient() as client:
    client.start()
    devices = client.discover(timeout=5.0)
    device = devices[0]

    params = ResetPasswordParameters.by_auth_file(
        password="NewPassword123",
        auth_file=r"C:\Encrypt_xxx.xml",
    )
    client.reset_password(device.serial_no, params)
```

## CLI 用法

安装后可直接使用命令行：

```bash
pysadp discover
```

常用示例：

```bash
pysadp discover --timeout 5 --json
pysadp activate --serial DS-2CDXXXXXXXXXXXX --password NewPassword123
pysadp get-encrypt-string --serial DS-2CDXXXXXXXXXXXX
pysadp get-device-code --serial DS-2CDXXXXXXXXXXXX
pysadp modify-network --mac aa-bb-cc-dd-ee-ff --password Admin123 --ipv4-address 192.168.1.120 --ipv4-subnet-mask 255.255.255.0 --ipv4-gateway 192.168.1.1
pysadp reset-password --serial DS-2CDXXXXXXXXXXXX --new-password NewPassword123 --auth-file C:\Encrypt_xxx.xml
```

