Uni-Meter项目实现APSsystems EZHI的WebSocket输出支持
背景介绍
Uni-Meter是一个通用的电能计量转换器项目,能够将不同格式的电能数据转换为标准化的输出。最近该项目新增了对APSsystems EZHI系统的WebSocket输出支持,这是一个重要的功能扩展。
技术实现要点
1. 设备绑定流程
实现与EZHI系统的集成需要完成以下关键步骤:
- 设备发现:EZHI通过HTTP GET请求访问
/shelly
端点获取设备信息 - WebSocket配置:通过
/rpc/Ws.SetConfig
接口设置WebSocket连接参数 - 设备重启:调用
/rpc/Shelly.Reboot
完成绑定过程 - 数据推送:绑定成功后,通过WebSocket持续推送计量数据
2. 关键接口实现
设备信息接口
EZHI系统需要获取特定的设备信息格式:
{
"id": "shellypro3em-b827eb364242",
"mac": "B827EB364242",
"model": "SPEM-003CEBEU",
"gen": 2,
"fw_id": "20241011-114455/1.4.4-g6d2a586",
"ver": "1.4.4",
"app": "Pro3EM",
"auth_en": false,
"auth_domain": null,
"profile": "triphase"
}
WebSocket配置接口
/rpc/Ws.SetConfig
接口需要处理如下格式的配置请求:
{
"enable": true,
"ssl_ca": "*",
"server": "ws://192.168.1.96/meter"
}
并返回配置成功的响应。
重启接口
/rpc/Shelly.Reboot
接口需要返回特定的响应格式:
{
"body": "null",
"code": 200,
"headers": {
"Connection": "close",
"Content-Length": "4",
"Content-Type": "application/json",
"Server": "ShellyHTTP/1.0.0"
},
"message": "OK"
}
3. 数据推送机制
绑定完成后,Uni-Meter需要每2秒通过WebSocket推送电能数据,格式如下:
{
"src": "shellypro3em-b827eb364242",
"method": "NotifyStatus",
"params": {
"ts": 1741706274.67,
"em:0": {
"id": 0,
"a_current": 0.24,
"a_voltage": 230,
"a_act_power": 54.85,
"a_aprt_power": 54.85,
"a_pf": 1,
"a_freq": 50,
"b_current": 0.24,
"b_voltage": 230,
"b_act_power": 54.85,
"b_aprt_power": 54.85,
"b_pf": 1,
"b_freq": 50,
"c_current": 0.24,
"c_voltage": 230,
"c_act_power": 54.85,
"c_aprt_power": 54.85,
"c_pf": 1,
"c_freq": 50,
"total_current": 0.72,
"total_act_power": 164.55,
"total_aprt_power": 164.55
}
}
}
技术挑战与解决方案
1. URI解析问题
在实现过程中,遇到了WebSocket配置请求中的JSON参数导致URI解析失败的问题。解决方案是在配置文件中添加URI解析模式的设置:
pekko.http {
parsing {
uri-parsing-mode = relaxed
}
}
2. 设备兼容性问题
最初的实现基于Shelly Gen1 API规范,但实际测试发现EZHI系统需要Gen2 API规范的响应格式。通过调整接口响应内容解决了这一问题。
3. 数据同步问题
为确保数据实时性,实现了2秒间隔的定时推送机制,同时处理了WebSocket连接状态管理,确保连接断开后能正确重连。
应用场景
这一功能的实现使得Uni-Meter能够:
- 作为虚拟Shelly Pro3EM设备与EZHI系统集成
- 将各种输入源的电能数据转换为EZHI系统可识别的格式
- 支持智能电网应用场景中的实时数据交互
总结
Uni-Meter项目通过实现WebSocket输出支持,成功扩展了与APSsystems EZHI系统的集成能力。这一功能不仅丰富了项目的应用场景,也为其他类似系统的集成提供了参考实现。未来可以考虑进一步优化数据推送机制,支持更多类型的智能电网设备。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考