ThingsBoard 数据集成 TBEL 解码器实战:simple-json 输入、解码函数与输出格式全解析

发布时间:2026/10/3 22:30:57

ThingsBoard 数据集成 TBEL 解码器实战:simple-json 输入、解码函数与输出格式全解析 物联网后端数据可视化消息队列【免费下载链接】thingsboardAll-in-one IoT Platform - Device management, data collection, processing and visualization.项目地址https://gitcode.com/GitHub_Trending/th/thingsboard点击查看免费下载导读本文围绕 ThingsBoard 平台中 TBELThingsBoard Expression Language数据转换器的simple-json 解码示例展开完整讲解一条典型上行链路Uplink数据从「原始 JSON payload」到「平台统一 JSON 输出」的完整转换过程。你将掌握Decoder(payload, metadata)的函数签名与返回值规范、deviceName/deviceType/telemetry等字段的语义以及自定义时间戳、设备标签、客户与分组等进阶输出写法可直接用于配置 HTTP、MQTT、CoAP 等数据集成。一、simple-json 示例全景三份配套文档在仓库 ui-ngx/src/assets/help/en_US/converter/tbel/examples/decoder/simple-json/ 目录下该示例由三个相互配套的片段组成分别是输入 payload、解码函数与解码输出文件角色核心内容payload.md集成上行的原始消息包含设备序列号、字符串时间戳、温度与湿度decoder_fn.mdTBEL 解码函数解析 JSON、转换时间戳并组装输出对象output.md平台期望的统一输出设备标识 遥测数据的标准 JSON 结构在官方帮助页的「Examples」表中该示例被命名为Simple JSON with date内容类型为JSON说明文字为Parse specific JSON format with string representation of the timestamp——即其教学重点是解析一种特定 JSON 格式并处理以字符串形式表示的时间戳。本文后续内容将以这三份文件为主体结合平台解码器规范展开。二、原始输入集成收到的 JSON payloadsimple-json 示例假设设备或网关上报的原始消息内容如下见 payload.md{ serialNumber: SN-111, ts: 2021-11-21 14:27:39 UTC, t: 36.6, h: 70 }这是典型的设备私有协议格式字段名经过了压缩缩写t代表 temperature、h代表 humidity且时间戳不是 Unix 毫秒数而是人类可读的ISO 风格的日期时间字符串。这类格式在 LoRaWAN、NB-IoT 等低带宽设备上报中非常常见——原始报文为了省流量往往只携带最少的字段字段语义需要由集成端的解码函数来还原。补充说明从平台角度看Decoder函数收到的payload参数是一个字节数组byte array。集成产生的 payload 内容类型可能是 JSON、TEXT 或 BINARY(Base64)内容类型更多是用于调试事件存储的提示并不会影响解码函数的执行。simple-json 示例使用 JSON 内容类型因此解码函数用decodeToJson(payload)即可把字节数组直接还原为 JS 对象。三、解码函数从原始 JSON 到平台标准输出对应的 TBEL 解码函数见 decoder_fn.md// decode payload to JSON. See helper function below var json decodeToJson(payload); // convert date to epoch in milliseconds var timestamp Date.parse(json.ts); // Construct result object with time-series data var result { deviceName: json.serialNumber, deviceType: Thermostat, deviceLabel: Kitchen Thermostat, telemetry: { ts: timestamp, values: { temperature: json.t, humidity: json.h, } } }; return result;这段代码演示了 TBEL 解码器的三个典型操作步骤反序列化调用平台内置辅助函数decodeToJson(payload)把字节数组形式的 payload 解析为 JS 对象。该辅助函数由平台脚本引擎提供其底层实现可在 common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbUtils.java 中查看配套的单元测试见 TbUtilsTest.java。时间戳转换用Date.parse(json.ts)把2021-11-21 14:27:39 UTC这类字符串日期解析为Unix 毫秒时间戳示例输出中的1637504859000。这是本示例的教学重点——平台要求时间戳为 Unix epoch 毫秒字符串时间必须显式转换否则将使用服务端时间。字段重映射把缩写的t、h映射为语义化的temperature、humidity并把serialNumber提升为设备名deviceName。四、解码输出平台统一 JSON 格式经过解码函数处理后返回的结果见 output.md{ deviceName: SN-111, deviceType: Thermostat, deviceLabel: Kitchen Thermostat, telemetry: { ts: 1637504859000, values: { temperature: 36.6, humidity: 70 } } }对比输入与输出可以发现解码函数完成了从「设备私有格式」到「平台通用格式」的语义对齐SN-111成为设备名Thermostat成为设备类型温度 36.6 与湿度 70 进入遥测数据并附带了解析出的毫秒时间戳。返回值规范官方解码器要求根据帮助文档 decoder_fn.mdUplink data converter decoder function的定义解码函数function Decoder(payload, metadata): object | object[]的返回值必须满足以下要求必须包含deviceNamedeviceType或assetNameassetType之一对属性用于唯一标识设备或资产。平台会按这些参数查找已有实体若不存在且集成开启了「允许创建设备或资产」选项则自动创建新实体。实践中常用 DevEUI、MAC 地址等唯一标识作为设备名。可包含attributes对象表示要写入设备/资产的服务器端属性。可包含telemetry对象或数组表示时间序列数据。可包含customerName平台据此自动把设备分配给客户不存在则创建该分配仅在当前集成创建设备/资产的流程中生效实体已存在时忽略。可包含groupName平台据此自动把设备加入实体分组不存在则创建分组默认在租户范围内创建若带customerName则在客户范围内创建同样仅在实体创建时生效。可包含deviceLabel或assetLabel用于设置可在仪表盘上展示的、非唯一的友好标签。simple-json 示例的返回对象使用了deviceName、deviceType、deviceLabel与telemetry四个字段是上述规范中的典型子集。五、输出格式的进阶形态simple-json 是最基础的单设备、单遥测点示例。围绕同一主题仓库中还提供了多种输出形态帮助理解解码输出可伸缩的边界1. 带自定义时间戳的输出simple_json_output_with_ts.md 展示了将遥测数据包在tsUnix 毫秒values结构中的写法。当ts缺失时平台将使用服务端时间戳显式提供ts则可以保留设备上报的原始事件时间这在补录历史数据或处理离线缓存上报时非常关键。2. 带设备标签、客户与分组的输出label_json_output.md 与 json_output.md 在基础结构上加入了deviceLabel、customerName、groupName以及一组attributes如model、serialNumber、integrationName演示如何在新设备创建时自动完成标签、客户归属与分组归属的初始化。3. 多设备 / 多数据点数组输出json_array_output.md 展示了返回值可以是对象数组一次转换可以同时产生多个设备/资产如一个deviceName为001B638446E7的 thermostat 与一个assetName为OF-123的 office且每个实体的telemetry可以是带不同ts的时间序列数组用于一次上报多个历史数据点。这对应官方文档中the output of data conversion may be an array of objects的说明。六、从示例到实战如何在本项目中查阅与使用6.1 在 UI 帮助系统中查看示例上述示例文件均被 ThingsBoard 前端帮助系统引用位置位于 ui-ngx/src/assets/help/en_US/converter/tbel/examples/decoder/ 目录。官方帮助文档decoder_fn.md中通过tb-help-popup组件弹窗展示这些示例读者可直接阅读对应 Markdown 文件获取原始素材。6.2 在集成配置中使用解码器在实际配置数据集成时把「解码函数」粘贴到集成的 Uplink data converter 编辑器并让设备按示例格式上报 payload 即可。配置完成后可结合以下步骤验证检查集成调试事件确认解码输出 JSON 与本文示例结构一致到设备管理页面确认deviceNameSN-111对应的设备是否被自动创建到最新遥测页面查看temperature、humidity两条遥测数据及其时间戳若设备名、类型不符合预期优先检查解码函数中的字段映射与Date.parse时间解析结果。6.3 相关源码参考TBEL 运行时辅助函数实现TbUtils.java辅助函数单元测试TbUtilsTest.java解码器规范文档v1decoder_fn.md解码器规范文档v2Converter/Decoder 双输出模式decoder_fn_v2.md结语simple-json 示例是理解 ThingsBoard 数据集成解码机制的最小完整闭环一段压缩的私有 JSON→一个 TBEL 解码函数→一份平台标准输出。掌握decodeToJson反序列化、Date.parse时间戳转换与deviceName/deviceType/telemetry字段组装这三步即可举一反三地处理 CSV、二进制乃至多设备数组等更复杂的上行报文为集成调试与设备接入打好基础。赞分享物联网后端数据可视化消息队列【免费下载链接】thingsboardAll-in-one IoT Platform - Device management, data collection, processing and visualization.项目地址https://gitcode.com/GitHub_Trending/th/thingsboard点击查看免费下载相关推荐ThingsBoard TBEL 上行解码器输出格式详解以 simple-json 为例解析 attributes 与 telemetry 数据建模ThingsBoard TBEL 上行解码器输出格式详解以 simple json 为例解析 attributes 与 telemetry 数据建模 导读 本物联网后端数据可视化消息队列ThingsBoard TBEL 解码器输出格式详解从 simple JSON Output 到多设备数组输出的完整实战指南ThingsBoard TBEL 解码器输出格式详解从 simple JSON Output 到多设备数组输出的完整实战指南 本篇指南聚焦 ThingsBoa物联网后端数据可视化消息队列ThingsBoard TBEL 解码器 V2 的 Converter 输出格式详解从简单 JSON 到 ChirpStack 数据接入ThingsBoard TBEL 解码器 V2 的 Converter 输出格式详解从简单 JSON 到 ChirpStack 数据接入 导读 本文围绕 Th物联网后端数据可视化消息队列创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/3 22:30:57

DiPlay 实测:iPhone 绕过硬件盒子直连 BYD 车机的思路拆解

先说清楚这个项目解决的是什么问题 原厂不支持 CarPlay 的车型,想用 iPhone 投屏,市面上最常见的方案是买一个第三方盒子:盒子插在车机 USB 上,伪装成一个 CarPlay 接收端,iPhone 再通过蓝牙或 Wi-Fi 连到盒子上。这套…

2026/10/3 23:21:00

PostgreSQL空间排查指南:从表大小到WAL与死元组

某天凌晨,监控告警把值班手机震到发烫:磁盘使用率飙到93%,业务日志里全是“could not extend file”的报错。第一反应是赶紧找出哪张表在疯涨,但用psql敲了几条SQL之后发现,统计出来的库大小加起来只有磁盘占用的一半不…

2026/10/3 23:20:59

QGIS快速标注按钮:从字段选择到出图全流程解析

做GIS的应该都有过这种经历:领导说“把图斑名字标出来”,常规操作是先打开图层属性,翻到“标注”选项卡,勾上“标注该图层”,再选字段、调字体、调位置,一套流程下来时间没少花。后来我用QGIS时&#xff0c…

2026/10/3 23:20:59

Bibliometrix安装配置全攻略:从R环境搭建到Biblioshiny可视化分析

第一次用Bibliometrix做文献计量分析的时候,我差点被安装这关劝退。倒不是这个R包本身多难装,而是网上教程大多只丢一句install.packages("bibliometrix"),然后就默认你能跑通。真到自己动手,R版本不匹配、依赖包编译失…

2026/10/3 23:20:59

Android Intent传值避坑指南:正确获取参数的5种方式与常见问题

避坑指南:正确获取Intent传递的值,这几种方式我全给你捋明白了 做Android开发,谁还没跟Intent打过交道?启动Activity、传参数、接收返回值、处理外部链接调起,几乎每个页面跳转背后都有Intent在默默干活。我早期写项目…

2026/10/3 23:15:59

JavaScript数组方法实战:从map到reduce的高频用法与易错点

每个人的备赛与参赛经验,就是在这些最基本的知识点上拉开了差距。我给自己定的目标是:每个高频方法不假思索就能写对。 2. 遍历、筛选、映射:比赛中出场率最高的三个方法 2.1 map:数据清洗和列表渲染的头号工具 map的作用一句话…

2026/10/2 8:16:46

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/10/2 18:20:53

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/3 15:02:19

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/3 0:04:31

国内大学生必备的AI写作辅助软件是哪款?

国内高校学生在论文写作过程中,越来越依赖AI辅助工具提升效率,主流方案以本土化全流程工具为核心,结合通用大模型与专业插件,覆盖选题构思、框架搭建、初稿撰写、查重降重、格式调整等关键环节,本文将深入解析当前主流…

2026/10/3 0:04:31

Codex接入Jev模型完整指南:配置方法、本地部署与踩坑排查

最近不少人在讨论 Codex 搭配 Jev 这套玩法,我一开始没太当回事,直到自己把 Jev 接进 Codex跑了几轮编码任务之后,才明白那些说“直接起飞”的人是怎么想的。Codex 作为工具本身已经够能打了,但模型固定、上下文策略固定&#xff…

2026/10/3 0:04:31

GitHub 热门: NVIDIA/Model-Optimizer

👋 Hi,我擅长 AI 大模型应用落地、意识解码与 AI 开发工具链 。 💡 创业路上,用技术换时间,一起把 AI 变成生产力 🚀 >GitHub 热门: NVIDIA/Model-Optimizer 凌晨两点,你刚把跑通了的 Qwen3.…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑