虚拟机Ubantu连接ONENET平台上传数据与错误问题汇总

张开发
2026/5/31 9:25:00 15 分钟阅读
虚拟机Ubantu连接ONENET平台上传数据与错误问题汇总
1.安装UBANTU与虚拟机可以看我的前面的文章2.基础的ONENET操作我看的下面这篇文章做的或者B站有视频讲解需要注意一点在产品开发时注意选数据流。看下面这一篇照着设置先用这个mqtt.fx激活设备后在进行我们的虚拟机程序触发。使用MQTT.fx接入新版ONENet(24.4.8)_mqtt.fx 最新版本-CSDN博客3.基础的代码逻辑是通过唯一一篇说的详细还不收费的这个哥们的文章里搞懂的Python使用MQTT连接新版ONENet_python onenet-CSDN博客4.具体代码import paho.mqtt.client as mqtt from paho.mqtt.client import MQTTv311 import json import base64 import hmac import time from urllib.parse import quote # 服务器信息 ServerUrl mqtts.heclouds.com # 服务器URL ServerPort 1883 # 服务器端口 DeviceName sssrgovan # 设备ID Productid dsdsd4sxgl # 产品ID accesskey sdddddddddddddddddddddddddddddd # 密钥 # 发布的topic Pub_topic1 $sys/ Productid / DeviceName /dp/post/json # 需要订阅的topic Sub_topic1 $sys/ Productid / DeviceName /dp/post/json/accepted Sub_topic2 $sys/ Productid / DeviceName /dp/post/json/rejected # 测试用JSON数据格式上传5个不同的数据量 data { id: 123, dp: { acceleration: [{v: 22.1}], orientation: [{v: 61.2}], position: [{v: 10.5}], # 新增数据点 speed: [{v: 20.5}], speed_normalized: [{v: 30.5}] } } jsonstr json.dumps(data) # 认证token生成函数 def get_token(id, access_key): version 2018-10-31 res products/ Productid /devices/ DeviceName et str(int(time.time()) 36000000) method sha1 key base64.b64decode(access_key) org et \n method \n res \n version sign_b hmac.new(keykey, msgorg.encode(), digestmodmethod) sign base64.b64encode(sign_b.digest()).decode() sign quote(sign, safe) res quote(res, safe) token version%sres%set%smethod%ssign%s % (version, res, et, method, sign) return token # 当客户端收到来自服务器的CONNACK响应时的回调 def on_connect(client, userdata, flags, reason_code, properties): if reason_code.is_failure: print(f连接失败错误码{reason_code}) # 尝试重连 time.sleep(5) client.reconnect() else: print(f连接成功返回码{reason_code}) # 连接成功后就订阅topic client.subscribe(Sub_topic1) client.subscribe(Sub_topic2) # 从服务器接收发布消息时的回调 def on_message(client, userdata, message): print(f收到服务器反馈{message.topic} {str(message.payload, utf-8)}) # 当消息已经被发送给中间人on_publish()回调将会被触发 def on_publish(client, userdata, mid): print(f消息发布成功消息ID{mid}) # 当客户端成功订阅主题时的回调 def on_subscribe(client, userdata, mid, reason_code_list, properties): if reason_code_list[0].is_failure: print(f订阅失败错误码{reason_code_list[0]}) else: print(f订阅成功QoS{reason_code_list[0].value}) # 当客户端成功取消订阅主题时的回调 def on_unsubscribe(client, userdata, mid, reason_code_list, properties): if len(reason_code_list) 0 or not reason_code_list[0].is_failure: print(取消订阅成功) else: print(f取消订阅失败错误码{reason_code_list[0]}) client.disconnect() # 主函数 def main(): # 生成认证token passw get_token(DeviceName, accesskey) print(生成的token:, passw) # 初始化MQTT客户端 mqttc mqtt.Client(client_idDeviceName, protocolMQTTv311) mqttc.on_connect on_connect mqttc.on_message on_message mqttc.on_publish on_publish mqttc.on_subscribe on_subscribe mqttc.on_unsubscribe on_unsubscribe # 设置设备认证信息 mqttc.username_pw_set(usernameProductid, passwordpassw) # 连接到OneNET平台 print(开始连接到服务器) mqttc.connect(ServerUrl, portServerPort, keepalive120) # 启动网络循环 mqttc.loop_start() try: for _ in range(5): # 发送5次数据 # 发布数据到OneNET平台使用 QoS 0 mqttc.publish(Pub_topic1, jsonstr, qos0) print(数据发布成功) time.sleep(5) # 每5秒发送一次数据 except KeyboardInterrupt: print(程序被手动终止) finally: print(正在断开连接...) mqttc.disconnect() if __name__ __main__: main()其中里面的# 服务器信息 ServerUrl mqtts.heclouds.com # 服务器URL ServerPort 1883 # 服务器端口 DeviceName sssrgovan # 设备ID Productid dsdsd4sxgl # 产品ID accesskey sdddddddddddddddddddddddddddddd # 密钥改成自己的看不懂的看。Python使用MQTT连接新版ONENet_python onenet-CSDN博客5.遇到的问题(1)虚拟机一直连接不成功。解决方法把网络连接方法改成桥接模式2如果操作1让wifi不见了或者网络没了包括其他情况下ubantu的wifi 或者网络搞没了。看https://blog.csdn.net/yt09281102/article/details/147784905?spm1001.2014.3001.55023一直连接不上ONENET平台或者说一直无法在线确认目标服务器的 IP 地址是否正确可以尝试通过域名解析来获取 IP 地址使用nslookup或ping命令解析域名nslookup mqtts.heclouds.com如果出现meav) tuonijiaweisi:~/桌面/gym-duckietown/demo$ nslookup mqtts.heclouds.com Server: 127.0.0.53 Address: 127.0.0.53#53 Non-authoritative answer: mqtts.heclouds.com canonical name mqtts.heclouds.com.cmegtm.cn. Name: mqtts.heclouds.com.cmegtm.cn Address: 183.230.40.96 Name: mqtts.heclouds.com.cmegtm.cn Address: 218.201.45.2 Name: mqtts.heclouds.com.cmegtm.cn Address: 2409:8060:8ea:601::13:7c64那么说明你的代码里从nslookup的结果来看mqtts.heclouds.com的 IP 地址解析结果为多个 IP 地址包括 IPv4 和 IPv6 地址。这表明该域名可能对应多个服务器节点用于负载均衡或高可用性配置。为了确定正确的 IP 地址你可以尝试以下步骤尝试使用其他 IP 地址连接从nslookup的结果中可以看到多个 IPv4 地址183.230.40.96218.201.45.2你可以尝试使用这些 IP 地址代替之前的183.230.40.39来连接到 OneNET 平台。修改代码中的ServerUrl为其中一个 IP 地址然后重新运行程序。例如ServerUrl 183.230.40.96使用域名而非 IP 地址连接由于mqtts.heclouds.com对应多个 IP 地址使用域名连接可以让 DNS 解析自动选择可用的服务器节点。修改代码中的ServerUrl为域名ServerUrl mqtts.heclouds.com4如果在线了你的数据格式也是对的就是不出来数据刷新就把你的里面的和你的数据名称一样的删除后重新构建就可以了。不要设置单位。当前记住的就这些因为在做毕业设计我现在已经完成了数据传输大家有问题留言看到有时间我会回复。

更多文章