ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

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),仅供参考
返回列表