简介
本文以支持 TCP 通信的第三方投影仪为例,介绍如何在 Yealink Room Designer 2 中创建自定义驱动,并在项目中实现第三方投影仪电源控制和状态同步。
应用场景
本案例适用于会议室、培训室、教室或展厅等场景。用户需要通过 CT200 或 CT300 集中控制第三方投影仪,并在统一控制界面中查看设备状态。
完成本案例后,你可以在控制界面中执行投影仪开机和关机操作,并查看投影仪的实际电源状态。
系统可实现以下功能:
向投影仪发送开机和关机命令。
定时或按需查询投影仪电源状态。
前提条件
已获取投影仪的 API 手册,重点查看通信方式、控制命令、返回报文格式和参数说明。
本例中,投影仪通过 TCP 协议与 CT 通信,协议命令如下:
命令
说明
参数 / 返回字符串
PON
开机
/
POF
待机(电源待机)
/
QPW
电源状态查询
000(待机)
001(开机)
IIS
切换输入信号
RG1(电脑信号)
HD1(HDMI1)
HD2 (HDMI2)
HD3 (HDMI3)
DL1(数字链路)
使用下述命令格式进行传输。
发送数据(中控 → 投影机):
帧头
数据段
结束符
命令示例
'0'
0x30
'0'
0x30
控制命令
(ASCII 字符串)
(CR)
0x0d
数据长度
1 字节
1 字节
长度不固定
1 字节
示例:发送电源状态查询命令 "00QPW"(CR)
接收数据(投影机 → 中控):
帧头
数据段
结束符
命令示例
'0'
0x30
'0'
0x30
控制命令
(ASCII 字符串)
(CR)
0x0d
数据长度
1 字节
1 字节
长度不固定
1 字节
示例:投影机处于待机状态 "00000"(CR)
配置基础信息
点击 Designer 左上角中控 > 驱动库管理进入驱动库管理界面。
点击自定义驱动库区域的新建按钮,打开驱动配置向导。
在基础信息页面,填写驱动型号、设备类别、制造商和版本号等信息。
驱动型号是设备驱动的唯一标识。建议按“品牌 + 型号 + 用途”命名,例如:Demo_Projector_X1,最多支持 64 个字符。
选择设备类别为投影仪。
选择或填写对应制造商,例如:Demo。
制造商名称不能与官方驱动重复。
制造商名称不能使用 Yealink。
填写版本号,例如:1.0。
配置通信协议
在通讯协议页面中,选择 TCP,根据设备要求填写默认参数。这些参数之后会显示在链路设计的设备属性区,你可以根据房间的实际部署情况调整 IP 地址、端口号等参数。有关参数的详细信息,可参阅:配置通信协议。
协议的选择应以被控设备支持的接口和API手册为准。
一个驱动可以同时支持多种协议。
配置状态
状态配置用于定义设备的状态属性,如电源状态、静音状态、音量、输入源等,主要用于界面反馈、自动化判断和平台状态同步。状态分为物理状态和逻辑状态:
物理状态:设备真实硬件属性(音量、开关、静音等),需要配置读写指令。
逻辑状态:系统内部临时变量(如通道编号、临时开关),无需硬件指令,默认可读可写。
支持可读、可写两种能力定义:
可读表示该状态支持从设备侧获取真实值,用于状态查询、轮询和同步。
可写表示该状态支持通过控制指令进行修改。
通过可读、可写能力的区分,可以更清晰地描述状态的查询与控制关系,保证状态展示与设备实际情况保持一致。
创建电源状态
进入状态配置页面,并在左侧选择 TCP 协议。由于设备类别设置为投影仪,系统会默认提供 General 分组,其中包含 Power Status。你也可以新建分组或修改分组名称,以便管理不同类型的状态。例如:将电源相关状态放入电源控制分组、将音量和静音状态放入音量控制分组。
选择 Power Status,点击并完成以下配置:
设置状态名称。状态名称会用于界面设计和自动化逻辑。建议使用简洁、明确的名称,例如 Power、Volume、Mute 或 InputSource。
选择适用于设备的数据类型。此处选择字符型。
字符型适用于设备名称、模式或输入源等文本内容。
布尔值适用于开关类状态。
数值适用于音量、温度和亮度等数据。
选择数据输入类型。此处选择枚举。
枚举适用于取值固定的状态。
自由输入适用于用户可输入任意文本或数值的场景。
配置枚举值。枚举状态需要配置显示名称与实际值的对应关系。在投影仪API手册中显示,投影仪返回 001 表示开机,返回 000 表示关机。提取响应中的最后一位后,将 1 配置为开机值,将 0 配置为关机值。
将状态类型设置为物理状态。因为电源是投影仪真实存在的设备属性,因此应使用物理状态。
已完成电源状态的创建,并配置了 ON 和 OFF 状态值。接下来,为该状态配置可读和可写功能,使系统能够查询投影仪的当前电源状态,并执行开机和关机操作。建议在配置和状态相关的功能指令时,同时配置状态的可读/可写功能,仅配置开机/关机功能,虽然可以生效,但因为没有状态同步会造成不好的体验。
配置电源状态的可读功能
物理状态至少需要配置一个可读功能,用于查询设备当前状态。
在 Power Status 状态的可读配置中,点击新建功能,或复用已有的状态功能,此处选择新建功能。
输入功能名称。此处输入 Get Power Status。
选择是否支持轮询。
如需定时获取投影仪状态,可启用轮询并设置时间间隔。系统会按设定周期自动发送查询命令,轮询频率应根据设备性能设置。如果仅需在特定事件触发时,或由用户手动刷新时查询状态,则无需启用轮询。
点击新建指令添加指令。设置指令名称为 Get Power Status。
根据投影仪 API 手册选择 ASCII 或 HEX 字符串格式。此处选择 ASCII。
根据投影仪 API 手册可知查询指令为 QPW,将 00QPW 填入指令语法区域。
根据投影仪 API 手册设置结束符,此处设置为 CR。
添加查询命令后,进入状态提取,点击新建,关联 Power Status 状态。
选择返回解析函数。本例中,投影仪返回 001 表示开机,返回 000 表示关机或待机。由于目标值位于固定位置,可使用按位取值函数。低位设置为 2。高位设置为 3。可从返回值中提取 1 或 0。
提取完成后,开启状态值映射,1表示 ON,0表示 OFF。
完成后,点击确定保存可读功能。
完成状态提取配置后,可读功能配置完成。
配置电源状态的可写功能
可写功能就是控制功能。配置可写功能,界面设计可以使用该状态实现状态反馈和设备控制。
在 Power Status 状态的可写配置中,点击新建功能,或复用已有的状态功能,此处选择新建功能。
输入功能名称。此处输入 Set Power Status。
勾选状态参数。根据投影仪 API 手册,配置界面状态值与投影仪控制参数之间的映射关系:
界面状态
控制参数
开机
ON
关机
OF
点击新建指令添加指令。设置指令名称为 Set Power Status。
根据投影仪 API 手册选择 ASCII 或 HEX 字符串格式。此处选择 ASCII。
根据投影仪 API 手册可知查询指令为 PON/POF,由于已经配置了状态映射,在此处可使用 00P${Power Status} 语句在相应位置引入该参数变量。填入指令语法区域。
根据投影仪 API 手册设置结束符,此处设置为CR。
完成后点击确定保存可写功能。
完成后,Power Status 状态即可同时用于设备控制和状态反馈。
配置功能
配置TCP/UDP/RS232/RS485/RS422协议功能
除了状态以外,还可以配置设备功能。对于切换输入源、打开菜单、调用预置或执行组合操作等不需要作为状态管理对象的能力,可在功能配置中配置为功能。以下以切换输入源为例,说明配置流程。
选择通信协议TCP,点击新建分组创建功能分组,点击新建新建功能。
输入功能名称。此处输入 Switch Input Signal。
点击新建入参添加动态参数,设置变量名称为 InputSignal,根据投影仪 API 手册填入RG1、HD1、HD2、HD3、DL1枚举值。
点击新建指令添加指令。设置指令名称为 Switch Input Signal。
根据投影仪 API 手册选择 ASCII 或 HEX 字符串格式。此处选择 ASCII。
根据投影仪 API 手册可知,查询指令为 IIS,将 00IIS${InputSignal} 填入指令语法区域。
根据投影仪 API 手册设置结束符,此处设置为 CR。
如有需要,设置指令延时,最大支持 2000 ms。
点击确定保存配置好的功能。
(附加)配置 HTTP 协议功能
对于支持 HTTP API 的设备,创建分组、功能和输入参数的流程与其他协议基本一致。区别在于,HTTP 指令需要根据 API 手册配置请求方法、接口路径、请求头、请求体和出参提取规则。
以下以“调用指定房间的场景模式”为例,说明配置流程。此示例使用的 API 手册,参阅:亿联中控第三方控制 API(HTTPS)。
功能说明
本功能用于调用指定房间中的场景模式。调用场景模式接口前,系统需要获取认证 Token、目标房间 ID 和目标场景 ID。
因此,该功能需要依次执行:获取 Token → 获取房间列表 → 获取场景列表 → 调用场景模式
前序接口返回的数据会作为后续接口的入参。各变量的来源和用途如下:
变量
获取方式
用途
Authorization
根据 API 手册提供的认证信息配置
用于获取 Token 接口的请求头
login_Token
从获取 Token 接口的响应中提取
用于后续接口的请求头认证
room_id
从获取房间列表接口的响应中提取
用于查询该房间的场景列表,以及调用场景模式
macro_id
从获取场景列表接口的响应中提取
用于调用指定场景模式
创建获取 Token 指令
此步骤使用到的API指令,参阅:获取Token。
选择通信协议 HTTP 协议,点击新建分组创建功能分组。
点击新建新建功能。
输入功能名称。此处输入 Recall Preset。
点击新建指令添加指令。设置指令名称为 Get Token。
选择 API 手册指定的请求方法,此处选择POST: 创建资源。
在地址中填写接口路径,此处输入 /open/api/v1/auth/clientToken。
地址栏仅需填写设备 IP 地址后的路径,无需填写完整 URL。系统会自动使用通信协议中配置的设备 IP 进行拼接。
配置请求头。此处输入:
{
"Content-Type": "application/json",
"Authorization": "${Authorization}",
"timestamp": "${__timestamp}",
"nonce": "${__uuid}"
}
其中,${Authorization} 为 API 手册规定的认证信息,${__timestamp} 为系统时间戳变量,${__uuid} 为系统随机 ID 变量。
配置请求体。本示例中,请求体为空。
配置出参提取,从响应中提取 Token,并将变量命名为 login_Token。
创建获取房间列表指令
此步骤使用到的API指令,参阅:房间查询。
点击新建指令添加指令。设置指令名称为 Get Room List。
选择 API 手册指定的请求方法,此处选择POST: 创建资源。
在地址中填写接口路径,此处输入 /open/api/v1/ctrl/spaces/page。
配置请求头,在请求头中引用 ${login_Token},此处输入:
{
"Content-Type": "application/json",
"token": "${login_Token}",
"timestamp": "${__timestamp}",
"nonce": "${__uuid}"
}
配置请求体。此处输入:
{
"skip": 0,
"limit": 50
}
配置出参提取,从响应体中提取目标房间的 ID,并保存为 room_id。
创建获取场景列表指令
此步骤使用到的API指令,参阅:预设动作集列表查询。
点击新建指令添加指令。设置指令名称为 Get Preset List。
选择 API 手册指定的请求方法,此处选择 POST: 创建资源。
在地址中填写接口路径,此处输入 /open/api/v1/ctrl/macros/page。
配置请求头,在请求头中引用 ${login_Token},此处输入:
{
"Content-Type": "application/json",
"token": "${login_Token}",
"timestamp": "${__timestamp}",
"nonce": "${__uuid}"
}
配置请求体,在请求体中引用 ${room_id},此处输入:
{
"skip": 0,
"limit": 50,
"spaceId": "${room_id}"
}
配置出参提取,从响应体中的场景列表提取场景模式的 ID,并保存为 marco_id。
创建调用场景模式指令
此步骤使用到的API指令,参阅:调用预设动作集。
点击新建指令添加指令。设置指令名称为 Recall Preset。
选择 API 手册指定的请求方法,此处选择 POST: 创建资源。
在地址中填写接口路径,此处输入 /open/api/v1/ctrl/macro/invoke。
配置请求头,在请求头中引用 ${login_Token},此处输入:
{
"Content-Type": "application/json",
"token": "${login_Token}",
"timestamp": "${__timestamp}",
"nonce": "${__uuid}"
}
配置请求体,在请求体中引用 ${room_id} 和 ${marco_id} ,此处输入:
{
"spaceId": "${room_id}"
"marcoId": "${marco_id}"
}
点击确定保存指令。
将驱动添加到链路设计
完成驱动配置后,进入链路设计页面。
在第三方设备列表中选择新建的投影仪驱动。
将投影仪拖入设计区域。
将投影仪 LAN 口连接到 CT200 或 CT300 的 LAN 口。
选中投影仪,在右侧属性区填写实际 IP 地址、端口号和其他通信参数。
在界面设计中使用驱动
在链路设计页面完成配置后,进入界面设计页面。
场景一:直接向设备发送控制指令
此方式适用于无需先判断设备状态、可直接执行的控制操作,例如开关机。
在视图区拖入按钮组件。
在底部的动作命令区域,展开第三方驱动,选择已添加的投影仪驱动。
找到需要执行的带有控制标识的 Power Status 指令,并将其绑定到按钮组件,用于向投影仪发送控制命令。
如需在界面中显示投影仪的实际电源状态,将对应的状态拖动到按钮的视觉反馈配置中。
场景二:根据设备状态执行控制指令
此方式适用于需要先判断设备状态,再执行后续控制操作的场景。例如,当投影仪处于开机状态时,自动将输入源切换为 HDMI。
在视图区域拖入一个按钮组件。
在动作命令区域中选择第三方驱动中添加的投影仪驱动,可看到该设备支持的指令以及指令的类型。
在动作指令区域添加 IF 语句,将带有状态标识的指令 Power Status 拖动到 IF 条件中并设置判断条件为开机“ON”。
将带有控制标识的 Switch Input Signal 指令拖动到 IF 条件成立后的动作区域,并设置执行操作为“HD1”。