新闻详情

新闻详情

首页 / 资讯中心 / 详情

ThingsBoard TBEL 解码器中使用 metadata 字段的完整实战:simple-metadata 示例深入解析

发布时间:2026/10/2 13:43:20来源:尧图网络
ThingsBoard TBEL 解码器中使用 metadata 字段的完整实战:simple-metadata 示例深入解析
物联网后端数据可视化消息队列【免费下载链接】thingsboardAll-in-one IoT Platform - Device management, data collection, processing and visualization.项目地址https://gitcode.com/GitHub_Trending/th/thingsboard点击查看免费下载导读本文以 ThingsBoard 开源 IoT 平台仓库中 simple-metadata 示例 为核心完整讲解 TBELThingsBoard Expression Language上行数据解码器如何通过metadata参数引用集成Integration中配置的额外元数据从而在解码函数中动态决定设备类型、客户归属与服务端属性而无需把这些信息硬编码在解码脚本里。读完本文你将掌握metadata的结构与注入方式、解码函数中读取 metadata 字段的写法、以及它与payload、解码器输出结构deviceName/deviceType/attributes/telemetry之间的配合关系并能直接复用本仓库提供的完整可运行示例。示例概览一个由 metadata 驱动的解码器在 ThingsBoard 的 TBEL 解码器体系里每一个完整示例通常由四部分组成输入 payload、输入 metadata、解码函数decoder function与期望输出。simple-metadata 示例 位于解码器示例表 Use metadata fields 一栏中官方对其定位是Use metadata fields to determine device type, model and customer name 使用 metadata 字段来确定设备类型、型号和客户名称也就是说本示例的核心教学价值不在于复杂的二进制解析而在于演示如何在解码函数中读取 integration 注入的 metadata并把它映射到输出 JSON 的各个字段上。整个示例的输入/输出对如下输入 payloadpayload.md一个包含设备序列号、时间戳字符串、温度与湿度数据的 JSON输入 metadatametadata.md由 integration 配置或上游系统注入的键值对包含customerName、deviceType、deviceModel三个自定义键解码函数decoder_fn.md读取metadata中的三个字段结合 payload 拼装标准解码输出期望输出output.md解码后的标准 JSON设备类型为Thermostat、客户为Customer C、属性里带model: Model A。metadata 的结构与三种键值示例中的 metadata 表本示例的 metadata 是最简洁的形式——三对自定义键值KeyValuecustomerNameCustomer CdeviceTypeThermostatdeviceModelModel A从结构上看metadata 是一个{[key: string]: string}的键值映射见 decoder_fn.md 文档说明。解码函数可以直接通过点号语法metadata.deviceType读取其中的任意字段无需任何声明或导入。三类 metadata 来源结合仓库文档integration 自带的字段不同类型的 Integration 会注入不同的默认 metadata。例如在 decoder_v2 版本的 metadata 示例 中可以看到 LORIOT 集成注入的eui、fPort、rssi、snr、frequency、dr、toa、battery、seqno、fCnt、cmd、ts等字段——这些是典型的 LoRa 网络服务器元数据常被用于设备命名如用eui做deviceName或信号质量上报。integration 详情中手动配置的额外 metadata官方文档明确说明 You can configure additional metadata for each integration in the integration details可以在每个 Integration 的详情中配置附加 metadata。本示例中的customerName、deviceType、deviceModel就属于这类自定义键。HTTP 请求头 / 上游平台字段基于 HTTP 的集成会根据请求头确定 content type这类集成同样可以把请求中的信息注入 metadata。为什么把 deviceType 放进 metadata 而不是硬编码对照同目录下的 simple-json 解码器示例那里是把deviceType: Thermostat和deviceLabel: Kitchen Thermostat硬编码在解码脚本中。而本示例则把deviceType、deviceModel、customerName全部放进 metadata解码脚本只负责数据转换不关心业务分类同一份解码函数可以服务多个客户/多种设备型号只需在 Integration 层配置不同的 metadata客户归属、设备类型等字段来自集成配置运维人员无需修改代码即可调整。这正是 ThingsBoard 推荐把解码逻辑与业务元数据解耦的典型写法。解码函数逐行拆解完整的解码函数源码见 simple-metadata/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: metadata.deviceType, customerName: metadata.customerName, attributes: { model: metadata.deviceModel }, telemetry: { ts: timestamp, values: { temperature: json.t, humidity: json.h, } } }; return result;第 1 步decodeToJson(payload)把字节数组转为 JSON 对象根据 decoder_fn.md 的函数签名说明TBEL 解码函数的签名是function Decoder(payload, metadata): object | object[]其中payload: any是一个字节数组byte array其内容类型可能是 JSON、TEXT 或 Binary(Base64)。content type 主要作为调试事件的提示并不影响解码函数的实际行为——解码器需要通过decodeToString或decodeToJson这类内置 helper 把字节数组转换为字符串或 JSON 对象。这里对来自 MQTTMQTT 3.x 发布消息中没有 content-type因此 MQTT 集成的 payload 恒为 BINARY或 HTTP/CoAP 集成的原始负载decodeToJson(payload)是最常用的一步。第 2 步Date.parse(json.ts)把时间字符串转成毫秒级 epochpayload 中的ts: 2021-11-21 14:27:39 UTC是字符串形式的时间。Date.parse()会将其解析为 Unix 时间戳毫秒供telemetry.ts使用。平台对时间戳的约定是必须是 Unix epoch 毫秒数否则将使用服务器时间参见 decoder_fn.md 中的 timestamp 说明 与 simple_json_output_with_ts 示例。在示例期望输出中2021-11-21 14:27:39 UTC被正确转换为1637504859000。第 3 步构造标准解码输出对象本示例的返回值同时使用了官方 decoder_fn.md 输出要求 中的多类字段deviceName/deviceType必填输出必须包含deviceNamedeviceType或assetNameassetType二选一。这里deviceName取自 payload 中的serialNumberSN-111deviceType取自 metadata 中的Thermostat。设备名在租户范围内唯一平台会依据这两项去查找已有设备若不存在且集成开启了 Allow to create devices or assets则会自动创建设备。实践中常使用 DevEUI、MAC 地址等唯一标识作为deviceName。customerName可选平台会用它自动将设备分配给名为Customer C的客户若该客户不存在则自动创建。需要注意的是此分配仅在当前集成创建设备/资产的过程中生效如果设备已经存在该参数会被忽略参见 decoder_fn.md 中 customerName 说明。attributes可选服务端属性对象。这里把 metadata 中的deviceModelModel A写入attributes.model作为设备的一个静态服务端属性保存。telemetry可选时序数据对象包含ts毫秒时间戳与values温度/湿度键值对。temperature: json.t、humidity: json.h分别来自 payload 中的t和h。输入与输出对照输入 payloadpayload.md{ serialNumber: SN-111, ts: 2021-11-21 14:27:39 UTC, t: 36.6, h: 70 }期望输出output.md{ deviceName: SN-111, deviceType: Thermostat, customerName: Customer C, attributes: { model: Model A }, telemetry: { ts: 1637504859000, values: { temperature: 36.6, humidity: 70 } } }可以清晰地看到三条映射关系payload 的serialNumber→ 输出deviceNamemetadata 的deviceType→ 输出deviceTypemetadata 的customerName→ 输出customerNamemetadata 的deviceModel→ 输出attributes.model。解码函数本身没有写死任何一个分类值。解码器输出的其他合法形态深化参考simple-metadata 示例只展示了telemetry为单个对象、输出为单个对象的情况。官方 decoder_fn.md 还说明了其他几种同样合法、且经常与 metadata 组合使用的输出形态便于你在实际集成中扩展带 deviceLabel 的输出可额外返回deviceLabel非唯一、用户友好的设备标签用于仪表盘展示以及groupName用于把设备自动归入实体组。参见 label_json_output 示例。带自定义时间戳的输出telemetry.ts支持每个数据点指定不同的毫秒时间戳参见 simple_json_output_with_ts 示例。输出为对象数组解码函数可以返回object[]一次处理多台设备/资产且每个对象可携带多个不同时间戳的 telemetry 数据点参见 json_array_output 示例。复杂 JSON Hex 解码当 payload 中包含多个 hex 编码字段时可结合hexToBytes、parseBytesToInt等内置 helper 进行逐字段解析参见 complex-json-hex 示例。metadata 在 LORIOT 等真实集成中的形态为了让你理解自定义 metadata 与集成自带 metadata共存的实际场景仓库中的 decoder_v2/simple-metadata/metadata.md 给出了一个 LORIOT 集成注入的完整 metadata 示例KeyValueintegrationNameTest LORIOTincludeGatewayInfofalserssi-21seqno3040fPort85data01ed03335f0e4c63toa206ackfalsebattery94drSF9 BW125 4/5frequency867500000offlinefalsesnr10eui1000000000000001cmdrxfCnt2ts1684478801936这类由 LoRa 网络服务器LORIOT、ChirpStack、The Things Stack 等注入的 metadata 在实践中非常有用例如可以用metadata.eui作为deviceName设备唯一标识把rssi/snr作为属性或遥测上报用battery监测设备电量。它同样遵循{[key: string]: string}的键值结构与你自定义的customerName/deviceType/deviceModel在解码函数中的读取方式完全一致。最佳实践小结保持解码脚本与业务分类解耦凡是与这台设备属于谁、是什么类型、什么型号相关的字段优先通过 Integration 详情的额外 metadata 注入而不是写死在解码脚本里这样同一份脚本可以复用给多台设备。利用集成自带的 metadataLoRa 类集成会注入eui、rssi、snr、fPort等字段可直接用于deviceName或属性/遥测上报无需自行解析。严格遵守输出结构要求至少返回deviceNamedeviceType或assetNameassetTypecustomerName、groupName、deviceLabel、attributes、telemetry均为可选但需注意其只在设备创建阶段生效的语义。时间戳统一使用毫秒 epoch字符串时间先用Date.parse()或等效方法转换否则平台使用服务器时间。从示例出发快速上手仓库中完整的 payload / metadata / decoder / output 四件套示例位于 ui-ngx/src/assets/help/en_US/converter/tbel/examples/decoder同一目录下还有 JSON、CSV、Binary、Hex 等不同 content type 的对照用例decoder_fn.md 示例表适合作为你编写解码器时的参考蓝本。赞分享物联网后端数据可视化消息队列【免费下载链接】thingsboardAll-in-one IoT Platform - Device management, data collection, processing and visualization.项目地址https://gitcode.com/GitHub_Trending/th/thingsboard点击查看免费下载相关推荐ThingsBoard TBEL 解码器实战结合 Integration Metadata 解析含十六进制编码字段的复杂 JSON 报文ThingsBoard TBEL 解码器实战结合 Integration Metadata 解析含十六进制编码字段的复杂 JSON 报文 本文以 Things物联网后端数据可视化消息队列ThingsBoard TBEL 解码器实战simple-metadata 示例如何将 JSON 载荷与设备元数据组合为遥测数据ThingsBoard TBEL 解码器实战simple metadata 示例如何将 JSON 载荷与设备元数据组合为遥测数据 本篇文章以 ThingsBo物联网后端数据可视化消息队列ThingsBoard JSON Payload 解码实战TBEL Uplink Converter 解析 simple-json 示例ThingsBoard JSON Payload 解码实战TBEL Uplink Converter 解析 simple json 示例 导读 本文以 Thi物联网后端数据可视化消息队列上一篇终极OBS多平台直播解决方案obs-multi-rtmp插件快速上手指南下一篇显卡驱动清理革命DDU如何为你的电脑做深度SPA创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Excel均值曲线图表:重复数据平均、误差线与动态数据源 2026/10/2 14:32:45

Excel均值曲线图表:重复数据平均、误差线与动态数据源

数据处理这活儿干久了,你会发现一个规律:单条曲线基本没法看。同一台设备连测五遍,五条线七拐八拐,你盯着屏幕半天也说不清到底哪个才是"真实趋势"。这时候大概率要请出均值曲线图表——把多组重复数据在每个采样点上取…

阅读更多 →
美团三合一系统源码架构与部署全解析:从订单表设计到实战避坑 2026/10/2 14:32:45

美团三合一系统源码架构与部署全解析:从订单表设计到实战避坑

简介:一套基于PHP开发的美团、京东、拼多多三合一代付系统源码,附带视频教程与完整搭建说明,面向需要快速搭建H5自助下单代付平台的站长、技术运维或PHP二次开发者。系统自带倒计时与代付人头像展示,前端采用移动端H5页面&#xf…

阅读更多 →
美团三合一系统源码落地指南:从开放平台接入到避坑实践 2026/10/2 14:32:45

美团三合一系统源码落地指南:从开放平台接入到避坑实践

简介:这套2026年最新发布的美团三合一源码,是一套基于PHP开发的多平台代付系统,支持美团、京东、拼多多三条代付通道,内置倒计时功能,并适配手机端H5自助下单、代付人头像展示等交互场景,适合需要搭建代付平…

阅读更多 →
连接条件下推代价模型:从设计到落地的查询优化实践 2026/10/2 14:32:45

连接条件下推代价模型:从设计到落地的查询优化实践

复杂查询跑不动,是搞数据的人最常遇到的噩梦。 一张报表SQL,10张表join,几十个过滤条件,跑一次小半个小时。业务方催得急,运维盯着CPU报警,你盯着执行计划发呆。这种时候,绝大多数人第一反应是…

阅读更多 →
微信聊天记录解析:SQLite与SQLCipher解密导出备份指南 2026/10/2 14:32:45

微信聊天记录解析:SQLite与SQLCipher解密导出备份指南

简介:面向需要管理个人微信数据的用户,这份资源提供了一套完整的微信数据库解析工具,覆盖聊天记录提取、联系人导出、群组信息获取、数据库解密、内容备份与恢复、数据挖掘等核心功能,同时也支持PC端与手机端微信数据的同步管理。…

阅读更多 →
OpenClaw 进阶:多 Agent 协作与任务编排实战——用 TaoToken 统一 Key 打通运行时 2026/10/2 14:32:39

OpenClaw 进阶:多 Agent 协作与任务编排实战——用 TaoToken 统一 Key 打通运行时

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉