萤石开放平台 萤石可编程设备 | 设备脚本自定义开发

设备固件自定义开发

您可以使用专属摄像机,来自定义设备脚本实现个性化设备功能定制。默认情况下,该摄像机无法进行自定义编程。需进行先升级至开发者固件后,用户才能安装自定义的 Python 脚本。

1. 设备升级开发者固件

  1. 设备配网添加到萤石云App账户下

  2. 登录萤石开放平台控制台

  3. 进入可编程设备开发控制台菜单

  4. 点击开发者固件升级

  5. 输入支持的设备序列号。

  6. 等待固件升级完成。

升级成果验证

  • 升级完成后,设备型号在萤石云App中会变为 "CS-C6c-V100-6L10WFL-PROG" ,原生功能将消失。
  • 此时设备可以运行 Python 脚本,实现功能自定义开发。

2. 设备功能自定义编程

本章我们的目标云台自动巡航(-150~150度水平往返转动),当接收到停止指令时,停止转动.

2.1 开发流程

  1. 开发环境准备:任意可以编辑Python代码的程序,推荐VS code或Pycharm
  2. 模板下载:获取Python代码模板
  3. 查询Python SDK 指南
  4. 在用户自定义的部分实现云台循环自动巡航以及停止巡航的方法
  5. 下载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()
  1. 将编写完毕的代码保存到python模板中用户自定义部分里。

  2. 保存代码为.py的格式,完整代码示例下载

2.3 Python脚本上传&功能调试

3.1 调试步骤

    1. 点击开发产品,进入设备开发。
    1. 点击开发,上传编写的python代码成果物。
    1. 点击设备调试,输入已升级的设备的序列号,选择设备
  1. 下载Python代码:点击下载按钮将代码下载到设备本地。
  2. 验证功能一:查看设备验证云台是否在自动巡航
  3. 验证功能二:下发停止指令,验证云台停止转动
  • 使用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 指南

相关推荐
睡美人的小仙女12721 小时前
Threejs加载环境贴图报错Bad File Format: bad initial token
开发语言·javascript·redis
rayufo21 小时前
【工具】列出指定文件夹下所有的目录和文件
开发语言·前端·python
RANCE_atttackkk21 小时前
[Java]实现使用邮箱找回密码的功能
java·开发语言·前端·spring boot·intellij-idea·idea
缺点内向1 天前
C#编程实战:如何为Word文档添加背景色或背景图片
开发语言·c#·自动化·word·.net
一起养小猫1 天前
Flutter for OpenHarmony 实战:记账应用数据统计与可视化
开发语言·jvm·数据库·flutter·信息可视化·harmonyos
zhougl9961 天前
Java 所有关键字及规范分类
java·开发语言
Python 老手1 天前
Python while 循环 极简核心讲解
java·python·算法
java1234_小锋1 天前
Java高频面试题:MyISAM索引与InnoDB索引的区别?
java·开发语言
2501_944525541 天前
Flutter for OpenHarmony 个人理财管理App实战 - 支出分析页面
android·开发语言·前端·javascript·flutter
qq_417129251 天前
C++中的桥接模式变体
开发语言·c++·算法