如何使用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




