设备固件自定义开发
您可以使用专属摄像机,来自定义设备脚本实现个性化设备功能定制。默认情况下,该摄像机无法进行自定义编程。需进行先升级至开发者固件后,用户才能安装自定义的 Python 脚本。
1. 设备升级开发者固件
-
设备配网添加到萤石云App账户下
-
登录萤石开放平台控制台
-
进入可编程设备开发控制台菜单
-
点击开发者固件升级

-
输入支持的设备序列号。

-
等待固件升级完成。
升级成果验证
- 升级完成后,设备型号在萤石云App中会变为 "CS-C6c-V100-6L10WFL-PROG" ,原生功能将消失。
- 此时设备可以运行 Python 脚本,实现功能自定义开发。
2. 设备功能自定义编程
本章我们的目标云台自动巡航(-150~150度水平往返转动),当接收到停止指令时,停止转动.
2.1 开发流程
- 开发环境准备:任意可以编辑Python代码的程序,推荐VS code或Pycharm
- 模板下载:获取Python代码模板
- 查询Python SDK 指南
- 在用户自定义的部分实现云台循环自动巡航以及停止巡航的方法
- 下载Python最佳实现的demo到设备上进行验证调试,示例demo
2.2 代码实现与说明
功能一:云台循环自动巡航
#引入线程,将巡航的方法放入到异步线程中执行,避免阻塞主线程
import threading
#巡航的方法
def cruise_ptz():
while True:
# 调用Python SDK 指南中的ptz_rotate方法水平旋转150度
ezapp.ptz_rotate(json.dumps({"pan_angle": 150, "tilt_angle": 0, "speed": 3}))
# 等待5秒,等待动作完成
time.sleep(5)
# 调用Python SDK 指南中的ptz_rotate方法水平旋转-150度
ezapp.ptz_rotate(json.dumps({"pan_angle": -150, "tilt_angle": 0, "speed": 3}))
# 等待5秒,等待动作完成
time.sleep(5)
#创建一个线程,用来启动巡航的程序,线程名为PTZThread,设置为守护线程(daemon=True),这样主线程退出时,后台线程也会被终止,避免阻塞退出
ptz_thread = threading.Thread(target=cruise_ptz, name="PTZThread", daemon=True)
#启动线程,执行巡航
ptz_thread.start()
功能二:添加响应平台停止指令的逻辑
#使用线程中的事件对象,来停止巡航的程序
stop_sign = threading.Event()
#修改巡航的程序,添加退出的判断
def cruise_ptz():
# 如果停止的事件对象是设置的状态,则退出循环
while not stop_sign.is_set():
# 调用[Python SDK 指南]中的ptz_rotate方法水平旋转150度
ezapp.ptz_rotate(json.dumps({"pan_angle": 150, "tilt_angle": 0, "speed": 3}))
# 等待5秒,等待动作完成
time.sleep(5)
# 调用[Python SDK 指南]中的ptz_rotate方法水平旋转-150度
ezapp.ptz_rotate(json.dumps({"pan_angle": -150, "tilt_angle": 0, "speed": 3}))
# 等待5秒,等待动作完成
time.sleep(5)
#停止巡航的程序
def stop_ptz():
# 设置停止事件
stop_sign.set()
# 执行停止PTZ操作,调用[Python SDK 指南]中的ptz_stop方法
ezapp.ptz_stop()
2.3 Python脚本上传&功能调试
3.1 调试步骤
-
- 点击开发产品,进入设备开发。

- 点击开发产品,进入设备开发。
-
- 点击开发,上传编写的python代码成果物。

- 点击开发,上传编写的python代码成果物。
-
- 点击设备调试,输入已升级的设备的序列号,选择设备

- 点击设备调试,输入已升级的设备的序列号,选择设备
- 下载Python代码:点击下载按钮将代码下载到设备本地。
- 验证功能一:查看设备验证云台是否在自动巡航
- 验证功能二:下发停止指令,验证云台停止转动
-
使用api调试工具调用安装到设备的脚本接口,接口说明:https://open.ys7.com/help/1514,示例代码如下。
curl --location --request PUT 'https://open.ys7.com/api/v3/device/otap/action'
--header 'accessToken: at.XXXXXX'
--header 'deviceSerial: XXXXXX'
--header 'localIndex: 0'
--header 'resourceCategory: global'
--header 'domainIdentifier: EZLink'
--header 'actionIdentifier: TriggerExecuteScript'
--header 'Content-Type: application/json'
--data '{
"name": "stop_ptz",
"input": ""
}'
更多设备能力开放,请查看Python SDK 指南