当前位置: 首页 > article >正文

17 ThingsBoard网关设备-子设备数据模型实战:核心价值+完整落地指南

ThingsBoard网关设备-子设备数据模型实战核心价值完整落地指南一、任务说明1.1 场景必要性在物联网IoT/工业物联网IIoT场景中「网关设备-子设备」层级数据模型是解决异构设备批量接入、统一管理、边缘自治的核心方案相比“所有设备平级接入”模式具备不可替代的价值协议适配子设备多为Modbus/OPC UA/BLE等非标准IoT协议设备网关作为“协议翻译官”将私有协议转换为ThingsBoard支持的MQTT/HTTP协议成本优化网关可批量管理子设备一次配置、复用策略减少云端连接数和带宽消耗断网时本地缓存数据避免丢失拓扑贴合匹配真实业务层级如「车间网关→产线传感器」便于故障定位和区域数据统计权限管控基于网关做权限隔离子设备自动继承网关权限避免越权访问。1.2 核心问题与解答核心问题详细解答子设备需要在平台上添加吗无需手动添加代码运行后平台会根据上报的子设备名称自动创建并归属到对应网关下可选手动添加若需提前配置子设备标签/告警规则可手动创建需保证设备名称与代码中一致。网关配置有何不同与普通设备唯一区别创建设备时需勾选「网关设备」选项其余配置如访问令牌、产品关联完全一致网关设备具备“代表子设备上报数据”的权限普通设备无此能力。子设备和网关之间如何查看从属关系看截图一图胜千言二、任务实施2.1 添加产品与普通产品添加流程完全一致仅需填写产品名称、描述、设备类型等基础信息无特殊配置。2.2 添加网关设备进入ThingsBoard「实体→设备」→「添加新设备」填写网关设备名称如modbus-gateway-01关键配置勾选「网关设备」选项保存后复制网关的「访问令牌」后续代码配置需用到。2.3 添加子设备自动添加推荐运行网关上报代码后平台会自动创建modbus-sensor-01、modbus-sensor-02两个子设备归属到上述网关下无需手动操作手动添加可选若需提前配置子设备属性/规则可手动新建设备名称需与代码中完全一致网关上报数据时会自动关联网友可自行测试该场景。2.4 添加设备到仪表盘进入仪表盘→点击右上角「编辑」铅笔图标新增/编辑部件在「数据」选项卡配置实体选择对应子设备如modbus-sensor-01数据键选择具体字段如temperature/humidity而非整个JSON对象保存后仪表盘将显示纯数值如23.7℃而非JSON字符串核心原则部件数据键需与代码上报的字段temperature/pressure一一对应否则无法正常显示。三、任务代码importjsonimporttimeimportrandomimportpaho.mqtt.clientasmqtt# 核心配置 TB_HOST192.168.111.53TB_PORT2883GATEWAY_TOKENHP7rwxQJHgVjrPRasWgi# # 子设备列表SUB_DEVICES[{name:modbus-sensor-01,type:温湿度传感器},{name:modbus-sensor-02,type:压力传感器},]# ThingsBoard网关上报子设备数据的固定MQTT主题TB_GATEWAY_TELEMETRY_TOPICv1/gateway/telemetry# 全局变量is_connectedFalseclient_idftb-gateway-{random.randint(1000,9999)}# 固定client_id方便日志追踪defon_connect(client,userdata,flags,rc):MQTT连接回调打印详细连接信息globalis_connected# 错误码对应说明rc_desc{0:连接成功,1:协议版本错误,2:无效的客户端ID,3:服务器不可用,4:用户名/密码错误,5:未授权令牌错误,6-255:保留错误码,}connect_descrc_desc.get(rc,f未知错误码{rc})# 打印详细连接日志print(f\n{*50}MQTT 连接信息{*50})print(f 客户端ID{client_id})print(f 连接地址{TB_HOST}:{TB_PORT})print(f 网关令牌{GATEWAY_TOKEN[:8]}...完整{GATEWAY_TOKEN})print(f 连接结果错误码{rc}描述{connect_desc})ifrc0:is_connectedTrueprint(f✅ 网关已成功连接ThingsBoard MQTT服务器)else:is_connectedFalseprint(f❌ 连接失败错误码{rc}→{connect_desc})print(f{*110}\n)defon_publish(client,userdata,mid):MQTT发布成功回调打印消息IDprint(f 消息发布成功MQTT消息ID{mid})defgenerate_sub_device_data(device_type):生成子设备数据打印数据生成日志if温湿度indevice_type:data{temperature:round(random.uniform(20.0,35.0),1),humidity:round(random.uniform(40.0,80.0),1),}elif压力indevice_type:data{pressure:round(random.uniform(0.5,3.0),2)}else:data{value:random.randint(0,100)}print(f\n 生成子设备数据类型{device_type}→ 数据{data})returndatadefpublish_sub_device_data(client):构造并上报子设备数据打印全量发布日志ifnotis_connected:print(f\n⚠️ 网关尚未连接is_connected{is_connected}跳过本次上报)return# 构造上报数据telemetry_data{}fordeviceinSUB_DEVICES:device_namedevice[name]device_typedevice[type]telemetry_data[device_name][generate_sub_device_data(device_type)]# 转换为JSON字符串格式化输出方便查看payloadjson.dumps(telemetry_data,ensure_asciiFalse,indent2)# 打印发布前的详细信息print(f\n{*50}准备发布消息{*50})print(f 发布主题{TB_GATEWAY_TELEMETRY_TOPIC})print(f 消息内容格式化\n{payload})print(f 消息内容原始{json.dumps(telemetry_data,ensure_asciiFalse)})print(f 消息长度{len(payload)}字节)# 发布消息resultclient.publish(topicTB_GATEWAY_TELEMETRY_TOPIC,payloadpayload,qos1,# QoS1确保至少送达一次)# 解析发布结果publish_rc_desc{0:发布成功,1:超出消息长度限制,2:客户端未连接,3:无效的主题,4:消息被服务器拒绝,5:未知错误,}publish_descpublish_rc_desc.get(result.rc,f未知错误码{result.rc})# 打印发布结果print(f\n 发布结果)print(f - 返回码(rc){result.rc}→{publish_desc})print(f - 消息ID(mid){result.midifresult.rc0else无})print(f - QoS级别{1})print(f{*110}\n)ifresult.rc!0:print(f❌ 上报失败错误码{result.rc}→{publish_desc})else:print(f✅ 上报成功消息ID{result.mid})defmain():globalis_connected# 打印启动信息print(f\n{*60}网关脚本启动{*60})print(f 启动时间{time.strftime(%Y-%m-%d %H:%M:%S,time.localtime())})print(f 配置信息TB_HOST{TB_HOST}, TB_PORT{TB_PORT}, CLIENT_ID{client_id})print(f{*120}\n)# 创建MQTT客户端clientmqtt.Client(client_idclient_id,clean_sessionFalse)# 注册回调函数client.on_connecton_connect client.on_publishon_publish# 设置认证client.username_pw_set(usernameGATEWAY_TOKEN,password)# 打印连接前信息print(f 正在尝试连接 MQTT 服务器{TB_HOST}:{TB_PORT})# 连接MQTT服务器try:connect_resultclient.connect(TB_HOST,TB_PORT,keepalive60)print(f connect() 函数返回值{connect_result}0成功非0失败)exceptExceptionase:print(f\n❌ 连接MQTT服务器时抛出异常)print(f - 异常类型{type(e).__name__})print(f - 异常信息{str(e)})print(f 检查1.TB服务器IP是否正确 2.服务器{TB_PORT}端口是否开放 3.网关令牌是否正确)return# 启动MQTT循环非阻塞client.loop_start()print(f\n MQTT循环已启动loop_start()等待1秒确保连接完成...)time.sleep(1)# 等待连接回调执行# 循环上报数据try:print(f\n 开始循环上报子设备数据每5秒一次按CtrlC停止...\n)count0whileTrue:count1print(f\n{#*20}第{count}次上报{#*20})publish_sub_device_data(client)time.sleep(5)exceptKeyboardInterrupt:print(f\n\n 用户按下CtrlC终止程序)exceptExceptionase:print(f\n\n❌ 运行时抛出未捕获异常)print(f - 异常类型{type(e).__name__})print(f - 异常信息{str(e)})finally:print(f\n{*50}清理资源{*50})print(f 停止MQTT循环loop_stop())client.loop_stop()print(f 断开MQTT连接disconnect())client.disconnect()print(f✅ 网关已断开连接程序正常退出)print(f{*110}\n)if__name____main__:main()3.1 代码关键说明1主题规范网关上报子设备数据的固定主题v1/gateway/telemetryThingsBoard官方约定不可修改普通设备上报主题为v1/devices/me/telemetry与网关主题严格区分平台通过主题识别数据归属类型。2数据格式核心格式{子设备名称: [{字段1: 值1, 字段2: 值2}]}列表[]的作用支持批量上报同一子设备的多条历史数据如断网缓存数据单条数据也需保留列表格式错误示例{子设备名称: {字段: 值}}无列表、{子设备名称: [{values: {字段: 值}}]}多余嵌套均会导致平台解析异常。四、任务测试4.1 测试效果截图4.2 关键日志输出 准备发布消息 发布主题v1/gateway/telemetry 消息内容格式化 { modbus-sensor-01: [ { temperature: 23.7, humidity: 69.8 } ], modbus-sensor-02: [ { pressure: 1.03 } ] } 消息内容原始{modbus-sensor-01: [{temperature: 23.7, humidity: 69.8}], modbus-sensor-02: [{pressure: 1.03}]} 消息长度157 字节 发布结果 - 返回码(rc)0 → 发布成功 - 消息ID(mid)145 - QoS级别1 ✅ 上报成功消息ID145 消息发布成功MQTT消息ID1454.3 查看设备从属关系只有代码运行之后才能生成子设备因此运行代码之后就能看从属关系了注意方向否则可能看不到结果查看网关的属性可以看到关联的2个子设备查看自设备属性可以看到父设备4.4 测试验证要点连接验证日志显示「✅ 网关已成功连接ThingsBoard MQTT服务器」无连接异常发布验证「返回码(rc)0」说明数据成功发布到平台设备验证平台「设备列表」自动出现modbus-sensor-01/modbus-sensor-02归属到对应网关数据验证子设备「最新遥测数据」显示temperature/humidity/pressure字段及对应数值仪表盘正常展示纯数值。五、任务总结掌握ThingsBoard「网关-子设备」数据模型的核心价值理解其在物联网场景中的必要性完成网关设备创建、子设备自动上报、仪表盘配置全流程落地实现基于MQTT协议的网关批量上报子设备数据代码内置详细日志便于问题排查。「网关-子设备」数据模型是ThingsBoard适配工业物联网场景的核心设计通过本实战可快速落地设备批量接入与统一管理。核心要点网关需勾选「网关设备」属性、上报主题固定为v1/gateway/telemetry、数据格式为扁平键值对列表包裹。掌握该模型后可轻松应对异构设备接入、批量管理等实际业务需求。

相关文章:

17 ThingsBoard网关设备-子设备数据模型实战:核心价值+完整落地指南

ThingsBoard网关设备-子设备数据模型实战:核心价值完整落地指南 一、任务说明 1.1 场景必要性 在物联网(IoT)/工业物联网(IIoT)场景中,「网关设备-子设备」层级数据模型是解决异构设备批量接入、统一管理…...

如何用AntiMicroX解决PC游戏手柄兼容性问题:终极手柄映射工具完全指南

如何用AntiMicroX解决PC游戏手柄兼容性问题:终极手柄映射工具完全指南 【免费下载链接】antimicrox Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. 项目地址: https://gi…...

别再手动敲代码了!用FastAdmin的CRUD一键生成后台页面(附自定义模板技巧)

FastAdmin自动化开发实战:CRUD生成与模板定制全攻略 1. 为什么选择自动化生成而非手动编码? 在快节奏的开发环境中,重复编写基础CRUD代码已成为效率杀手。我曾参与过一个电商后台项目,需要为30多个数据表开发管理界面。最初团队采…...

CTF 实战必备 Hashcat 密码破解工具 零基础全套教程

HashCat密码破解工具介绍 hashcat号称世界上最快的密码破解,世界上第一个和唯一的基于GPU的规则引擎,免费多GPU(高达128个GPU),多哈希,多操作系统(Linux和Windows本地二进制文件)&a…...

别再只把JWT当登录令牌了:结合CTF案例,聊聊它在API安全与密钥管理中的那些“坑”

JWT安全实战:从CTF漏洞到企业级API防护策略 在数字化身份认证领域,JSON Web Token(JWT)早已超越简单的登录令牌角色,成为现代分布式系统的核心安全组件。但许多开发者对其认知仍停留在基础使用层面,忽视了背…...

Kali 系统 Burp Suite 安装教程 零基础轻松上手

目录 安装环境 一、Kali Linux系统信息 ​编辑 二、安装及配置 1.下载Burp Suite 2.安装 3.配置proxy代理 安装环境 主机:MacBooPro 2021 M1 Pro 系统:Ventura 13.1 虚拟机软件:Parallels Desktop 虚拟机系统:Kali Linux…...

软件工程师在智能体视觉时代的机遇(22)

重磅预告:本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容,该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...

ReTerraForged终极指南:5步打造专业级Minecraft地形生成体验

ReTerraForged终极指南:5步打造专业级Minecraft地形生成体验 【免费下载链接】ReTerraForged TerraForged for modern MC versions 项目地址: https://gitcode.com/gh_mirrors/re/ReTerraForged ReTerraForged是一款专为现代Minecraft版本设计的革命性地形生…...

ERC-1155终极指南:统一数字资产管理的未来标准

ERC-1155终极指南:统一数字资产管理的未来标准 引言 在数字资产爆炸式增长的时代,管理游戏道具、数字藏品和供应链凭证等多样化的资产,常常需要部署多个独立的智能合约,导致成本高昂且操作繁琐。有没有一种方案能“一合约统管万…...

【花雕动手做】Aily Blockly 安装 + 环境配置清单 + 避坑指南

项目情况 Aily Blockly 是 Aily Project 推出的开源、AI 驱动的硬件图形化开发 IDE,核心是用 “拖拽积木 自然语言对话 端云协同编译” 大幅降低嵌入式(ESP32/Arduino/STM32)开发门槛,兼顾新手易用与工业级工程化能力。 1、核心…...

深入解析TRC-20代币:从技术原理到生态布局,一篇文章讲透

深入解析TRC-20代币:从技术原理到生态布局,一篇文章讲透 引言 在波场(TRON)生态中,TRC-20 代币标准扮演着至关重要的角色,它不仅是承载如USDT等巨量稳定币的基石,更是连接DeFi、GameFi和NFT等…...

2026年第六届FIC全国网络空间取证大赛-初赛详细版Writeup(服务器+互联网+二进制)

2026年第六届FIC全国网络空间取证大赛-初赛详细版Writeup(服务器互联网二进制) 前言:服务器:1. 该服务器主机操作系统版本为2. 该服务器根分区硬盘的uuid号为3. 该服务器中最新的docker镜像创建时间为4. 该服务器根分区快照路径为…...

终极Android动漫播放器插件:Hanime1Plugin完全使用指南

终极Android动漫播放器插件:Hanime1Plugin完全使用指南 【免费下载链接】Hanime1Plugin Android插件(https://hanime1.me) (NSFW) 项目地址: https://gitcode.com/gh_mirrors/ha/Hanime1Plugin 想要在Android设备上获得完美的动漫观影体验吗?Hani…...

VMware虚拟机突然断网?别慌,试试这个NAT模式一键重置法(附主机WiFi适配器设置)

VMware虚拟机断网急救指南:NAT模式重置与主机适配器深度解析 从一次紧急调试说起 深夜11点23分,程序员老张正在虚拟机里调试一个即将上线的微服务接口。突然,git pull命令卡住不动,ping测试显示"Destination Host Unreachabl…...

百考通AI:以“需求导向+结构化生成”为核心,让调研工作更高效省心

在学术研究、市场调研、用户反馈收集等场景中,一份逻辑清晰、针对性强的问卷是获取有效数据的核心前提,却也让无数从业者倍感头疼:从明确调研目的到设计问题逻辑,从匹配目标受众到控制问卷长度,繁琐的流程常常耗费大量…...

给新手的保姆级教程:在VMware里一步步装好Ubuntu Server 22.04 LTS(附静态IP和SSH配置)

虚拟化环境下的Ubuntu Server 22.04 LTS全流程部署指南 对于刚接触Linux服务器运维的新手而言,在虚拟化环境中搭建Ubuntu Server是一个理想的起点。不同于物理机安装,虚拟化平台提供了可重复、隔离的实验环境,让学习者能够大胆尝试而无需担心…...

java中的进程的详细解析

JavaEE 初阶(进程) 一、操作系统 操作系统是计算机中的一个重要软件。 操作系统是一个搞管理的软件: 管理各种硬件设备给各种应用程序提供一个稳定的运行环境, 这些应用程序在运行中,即使有一个应用程序发生bug崩溃了&…...

ViGEmBus虚拟游戏控制器驱动:从入门到精通的完整指南

ViGEmBus虚拟游戏控制器驱动:从入门到精通的完整指南 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus ViGEmBus是Windows系统上强大的虚拟游戏控制…...

Linux Capabilities(能力机制)细分学习

文章目录一. 网络相关 (Network)二. 系统与内核管理 (System & Kernel)三. 进程与信号管理 (Process & Signal)四. 文件系统与存储 (Filesystem & Storage)五. 审计与安全 (Audit & Security)六. IPC (进程间通信)七 在 Docker/K8s 中使用7.1. 只赋予网络管理能…...

ViGEmBus:让Windows游戏外设兼容性不再是难题

ViGEmBus:让Windows游戏外设兼容性不再是难题 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 你是否曾经遇到过心爱的游戏手柄在Windows上无法被…...

Agent相关面试

Agent高频面试题1. 一分钟讲清楚 Agent 的定义Agent 是以大模型为推理大脑,具备感知、思考、规划、工具调用、记忆、执行迭代能力的智能体。不再是简单问答,而是能自主拆解复杂任务、自主选择工具、自主多轮推理、记忆上下文、闭环完成目标,可…...

LNMP架构拆分实战:从单机到分布式集群的演进与优化

1. 项目概述:从单机LNMP到分布式架构的必然演进如果你正在运维一个基于LNMP(Linux, Nginx, MySQL/MariaDB, PHP)架构的网站,并且发现随着用户量的增长,网站响应越来越慢,甚至偶尔出现数据库连接失败、页面加…...

QMCDecode终极指南:3步搞定QQ音乐加密文件,让音乐真正属于你

QMCDecode终极指南:3步搞定QQ音乐加密文件,让音乐真正属于你 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录…...

5分钟极速上手:bili2text - B站视频转文字终极指南

5分钟极速上手:bili2text - B站视频转文字终极指南 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 还在为B站视频内容整理而烦恼吗?想…...

Sunshine游戏串流服务器:从零部署到专家级调优的完整解决方案

Sunshine游戏串流服务器:从零部署到专家级调优的完整解决方案 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想要打造完美的游戏串流体验,却总是被复杂的配…...

智慧树刷课插件:5分钟实现自动化学习,告别繁琐手动操作

智慧树刷课插件:5分钟实现自动化学习,告别繁琐手动操作 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台枯燥的视频播放流程而烦…...

深度解析TranslucentTB运行时依赖问题的创新解决方案

深度解析TranslucentTB运行时依赖问题的创新解决方案 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB TranslucentTB是一款广受欢迎的Wind…...

别急着升级Android Studio!手把手教你降级AGP 8.3.0-alpha01到8.1.3,解决版本不兼容报错

别急着升级Android Studio!手把手教你降级AGP 8.3.0-alpha01到8.1.3,解决版本不兼容报错 接手一个Kotlin项目时,最令人头疼的莫过于刚打开就遭遇版本不兼容的红色报错。尤其当错误提示显示"项目使用了不兼容的Android Gradle插件版本(A…...

告别手动肝船!碧蓝航线自动化脚本Alas终极使用指南

告别手动肝船!碧蓝航线自动化脚本Alas终极使用指南 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 还在为碧蓝航…...

【职场】职场“贵人“的真相:他们从不随机出现,也从不无缘无故消失

职场"贵人"的真相:他们从不随机出现,也从不无缘无故消失每个在职场里走得还不错的人,回头看,都能说出一两个名字。 那个在你最迷茫的时候,把你带进了某个重要的圈子;那个在关键会议上&#xff0c…...