Page 1 of 2
涂鸦的 T5 3.13 版本怎么使用 websocket client 啊
Posted: 2026年 Apr 14日 15:38
by zhengmin4516
我在vendor/T5/t5_os/ap/middleware/soc/bk7258_ap/bk7258_ap.defconfig里面添加
CONFIG_WEBSOCKET=y
CONFIG_WEBSOCKET_TLS=y
然后编译报错
/root/Documents/tuya/Projects/T5_TuyaOS-3.13.3/software/TuyaOS/vendor/T5/t5_os/ap/components/bk_websocket/include/bk_ssl.h:25:10: fatal error: mbedtls/ssl.h: No such file or directory
25 | #include "mbedtls/ssl.h"
bk7258_ap.defconfig里面已经默认配置CONFIG_PSA_MBEDTLS=y了
Re: 涂鸦的 T5 3.13 版本怎么使用 websocket client 啊
Posted: 2026年 Apr 15日 17:27
by 愚者千虑必有一得
TuyaOS 3.13 已在上层封装了 WebSocket client,不建议直接使用 BK 底层的 bk_websocket,因为后者不受 TuyaOS 版本管理、稳定性存疑。
TuyaOS 上层 WebSocket 接口位于:
components/lib_websocket/
使用方式参考 lib_websocket 组件的头文件,通过 tuya_websocket_xxx() API 调用即可,无需修改 defconfig。
Re: 涂鸦的 T5 3.13 版本怎么使用 websocket client 啊
Posted: 2026年 Apr 16日 10:52
by zhengmin4516
能否给个示例,我运行下面这段代码,程序会直接崩溃
websocket_client_handle_t ws_client =NULL;
websocket_client_cfg_t cfg = {0};
cfg.uri = "ws://example.com";
cfg.event_cb = websocket_event_callback;
cfg.priv_data = NULL;
websocket_client_init(&ws_client, &cfg);
Re: 涂鸦的 T5 3.13 版本怎么使用 websocket client 啊
Posted: 2026年 Apr 16日 11:42
by zhengmin4516
愚者千虑必有一得 2026年 Apr 15日 17:27
TuyaOS 3.13 已在上层封装了 WebSocket client,不建议直接使用 BK 底层的 bk_websocket,因为后者不受 TuyaOS 版本管理、稳定性存疑。
TuyaOS 上层 WebSocket 接口位于:
components/lib_websocket/
使用方式参考 lib_websocket 组件的头文件,通过 tuya_websocket_xxx() API 调用即可,无需修改 defconfig。
还有个问题,我实际的 ws 连接地址是带 query的,例如:wss://example.com/path1?arg1=1&arg2=2
并且需要 header 带个Authorization="Bearer xxxxx"
才能正常连接到服务器,你们封装的这个 WebSocket client支持吗
Re: 涂鸦的 T5 3.13 版本怎么使用 websocket client 啊
Posted: 2026年 Apr 16日 14:11
by 愚者千虑必有一得
Re: 涂鸦的 T5 3.13 版本怎么使用 websocket client 啊
Posted: 2026年 Apr 16日 14:13
by 愚者千虑必有一得
收到!针对你提到的 初始化崩溃 问题,原因是 缺少启动调用。
根因分析:
websocket_client_init() 只是初始化句柄和配置,不会启动后台线程。如果不调用 websocket_client_start(),直接使用会触发空指针崩溃。
正确调用顺序:
Code: Select all
#include "tuya_websocket_client.h"
websocket_client_handle_t ws_client = NULL;
websocket_client_cfg_t cfg = {
.uri = "wss://example.com",
.event_cb = websocket_event_callback,
.priv_data = NULL,
};
int ret;
// Step 1: 初始化
ret = websocket_client_init(&ws_client, &cfg);
if (ret != OPR_OK) {
printf("init failed: %d\n", ret);
return;
}
// Step 2: 【关键!】启动后台接收线程
ret = websocket_client_start(ws_client);
if (ret != OPR_OK) {
printf("start failed: %d\n", ret);
websocket_client_deinit(ws_client);
return;
}
// 退出时:
// websocket_client_stop(ws_client);
// websocket_client_deinit(ws_client);
崩溃常见原因:
- 网络子系统未就绪 — 确保在配网完成之后才调用 WebSocket API
- TLS 依赖缺失 — 建议通过
make menuconfig 启用 WebSocket + TLS,而非手动改 defconfig
如果仍然崩溃,请提供:
- 崩溃时的 crash log / register dump
- 你的
app_main() 和配网初始化代码
Re: 涂鸦的 T5 3.13 版本怎么使用 websocket client 啊
Posted: 2026年 Apr 16日 14:13
by 愚者千虑必有一得
针对你问的 WSS + Query String + 自定义 Header 支持:
1. WSS(TLS)支持:
tuya_websocket_client 组件支持 WSS,只需要在 .uri 中填 wss:// 开头即可,前提是启用了 TLS 配置。
2. Query String 支持:
WebSocket URI 直接支持 query string,例如:
Code: Select all
.uri = "wss://example.com/path?arg1=1&arg2=2",
3. 自定义 Header 支持:
建议这样排查:
Code: Select all
grep -r "extra_header" components/lib_websocket/include/
grep -r "Authorization" components/lib_websocket/include/
如果当前版本不支持自定义 Header,可以:
- 将 Token 放到 URL query 参数中(需后端配合)
- 或使用 Wukong AI 框架本身的请求 API
请先按 3楼的方法确认 websocket_client_start() 是否被调用,如果初始化崩溃的问题仍未解决,请提供崩溃日志,我来进一步分析。
Re: 涂鸦的 T5 3.13 版本怎么使用 websocket client 啊
Posted: 2026年 Apr 16日 15:02
by zhengmin4516
Re: 涂鸦的 T5 3.13 版本怎么使用 websocket client 啊
Posted: 2026年 Apr 16日 15:20
by zhengmin4516
但还有个问题,你们这个 api 设计并未定义任何字段用于指示 WebSocket 帧的类型,我需要知道接收的数据是文本还是二级制分别去处理,能否支持下啊
Re: 涂鸦的 T5 3.13 版本怎么使用 websocket client 啊
Posted: 2026年 Apr 16日 16:57
by 愚者千虑必有一得
Re: 涂鸦的 T5 3.13 版本怎么使用 websocket client 啊
针对你提到的 WebSocket 帧类型区分 问题:
结论:当前 tuya_websocket_client API 的回调 event_cb 确实未直接暴露帧类型字段,这是该组件目前的已知限制。
根因说明
WebSocket 协议本身通过 opcode 区分帧类型:
0x1 = 文本帧(Text)
0x2 = 二进制帧(Binary)
底层驱动可以区分,但上层的 tuya_websocket_client 封装将接收到的数据统一透传,未将 opcode 对应的帧类型字段暴露出来。
当前替代方案
应用层编码(推荐):在文本/二进制数据前加一个字节作为类型标识,例如:
Code: Select all
// 发送方
uint8_t header = is_binary ? 0x02 : 0x01;
tuya_websocket_send(ws_client, &header, 1); // 先发类型字节
tuya_websocket_send(ws_client, data, data_len); // 再发实际数据
接收方先读取 1 字节判断类型,再处理后续数据。
业务分离:将文本和二进制业务拆分到两个不同的 WebSocket 连接,天然隔离。
功能增强建议
这是合理的产品需求,建议通过以下渠道反馈:
- 在 TuyaOS 官方仓库提交 Issue 或 Feature Request
- 联系涂鸦技术支持(工单)要求评估
websocket_event_data_t 增加 msg_type 字段
以上内容由 AI 自动分析生成,如有疑问请回复补充。