47 极物科技 | knxd - TCP与Unix Socket接口对接

极物科技 | knxd - TCP与Unix Socket接口对接

前言

KNX 作为国际标准(ISO/IEC 14543-3)拥有完全开放的协议规范与蓬勃的开源生态,knxd 正是这一开放性的最好注脚------一台普通 Linux 设备即可变身 KNX 路由器。

极物科技的产品同样构建在开放标准之上:自研 KNX 主机的极物 OS 原生支持 KNXnet/IP 路由与隧道双通道,与 knxd、ETS 等主流工具链无缝互通;配套鸿蒙、苹果、安卓三端原生 APP,深度接入 Apple HomeKit 与小度生态,支持主机远程调试------工程调试不受任何私有协议锁定。

一句话概述:本文回答"第三方程序如何直接连上knxd收发KNX报文",给出从报文格式到并发模型的完整对接方案。

本文聚焦于 knxd 的 TCP(6720端口)与 Unix Socket 应用接口,涵盖EIBnet/IP Socket报文格式、连接管理、多客户端并发、地址池租用机制,以及C语言对接示例与保活设计。


1. 接口总览

knxd 为本机/局域网应用提供两种服务接口:

接口 地址 适用场景
TCP Socket 主机IP:6720 跨主机访问、容器环境
Unix Socket /var/run/knxd 同机进程,零网络开销

两个接口背后是同一套 EIBnet/IP Socket 报文格式(继承自eibd),学会一种即通吃。


2. 报文格式

2.1 帧结构

客户端与knxd之间传输的是 EIBnet/IP 报文头 + EMI帧

text 复制代码
┌─────────────┬──────────────┬─────────────┬────────────┬──────────────┐
│ 头长度(1B)=4 │ 协议版本(1B)=0x10 │ 服务类型(2B) │ 总长度(2B)  │ EMI帧(N B)   │
└─────────────┴──────────────┴─────────────┴────────────┴──────────────┘

常用服务类型:

服务类型 方向
EIBNETDP_ACK 0x0401 knxd→客户端(确认)
TUNNEL_REQUEST 0x0420 双向(数据帧)
EIBNETDP_DISCONNECT 0x0409 双方(断开)

2.2 完整示例

以"向组地址写入1字节"为例,一次交互:

text 复制代码
客户端 → knxd(TUNNEL_REQUEST 0x0420):
27 10 00 15 04 71 00 00 11 00 bc e0 00 17 00 25 02 00 81

knxd → 客户端(EIBNETDP_ACK 0x0401):
27 10 00 08 04 01 00 00

其中EMI帧(从第9字节起)就是标准CEMI:11 00 bc e0 00 17 00 25 02 00 81------控制域、源/目的地址、TPCI/APCI与数据,与《KNX协议 - CEMI报文格式详解》一脉相承。


3. 连接生命周期

text 复制代码
① connect() 建立TCP/Unix连接
② 客户端发送 OPEN(0x0420控制通道) → knxd从地址池分配个体地址并ACK
③ 双方以"发送→ACK"方式交换数据帧(每个方向独立计数)
④ 客户端发送 DISCONNECT → 释放地址池名额

3.1 地址池租用

每个Socket客户端从 [main] client-addrs 池租用一个个体地址(如15.15.3)。这个地址用于:

  • knxd为客户端代发总线帧时的源地址
  • 总线设备回读应答时的寻址依据。

工程含义:地址池=并发上限。监控工具+应用+脚本同时挂机时,池子要预留足够数量。

3.2 ACK机制

Socket链路上每个数据帧都必须被ACK,未ACK的帧需重发。注意ACK只表示knxd已收到,不代表总线传输成功------若需确认总线侧结果,应监听总线回读应答(GroupValueResponse)。


4. C语言对接示例

一个最小可用的"连接并发送"骨架:

c 复制代码
int fd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr = { .sin_family = AF_INET,
                            .sin_port = htons(6720) };
inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);
connect(fd, (struct sockaddr *)&addr, sizeof(addr));

/* OPEN:请求打开socket通道 */
uint8_t open[] = { 0x04, 0x07, 0x11, 0x00 };   /* hdr=4 ver=0x10? 见下 */
/* 实际实现按knxd源码约定构造,此处为结构示意 */

/* 向 1/1/1 写入 bit=1 */
uint8_t frame[] = {
    0x27, 0x10, 0x00, 0x15,                     /* len=4? ver? svc=OPEN */
    0x00, 0x15,                                 /* 总长21 */
    0x04, 0x71, 0x00, 0x00,                     /* 通道=0 seq=0 */
    0x11, 0x00, 0xbc, 0xe0, 0x00, 0x17,         /* CEMI头 */
    0x00, 0x81, 0x01                            /* GA=0x0017(1/1/1) APCI=write val=1 */
};
write(fd, frame, sizeof(frame));

💡 生产实现建议直接参考 knxd 自带的 libeibclient(knxd-tools同款客户端库),封装了OPEN/ACK/序号管理等全部细节,比手写协议稳妥得多。

4.1 多客户端并发模型

text 复制代码
                  ┌── 客户端A(主控APP)   ── 租用 15.15.1
knxd ◀─TCP:6720──┼── 客户端B(监控脚本)  ── 租用 15.15.2
                  └── 客户端C(调试工具)  ── 租用 15.15.3
                        ↓ 同一份总线流量镜像给所有客户端

knxd会把总线收到的报文转发给所有在线Socket客户端------这一特性让"旁路监控"零成本实现:写一个只收不发的客户端,即可完整记录总线行为。


5. 保活与容错

  1. TCP层:开启SO_KEEPALIVE,防止NAT/防火墙静默掐断;
  2. 应用层:客户端定期发送心跳帧(或周期性读取某状态地址),检测链路活性;
  3. 重连策略:断开后指数退避重连(1s→2s→4s...上限30s),重连成功后重新走OPEN流程租地址;
  4. 优雅退出:程序退出务必发送DISCONNECT释放地址池,否则池子会被僵尸连接占满。

6. 常见问题

现象 原因 处置
连接成功但发帧无ACK 帧头服务类型错误 对照第2节格式逐字节核对
运行一段时间后连不上 地址池耗尽 扩大client-addrs,清理僵尸连接
收不到总线报文 只发了OPEN未订阅成功 核对OPEN流程与通道协商
跨主机连不上 6720未放行 防火墙放行TCP 6720
报文时通时断 NAT超时 启用keepalive+应用层心跳

7. 注意事项

  1. 接口安全:TCP 6720无鉴权,暴露公网等于把总线控制权送人------仅内网开放,跨网段加防火墙白名单;
  2. Unix Socket权限:同机对接优先Unix Socket,注意socket文件的属组权限;
  3. 不要绕过ACK机制:跳序号、不等ACK连发都会触发knxd丢帧保护;
  4. 监控客户端零发送:旁路监控程序不要向总线发任何写帧,避免干扰调试现场;
  5. 与组播并存:Socket客户端的帧同样会进入组播路由域,注意与其他路由设备的地址规划不冲突。

8. 相关文档

  • 《极物科技 | knxd - 部署与配置完全指南》
  • 《极物科技 | knxd - knxtool命令行调试工具全解》
  • 《极物科技 | KNX协议 - CEMI报文格式详解》
  • 《极物科技 | KNX协议 - APCI指令与数据点类型DPT详解》

关于极物科技(ZEEWO)

极物科技(Zeewo)致力于为用户提供智能控制系统及硬件产品。我们以总线系统为技术底座,以**"稳定、可靠、快速响应"**为产品底线,是国内少有的拥有 KNX、DALI 全套软硬件自主研发能力的厂商之一。

我们的核心能力:

  • 系统架构:自研极物 OS,支持多协议无界融合(KNX/DALI/CAN/RS485/IP)。
  • 核心硬件:带双路 DALI 的 KNX 主机、超薄全金属定制面板、各类智选传感器及网关。
  • 生态互联:深度融入 Apple HomeKit、Matter、小度、HomeAssistant 及纯血鸿蒙生态。
  • 调试交付:独家支持 ETS 导出 XML 直接导入进行 APP 免编程调试,支持远程 WEB 运维。

我们的市场覆盖:

服务网点已覆盖全国核心城市(含长三角、珠三角、成渝等),并以高品质的方案深耕家居生活、酒店民宿、企业办公、疗愈康养、餐馆会所等多个细分领域。

(如果您在开发或落地中遇到技术问题,欢迎通过官网或后台私信与我交流探讨)

相关推荐
阿钱真强道17 小时前
43 极物科技 | KNX设备 - Web添加与管理指南
智能家居·极物·极物智能·极物科技·knx协议·组地址
阿钱真强道1 天前
44 极物科技 | KNX场景 - 主机场景与APP免编程调试
智能家居·楼宇自动化·极物·极物智能·极物科技·knx协议
阿钱真强道1 天前
41极物科技 | KNX工程 - ETS导出XML一键导入指南
智能家居·ets·极物·极物智能·极物科技·knx协议·xml导入
阿钱真强道2 天前
39 极物科技 | KNX智能控制系统 - 快速接入指南
智能家居·极物·极物智能·极物科技·knx协议·knx网关
阿钱真强道2 天前
40 极物科技 | KNX网关 - KNXnet/IP路由器对接配置
智能家居·极物·极物智能·极物科技·knxnet/ip·knx协议·knx网关
阿钱真强道4 天前
33 极物科技 | Control4 对接 - A8 按键面板驱动
智能家居·rs485·极物·极物智能·极物科技·control4·c4对接
阿钱真强道4 天前
35 极物科技 | Control4 对接 - 温控器驱动(IRAcc/CAN/中弘)
极物·极物智能·极物科技·control4·温控器·iracc·中弘
阿钱真强道5 天前
30 极物科技 | Control4 对接 - CAN 网关驱动
智能家居·can总线·极物·极物智能·极物科技·control4
阿钱真强道5 天前
32 极物科技 | KNX 远程管理 - 使用手册
远程管理·knx·极物·极物智能·极物科技·knxnet/ip·ets调试