You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用JSON-RPC连接设备?Telnet转JSON-RPC后的通信咨询

嘿,我之前帮朋友搞定过Q-Sys设备从Telnet切换到JSON-RPC的事儿,给你捋几个关键方向,应该能帮你快速入门:

先搞懂JSON-RPC和Telnet的核心差异

Telnet是发纯文本命令,设备返回纯文本结果,逻辑简单但没统一规范;而JSON-RPC是结构化的请求/响应协议,所有交互都要遵循固定的JSON格式,好处是逻辑清晰、支持复杂参数和异步通知,这是你要转变的第一个思维点——别再像Telnet那样发零散命令,而是要构造符合规范的JSON数据包。

建立连接的两种主流方式

Q-Sys的JSON-RPC(QRC)支持两种连接模式,选哪种看你的需求:

  • WebSocket长连接:适合需要实时接收设备状态推送的场景。先通过ws://[设备IP]:8080/api/qrc建立连接,连接成功后就能双向通信——你发请求,设备回响应,设备状态变化时还会主动推送给你。
  • HTTP/HTTPS POST短连接:适合单次查询或控制操作。直接向http://[设备IP]/api/qrc发送POST请求,请求头设置Content-Type: application/json,请求体就是JSON格式的RPC调用。
构造合法的JSON-RPC请求示例

每个请求必须包含几个核心字段,缺一不可,举个获取组件状态的例子:

{
  "jsonrpc": "2.0",
  "method": "Component.GetStatus",
  "params": {
    "ComponentId": "你的组件ID(比如放大器、音频矩阵的ID)"
  },
  "id": 1
}
  • jsonrpc:固定值"2.0",标识协议版本;
  • method:要调用的API方法名,必须和Q-Sys文档里的完全一致;
  • params:方法需要的参数,格式要严格匹配文档要求;
  • id:自定义的请求标识(数字或字符串都行),响应里会带回这个ID,方便你匹配请求和响应。
处理响应的要点

设备返回的响应也分两种情况:

  • 成功响应:包含result字段,里面是你要的数据:
{
  "jsonrpc": "2.0",
  "result": {
    "Power": "On",
    "Gain": 0
  },
  "id": 1
}
  • 错误响应:包含error字段,会告诉你错误码和原因,比如方法不存在、参数错误:
{
  "jsonrpc": "2.0",
  "error": {
    "code": -32601,
    "message": "Method not found"
  },
  "id": 1
}
调试工具推荐

别一开始就写代码,先用工具验证通了再开发:

  • Postman测试HTTP POST请求:新建POST请求,填设备URL,设置请求头Content-Type: application/json,把上面的示例JSON粘贴到请求体,发送就能看到响应;
  • wscat测试WebSocket:先安装npm install -g wscat,然后执行wscat -c ws://[设备IP]:8080/api/qrc,连接成功后直接粘贴JSON请求,回车就能收到设备的响应。
几个容易踩的坑
  • 先确认设备已经开启QRC服务:在Q-Sys Designer里,要在外部控制设置中启用JSON-RPC(QRC)选项;
  • 权限验证:如果设备设了密码,HTTP请求要在请求头加Authorization: Basic [Base64编码的用户名:密码],WebSocket连接可能需要先发送Authenticate方法的请求;
  • 方法和参数要严格匹配文档:比如Component.GetStatus的参数是ComponentId不是component_id,大小写、字段名都不能错,否则会返回错误。

内容的提问来源于stack exchange,提问作者Jonni Prasad

火山引擎 最新活动