讲师中心 微信公众号
AI工具推荐 视频效率加速

Dahua Cloud Open IoT Basic General Kit

Polar Sponsor
爱发电 赞助
.NET 9.0

大华云IoT设备管理客户端,支持摄像头、NVR、DVR等设备全生命周期管理。提供设备增删查、国标GB28181接入、SD卡管理、WiFi配置、消息订阅回调、铃音管理、图片解密等43个API接口。适用于大华云设备接入、监控系统集成、智能安防项目开发。

大华云开放平台 - 基础通用套件

功能概述

大华云开放平台 - 基础通用套件是一项面向实际任务的技能,主要用于本技能提供 大华云开放平台基础通用套件 的统一客户端实现,采用单文件设计:;✅ 统一客户端 - 封装所有设备管理API;

核心要点

  • ✅ 零冗余配置 - 仅需 Cloud 凭证(ProductId、AK、SK)即可;
  • ✅ 单文件实现 - 易于维护和部署;
  • ✅ 环境变量支持 - 支持GUI/命令行配置;

使用与执行

✅ 命令行工具 - 快速操作无需编写代码;✅ Python SDK - 可集。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。

结果检查与注意事项

实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。

大华云开放平台 - 基础通用套件

概述

本技能提供大华云开放平台基础通用套件的统一客户端实现,采用单文件设计:

  • ✅ 统一客户端 - 封装所有设备管理API
  • ✅ 零冗余配置 - 仅需 Cloud 凭证(ProductId、AK、SK)即可
  • ✅ 单文件实现 - 易于维护和部署
  • ✅ 环境变量支持 - 支持GUI/命令行配置
  • ✅ 命令行工具 - 快速操作无需编写代码
  • ✅ Python SDK - 可集成到其他应用
  • ✅ 自动Token管理 - Token自动刷新,无需手动处理

完整功能

共 43 个接口 全部支持,详见 API_COVERAGE.md。

1. 设备管理

  • 添加设备 add_device() / add
  • 校验设备密码 verify_device_password() / verify
  • 删除设备 delete_device() / delete
  • 查询设备列表 get_device_list() / list
  • 查询设备在线状态 get_device_online() / online
  • 批量查询设备详细信息 list_device_details() / details
  • 查询设备绑定状态 check_device_bind() / bind
  • 查询设备品类 get_category() / category
  • 获取设备通道信息 get_device_channel_info() / channels
  • 修改设备/通道名称 modify_device_name()
  • 修改设备密码 modify_dev_code()

2. 国标设备

  • 获取国标设备注册信息 get_sip_info() / sip-info
  • 获取国标码列表 list_gb_code() / gb-code
  • 添加国标设备 add_gb_device() / add-gb
  • 修改国标设备信息 modify_gb_device() / modify-gb
  • 国标设备查询详细信息 list_gb_device_details() / gb-details

3. SD卡管理

  • 查询SD卡状态 get_sd_card_status()
  • 查询SD卡容量 get_sd_card_storage()
  • 获取SD卡列表 list_sd_card_storage()
  • 格式化SD卡 format_sd_card()

4. 设备配置

  • 获取设备使能开关状态 get_ability_status() / ability
  • 设置设备使能开关 set_ability_status()
  • 设备校时 set_current_utc()

5. 铃音管理

  • 获取铃声列表 list_custom_ring()
  • 新增自定义铃声 add_custom_ring()
  • 删除自定义铃声 delete_custom_ring()
  • 设置铃声 set_custom_ring()

6. WiFi 管理

  • 获取设备当前连接的热点信息 current_device_wifi()
  • 获取设备周边热点信息 wifi_around()
  • 修改设备连接热点 control_device_wifi()

7. 其他设备能力

  • 获取 SIM 信号强度 get_sim_signal_strength()
  • 图片解密 image_decrypt()

8. 消息订阅

  • 添加回调配置 add_callback_config()
  • 按设备ID列表订阅消息 message_subscribe()
  • 分页获取回调配置 get_all_callback_config()
  • 根据回调配置ID更新设备订阅 update_subscribe_by_callback_config()
  • 根据回调配置ID更新回调配置 update_callback_config()
  • 删除回调配置及相关订阅 delete_callback_config()
  • 根据回调配置ID搜索回调配置信息 get_callback_config_info()
  • 根据回调配置ID搜索已订阅的设备消息 get_subscribe_info_by_callback_config()
  • 根据设备ID查询消息订阅信息 get_subscribe_info_by_device()
  • 按设备类别获取支持的消息类型 get_message_type_page()

配置凭证

需要设置 Cloud 凭证(ProductId、AK、SK)!

方式 1: 图形界面设置 (Windows GUI)

最适合初学者和不想用命令行的用户!

步骤 1: 打开系统设置

  1. 按下 Win + R 键,输入 sysdm.cpl 并回车
  2. 或者右键点击"此电脑" → "属性" → "高级系统设置"

步骤 2: 进入环境变量设置

  1. 在弹出的"系统属性"窗口中,切换到 "高级" 选项卡
  2. 点击底部的 "环境变量(N)..." 按钮

步骤 3: 创建用户环境变量

在 "当前用户的变量(U)" 区域(窗口上半部分),点击 "新建(W)...":

变量名 变量值 说明
DAHUA_CLOUD_PRODUCT_ID 你的 AppID 应用 ID
DAHUA_CLOUD_AK 你的 AccessKey 访问密钥
DAHUA_CLOUD_SK 你的 SecretKey 保密密钥

示例:

变量名:DAHUA_CLOUD_PRODUCT_ID
变量值:138XXXX731

变量名:DAHUA_CLOUD_AK  
变量值:196XXXXXXXXXXXXX808

变量名:DAHUA_CLOUD_SK
变量值:naumXXXXXXXXXXXXXXXXyHxh

步骤 4: 确认并保存

  1. 每个变量都点击 "确定" 保存
  2. 关闭所有窗口
  3. 重要: 重新打开命令行窗口才能生效

快速截图指引

如需更详细的图文教程,请参考以下操作要点:

  • 确保在"用户变量"区域添加,而非"系统变量"
  • 变量名必须完全一致(区分大小写)
  • 变量值不要有多余空格
  • 添加完成后需要重启终端

方式 2: 命令行快速设置

Windows PowerShell:

[Environment]::SetEnvironmentVariable("DAHUA_CLOUD_PRODUCT_ID", "your_app_id", "User")
[Environment]::SetEnvironmentVariable("DAHUA_CLOUD_AK", "your_access_key", "User")
[Environment]::SetEnvironmentVariable("DAHUA_CLOUD_SK", "your_secret_key", "User")

Linux/Mac:

export DAHUA_CLOUD_PRODUCT_ID='your_app_id'
export DAHUA_CLOUD_AK='your_access_key'
export DAHUA_CLOUD_SK='your_secret_key'

方式 3: 命令行临时设置

Windows PowerShell (临时):

$env:DAHUA_CLOUD_PRODUCT_ID='your_app_id'
$env:DAHUA_CLOUD_AK='your_access_key'
$env:DAHUA_CLOUD_SK='your_secret_key'

注意: 仅在当前窗口有效,关闭后失效

验证环境变量是否生效

Linux/Mac:

echo $DAHUA_CLOUD_PRODUCT_ID
echo $DAHUA_CLOUD_AK
# 注意:不要打印 SK,避免泄露

Windows PowerShell:

$env:DAHUA_CLOUD_PRODUCT_ID
$env:DAHUA_CLOUD_AK

快速开始

基本使用

# 查看帮助
python scripts/dahua_iot_client.py --help

# 添加设备
python scripts/dahua_iot_client.py add -d <设备序列号> -p admin123 -c IPC

# 查询设备列表
python scripts/dahua_iot_client.py list -p 1 -s 10

# 查询设备在线状态
python scripts/dahua_iot_client.py online -d <设备序列号>

# 校验设备密码(验证密码是否正确)
python scripts/dahua_iot_client.py verify -d <设备序列号> -p admin123 -e aes256

# 删除设备
python scripts/dahua_iot_client.py delete -d <设备序列号>

完整示例

# 完整设备接入流程(仅需 Cloud 凭证)
cd scripts
python dahua_iot_client.py add -d <设备序列号> -p admin123 -c IPC -e aes256
python dahua_iot_client.py online -d <设备序列号>
python dahua_iot_client.py list -p 1 -s 20 -d <设备序列号前缀>

Python SDK 调用

导入说明:在 scripts/ 目录下运行,或将 scripts/ 加入 PYTHONPATH 后使用。

from dahua_iot_client import DahuaIoTClient, create_client_from_env

# 方式1: 从环境变量创建客户端(verbose=True 打印API日志)
client = create_client_from_env()

# SDK 集成时建议关闭日志:create_client_from_env(verbose=False)

# 方式2: 手动创建客户端
client = DahuaIoTClient(
    app_id='your_product_id',
    access_key='your_access_key',
    secret_key='your_secret_key'
)

# 添加设备
result = client.add_device(
    device_id='<设备序列号>',
    device_password='admin123',
    category_code='IPC',
    encrypt_method='aes256'  # 推荐
)

print(f"Add device result: {result}")

# 校验设备密码(验证密码是否正确)
verify_result = client.verify_device_password('<设备序列号>', 'admin123', encrypt_method='aes256')
print(f"Password verify: {verify_result.get('success', False)}")

# 查询设备在线状态
status = client.get_device_online('<设备序列号>')
print(f"Online status: {status}")

# 查询设备列表
devices = client.get_device_list(page_num=1, page_size=10)
print(f"Device list: {devices}")

# 获取SD卡状态
sd_status = client.get_sd_card_status('<设备序列号>')
print(f"SD card status: {sd_status}")

# 设置设备使能开关
result = client.set_ability_status(
    device_id='<设备序列号>',
    ability_type='localRecord',
    status='on',
    channel_id='0'
)

工作流程

┌─────────────────────┐
│ 1. 初始化客户端      │
│   (配置凭证)         │
└──────────┬──────────┘
           ▼
┌─────────────────────┐
│ 2. 自动获取 Token    │
│   (AppAccessToken)   │
└──────────┬──────────┘
           ▼
┌─────────────────────┐
│ 3. 调用业务API       │
│   (设备管理/配置)    │
└──────────┬──────────┘
           ▼
┌─────────────────────┐
│ 4. 返回结果          │
│   (JSON格式)         │
└─────────────────────┘

API 端点

模块 路径前缀 说明
认证 /open-api/api-base/auth/getAppAccessToken 获取 AppAccessToken
设备管理 /open-api/api-iot/device/* addDevice、deleteDevice、verifyDevCode、getDeviceList、deviceOnline、listDeviceDetailsByIds、checkDeviceBindInfo、getCategory、modifyDeviceName、modifyDevCode、getDeviceChannelInfo
国标设备 /open-api/api-iot/device/* getSipInfo、listGbCode、addGbDevice、modifyGbDevice、deviceInfoDetailAll
SD卡/铃音/WiFi /open-api/api-aiot/device/* getSDCardStatus、getSDCardStorage、listSDCardStorage、formatSDCard、listCustomRing、addCustomRing、deleteCustomRing、setCustomRing、wifiAround、currentDeviceWifi、controlDeviceWifi
设备配置 /open-api/api-aiot/device/* getAbilityStatus、setAbilityStatus、setCurrentUTC
其他 /open-api/api-aiot/device/getSimSignalStrength 获取 SIM 信号强度
图片解密 /open-api/api-decrypto/image/decrypto 图片解密
消息订阅 /open-api/api-message/* addCallbackConfig、getAllCallbackConfigId、messageSubscribeByDeviceIds、getMessageTypePage、getMessageSubscribeInfoByDeviceId、updateSubscribeByCallbackConfigId、updateByCallbackConfigId、deleteCallbackId、getInfoByCallbackConfigId、getSubscribeInfoByCallbackConfigId

完整 API 参考见 references/api_reference.md。

认证机制

签名算法

SHA512 HMAC 签名 - 两种签名方式:

  1. get_token_sign() - 获取 Token 签名

    签名因子: access_key + timestamp + nonce
    
  2. business_api_sign() - 业务 API 签名

    签名因子: access_key + app_access_token + timestamp + nonce
    

请求头结构

认证请求头 (获取 Token):

{
    "Content-Type": "application/json",
    "AccessKey": access_key,
    "Timestamp": timestamp,
    "Nonce": nonce,
    "X-TraceId-Header": trace_id,
    "Sign": signature,           # get_token_sign() 生成
    "ProductId": app_id,
    "Version": "V1",
    "Sign-Type": "simple"
}

业务请求头 (所有设备管理API):

{
    "Content-Type": "application/json",
    "AccessKey": access_key,
    "Timestamp": timestamp,
    "Nonce": nonce,
    "X-TraceId-Header": trace_id,
    "Sign": signature,           # business_api_sign() 生成
    "Version": "V1",
    "Sign-Type": "simple",
    "AppAccessToken": app_token,
    "ProductId": app_id
}

代码架构

┌──────────────────────────────────────────────────────────────────┐
│                    常量配置层 (Constants)                         │
│  - API 端点、超时时间、环境变量名                               │
└──────────────────────────────────────────────────────────────────┘
                              │
┌──────────────────────────────────────────────────────────────────┐
│                    工具函数层 (Utilities)                         │
│  - get_token_sign()          获取 Token 签名                  │
│  - business_api_sign()       业务 API 签名                    │
│  - DeviceCodeEncryptor       设备密码加密(Base64/AES256)        │
└──────────────────────────────────────────────────────────────────┘
                              │
┌──────────────────────────────────────────────────────────────────┐
│                     DahuaIoTClient 类 (43个接口)                   │
│  设备: add/verify/delete/list/details/online/bind/category/channel │
│  国标: get_sip_info/add_gb/list_gb_code/modify_gb/gb_details      │
│  SD卡: get_status/storage/list/format  铃音: list/add/delete/set  │
│  配置: get/set_ability_status/set_current_utc                     │
│  WiFi: wifi_around/current/control  SIM: get_sim_signal_strength  │
│  消息: callback/message_subscribe/update/delete/query             │
│  其他: image_decrypt 图片解密                                      │
└──────────────────────────────────────────────────────────────────┘
                              │
┌──────────────────────────────────────────────────────────────────┐
│                    辅助函数层                                     │
│  - create_client_from_env()  从环境变量创建客户端                 │
└──────────────────────────────────────────────────────────────────┘

设备密码加密

方式一:Base64加密

格式:"Dolynk_" + Base64(设备密码)
例如:若设备密码为 admin123
Base64(admin123) = YWRtaW4xMjM=
加密后字符串 = Dolynk_YWRtaW4xMjM=

方式二:AES256加密(推荐)

格式:Base64(Aes256(待加密内容, AesKey, IV初始向量))
加密算法:Aes256/CBC/PKCS7
初始化向量IV:86E2DB6D77B5E9CD
AesKey:Cut32(UpperCase(MD5-32位(UpperCase(sk))))

示例代码:

from dahua_iot_client import DeviceCodeEncryptor

encryptor = DeviceCodeEncryptor(
    secret_access_key="your_sk",
    device_id="your_device_id"
)

# AES256加密(推荐)
dev_code = encryptor.encrypt_aes256("admin123")

# Base64加密
dev_code = encryptor.encrypt_base64("admin123")

核心类和函数

DahuaIoTClient 类

统一客户端类,封装所有设备管理API。

初始化参数

参数 类型 必填 说明
app_id str ✅ 产品ID (ProductId)
access_key str ✅ 访问密钥 (AccessKey)
secret_key str ✅ 密钥 (SecretKey)
api_base_url str ❌ API基础地址(默认:https://open.cloud-dahua.com/)
verbose bool ❌ 是否打印API调用日志(默认:True,SDK集成时建议False)

主要方法(43 个接口)

分类 方法 说明 CLI
设备 add_device() 添加设备 add
设备 verify_device_password() 校验设备密码 verify
设备 delete_device() 删除设备 delete
设备 get_device_list() 查询设备列表 list
设备 get_device_online() 查询设备在线状态 online
设备 list_device_details() 批量查询设备详细信息 details
设备 check_device_bind() 查询设备绑定状态 bind
设备 get_category() 查询设备品类 category
设备 get_device_channel_info() 获取设备通道信息 channels
设备 modify_device_name() 修改设备/通道名称 -
设备 modify_dev_code() 修改设备密码 -
国标 get_sip_info() 获取国标设备注册信息 sip-info
国标 list_gb_code() 获取国标码列表 gb-code
国标 add_gb_device() 添加国标设备 add-gb
国标 modify_gb_device() 修改国标设备信息 modify-gb
国标 list_gb_device_details() 国标设备查询详细信息 gb-details
SD卡 get_sd_card_status() 获取SD卡状态 -
SD卡 get_sd_card_storage() 查询SD卡容量 -
SD卡 list_sd_card_storage() 获取SD卡列表 -
SD卡 format_sd_card() 格式化SD卡 -
配置 get_ability_status() 获取设备使能状态 ability
配置 set_ability_status() 设置设备使能状态 -
配置 set_current_utc() 设备校时 -
铃音 list_custom_ring() 获取铃声列表 -
铃音 add_custom_ring() 新增自定义铃声 -
铃音 delete_custom_ring() 删除自定义铃声 -
铃音 set_custom_ring() 设置铃声 -
WiFi current_device_wifi() 获取设备当前连接热点 -
WiFi wifi_around() 获取设备周边热点 -
WiFi control_device_wifi() 修改设备连接热点 -
其他 get_sim_signal_strength() 获取SIM信号强度 -
其他 image_decrypt() 图片解密 -
消息 add_callback_config() 添加回调配置 -
消息 message_subscribe() 按设备ID订阅消息 -
消息 get_all_callback_config() 分页获取回调配置 -
消息 update_subscribe_by_callback_config() 根据回调配置更新订阅 -
消息 update_callback_config() 更新回调配置 -
消息 delete_callback_config() 删除回调配置 -
消息 get_callback_config_info() 搜索回调配置信息 -
消息 get_subscribe_info_by_callback_config() 搜索已订阅设备消息 -
消息 get_subscribe_info_by_device() 按设备ID查询订阅信息 -
消息 get_message_type_page() 按设备类别获取消息类型 -

DeviceCodeEncryptor 类

设备密码加密工具类。

方法

方法 说明
encrypt_base64(password) Base64加密
encrypt_aes256(password) AES256加密(推荐)

命令行参数

通用参数

参数 简写 类型 必填 说明
--help -h - ❌ 显示帮助信息

命令行子命令汇总

子命令 说明
add 添加设备
add-gb 添加国标设备
delete 删除设备
verify 校验设备密码
list 查询设备列表
details 查询设备详细信息
online 查询设备在线状态
bind 查询设备绑定状态
category 查询设备品类
channels 获取设备通道信息
ability 获取设备使能状态
gb-code 获取国标码列表
sip-info 获取国标设备注册信息
gb-details 查询国标设备详细信息
modify-gb 修改国标设备信息
encrypt 加密设备密码

子命令详情

add - 添加设备

参数 简写 类型 必填 说明
--device-id -d str ✅ 设备序列号
--password -p str ✅ 设备密码
--category -c str ❌ 设备品类编码(默认:IPC)
--encrypt -e str ❌ 加密方式(base64/aes256,默认:base64)

delete - 删除设备

参数 简写 类型 必填 说明
--device-id -d str ✅ 设备序列号

list - 查询设备列表

参数 简写 类型 必填 说明
--page -p int ❌ 页码(默认:1)
--size -s int ❌ 每页条数(默认:10)
--device-id -d str ❌ 设备序列号(模糊查询)

online - 查询设备在线状态

参数 简写 类型 必填 说明
--device-id -d str ✅ 设备序列号

verify - 校验设备密码

验证指定设备的密码是否正确(调用 verifyDevCode 接口)。

参数 简写 类型 必填 说明
--device-id -d str ✅ 设备序列号
--password -p str ✅ 设备密码(明文)
--encrypt -e str ❌ 加密方式(base64/aes256,默认:base64)
# 校验设备密码
python scripts/dahua_iot_client.py verify -d <设备序列号> -p admin123 -e aes256

details - 查询设备详细信息

参数 说明
device_ids 设备序列号(可多个,位置参数)
python scripts/dahua_iot_client.py details <设备序列号> <设备序列号2>

category - 查询设备品类

参数 简写 说明
--primary -p 1级设备类别代码
--second -s 2级设备类别代码(如 IPC)
--model -m 设备型号

bind - 查询设备绑定状态

参数 简写 必填 说明
--device-id -d ✅ 设备序列号

channels - 获取设备通道信息

参数 简写 必填 说明
--device-id -d ✅ 设备序列号

ability - 获取设备使能状态

参数 简写 必填 说明
--device-id -d ✅ 设备序列号
--ability-type -a ✅ 使能类型(如 localRecord、motionDetect、faceCapture)
--channel-id -c ❌ 通道号(通道级使能需传)

add-gb - 添加国标设备

参数 简写 必填 说明
--gb-code -g ✅ 国标码
--password -p ✅ 设备注册密码
--channels -c ✅ 通道总数
--encrypt -e ❌ 加密方式(base64/aes256,默认 base64)
--manufacturer -m ❌ 厂商(Dahua、HIKVSION、UNKNOW)
--stream-model -s ❌ 拉流协议(TCP/UDP)
--device-class -d ❌ 设备类型(NVR/IPC)

gb-code - 获取国标码列表

参数 简写 说明
--count -c 查询数量(1-10000,默认 10)
--prefix -p 国标码前缀(长度必须 13 位)

sip-info - 获取国标设备注册信息

无需参数,返回 Sip 服务器 IP 和端口。

gb-details - 查询国标设备详细信息

参数 说明
device_ids 设备序列号(可多个,位置参数)

modify-gb - 修改国标设备信息

参数 简写 必填 说明
--device-id -d ✅ 设备序列号
--password -p ❌ 新设备密码
--encrypt -e ❌ 密码加密方式(base64/aes256,默认:base64)
--stream-model -s ❌ 拉流协议(TCP/UDP)

encrypt - 加密设备密码

参数 简写 类型 必填 说明
--password -p str ✅ 设备密码
--secret-key -s str ✅ SecretKey
--device-id -d str ❌ 设备序列号
--method -m str ❌ 加密方式(base64/aes256,默认:base64)

响应格式

所有 API 响应遵循统一格式:

{
    "code": "200",           # 响应状态码
    "success": true,         # 响应状态
    "data": {},             # 响应数据
    "msg": "操作成功"         # 响应消息
}

add_device 响应示例

{
    "success": True,
    "code": "200",
    "msg": "操作成功",
    "data": {
        "deviceId": "<设备序列号>",
        "deviceName": "",
        "channelNum": 1,
        "status": 1
    }
}

get_device_online 响应示例

{
    "success": True,
    "code": "200",
    "msg": "操作成功",
    "data": {
        "deviceId": "<设备序列号>",
        "online": True
    }
}

错误码说明:

  • 200: 成功
  • 其他: 失败,查看 msg 字段了解错误原因

可配置常量

常量名 默认值 说明
DEFAULT_API_BASE_URL https://open.cloud-dahua.com/ API 基础地址
TOKEN_EXPIRY_SECONDS 604800 Token 有效期(秒) - 7天
TIMEOUT_AUTH 60 认证超时(秒)
TIMEOUT_DEVICE 60 设备管理超时(秒)
TIMEOUT_CONFIG 60 配置超时(秒)
TIMEOUT_SD_CARD 60 SD卡管理超时(秒)
TIMEOUT_FORMAT_SD 120 SD卡格式化超时(秒)

依赖要求

  • Python 3.8+
  • requests>=2.31.0
  • pycryptodome>=3.15.0

安装依赖:

pip install requests pycryptodome

使用场景

1️ 设备接入场景

# 添加设备
python scripts/dahua_iot_client.py add -d <设备序列号> -p admin123 -c IPC

# 校验设备密码(验证密码是否正确)
python scripts/dahua_iot_client.py verify -d <设备序列号> -p admin123 -e aes256

# 查询设备在线状态
python scripts/dahua_iot_client.py online -d <设备序列号>

# 查询设备列表/详细信息
python scripts/dahua_iot_client.py list -d <设备序列号前缀>
python scripts/dahua_iot_client.py details <设备序列号>

2️ 设备管理场景

# Python SDK
client = create_client_from_env()

# 获取设备列表
devices = client.get_device_list(page_num=1, page_size=100)

# 批量查询设备详情
device_ids = ['<设备序列号1>', '<设备序列号2>']
details = client.list_device_details(device_ids)

# 删除设备
client.delete_device('<设备序列号>')

3️ SD卡管理场景

# 查询SD卡状态
status = client.get_sd_card_status('<设备序列号>')

# 查询SD卡容量
storage = client.get_sd_card_storage('<设备序列号>')

# 格式化SD卡
result = client.format_sd_card('<设备序列号>')

4️ 设备配置场景

# 修改设备名称
client.modify_device_name('<设备序列号>', 'My Camera')

# 启用本地录像
client.set_ability_status(
    device_id='<设备序列号>',
    ability_type='localRecord',
    status='on',
    channel_id='0'
)

5️ 消息订阅场景

# 添加回调配置(返回的 data 为回调配置ID)
callback = client.add_callback_config(
    callback_url='https://your-server.com/callback',
    is_push=True
)
callback_config_id = callback['data']  # API 返回的 data 即为 callbackConfigId

# 订阅设备消息
client.message_subscribe(
    device_ids=['<设备序列号>'],
    message_type_codes=['online', 'offline', 'videoMotion'],
    category_code='IPC',
    callback_config_id=callback_config_id
)

6️ 国标设备场景

# 获取国标码
python scripts/dahua_iot_client.py gb-code -c 5

# 获取 Sip 注册信息
python scripts/dahua_iot_client.py sip-info

# 添加国标设备
python scripts/dahua_iot_client.py add-gb -g 34020000001320000001 -p admin123 -c 4 -e aes256
# Python SDK
gb_codes = client.list_gb_code(count=10)
sip_info = client.get_sip_info()
result = client.add_gb_device(gb_code='34020000001320000001', device_password='admin123', channel_number=4)

7️ 铃音 / WiFi / 图片解密

# 铃音管理
rings = client.list_custom_ring(device_id, relate_type='device')  # relate_type: device/channel
client.add_custom_ring(device_id, name='my_ring', url='https://...', ring_type='custom')

# WiFi 管理
wifi_info = client.current_device_wifi(device_id)
around = client.wifi_around(device_id)
client.control_device_wifi(device_id, ssid='MyWiFi', password='wifi_password')

# 图片解密(image_url 为待解密的图片地址)
decrypted = client.image_decrypt(device_id, image_url='https://...')

安全提示

⚠️ 不要将真实的 Cloud 凭证提交到 Git!

本项目包含 .gitignore 文件,会自动忽略敏感配置文件。建议:

  • 使用环境变量存储凭证
  • 定期轮换密钥
  • 限制应用权限范围
  • Windows 用户建议使用 GUI 方式设置(更安全)

目录结构

dahua-cloud-open-iot-basic-general-kit/
├── README.md                        # 快速说明
├── QUICKSTART.md                    # 5分钟快速入门
├── SKILL.md                         # 本文件(完整指南)
├── FAQ.md                           # 常见问题解答
├── .gitignore                       # Git 忽略规则
├── references/
│   └── api_reference.md             # 完整API参考文档(43个接口)
└── scripts/
    ├── dahua_iot_client.py          # 统一客户端(推荐使用)
    ├── sign_helper.py               # 签名工具(旧版,保留兼容)
    ├── device_code_encrypt.py       # 密码加密工具(旧版,保留兼容)
    └── requirements.txt             # Python依赖

核心优势

✅ 极简配置 - 仅需要 3 个环境变量 (ProductId, AK, SK)
✅ 单文件实现 - 所有功能集中在一个文件,易于维护
✅ 统一客户端 - 封装所有API,无需关心签名细节
✅ 自动Token管理 - Token自动刷新,无需手动处理
✅ 命令行支持 - 快速操作无需编写代码
✅ Python SDK - 可轻松集成到其他应用
✅ 跨平台支持 - Windows/Linux/Mac 完美运行
✅ GUI 友好 - Windows 图形界面设置环境变量
✅ 轻量依赖 - 仅依赖 requests 和 pycryptodome
✅ 安全可靠 - 标准 API 认证,无密码泄露风险

迁移指南

从旧版迁移

如果你之前使用 sign_helper.py 和 device_code_encrypt.py,可以这样迁移:

旧版代码:

from sign_helper import DahuaAPISigner
from device_code_encrypt import DeviceCodeEncryptor

signer = DahuaAPISigner(access_key, secret_key, product_id)
encryptor = DeviceCodeEncryptor(secret_key, device_id)

# 手动管理Token
auth_headers = signer.sign_for_auth_api()
# ... 手动获取Token ...

# 手动构造请求
business_headers = signer.sign_for_business_api(app_token)
# ... 手动调用API ...

新版代码:

from dahua_iot_client import create_client_from_env

# 自动从环境变量读取配置
client = create_client_from_env()

# 自动管理Token,直接调用API
result = client.add_device(
    device_id='<设备序列号>',
    device_password='admin123'
)

常见问题

Q1: Token过期怎么办?

解决方案: 客户端会自动管理Token,在过期前自动刷新,无需手动处理。

Q2: 签名验证失败?

检查清单:

  • AccessKey、SecretKey、ProductID是否正确
  • 环境变量是否正确设置
  • 是否重新打开了命令行窗口(环境变量需重启终端生效)

Q3: 设备添加失败?

可能原因:

  • 设备密码加密方式不正确(推荐使用AES256)
  • 设备序列号已存在
  • 设备品类编码不正确
  • 设备未初始化或未设置密码

Q4: 如何判断设备是否支持某个功能?

方法: 调用 list_device_details() 接口,查看返回的 deviceAbility 或 channelAbility 字段,检查是否包含相应的能力集标识。

Q5: 如何验证设备密码是否正确?

方法: 使用 verify 子命令或 verify_device_password() 方法调用 verifyDevCode 接口:

# 命令行
python scripts/dahua_iot_client.py verify -d <设备ID> -p <密码> -e aes256
# Python SDK
result = client.verify_device_password(device_id, password, encrypt_method='aes256')
# result['success'] 为 True 表示密码正确

更多常见问题请参阅 FAQ.md。

License

MIT License

目录

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

相关专题

更多
Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

0

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

0

2026.10.22

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

0

2026.10.22

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

0

2026.10.22

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

0

2026.10.22

Golangci-lint安装与入门教程
Golangci-lint安装与入门教程

本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。

0

2026.10.22

PHP2Shell高危漏洞修复教程
PHP2Shell高危漏洞修复教程

PHP2Shell漏洞是什么,哪些PHP版本和运行环境会受到影响,服务器应该如何检测与修复?本专题提供版本自查脚本、Linux与Docker升级命令、PHP-FPM和Apache排查步骤,以及修复验证、临时缓解和应急响应方案。

0

2026.10.22

剧云人物设定与关系管理教程
剧云人物设定与关系管理教程

本专题介绍剧云人物设定与关系管理,讲解角色小传、性格职业、人物目标、背景资料和关系网络的创建及维护方法。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn