管理与 SIT 模式深度解析)
Tasmota Matter 实现中的 ICD间歇性连接设备管理与 SIT 模式深度解析【免费下载链接】TasmotaAlternative firmware for ESP8266 and ESP32 based devices with easy configuration using webUI, OTA updates, automation using timers or rules, expandability and entirely local control over MQTT, HTTP, Serial or KNX. Full documentation at项目地址: https://gitcode.com/GitHub_Trending/ta/TasmotaTasmota 在基于 Berry 的 Matter 实现中位于lib/libesp32/berry_matter默认启用 ICD Management Cluster0x0046并以基本 SITShort Idle Time模式向控制器声明设备始终在线。本文基于lib/libesp32/berry_matter/MATTER_ICD_IMPLEMENTATION.md展开结合仓库内 Berry 源码系统讲解 ICD 的概念、Tasmota 的属性与 FeatureMap 取值、mDNS 公告细节及其背后的设计取舍帮助开发者理解控制器如何判断 Tasmota 设备“始终可达”以及为什么无需配置即可满足 Matter 1.4.1 规范要求。什么是 ICDIntermittently Connected DeviceICD 是 Matter 规范中用于描述设备连接/休眠模式的特性。Matter 1.4.1 核心规范第 9.17 节定义了两种工作模式SITShort Idle Time短空闲时间空闲周期小于 15 秒适用于始终在线的设备LITLong Idle Time长空闲时间空闲周期大于或等于 15 秒适用于依赖电池供电的休眠设备。Tasmota 设备是通过 WiFi 供电的常在线设备mains-powered、always connected因此采用SIT 模式。控制器可以通过读取 ICD Management Cluster 的属性得知设备的可用性模式从而合理规划消息重传与轮询策略。在 Tasmota 中ICD Management Cluster0x0046始终启用于 Root 端点endpoint 0这在Matter_Plugin_1_Root.be的 CLUSTERS 声明中可以确认# ICD Management Cluster (0x0046) - Section 9.17 # For SIT (Short Idle Time) devices without CIP/LITS features: # - IdleModeDuration (0x0000): mandatory # - ActiveModeDuration (0x0001): mandatory # - ActiveModeThreshold (0x0002): mandatory 0x0046: [0,1,2] # ICD Management Cluster - base SIT mode (no CIP/LITS features)源码见 lib/libesp32/berry_matter/src/embedded/Matter_Plugin_1_Root.be 中 CLUSTERS 定义部分集群可选特性为什么 Tasmota 全部不实现按 Matter 1.4.1 规范第 9.17.4 节ICD Management Cluster 定义了以下可选特性Feature特性位名称用途Bit 0CIPCheck-In Protocol Support供 LIT 设备向客户端发送 Check-In 通知Bit 1UATUser Active Mode Trigger支持用户主动触发唤醒Bit 2LITSLong Idle Time Support支持 LIT 运行模式Bit 3DSLSDynamic SIT/LIT Support支持在 SIT/LIT 模式间动态切换由于 Tasmota 是始终在线的 WiFi 设备上述可选特性全部未实现FeatureMap 固定为0x00。该值在 Matter_Plugin_0.be 的FEATURE_MAPS表中显式声明static var FEATURE_MAPS { # feature map per cluster ... 0x0046: 0x00, # ICD Management: 0x00 no optional features (base SIT mode, no CIP/UAT/LITS) }FEATURE_MAPS 的读取逻辑位于同一文件的read_attribute相关实现中通过self.FEATURE_MAPS.find(cluster, 0)取值缺省为 0FeatureMap 会被编码进集群的FeatureMap属性控制器据此判断设备能力。支持的属性三个强制属性及其规范默认值按规范第 9.17.6 节ICD Management Cluster 有三个强制属性Conformance MTasmota 全部实现且取值严格采用规范默认值属性ID类型值合规性说明IdleModeDuration0x0000uint321Mandatory1 秒规范允许的最小值ActiveModeDuration0x0001uint32300Mandatory300ms规范默认值ActiveModeThreshold0x0002uint16300Mandatory300ms规范默认值这些属性的实际取值逻辑可以在 Matter_Plugin_1_Root.be 的read_attribute分支中找到源码注释明确了每个值的设计意图elif cluster 0x0046 # ICD Management Cluster 9.17 # ICD Intermittently Connected Device # For Tasmota WiFi devices: always-on, mains-powered, SIT mode # This tells controllers the device is always reachable if attribute 0x0000 # ---------- IdleModeDuration / uint32 (seconds) ---------- # For always-on WiFi device: 1 second (minimum per spec, device is always active) return tlv_solo.set(0x06 #-TLV.U4-#, 1) elif attribute 0x0001 # ---------- ActiveModeDuration / uint32 (milliseconds) ---------- # For always-on WiFi device: 300ms (spec default, device never actually sleeps) return tlv_solo.set(0x06 #-TLV.U4-#, 300) elif attribute 0x0002 # ---------- ActiveModeThreshold / uint16 (milliseconds) ---------- # For always-on WiFi device: 300ms (spec default) return tlv_solo.set(0x05 #-TLV.U2-#, 300)各属性的语义对应源码中的注释IdleModeDuration设备停留在 idle 模式的最大秒数约束范围 1–64800 秒。常在线设备取最小值 1 秒ActiveModeDuration设备保持在 active 模式的最短毫秒数默认 300msActiveModeThreshold网络活动结束后设备保持 active 状态的最短毫秒数默认 300ms。三个属性均被声明为固定值Quality FFixed即设备运行期间不会改变这符合常在线设备的行为特征。未实现的属性依赖可选特性以下属性因依赖可选特性而未实现读取时不会返回源码中也没有对应分支属性ID合规性要求未实现原因RegisteredClients0x0003CIP需要 Check-In ProtocolICDCounter0x0004CIP需要 Check-In ProtocolClientsSupportedPerFabric0x0005CIP需要 Check-In ProtocolUserActiveModeTriggerHint0x0006UAT需要 User Active Mode TriggerUserActiveModeTriggerInstruction0x0007UAT需要 User Active Mode TriggerOperatingMode0x0008LITS需要 Long Idle Time SupportMaximumCheckInBackoff0x0009CIP需要 Check-In Protocol源码中对此有明确说明见Matter_Plugin_1_Root.be的注释块与 read_attribute 结尾注释# Note: attributes 0x0003-0x0005 require CIP feature (Check-In Protocol) # Note: attribute 0x0008 (OperatingMode) requires LITS feature (Long Idle Time Support) # We dont implement CIP or LITS since this is an always-on WiFi device集群配置Cluster Revision 与 Feature MapICD Management Cluster 的元数据配置如下Cluster Revision3对应 Matter 1.4.1 规范版本Feature Map0x00无任何可选特性。Cluster Revision 在 Matter_Plugin_0.be 的CLUSTER_REVISIONS表中声明static var CLUSTER_REVISIONS { ... 0x0046: 3, # ICD Management Cluster revision 3 (Matter 1.4.1) }该表中未列出的集群默认 revision 为 1而 ICD 集群显式声明为 3与 Matter 1.4.1 对齐。FeatureMap 与 Cluster Revision 会随集群属性一并返回给控制器是控制器判断集群版本与能力的关键元数据。mDNS 公告SII / SAI / SAT 与“不广播 ICD 键”的规范细节除了集群属性本身ICD 能力还会通过 mDNS TXT 记录向控制器广播会话参数。按 Matter 1.4.1 规范第 4.3.4 节Common TXT Key/Value Pairs与第 4.13.1 节Session ParametersTasmota 的 mDNS 公告包含以下键键值说明SII500SESSION_IDLE_INTERVAL单位 ms规范默认值SAI300SESSION_ACTIVE_INTERVAL单位 ms规范默认值这些 TXT 记录在 Matter_z_Commissioning.be 中集中定义。PASEPasscode-Authenticated Session Establishment配网阶段的公告实现于mdns_announce_PASE()# Per Matter 1.4.1 spec section 4.3.4 and 4.13.1: # SII SESSION_IDLE_INTERVAL (ms) - MRP retry interval when node is Idle (default 500ms) # SAI SESSION_ACTIVE_INTERVAL (ms) - MRP retry interval when node is Active (default 300ms) # SAT SESSION_ACTIVE_THRESHOLD (ms) - time node stays active after network activity (default 4000ms) # For always-on WiFi devices, we use the spec defaults since device is always responsive var sii 500 # SESSION_IDLE_INTERVAL: 500ms (spec default) var sai 300 # SESSION_ACTIVE_INTERVAL: 300ms (spec default) var services { VP: f{self.device.VENDOR_ID}{self.device.PRODUCT_ID}, D: self.commissioning_discriminator, CM:1, # requires passcode T:0, # no support for TCP SII:sii, SAI:sai # Note: ICD key is only for devices that support LITS (Long Idle Time Support) feature # Per spec: The key SHALL NOT be provided by a Node that does not support the ICD Long Idle Time operating mode # Since were a simple SIT device without LITS, we dont advertise ICD key }同时类级静态表OP_DISCOVERY_TXT用于 operational discovery 阶段也定义了完整的三元组static var OP_DISCOVERY_TXT { SII: 500, # SESSION_IDLE_INTERVAL (ms) SAI: 300, # SESSION_ACTIVE_INTERVAL (ms) SAT: 4000, # SESSION_ACTIVE_THRESHOLD (ms) }需要特别强调的是ICD键不被广播。规范原文要求“不支持 ICD Long Idle Time 运行模式的节点不得提供ICD键”。Tasmota 作为纯 SIT 设备未实现 LITS严格遵守该约束避免向控制器错误声明 LIT 能力从而防止控制器按 LIT 语义例如依赖 Check-In 通知处理本设备。为什么这样实现规范合规、极简与控制器兼容原文档总结了该实现的三大设计理由与源码相互印证规范合规Spec Compliance只实现强制属性CIP、UAT、LITS 等可选特性对常在线设备没有意义因此 FeatureMap 为 0x00且不广播 ICD 键完全符合 Matter 1.4.1 的强制与禁用约束简洁SimplicityTasmota 是常在线 WiFi 设备所有属性采用规范默认值1s / 300ms / 300ms无需任何用户配置也没有可变状态需要维护控制器兼容Controller Compatibility控制器可读取 ICD 集群的强制属性直接判定“该设备始终可达”从而选择最短的轮询/重传间隔保证交互的实时性与可靠性。源码证据与关联文档索引实现文档MATTER_ICD_IMPLEMENTATION.md集群声明与属性读取Matter_Plugin_1_Root.beCLUSTERS 中的0x0046: [0,1,2]、read_attribute 中0x0046分支FeatureMap 与 Cluster RevisionMatter_Plugin_0.beFEATURE_MAPS与CLUSTER_REVISIONSmDNS 公告与 TXT 记录Matter_z_Commissioning.beOP_DISCOVERY_TXT、mdns_announce_PASE()、mdns_announce_op_discovery()如需了解 Matter 实现的全貌可继续阅读仓库内的 MATTER_1.4.1_DETAILED_GAP_ANALYSIS.md、MATTER_CLASS_HIERARCHY.md 与 MATTER_SESSION_ARCHITECTURE.md 等配套文档。小结Tasmota 的 ICD 实现是一套典型的“常在线设备最小实现”在 Root 端点暴露 ICD Management Cluster0x0046以 Cluster Revision 3、FeatureMap 0x00 呈现仅提供三个规范强制属性IdleModeDuration1s、ActiveModeDuration300ms、ActiveModeThreshold300ms并通过 mDNS 广播 SII/SAI以及 operational discovery 阶段的 SAT同时严格遵循规范不广播 ICD 键。这套实现无需任何配置即可让 Matter 控制器准确识别“始终在线、始终可达”的 Tasmota 设备在合规性、简洁性与控制器兼容性之间取得了平衡。说明本实现基于 Matter 1.4.1 Core Specification第 9.17 节 ICD Management Cluster、第 4.3.4 节 Common TXT Key/Value Pairs、第 4.13.1 节 Session Parameters实现日期为 2026 年 1 月。文中属性取值、FeatureMap 与 TXT 记录均以当前仓库源码为准。【免费下载链接】TasmotaAlternative firmware for ESP8266 and ESP32 based devices with easy configuration using webUI, OTA updates, automation using timers or rules, expandability and entirely local control over MQTT, HTTP, Serial or KNX. Full documentation at项目地址: https://gitcode.com/GitHub_Trending/ta/Tasmota创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考