蓝牙遥控器在T2-U上的应用
文章目录
- 简介
- 优势
- 使用流程
- 示例代码
- 遥控器命令表
- 遥控器代码实现
- 开启遥控器配对功能
- 运行
简介
Tuya beacon 协议是基于 BLE 广播通信技术,完善配对解绑、组包拆包、群组管理、加密解密、安全策略,形成的一种轻量、安全的可接入涂鸦云的蓝牙协议。
蓝牙 beacon 是基于蓝牙 BLE 技术的一种应用,是蓝牙 BLE 的诸多应用之一。BLE 的通信包括两个主要部分:advertising(广播)和connecting(连接),Beacon 设备只使用了广播通信信道,不和任何低功耗蓝牙主机进行连接,正如 beacon(信标、灯塔)的字面意思。当你在 beacon 遥控器上按下按键后 beacon 遥控器便会发送一个对应的数据包。

优势
- 成本低,无需使用任何模组,只需要一个 16 脚的 IC 和少量的外围器件就可以实现遥控器的硬件方案。
- 遥控器无需配网,支持被控的设备已激活状态下配对,也支持未激活未配网设备处于低功耗状态下配对。配对成功后,设备离线也仍然可以被遥控器控制。
- 控制范围大,无需对准设备即可控制。红外遥控器需要对准产品上的红外接收头才能正确接收。
- 最大支持 4 个群组。
配网模式中涉及到的低功耗,是指关闭射频模组,芯片并非进入了睡眠模式。配网模式详细说明可参考:https://developer.tuya.com/cn/docs/iot-device-dev/TuyaOS-iot_abi_network_config_mode?id=Kc67tro6mzaz0
使用流程
- 注册蓝牙 beacon 数据接收回调函数。此接口在需要使用蓝牙遥控器功能下必须调用,当用户没有注册蓝牙遥控器数据处理回调函数时,SDK将不启动蓝牙广播扫描,蓝牙遥控器功能不可用。
//callback function for advertisement scanning data processing
typedef VOID (*TUYA_BLE_APP_SCAN_HANDLE)(UCHAR_T *data, UCHAR_T len, UCHAR_T type, UCHAR_T* mac);OPERATE_RET tuya_ble_reg_app_scan_adv_cb(TUYA_BLE_APP_SCAN_HANDLE cb);
注:
- 使用蓝牙 beacon 遥控器之前需先调用 TuyaOS 联网单品设备初始化,“设备初始化"详细说明可参考:https://developer.tuya.com/cn/docs/iot-device-dev/TuyaOS-iot_abi_device_init?id=Kc67dkj0mxrne。
- 注册蓝牙遥控器绑定校验,绑定/解绑通知回调函数,通过注册的两个函数可以进行蓝牙遥控器绑定判断和得到是否成功绑定的结果。
typedef struct {BLE_SCAN_ADV_BIND_CHECK_CB bind_check;BLE_SCAN_ADV_BIND_RSLT_NOTIFY_CB bind_notify;
} TUYA_BLE_SCAN_ADV_HANDLE_CBS;/**\* @brief Register callback function for advertisement scanning data processing** @param[in] cbs: callback function** @note This API is used for registering callback function for advertisement scanning data processing** @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h*/
OPERATE_RET tuya_ble_reg_app_scan_adv_handle_cbs(TUYA_BLE_SCAN_ADV_HANDLE_CBS* cbs);
- 可在遥控器绑定校验回调中做指令校验,可通过返回
OPRT_OK或OPRT_ERR_COMMON允许/拒绝当前遥控器绑定。 - 在遥控器绑定/解绑通知回调函数
bind_notify中做如指示灯状态提示,可帮助产品使用者判断当前遥控器绑定状态。
注:当前函数 tuya_ble_reg_app_scan_adv_handle_cbs() 非必须调用,如未调用该接口,可通过tuya_ble_reg_app_scan_adv_cb() 注册的数据接收回调函数中通过命令字获取绑定/解绑状态。
- 蓝牙遥控器绑定窗口时间设置函数。该函数也可以不调用,默认绑定窗口时间为 30s。
/*** @brief Set timeout window for binding remote controller** @param[in] time_out: time out in second, 0: no window** @note This API is used for setting timeout window for binding remote controller** @return VOID*/
VOID_T tuya_ble_set_bind_window(UINT_T time_out);
- 手工打开蓝牙遥控器绑定窗口。设备在每次上电后自动开启蓝牙绑定窗口,直至绑定窗口时间超时后关闭。此函数用于在TuyaOS关闭蓝牙遥控器绑定窗口后,手工开启设备绑定窗口,如使用按钮触发使设备再次进入蓝牙遥控器绑定窗口
/*** @brief Open window for binding remote controller** @param[in] VOID** @note This API is used for opening window for binding remote controller** @return VOID*/
VOID_T tuya_ble_open_bind_window(VOID_T);
注:该函数不能用于设备配网状态下,否则会导致设备蓝牙配网失败。
示例代码
遥控器命令表
#define BLE_KEY_TYPE_CMD 0x01 //健值
#define BLE_BIND_CMD 0x02 //绑定
#define BLE_UNBIND_CMD 0x03 //解绑
#define BLE_SWITCH_CMD 0x04 //开关
#define BLE_FAVORITES_CMD 0x05 //喜好收藏
#define BLE_SCHEDULED_CLOSE_CMD 0x06 //倒计时
#define BLE_GROUP_CHECK_CMD 0x07 //一键群组查询#define BLE_LIGHT_SWITCH_CMD 0x08 //照明开关
#define BLE_LIGHT_BRIGHT_STEP_CMD 0x09 //照明步进调亮度
#define BLE_LIGHT_BRIGHT_STEPLESS_CMD 0x0a //照明无极调亮度
#define BLE_LIGHT_TEMP_STEP_CMD 0x0b //照明步进调色温
#define BLE_LIGHT_TEMP_STEPLESS_CMD 0x0c //照明无极调色温
#define BLE_LIGHT_SEVEN_COLOR_CMD 0x0d //七彩调节
#define BLE_LIGHT_COLOE_H_STEP_CMD 0x0e //H 值调节
#define BLE_LIGHT_COLOE_H_DIMMING_CMD 0x0f //H 值无极调节
#define BLE_LIGHT_COLOE_S_STEP_CMD 0x10 //S 值调节
#define BLE_LIGHT_COLOE_S_DIMMING_CMD 0x11 //S 值无极调节
#define BLE_LIGHT_COLOE_V_STEP_CMD 0x12 //V 值调节
#define BLE_LIGHT_COLOE_V_DIMMING_CMD 0x13 //S 值无极调节
#define BLE_LIGHT_COLOE_HSV_CMD 0x14 //HSV 值调节
#define BLE_LIGHT_SCENE_CHANGE_CMD 0x15 //场景调节
#define BLE_LIGHT_MODE_SET_CMD 0x16 //模式设置
#define BLE_SPECIAL_MODE 0x17 //夜灯模式#define BLE_RGBY_CONTROL_CMD 0xff //定制rgby方向调节颜色
遥控器代码实现
/**
* @brief
*
* @param[in] data: data
* @param[in] len: data len
* @param[in] type: type
* @param[in] mac: device mac
* @return none
*/
STATIC VOID ble_receive_callback(UCHAR_T *data, UCHAR_T len, UCHAR_T type, UCHAR_T* mac)
{INT_T i = 0;if(type == 0xff){TAL_PR_DEBUG("ble remote(old ver): data len: %d", len);for ( i = 0; i < len; i++) {TAL_PR_DEBUG("data[%d] : %d", i, data[i]); }}else if(type == 0x16){TAL_PR_DEBUG("ble remote(new ver): data len: %d", len);UCHAR_T *data_cmd = (data + 2);//解析控制数据switch(data_cmd[2]){case BLE_BIND_CMD://do binding operationTAL_PR_NOTICE("=====bind success!!!=====");break;case BLE_UNBIND_CMD://do unbinding operationTAL_PR_NOTICE("====unbind success!!!====");break;default://do ctrl operationTAL_PR_DEBUG("====please do ctrl operation!!!==== cmd: [%02x], cmd len: [%02d]", data_cmd[2], len - 2);// do_handle(&(data_cmd[2]),len-2); break;}}return;
}/**
* @brief ble scanf adv bind check callback
*
* @param[in] type: bind type for bluetooth remote controller
* @param[in] data: data
* @param[in] len: data len
* @return OPRT_OK
*/
STATIC OPERATE_RET ble_scan_adv_bind_check_callback(TUYA_BLE_BIND_TYPE type, UCHAR_T *data, UCHAR_T len)
{INT_T i = 0;TAL_PR_DEBUG("----------------scan adv bind check cb-----------------");TAL_PR_DEBUG("ble bind type : %d, data len: %d", type, len);for(i=0;i<len;i++) {TAL_PR_DEBUG("data[%d] : %d", i, data[i]);}return OPRT_OK;
}/**
* @brief ble scan adv bind notify callback
*
* @param[in] type: bind type for bluetooth remote controller
* @return none
*/
STATIC VOID_T ble_adv_scan_bind_notify_callback(TUYA_BLE_BIND_TYPE type, int rslt)
{TAL_PR_DEBUG("------------------ble scan adv bind notify cb----------------");TAL_PR_DEBUG("ble bind type : %s", (type == TUYA_BLE_OP_BIND) ? "bind" : "unbind");TAL_PR_DEBUG("result : %s", (rslt == 0) ? "success" : "failed");return ;
}/**
* @brief ble remote init
*
* @param[in] param: none
* @return none
*/
VOID ble_remote_init(VOID)
{OPERATE_RET rt = OPRT_OK;TUYA_BLE_SCAN_ADV_HANDLE_CBS ble_scan_cfg = {0};ble_scan_cfg.bind_check = ble_scan_adv_bind_check_callback;ble_scan_cfg.bind_notify = ble_adv_scan_bind_notify_callback;/* Register callback function for advertisement scanning data processing */TUYA_CALL_ERR_GOTO(tuya_ble_reg_app_scan_adv_cb(ble_receive_callback), __EXIT);/* Register callback function for advertisement scanning data processing */TUYA_CALL_ERR_GOTO(tuya_ble_reg_app_scan_adv_handle_cbs(&ble_scan_cfg), __EXIT);/* set bind window (s) */tuya_ble_set_bind_window(30);__EXIT:return;
}
可根据具体项目情况
- 在
ble_scan_adv_bind_check_callback()回调函数中实现对遥控器数据做判断,如判读正确返回OPRT_OK表示允许绑定,否则返回OPRT_COM_ERROR表示不允许绑定。 - 在
ble_adv_scan_bind_notify_callback()回调函数中实现绑定/解绑指示。 - 在
ble_receive_callback()回调函数中实现控制逻辑代码。
开启遥控器配对功能
将 ble_remote_config() 加入 tuyaos_demo_quickstart 项目,加入到 __soc_device_init() 函数最后。由于设备在未配网状态下同样会开启蓝牙用于配网,如在未配网状态下开启遥控器配对功能会导致蓝牙配网失败。
OPERATE_RET __soc_device_init(VOID_T)
{OPERATE_RET rt = OPRT_OK;#if (defined(UUID) && defined(AUTHKEY))ws_db_init_mf();/* Set authorization information* Note that if you use the default authorization information of the code, there may be problems of multiple users and conflicts, * so try to use all the authorizations purchased from the tuya iot platform.* Buying guide: https://developer.tuya.com/cn/docs/iot/lisence-management?id=Kb4qlem97idl0.* You can also apply for two authorization codes for free in the five-step hardware development stage of the Tuya IoT platform.* Authorization information can also be written through the production testing tool.* When the production testing function is started and the authorization is burned with the Tuya Cloud module tool, * please comment out this piece of code.*/WF_GW_PROD_INFO_S prod_info = {UUID, AUTHKEY};TUYA_CALL_ERR_RETURN(tuya_iot_set_wf_gw_prod_info(&prod_info));
#else// 产测初始化, 注册函数需要应用实现,其中串口驱动不需要应用提供MF_IMPORT_INTF_S intf = {0};intf.uart_init = mf_uart_init_callback;intf.uart_free = mf_uart_free_callback;intf.uart_send = mf_uart_send_callback;intf.uart_recv = mf_uart_recv_callback;intf.gpio_test = mf_gpio_test_cb;intf.mf_user_product_test = mf_user_product_test_callback;intf.user_callback = mf_user_callback;intf.user_enter_mf_callback = mf_user_enter_mf_callback;intf.user_pre_gpio_test = mf_pre_gpio_test_cb;TAL_PR_ERR("mf_init APP_BIN_NAME[%s] USER_SW_VER[%s]", APP_BIN_NAME, USER_SW_VER);TUYA_CALL_ERR_RETURN(mf_init(&intf, APP_BIN_NAME, USER_SW_VER, TRUE));
#endif/* Initialize TuyaOS product information */TY_IOT_CBS_S iot_cbs = {0};iot_cbs.gw_status_cb = __soc_dev_status_changed_cb;iot_cbs.gw_ug_cb = __soc_dev_rev_upgrade_info_cb;iot_cbs.gw_reset_cb = __soc_dev_restart_req_cb;iot_cbs.dev_obj_dp_cb = __soc_dev_obj_dp_cmd_cb;iot_cbs.dev_raw_dp_cb = __soc_dev_raw_dp_cmd_cb;iot_cbs.dev_dp_query_cb = __soc_dev_dp_query_cb;TUYA_CALL_ERR_RETURN(tuya_iot_wf_soc_dev_init(GWCM_OLD, WF_START_AP_FIRST, &iot_cbs, PID, USER_SW_VER));TUYA_CALL_ERR_RETURN(tuya_iot_reg_get_wf_nw_stat_cb(__soc_dev_net_status_cb));/* Network button, LED initialization */app_led_init(LED_PIN);app_key_init(KEY_PIN);ble_remote_init();return 0;
}
运行
设备重新上电,进入蓝牙 beacon 遥控器配对模式。
同时长按蓝牙遥控器的分组键,(如果你的蓝牙遥控器没有分组键,那么开关键就是默认的分组1),蓝牙遥控器开始和设备配对。
[09-13 16:20:18 TUYA D][example_ble_remote.c:113] ----------------scan adv bind check cb-----------------
[09-13 16:20:18 TUYA D][example_ble_remote.c:114] ble bind type : 1, data len: 12
[09-13 16:20:18 TUYA D][example_ble_remote.c:116] data[0] : 11
[09-13 16:20:18 TUYA D][example_ble_remote.c:116] data[1] : 7
[09-13 16:20:18 TUYA D][example_ble_remote.c:116] data[2] : 1
[09-13 16:20:18 TUYA D][example_ble_remote.c:116] data[3] : 255
[09-13 16:20:18 TUYA D][example_ble_remote.c:116] data[4] : 2
[09-13 16:20:18 TUYA D][example_ble_remote.c:116] data[5] : 1
[09-13 16:20:18 TUYA D][example_ble_remote.c:116] data[6] : 255
[09-13 16:20:18 TUYA D][example_ble_remote.c:116] data[7] : 92
[09-13 16:20:18 TUYA D][example_ble_remote.c:116] data[8] : 139
[09-13 16:20:18 TUYA D][example_ble_remote.c:116] data[9] : 0
[09-13 16:20:18 TUYA D][example_ble_remote.c:116] data[10] : 211
[09-13 16:20:18 TUYA D][example_ble_remote.c:116] data[11] : 206
蓝牙状态发送变化,进入蓝牙事件回调函数中。
[09-13 16:20:18 TUYA D][example_ble_remote.c:130] ------------------ble scan adv bind notify cb----------------
[09-13 16:20:18 TUYA D][example_ble_remote.c:131] ble bind type : bind
[09-13 16:20:18 TUYA D][example_ble_remote.c:132] result : success
按下蓝牙遥控器的控制键。进入数据处理回调函数中。
[09-13 16:20:27 TUYA D][example_ble_remote.c:75] ble remote(new ver): data len: 9
[09-13 16:20:27 TUYA D][example_ble_remote.c:92] ====please do ctrl operation!!!==== cmd: [04], cmd len: [07]
同时长按蓝牙遥控器的亮度-和配对时的分组键,开始解绑流程。
设备解绑,状态发生变化,进入蓝牙事件回调函数中。
[09-13 16:24:11 TUYA D][example_ble_remote.c:75] ble remote(new ver): data len: 9
[09-13 16:24:11 TUYA N][example_ble_remote.c:87] ====unbind success!!!====
[09-13 16:24:11 TUYA D][example_ble_remote.c:130] ------------------ble scan adv bind notify cb----------------
[09-13 16:24:11 TUYA D][example_ble_remote.c:131] ble bind type : unbind
[09-13 16:24:11 TUYA D][example_ble_remote.c:132] result : success
相关文章:
蓝牙遥控器在T2-U上的应用
文章目录 简介优势使用流程示例代码遥控器命令表遥控器代码实现开启遥控器配对功能运行 简介 Tuya beacon 协议是基于 BLE 广播通信技术,完善配对解绑、组包拆包、群组管理、加密解密、安全策略,形成的一种轻量、安全的可接入涂鸦云的蓝牙协议。 蓝牙 …...
数据驱动的数字营销与消费者运营
引言:基于海洋馆文旅企业在推广宣传中,如何通过指标体系量化分析广告收益对业务带来的收益价值的思考? 第一部分:前链路引流投放的策略与实战 1.1 动态广告的实现: 偶然与必然 动态广告是一种基于实时数据和用户行为的广告形式,它…...
Qt点亮I.MX6U开发板的一个LED
本篇开始将会介绍与开发版相关的Qt项目,首先从点亮一个LED开始。I.MX6U和STM32MP157的相关信息都会用到,但是后期还是将I.MX6U的学习作为重点。当然其他开发版的开发也可以参考本博文。 文章目录 1. Qt是如何操控开发板上的一个LED2. 出厂内核设备树中注…...
网络摄像头-流媒体服务器-视频流客户端
取电脑的视频流 当涉及交通事件检测算法和摄像头视频数据处理时,涉及的代码案例可能会非常复杂,因为这涉及到多个组件和技术。以下是一个简单的Python代码示例,演示如何使用OpenCV库捕获摄像头视频流并进行实时车辆检测,这是一个…...
Django05_反向解析
Django05_反向解析 5.1 反向解析概述 随着功能的不断扩展,路由层的 url 发生变化,就需要去更改对应的视图层和模板层的 url,非常麻烦,不便维护。这个时候我们可以通过反向解析,将 url解析成对应的 试图函数 通过 path…...
基于HTML、CSS和JavaScript制作一个中秋节倒计时网页
💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 这个项目使用HTML、CSS和…...
富斯I6刷10通道固件
使用USB转串口模块刷写10通道固件 一、下载固件 1. 十通道英文固件 下载地址: https://github.com/benb0jangles/FlySky-i6-Mod-/tree/master 选择 FlySky-i6-Mod–master \ 10ch Mod i6 Updater \ 10ch_MOD_i6_Programmer_V1 路径下的文件,亲测可用。 2. 原版六通道中…...
vector的模拟实现 总结
vector的模拟实现 总结 vector.hTest.cpp vector.h 1、迭代器的实现 #pragma oncenamespace JPC {template<class T>class vector{public://对于存储空间是连续的结构而言,可以用原身指针来 模拟实现 迭代器。typedef T* iterator;typedef const T* const_i…...
k8s中的有状态,无状态,pv、pvc等
数据库是一个典型的有状态服务,他的部署和无状态服务是不一样的。 PostgresSQL----基于Kubernetes部署PostgresSQL-CSDN博客 一、创建SC、PV和PVC存储对象 二、部署PostgresSQL Volume Kubernetes 中文指南——云原生应用架构实战手册 有状态应用: …...
springboot+jxls复杂excel模板导出
JXLS 是基于 Jakarta POI API 的 Excel 报表生成工具,可以生成精美的 Excel 格式报表。它采用标签的方式,类似 JSP 标签,写一个 Excel 模板,然后生成报表,非常灵活,简单! Java 有一些用于创建 …...
用selenium webdriver获取网站cookie后,实现免登录上网站
以csdn为例,代码分为两部分。 一、csdn_get_cookies.py为半手动登录网站后获取cookies 二、csdn_use_cookies.py为使用获取到的cookies免登录上网站 #获取登录cookiesfrom selenium import webdriver import jsoncsdn_driver webdriver.Chrome() url "htt…...
如何使用Java进行安全测试?
要使用Java进行安全测试,可以按照以下步骤进行: 确定测试目标:首先,明确要测试的应用程序或系统的安全目标和需求。确定要测试的安全方面,如身份验证、授权、输入验证、安全配置等。 了解安全测试知识:熟悉…...
Linux之Socket函数(详细篇)
本篇是基于Linux man手册的一些总结 socket作用: create an endpoint for communication 函数结构 c #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int socket(int domain, int type, int protocol); 描述 socket() …...
Dajngo06_Template模板
Dajngo06_Template模板 6.1 Template模板概述 模板引擎是一种可以让开发者把服务端数据填充到html网页中完成渲染效果的技术 静态网页:页面上的数据都是写死的,万年不变 动态网页:页面上的数据是从后端动态获取的(后端获取数据库…...
快速幂 c++
一般大家写都是 int ans 1; for (int i 1; i < a; i )ans * x;时间复杂度 但是这对于我们还不够,我们要 首先我们得知道一个数学知识 那么求 就有以下递归式 a 能被2整除 a 不能被2整除 (这里a/2是整除) 所以每次都调用 不就是么 最后补充一个东西…...
分享一个基于微信小程序的医院口腔助手小程序 牙科诊所预约小程序 源码 lw 调试
💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! 💕&…...
Si3262 一款低功耗刷卡+触摸+mcu 三合一SOC芯片
Si3262是-款高度集成的低功耗soC芯片,其集成了基于RISC-V 核的低功耗MCU和工作在13.56MHz的非接触式读写器模块。 该芯片ACD模式下刷卡距离可达4-5cm(天线决定),适用于智能门锁,电子锁,柜锁,桑拿…...
[H5动画制作系列] 奔跑的豹子的四种Demo演化
资源: bg.jpg: leopard.png: 背景透明 peopard2.png 背景不透明 参考代码1: leopard.js: (function(window) {ma function() {this.initialize();}ma._SpriteSheet new createjs.SpriteSheet({images: ["leopard.png"], frames: [[0,0,484,207],[486,0,484,207]…...
如何实现让一个函数能返回多个值的效果
在C语言中,一个函数通常只能返回一个值。但是可以通过指针参数或结构体来模拟返回多个值的效果。 使用指针参数:你可以将需要返回的值作为函数的参数,通过指针的形式传入,让函数将结果写入指针所指向的内存位置。 void multiple…...
End-to-end 3D Human Pose Estimation with Transformer
基于Transformer的端到端三维人体姿态估计 摘要 基于Transformer的架构已经成为自然语言处理中的常见选择,并且现在正在计算机视觉任务中实现SOTA性能,例如图像分类,对象检测。然而,卷积方法在3D人体姿态估计的许多方法中仍然保…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...
