import requests from requests.auth import HTTPDigestAuth import xml.etree.ElementTree as ET def control_hikvision_door(device_ip, user_name, password, command="open"): """ 通过 ISAPI 协议控制海康门禁设备的开关状态。 Args: device_ip (str): 设备的 IP 地址 (例如 "192.168.1.69")。 user_name (str): 登录用户名。 password (str): 登录密码。 command (str): 控制指令,默认为 "open" (常开/开门)。 部分设备支持 "close" (关门), "alwaysOpen" (常开), "alwaysClose" (常闭)。 Returns: bool: 命令执行成功返回 True,失败返回 False。 """ # 构建 API URL # 对于 DS-K1T673 系列,门编号通常为 1 api_url = f"http://{device_ip}/ISAPI/AccessControl/RemoteControl/door/1" # 构建 XML 请求体 # xmlns 命名空间通常是必须的,version 可选 xml_body = f""" {command} """ headers = { "Content-Type": "application/xml" } try: # 发送 PUT 请求,必须使用 Digest 认证 response = requests.put( api_url, auth=HTTPDigestAuth(user_name, password), data=xml_body, headers=headers, timeout=5 ) # 检查 HTTP 状态码 if response.status_code == 200: # 解析返回的 XML 确认执行结果 # 成功通常返回 1OK print(f"[成功] 门禁响应: {response.text}") return True else: print(f"[失败] HTTP 错误码: {response.status_code}") print(f"[失败] 错误信息: {response.text}") return False except requests.exceptions.RequestException as e: print(f"[错误] 连接异常: {e}") return False # --- 主程序执行 --- if __name__ == "__main__": # 配置参数 target_ip = "192.168.1.69" admin_user = "admin" admin_pass = "hzx12345" print(f"正在尝试连接门禁 {target_ip} ...") # 执行开门操作 is_success = control_hikvision_door(target_ip, admin_user, admin_pass, "open") if is_success: print("开门指令发送完毕。") else: print("开门指令发送失败,请检查网络或密码。")