TSL(Thing Specification Language)是物联网平台用来统一描述设备功能模型的核心语言,它把属性、服务和事件抽象成机器可读的结构体,使得前端面板可以在不编写专属代码的前提下自动生成交互界面。实际上,TSL 的价值在于把“硬件的电路图”转化为“一套 UI 配置”。
从语法上看,TSL 采用 JSON‑Schema 的子集,核心字段包括 identifier(唯一标识)、type(数据类型)、description(人类可读说明)以及可选的 specs(取值范围、单位、可写性)。属性(Property)负责状态展示,服务(Service)对应可调用的动作,事件(Event)则是设备主动推送的消息。正是这些约定,让 UI 引擎可以“一键映射”。
{
"properties": {
"power": {
"type": "bool",
"description": "电源开关",
"writeable": true,
"default": false
},
"temperature": {
"type": "float",
"unit": "°C",
"description": "当前温度",
"writeable": false,
"specs": {
"range": [-40, 125]
}
}
},
"services": {
"setTarget": {
"input": {
"targetTemp": {
"type": "float",
"unit": "°C",
"specs": { "range": [16, 30] }
}
}
}
},
"events": {
"overheat": {
"type": "bool",
"description": "过热报警"
}
}
}
面板渲染器会依据属性的 type 与 specs 自动挑选组件:bool 映射为开关,enum 生成下拉框,float 且带 range 的字段则渲染成滑块。服务的 input 被包装为表单,提交后通过 MQTT/CoAP 发送指令;事件则注册为实时推送的监听器。
writeable 标记。某智能灯具厂商在产品线中引入 TSL 后,原本需要为每种型号单独编写 Vue 页面,平均工时 12 人天。改用统一的 TSL 描述后,同一套渲染引擎即可在数分钟内生成包括颜色选择、亮度调节、定时任务的完整面板。更惊喜的是,云端统一的 “状态唯一来源” 让手机 App、语音助手和墙壁面板三端同步毫秒级完成,用户甚至感觉不到背后是多协议的协同。
从技术视角看,TSL 的成功依赖于三点:严格的模式校验防止非法字段、版本号机制保障兼容升级、以及开放的扩展点(自定义 UI 组件)让厂商能够在标准之上加入差异化功能。只要这三环保持闭环,面板标准化便不再是“理想”,而是日常交付的必备工具。
参与讨论
这不就是把设备说明书转成JSON嘛,挺省事的
有人试过在老旧设备上跑TSL吗?兼容性咋样?
前几天刚搞完智能插座接入,确实折腾了好久,TSL要是早点用上就好了
bool变开关、float变滑块,听起来简单但实际渲染细节坑不少吧🤔
写得还行,不过specs里range和unit要是能支持动态获取就更灵活了