协议

C-Bus

qianmoQqianmoQ· 更新于 2026-10-01· 阅读 10 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

C-Bus 是 Clipsal 专有的家庭与楼宇自动化总线,用于通过由 C-Bus 设备(继电器、调光器、传感器、面板)组成的低速串行网络控制照明、暖通空调(HVAC)、安防等类似的楼宇服务。网络通过 PC 接口(PCI)单元接入,驱动通过 TCP 与该单元通信。

Go 驱动功能完整:可读取状态、发送 SAL 命令、监控 SAL 与 MMI 流量,并浏览已安装的设备。Java 驱动仅能建立连接;它没有标签处理器,且下面四项操作均未实现。

支持的操作

名称值描述
read通过 status/ 标签读取设备的状态。
write通过 sal/ 标签发送 SAL 命令。
subscribe通过 salmonitor/ 或 mmimonitor/ 标签监控 SAL 或 MMI 流量。
browse通过 info/ 查询发现已安装的设备及其属性。

连接字符串

C-Bus 的连接字符串格式如下:

c-bus:{transport}://{ip-address}:{port}?{options}

唯一支持的传输方式是 tcp,在未指定端口时,它会连接到 PCI 的默认端口 10001:

c-bus:tcp://192.168.42.11

连接字符串选项

名称

类型

默认值

必填

描述

名称

Clipsal C-Bus

代码

c-bus

Maven 依赖

<dependency>
  <groupId>org.apache.plc4x</groupId>
  <artifactId>plc4j-driver-c-bus</artifactId>
  <version>1.0.0</version>
</dependency>

默认传输

tcp

支持的传输协议

  • tcp

配置选项:

srchk

BOOLEAN

false

源校验。

传输配置选项:

tcp

tcp.connect-timeout-ms

INT

5000

以毫秒为单位的连接超时时间。

tcp.read-timeout-ms

INT

0

Socket 读取超时时间(毫秒)。0 表示不超时。

tcp.write-timeout-ms

INT

0

以毫秒为单位的套接字写入超时时间。0 表示不超时。

tcp.no-delay

BOOLEAN

true

启用 TCP_NODELAY(禁用 Nagle 算法)。

tcp.keep-alive

BOOLEAN

false

启用 SO_KEEPALIVE。

tcp.send-buffer-size

INT

81920

发送缓冲区大小(字节)。设为 0 表示使用系统默认值。

tcp.receive-buffer-size

INT

81920

接收缓冲区大小,以字节为单位。0 表示使用系统默认值。

tcp.local-address

STRING

要绑定到的本地地址(可选)。若未设置,则使用默认值。

tcp.local-port

INT

0

要绑定的本地端口(可选)。0 表示使用临时端口。

标签地址

标签地址的寻址仅在 Go 中实现。Java 驱动可以连接,但未实现任何操作,也没有标签处理器。各实现具体支持的功能请参阅协议支持矩阵]。

通用格式

标签地址由五种带前缀的形式之一构成。每种形式都可以携带一个可选的桥接链(b<address>[-b<address>]{0,5},最多 6 个桥),用于将命令跨桥接网络进行路由。

status/

status/[<bridges>/]binary|level=0xNN/<application> - 读取应用组地址的二进制状态或电平状态。

cal/

cal/[<bridges>-]<unit>/recall=[<param>, <count>]|identify=<attr>|getStatus=<param>, <count>

  • 发送给某个单元的设备/网络管理(“CAL”)命令。仅实现了 recall=、identify= 和 getStatus=;见下文。

sal/

sal/[<bridges>/]<application>/<salCommand> - 向应用程序发送 SAL 命令。

salmonitor/

salmonitor/<unit>|/<application>| - 用于监控某个单元和/或应用的 SAL 流量的订阅标签,或 * 用于任意一个的标签。

mmimonitor/

mmimonitor/<unit>|/<application>| —— 一个订阅标签,用于监控 MMI 流量,其 unit/application/* 结构与 salmonitor/ 相同。

解析器还接受它并未实现的 cal/ 形式:reset、write=[<param>, 0xNN]、identifyReply=<attr>、reply=<param>、status=<app> 和 statusExtended=<app> 均可无错误地解析,但在驱动中被标记为 TODO: implement me,使用时会返回 Not implemented。

sal/ 和 status/ 的应用来自驱动的应用表;其中大多数已实现(LIGHTING、TEMPERATURE_BROADCAST、VENTILATION、IRRIGATION_CONTROL、POOLS_SPAS_PONDS_FOUNTAINS_CONTROL、HEATING、AIR_CONDITIONING、TRIGGER_CONTROL、ENABLE_CONTROL、AUDIO_AND_VIDEO、SECURITY、METERING、ACCESS_CONTROL、CLOCK_AND_TIMEKEEPING、TELEPHONY_STATUS_AND_CONTROL、MEASUREMENT、MEDIA_TRANSPORT_CONTROL、ERROR_REPORTING、HVAC_ACTUATOR),但 RESERVED、FREE_USAGE、ROOM_CONTROL_SYSTEM 和 TESTING 虽可被地址解析器接受,同样尚未实现。

浏览

info/ 并非标签地址——它是一个浏览查询,由 ParseQuery 而非 ParseTag 单独解析,且仅与 browse 操作配合使用:

info/

info/<unit>|/<identifyAttribute>| — 列出已安装的单元,可选择只筛选某一个单元和/或某个识别属性。

数据类型

C-Bus 标签是命令和状态请求,而非带类型的内存地址,因此不使用也不接受 :{data-type} 后缀。值从 C-Bus 响应中解码为 Struct(当为 status/ 时则是 NULL);地址本身没有可供选择的数据类型。

示例

地址含义
status/binary/LIGHTING所有 LIGHTING 组地址的二进制状态
status/b1/binary/LIGHTING同上,经由一座桥路由
status/b1-b2-b3-b4-b5-b6/binary/LIGHTING同上,经由六座桥路由
cal/2/getStatus=1,2获取参数 1、计数 2 的状态,来自单元 2
cal/b1-u2/getStatus=1,2同一 getStatus,经由一座桥路由到单元 2
cal/0/recall=[0x20, 4]从单元 0 调用参数 0x20 的 4 个值
sal/LIGHTING/ON向 LIGHTING 应用发送 ON SAL 命令
sal/b1/LIGHTING/ON同上,经由一座桥路由
salmonitor/2/LIGHTING监视单元 2 的 SAL 流量,应用为 LIGHTING
salmonitor//监视所有 SAL 流量
mmimonitor/2/LIGHTING监视单元 2 的 MMI 流量,应用为 LIGHTING
mmimonitor//监视所有 MMI 流量
info/0x13/DSIStatus针对单元 0x13 的 `DSIStatus 属性的浏览查询
info//针对每个已安装单元及其所有属性的浏览查询

表 1. 示例

注意事项与技巧

数组表示法不适用于 C-Bus 地址:cal/ 命令(例如 recall=[0x20, 4])中的括号承载的是该命令自身的参数(一个参数编号和一个计数),而不是附加在地址上的选择。读取多个值的命令仍会通过标签的数组信息来报告,与其他列表完全一样——只是没有另外叠加一层选择语法。

评论

登录后参与评论

正在加载评论…