资讯详情

OneNET数据下发到WxBit(MQTTM通信)

📅 2026/10/28 2:03:44 | 华诺云谱 👁 阅读
OneNET数据下发到WxBit(MQTTM通信)
目录一、OneNET和WxBit联合开发最终效果展示WxBit页面设置WxBit积木搭建主题订阅二、消息可靠性级别 MQTT 的 QoS服务质量三个级别对比0、1、2三、变量四、键Key五、字典Dict六、JSON一、OneNET和WxBit联合开发最终效果展示WxBit能够成功连上OneNET云平台同时OneNET云平台能够下发数据到app上先在WxBit上进行MQTT连接连接成功和订阅后在OneNET云平台上设置数据下发来模拟传感器上传的数据结果数据下发正常app上显示下发的数据OneNET云平台下发数据app接收到的数据调试信息最能直观看到云平台返回了什么返回的具体数据格式好后续调整代码和模块WxBit页面设置详解1、先分清你用的是哪个版本的 OneNET版本服务器 URI新版物联网平台 / 物模型现在新注册的都是这个tcp://studio-mqtt.heclouds.com:1883旧版多协议接入 → MQTT 套件tcp://mqtt.heclouds.com:18832、新版 OneNET 属性填写推荐WxBit 属性填什么从哪获取服务器 URItcp://studio-mqtt.heclouds.com:1883固定客户端标识设备名称 如MQTT_testOneNET 控制台 → 设备详情用户名称产品 ID 如8Du5E4QO5kOneNET 控制台 → 产品详情密码Token用密钥计算不是填 key 本身需用脚本生成见下文是否自动重连勾选—其余超时项默认—注意密码不是设备密钥 Key而是用 Key 算出来的一串 Token且有过期时间。时间戳弄大点最好布局WxBit积木搭建组件MQTT客户端1设置好后能够连接上OneNET云平台订阅主题OneNET设备属性下发目前app上报数据还有点问题上传修改不了对应传感器数据这个post还是有点难搞头疼主题订阅详细主题情况请看下面文档说明读一下就大概明白了通信主题_开发者文档_OneNETTopic概念物联网平台中服务端和设备端通过通信主题Topic实现消息通信设备可以通过发布消息到系统 topic 调用服务接口也可以订阅系统 topic 用于接收服务消息通知服务提供的系统 topic 见Topic列表。Topic列表物联网平台预定义物模型通信Topic各物模型功能Topic消息的数据格式见OneJSON数据格式。 Topic类以正斜线/进行分层区分每个类目。其中有两个类目为既定类目${pid}表示产品的产品id${device-name}表示设备名称${identifier}表示服务标识符$sys/8Du5E4QO5k/MQTT_test/thing/property/setOneNET 不为每个属性建独立主题所有属性共用固定的主题靠消息内容里的标识符区分$sys/8Du5E4QO5k/MQTT_test/thing/property/set是 OneNET 平台按 产品 设备 功能 动作 四级拼出来的固定收件地址含义是平台 → 产品 8Du5E4QO5k 里的设备 MQTT_test下发属性设置指令。你的手机订阅它就相当于告诉平台 开关控制指令请发到这个地址我来接收。为什么不能只订阅kaiguan因为kaiguan是你在物模型里定义的属性标识符它走的是消息内容JSON 的params字段不是主题名set主题可以承载该设备的所有属性设置开关、阈值、使能位都从这一个主题下发靠 JSON 里的标识符区分。二、消息可靠性级别 MQTT 的 QoS服务质量消息可靠性级别”就是 MQTT 里的 QoSQuality of Service服务质量等级这是 MQTT 协议规定的消息送达保证等级订阅块里填的数字代表你希望平台以什么级别把消息推给你。只有 0、1、2 三个值不是越大越好而是可靠性越高、速度越慢、流量开销越大。三个级别对比0、1、2值名称通俗解释传输机制适用场景0最多一次发出去就不管了设备/平台发完即忘不等待对方确认不重发高频温湿度上报丢一条无所谓1至少一次保证你能收到但可能收到重复的对方没回收到就一直重发直到确认开关控制、报警等重要指令2恰好一次保证收到且只收到一次四次握手来回确认最复杂最慢、流量最大计费、扣费类绝不能重复的业务图示QoS 0 的优点- **最快**没有等确认的往返时间延迟最低- **最省**报文少、内存占用小ESP32 这种小设备友好- **不阻塞**不会因为某条消息没确认而堵住后面的消息丢一条也不心疼的场景它就最合适**每秒一次的温湿度上报、心跳包、实时位置轨迹**——反正下一秒还有新数据旧数据丢了无所谓。QoS 0 的坑这才要注意的1. **消息可能凭空消失**。网络抖一下、Wi-Fi 断一下、broker 重启消息就没了而且没有任何报错提示给你。2. **离线期间的消息直接丢弃**。如果订阅方当时不在线QoS 0 的消息不会排队等你上线QoS 1/2 配合持久会话才会。3. **控制指令千万别用 0**。开灯、开锁、继电器这类命令丢了就是事故——你手机上按了开设备没反应而 App 显示已发送。4. **发布端和订阅端会取小**。这是最容易忽略的一条你发布时设 QoS 1但订阅时设了 QoS 0实际交付按 **0** 走。想可靠两边都得设成 1。为什么建议你填 0毕设演示网络环境一般QoS 0 最轻量、延迟最低OneNET 平台下发的属性设置本身就常用 0~1 级别你填 0 完全够用填 1 会引入重复消息——WxBit 图形化客户端没有现成的去重积木收到两条一模一样的开关指令反而要自己判断。两个补充知识点实际投递级别取发布端和订阅端的较小值比如平台用 QoS 2 发布你订阅填 0实际就按 QoS 0 投递。所以你填 0 不会把更可靠的消息降级到丢消息——它只是告诉平台我这边最高只接受到这个程度。什么时候改成 1如果你的开关指令很关键比如控制老人家里的电器通断要求不能丢把这个数字槽直接改成1即可积木其他地方不用动。OneNET 控制台属性下发一般能配合到 1 级。另外补一句QoS 2 看着最完美但四段握手代价大绝大多数物联网平台OneNET 也一样对系统主题只支持 0 和 1**实际项目里 QoS 1 是性价比最高的选择**。真正关键的命令与其依赖 QoS 2不如在应用层自己加一层收到请回复的业务确认可控得多。简单记0 像发短信不管对方看没看1 像打电话不接通就重打可能打两遍2 像挂号信签字回执最稳但最慢。控制类用 1。三、变量是什么变量是程序里存数据的容器有名字、有内容内容可以随时改。比如变量就是一个贴了标签的盒子盒子上的标签 变量名如DHT11、kaiguan盒子里的东西 变量值如26、true三个要点变量名自己起要见名知意比如用 DHT11 表示温湿度变量值可以反复修改新值覆盖旧值变量类型盒子里放的是什么——数字、文字、真假、还是字典。全局变量 vs 局部变量全局变量局部变量比喻客厅的公共柜子谁都能开你书包里的笔袋只自己用谁能访问整个 APP 所有按钮、所有事件都能读写只在某个事件/函数内部有效生命周期APP 不关它一直在事件执行完就销毁在我的积木里我拖的创建全局变量 Attribute 为 、创建全局变量 DHT11 为 就是在建三个盒子并先放空设置全局变量 DHT11 为 26 往盒子里放 26积木里直接用DHT11这个小方块 取出盒子里的东西。四、键Key是什么键是字典里每一条数据的名字用来从字典里找到对应内容。比如像查新华字典你要找苹果这个词苹果就是键翻到的那一页解释就是值。四个特点同一个字典里键不能重复否则分不清取哪个键一般是文字字符串键和值成对出现不能单独存在报出键名就能查到值这个动作叫查找。{id:15,version:1.0,params:{DHT11:26,kaiguan:true}}在上面数据里id、version、params、DHT11、kaiguan都是键。在我积木里在字典中查找键 params 报出 params 这个名字并取出它的内容查找键 DHT11 取出 26。注意键名必须和平台一字不差大小写也要一致DHT11不能写成dht11找不到时你积木里设置的就是返回未找到。五、字典Dict是什么字典是一种用键值对存数据的结构一组成对的名字→内容。 名字内容比如字典是一个档案袋里面不是装一个东西而是装好多条名字→内容的记录就像通讯录名字键→ 电话号码值。长相{ DHT11: 26, kaiguan: true }四个特点数据成对出现键唯一值可以重复不用按顺序翻直接按键查很快值可以是另一个字典嵌套。在我积木里JSON转为字典把收到的文字变成能操作的档案袋字典转JSON把档案袋变回文字上报时用你的Attribute变量里装的就是一个字典。{id:15,version:1.0,params:{DHT11:26,kaiguan:true}}嵌套重点理解你数据里params这条它的内容又是一个{}档案袋所以要先取出 params 这个档案袋再从里面找 DHT11——这就是档案袋里装着小档案袋。这串数据里params这个键 的 值本身又是一个字典里面那个就是 子字典六、JSON是什么JSON 是一种用文字表示数据的标准格式专门用来在网络上传输数据。比如字典是程序内部的档案袋只能在 APP 里用JSON 是把档案袋内容抄成标准格式的纸条这样才能通过网络寄出去就像寄快递东西要打包成标准包裹才能运输。书写规则大括号{}表示一个字典键必须用双引号包起来DHT11键和值之间用冒号DHT11: 26不同条目之间用逗号值的写法文字加引号id: 15数字不加引号DHT11: 26真假不加引号kaiguan: true逐段读你收到的 JSON{id:15,version:1.0,params:{DHT11:26,kaiguan:true}}部分键值类型外层id15文字外层version1.0文字外层params一个{}字典params里DHT1126数字params里kaiguantrue真假为什么必须转字典JSON在网络上只是一串文字程序没法直接按键查值必须先JSON转字典解析后才能查上报时反过来把字典转成 JSON 再发布。常见错误用了中文的引号、漏逗号、漏大括号、数字加了引号就变成文字不能计算。四者关系一句话串起来数据在 APP 里 → 用【变量】装 变量里可以装【字典】成对的名字和内容 字典里每条数据 【键】(名字) 值(内容) 数据要上网传输 → 把字典写成【JSON】文字 收到 JSON → 转回字典 → 报键名取出值最通俗的记法变量是盒子字典是里面装名字→内容的档案袋键是每条的名字值是对应名字的内容JSON 是档案袋寄出去时的标准纸条写法。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑