ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

31 极物科技 | Control4 对接 - CAN 继电器驱动

2026/9/3 5:58:33 拓冰建站 浏览量
31 极物科技 | Control4 对接 - CAN 继电器驱动 极物科技 | Control4 对接 - CAN 继电器驱动前言在智能控制领域协议壁垒与系统稳定性始终是绕不开的难题。极物科技Zeewo以“重构空间交互体验”为使命通过自研的极物 OS实现了 KNX、DALI、CAN、RS485 等多种总线协议在单一主机上的深度融合。我们认为一个真正优秀的智能系统不仅要实现灯光、遮阳、温控、音乐、安防等全生态设备的无界融合更要确保本地运行、断网可用并具备WEB 远程调试和OTA 固件升级的能力。基于此底层架构我们推出了诸如带双路 DALI 的 KNX 主机、HomeKit 网桥等核心硬件并将极物 OS 成功接入了 Apple HomeKit、小度、纯血鸿蒙及 HomeAssistant 等主流生态系统。一句话概述本文详细解析极物网关 CAN 继电器驱动的 Control4 DriverWorks 实现涵盖多路继电器控制、状态同步、Proxy 代理机制及高级场景定时。本文聚焦于极物 CAN 继电器驱动的完整实现从多路继电器结构体、Proxy 代理分发、状态同步机制到高级场景定时逐一深入剖析并提供完整代码供 C4 集成商参考。开源代码本系列文档对应的 Control4 对接驱动代码已完全开源访问 Gitee 仓库获取完整源码https://gitee.com/fujianxinxi/aolebahe.git1. 驱动概述1.1 驱动定位CAN 继电器驱动是 Control4 系统中直接面向终端用户的继电器设备驱动负责接收 C4 Composer 或场景的继电器开关控制指令通过多路 Proxy 架构分别控制每个继电器通道接收网关下发的继电器状态更新支持高级场景定时调用1.2 驱动文件结构Aolebach-Can-Relay/ ├── driver.xml # 驱动元数据与配置定义 ├── driver.lua # 驱动主逻辑入口、命令路由、Proxy 分发 ├── can.lua # CAN 协议封装继电器控制指令构造 ├── proxy.lua # Proxy 代理逻辑继电器控制、状态更新 ├── action.lua # 动作处理 ├── adance_sence_timer.lua # 高级场景定时 ├── const.lua # 常量定义Proxy ID、设备结构体 ├── documentation.rtf # 驱动文档说明 └── Aolebach-CAN-RELAY.c4zproj # C4 Composer 工程文件1.3 通讯参数参数规格网关 Proxy ID1CAN_GATE_WAY_PROXY_ID继电器 1 Proxy ID101CAN_RELAY_PROXY_ID_1继电器 2 Proxy ID102CAN_RELAY_PROXY_ID_2继电器 3 Proxy ID103CAN_RELAY_PROXY_ID_3CAN ID设备 CAN 总线地址继电器数量最多 3 路2. 驱动配置driver.xmldevicedatamanufacturerAolebach/manufacturername奥乐巴赫 CAN 继电器 通用/namemodelRelay/modelversion2025011309/versioncontrollua_gen/controldriverDriverWorks/drivercomboTrue/comboproxiesproxyrelay aolebahe/proxy/proxiescapabilitieson_offTrue/on_off/capabilitiesconfigpropertiespropertynameCAN ID/nametypeRANGED_INTEGER/typereadonlyfalse/readonlydefault0/default/propertypropertynameDebug Mode/nametypeLIST/typeitemsitemOff/itemitemPrint/itemitemLog/itemitemPrint and Log/item/itemsdefaultOff/default/property/properties/config/devicedata3. 常量定义const.lua-- 代理CAN_GATE_WAY_PROXY_ID1-- 继电器CAN_RELAY_PROXY_ID_1101CAN_RELAY_PROXY_ID_2102CAN_RELAY_PROXY_ID_3103-- 按键事件TOP_BUTTON0BOTTOM_BUTTON1TOGGLE_BUTTON2RELEASE_BUTTON0PRESS_BUTTON1CLICK_BUTTON2g_can_proxy_bound_statusfalse-- CAN 继电器设备结构体g_can_relay_device{can_id0,objectrelay,relay_1{actionoff,sub_id1},relay_2{actionoff,sub_id2},relay_3{actionoff,sub_id3}}4. 驱动核心实现4.1 属性变更回调functionOnPropertyChanged(strProperty)localvalueProperties[strProperty]if(valuenil)thenvalueendif(strPropertyCAN ID)theng_can_relay_device.can_idtonumber(value)endPrint_table(g_can_relay_device,g_can_relay_device)end4.2 延迟初始化functionOnDriverLateInit(dit)forproperty,_inpairs(Properties)doOnPropertyChanged(property)endgTestTimerAddTimer(gTestTimer,3)LUMI_CMD.GET_CONNECTED_STATE(CAN_GATE_WAY_PROXY_ID,nil,nil)end4.3 Proxy 绑定变更functionOnBindingChanged(idBinding,class,bIsBound)dbg(OnBindingChanged(), idBinding ..tostring(idBinding).., class ..class.., bIsBound ..tostring(bIsBound))if(idBindingCAN_GATE_WAY_PROXY_ID)theng_can_proxy_bound_statusbIsBoundendend4.4 命令路由functionExecuteCommand(strCommand,tParams)Print_table(strCommand,strCommand)Print_table(tParams,tParams)if(strCommandLUA_ACTION)thenlua_normal_action(tParams)elselua_special_action(strCommand,tParams)endend5. Proxy 分发机制functionReceivedFromProxy(idBinding,strCommand,tParams)if(idBindingCAN_GATE_WAY_PROXY_ID)then-- 网关下发的状态更新proxy_relay_update_by_gateway(g_can_relay_device,strCommand,tParams)proxy_update_to()elseif(idBindingCAN_RELAY_PROXY_ID_1)then-- 继电器 1 控制proxy_relay_control(g_can_relay_device.relay_1,strCommand,tParams,CAN_RELAY_PROXY_ID_1)proxy_update_to()elseif(idBindingCAN_RELAY_PROXY_ID_2)then-- 继电器 2 控制proxy_relay_control(g_can_relay_device.relay_2,strCommand,tParams,CAN_RELAY_PROXY_ID_2)proxy_update_to()elseif(idBindingCAN_RELAY_PROXY_ID_3)then-- 继电器 3 控制proxy_relay_control(g_can_relay_device.relay_3,strCommand,tParams,CAN_RELAY_PROXY_ID_2)proxy_update_to()endend6. CAN 协议封装can.lua6.1 继电器开启functionrelay_control_on(device)localframe_data{driver_data{can_idg_can_relay_device.can_id,sub_iddevice.sub_id,actionon,objectg_can_relay_device.object},frame_typerequest,frame_drivercan,frame_resultok}device.actiononC4:SendToProxy(CAN_GATE_WAY_PROXY_ID,JSON:encode(frame_data),{})end6.2 继电器关闭functionrelay_control_off(device)localframe_data{driver_data{can_idg_can_relay_device.can_id,sub_iddevice.sub_id,actionoff,objectg_can_relay_device.object},frame_typerequest,frame_drivercan,frame_resultok}device.actionoffC4:SendToProxy(CAN_GATE_WAY_PROXY_ID,JSON:encode(frame_data),{})end6.3 状态更新网关下行functionproxy_relay_update_by_gateway(device,strCommand,tParams)if(strCommandnil)thenprint(proxy_info_update error)returnendlocalframeJSON:decode(strCommand)-- 过滤无关信号ifframe.driver_data.can_id~device.can_idorframe.driver_data.object~relaythenreturnendPrint_table(frame,frame.driver_data)Print_table(device.action,device.action)ifframe.driver_data.sub_id1thendevice.relay_1.actionframe.driver_data.actionelseifframe.driver_data.sub_id2thendevice.relay_2.actionframe.driver_data.actionelseifframe.driver_data.sub_id3thendevice.relay_3.actionframe.driver_data.actionendend7. 注意事项⚠️CAN ID 配置CAN ID 需与网关中配置的 CAN 总线地址一致每个 CAN 设备有唯一的 CAN ID⚠️多路继电器单台设备最多支持 3 路继电器每路继电器有独立的 Proxy ID101、102、103各继电器通道独立工作互不干扰⚠️状态同步继电器状态由网关主动推送驱动实时响应更新proxy_update_to()用于将状态同步到 C4 Composer 界面8. 相关文档《极物科技 | Control4 对接 - 系统架构与驱动开发概述》《极物科技 | Control4 对接 - CAN 网关驱动》《极物科技 | Control4 对接 - CAN 按键面板驱动》关于极物科技ZEEWO极物科技Zeewo致力于为用户提供智能控制系统及硬件产品。我们以总线系统为技术底座以**“稳定、可靠、快速响应”**为产品底线是国内少有的拥有 KNX、DALI 全套软硬件自主研发能力的厂商之一。我们的核心能力系统架构自研极物 OS支持多协议无界融合KNX/DALI/CAN/RS485/IP。核心硬件带双路 DALI 的 KNX 主机、超薄全金属定制面板、各类智选传感器及网关。生态互联深度融入 Apple HomeKit、Matter、小度、HomeAssistant 及纯血鸿蒙生态。调试交付独家支持 ETS 导出 XML 直接导入进行 APP 免编程调试支持远程 WEB 运维。我们的市场覆盖服务网点已覆盖全国核心城市含长三角、珠三角、成渝等并以高品质的方案深耕家居生活、酒店民宿、企业办公、疗愈康养、餐馆会所等多个细分领域。(如果您在开发或落地中遇到技术问题欢迎通过官网或后台私信与我交流探讨)