KNX 时间首字节还带星期:怎样解析 DPT10 的三字节字段
DPT10.001的第一字节高三位带星期、低五位带小时,后两字节分别提供分和秒。星期0表示未指定,不应补成星期日;整个三字节仍没有日期或时区,不能直接生成UTC时间戳。
适用版本与输入范围
依据 XKNX 维护者仓库固定标签 3.6.0 的下列源码,只实现本文明示的数据点或组值解析子集。它不是 KNX 规范全文,也不是设备互通认证;组地址与DPT应由项目点表明确提供。 本文所有输入均为原创合成数据,未接真实设备。
星期和小时共享首字节
附件CE 03 05中,CE高三位110表示星期六,低五位01110表示14点,因此结果14:03:05。若直接把CE当十进制小时206,会误判整条电报无效;若只取小时不保留星期,又会丢失日内定时上下文。程序使用明确掩码拆字段,并将星期0转换成None,避免Python习惯中的星期零编号与协议的“未指定”混淆。
分秒只占各字节的低六位
公开实现从分秒字节低六位取值,再检查0到59。附件CE 83 05保留分为3,同时将reserved_nonzero标为真,展示原字节高位没有被当作分钟参与数值计算。这个标志是本示例额外的交付诊断字段,不宣称维护者库一定同样拒绝或报告保留位。工程需要严格编码检查时可据此单独制定策略,不应把检测结果悄悄从原始记录中丢掉。
范围错误不做自动进位
显式负例DF 00 00中低五位小时31,程序报告时分秒越界,不将它折算到次日7点。23:59:59正例则核对三个上界能被正确接受。协议字段解析应保留错误,归一化会把错误输入变成另一个合法时间,后续很难追溯。测试只处理三字节Time内容,不含APCI包装、组地址或整个cEMI帧;接入日志必须先正确提取数据段,再使用这个子解析器。
日内时间与采集时刻分别记录
DPT10可用于传输时钟信息,但它没有年、月、日,也没有UTC偏移。项目若需要绝对时间,必须另有日期和时区来源,并约定星期如何校验;不能拿接收电脑当天日期直接拼起来后称为设备原始采样时间。报告保留字段而不生成datetime,正是为了避免这一推断。此次没有同步设备时钟或测时延,输出仅证明合成字节按固定版本公开实现的字段规则被解释。
下载与复跑
将输入 fixture.json与独立程序 verify.py放在同一目录,用 Python 3.12 执行 python verify.py,无需安装第三方包。程序从自身目录读取输入并写入 report.json,不要求当前终端恰好位于下载目录。也可查看本次实跑报告和复跑说明。
本次实际运行通过 4 条输入断言,包括标有“显式负例”的记录;负例以JSON字段承载,不会把下载文件本身做成损坏编码。weekday=None表示未指定;reserved_nonzero是示例额外诊断,time只是日内时分秒。 修改输入后应同时审查期望结果,不能只改断言数字让测试变绿。
对象或字段的基础关系可回到KNX 组地址与DPT入门核对,更多接口入口在设备协议库。若需要把已确认的数据点接入展项编排,可了解SoftControl 展厅中控;具体接入能力以项目确认和实际测试为准。
一级依据
来源核对日期:2026-10-24。离线结果只证明给定输入的解析或计算行为;现场兼容性、响应时间、硬件准确度和具体产品支持均未测量。
相关阅读
留言讨论
评论发布后会被人工复核,违规内容将被删除。
如果发表没有反应,可以前往联系我们告诉我们。