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

OneNET云平台数据流实战:从MQTT上传到Python查询的完整链路

1. 从零开始搭建OneNET物联网数据链路第一次接触OneNET平台时我被它完整的物联网数据管理能力惊艳到了。作为一个老程序员我见过太多半吊子的物联网平台要么协议支持不全要么API设计反人类。而OneNET真正做到了从设备接入到数据消费的全链路覆盖特别适合中小型物联网项目快速落地。咱们今天要做的是用MQTT协议上传设备数据再用Python把数据查出来。听起来简单但这里面藏着不少门道。就拿倾斜角度监测这个场景来说你需要考虑设备端如何安全接入数据格式如何设计实时数据和历史数据怎么查异常情况如何处理我去年给一个农业大棚项目做过类似的倾斜监测当时传感器装在棚顶用来预警积雪过厚的情况。下面就把踩坑总结的经验手把手教给你。2. 设备接入准备产品与设备的正确打开方式2.1 创建产品的三大关键要素在OneNET控制台创建产品时新手最容易栽在协议选择上。记住一定要选MQTT数据流这个组合协议这是后续所有操作的基础。我见过有人选了HTTP协议然后死活连不上MQTT排查半天才发现是这里选错了。创建成功后这三组信息必须妥善保管产品ID相当于项目身份证设备名称建议用英文数字组合设备密钥相当于设备密码提示把这些信息保存在项目根目录的config.py里千万别硬编码到脚本中。我有次误把密钥提交到GitHub结果被恶意刷了几万条测试数据。2.2 安全鉴权的正确姿势OneNET的安全机制做得相当完善但也增加了接入复杂度。核心是要理解它的双层鉴权体系产品级keyaccess_key管理整个产品的权限设备级key设备密钥单个设备的身份凭证生成token的Python代码示例import base64 import hmac import time from urllib.parse import quote def generate_token(device_name, access_key, device_secret): version 2022-05-01 res fproducts/{access_key}/devices/{device_name} et str(int(time.time()) 3600) # 1小时后过期 method sha1 key base64.b64decode(device_secret) org et \n method \n res \n version sign_b hmac.new(key, org.encode(utf-8), digestmodmethod) sign base64.b64encode(sign_b.digest()).decode(utf-8) sign quote(sign, safe) return fversion{version}res{res}et{et}method{method}sign{sign}3. MQTT实时上传传感器数据3.1 数据格式设计的艺术上传倾斜角度数据时最容易被忽视的是数据点(datapoint)的设计。好的数据结构应该包含唯一ID我用时间戳避免重复实际测量值可选的质量标识位改进后的数据生成函数def generate_angle_data(): return { id: int(time.time() * 1000), # 毫秒级时间戳 dp: { angle_x: {v: round(random.uniform(-15.5, 15.5), 1), q: 0}, angle_y: {v: round(random.uniform(-10.0, 10.0), 1), q: 0}, battery: {v: random.randint(20, 100), q: 0} } }3.2 MQTT客户端的完整实现完整的MQTT客户端需要处理五种回调连接成功/失败订阅确认消息到达发布完成取消订阅这里有个坑OneNET的MQTT主题必须严格按格式$sys/{产品ID}/{设备名}/dp/post/json多一个少一个斜杠都会失败。我封装了个主题生成工具函数def generate_topics(product_id, device_name): base f$sys/{product_id}/{device_name} return { publish: f{base}/dp/post/json, subscribe_accept: f{base}/dp/post/json/accepted, subscribe_reject: f{base}/dp/post/json/rejected }4. 查询最新数据的实战技巧4.1 API调用的正确姿势查询最新数据时90%的错误来自headers设置。必须注意authorization要带Bearer前缀内容类型要明确指定优化后的查询函数def get_last_data(product_id, device_name, token): url https://iot-api.heclouds.com/datapoint/current-datapoints headers { Authorization: fBearer {token}, Content-Type: application/json } params { product_id: product_id, device_name: device_name } try: response requests.get(url, headersheaders, paramsparams) response.raise_for_status() return response.json() except requests.exceptions.RequestException as e: print(fAPI请求失败: {str(e)}) return None4.2 数据解析的实用技巧返回的JSON结构比较深建议用字典的get方法安全访问data get_last_data(product_id, device_name, token) if data and data.get(data): angle_x data[data].get(angle_x, {}).get(v, 0) angle_y data[data].get(angle_y, {}).get(v, 0) print(f当前X轴角度: {angle_x}°, Y轴角度: {angle_y}°)5. 查询历史数据的进阶玩法5.1 时间范围查询的坑查询历史数据时时间格式必须严格遵循ISO 8601标准。我推荐使用arrow库处理时间比datetime更友好import arrow start arrow.now().shift(hours-1).format(YYYY-MM-DDTHH:mm:ss) end arrow.now().format(YYYY-MM-DDTHH:mm:ss)5.2 大数据量分页查询当数据量超过6000条时必须使用分页查询。关键参数limit每页条数cursor分页游标改进后的历史查询def get_history_paginated(product_id, device_name, token, start, end, limit1000): url https://iot-api.heclouds.com/datapoint/history-datapoints headers {Authorization: fBearer {token}} params { product_id: product_id, device_name: device_name, start: start, end: end, limit: limit } all_data [] while True: response requests.get(url, headersheaders, paramsparams) data response.json() if not data.get(data): break all_data.extend(data[data]) if not data.get(cursor): break params[cursor] data[cursor] return all_data6. 异常处理与性能优化在实际项目中网络波动、设备离线等情况时有发生。我总结了几点经验MQTT客户端要加入断线重连机制API调用要添加retry逻辑历史数据查询要限制时间范围一个健壮的MQTT客户端应该这样改造def on_disconnect(client, userdata, rc): print(f连接断开5秒后重试... rc{rc}) time.sleep(5) client.reconnect() mqttc.on_disconnect on_disconnect对于API调用可以用tenacity库实现自动重试from tenacity import retry, stop_after_attempt, wait_exponential retry(stopstop_after_attempt(3), waitwait_exponential(multiplier1, min4, max10)) def safe_api_call(url, headers, params): response requests.get(url, headersheaders, paramsparams) response.raise_for_status() return response.json()7. 数据可视化实战拿到数据后用Matplotlib做个简单的趋势图import matplotlib.pyplot as plt import matplotlib.dates as mdates def plot_angle_history(data): timestamps [arrow.get(d[at]).datetime for d in data] angles [d[value][v] for d in data] plt.figure(figsize(12, 6)) plt.plot(timestamps, angles, b-, label倾斜角度) plt.gca().xaxis.set_major_formatter(mdates.DateFormatter(%H:%M)) plt.xlabel(时间) plt.ylabel(角度(°)) plt.title(倾斜角度变化趋势) plt.grid(True) plt.legend() plt.show()8. 项目部署建议最后给几个部署时的实用建议生产环境一定要用MQTTS端口8883token建议设置1小时有效期并定时刷新历史数据查询尽量在服务端进行重要数据要做本地缓存配置类的最佳实践class OneNETConfig: def __init__(self): self.product_id 你的产品ID self.device_name 你的设备名 self.access_key 你的access_key self.device_secret 你的设备密钥 self.mqtt_port 8883 # 生产环境用加密端口 self.api_timeout 30 # API超时设置

相关文章:

OneNET云平台数据流实战:从MQTT上传到Python查询的完整链路

1. 从零开始搭建OneNET物联网数据链路 第一次接触OneNET平台时,我被它完整的物联网数据管理能力惊艳到了。作为一个老程序员,我见过太多半吊子的物联网平台,要么协议支持不全,要么API设计反人类。而OneNET真正做到了从设备接入到数…...

Windows上的安卓应用安装革命:APK Installer如何让跨平台体验如此丝滑?

Windows上的安卓应用安装革命:APK Installer如何让跨平台体验如此丝滑? 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾为在Windows电脑…...

3步掌握APK Installer:如何在Windows上无缝运行安卓应用?

3步掌握APK Installer:如何在Windows上无缝运行安卓应用? 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否厌倦了臃肿的安卓模拟器&#x…...

Minecraft世界修复终极指南:5步拯救损坏的游戏存档

Minecraft世界修复终极指南:5步拯救损坏的游戏存档 【免费下载链接】Minecraft-Region-Fixer Python script to fix some of the problems of the Minecraft save files (region files, *.mca). 项目地址: https://gitcode.com/gh_mirrors/mi/Minecraft-Region-Fi…...

Elive新版测试版:传统桌面的创新突围

Elive新版测试版:功能革新亮点多Elive推出的新测试版带来了一系列新特性和改进。其中包括安装过程中可用的替代init系统 OpenRC;令人印象深刻的新音乐播放器 Synthwave Player;可实现免手动交互且未集成AI的极其轻量级应用程序 语音控制&…...

告别选择困难症:Rockchip Linux SDK (V1.4.0) 编译配置文件选择与切换的保姆级指南

Rockchip Linux SDK编译配置实战:从命名规则到精准选择的完整指南 当你第一次打开Rockchip Linux SDK的编译配置菜单,面对几十个看似随机的字母数字组合(比如rk3566_evb2_lp4x_v10_defconfig),是否感到无从下手&#x…...

AI编程工具崛起:重塑软件行业格局与挑战

GitHub Copilot开启AI编程辅助先河早在2021年春天,在全世界知晓“ChatGPT”之前18个月,微软就与非营利组织OpenAI合作推出了首款产品——GitHub Copilot。这是一款辅助工具,能在开发者编写代码时,尝试为他们自动补全代码片段和行。…...

如何通过USB数据线获得超稳定网络:Android有线共享的完整指南

如何通过USB数据线获得超稳定网络:Android有线共享的完整指南 【免费下载链接】HoRNDIS Android USB tethering driver for Mac OS X 项目地址: https://gitcode.com/gh_mirrors/ho/HoRNDIS 还在为不稳定的WiFi热点而烦恼吗?想要获得比蓝牙共享更…...

Qwen3-TTS-Tokenizer-12Hz惊艳效果:歌声合成中音高与音色细节保留展示

Qwen3-TTS-Tokenizer-12Hz惊艳效果:歌声合成中音高与音色细节保留展示 1. 引言:歌声合成的技术突破 你有没有遇到过这样的情况:听到一首AI生成的歌曲,旋律很美,但总觉得少了点什么?可能是声音不够自然&am…...

避坑指南:STM32G474 HRTIM配置50KHz PWM时,如何根据频率正确选择倍频系数(PrescalerRatio)

STM32G474 HRTIM配置实战:从50KHz到1MHz的PWM频率精准控制 在嵌入式系统开发中,精确的PWM控制往往是实现电机驱动、电源转换等关键功能的基础。STM32G474系列单片机搭载的高精度定时器HRTIM,以其184ps的超高时间分辨率,为开发者提…...

CAN总线物理层测试实战指南:从终端电阻到信号时序

1. CAN总线物理层测试入门指南 第一次接触CAN总线测试时,我也被各种专业术语搞得晕头转向。后来在实际项目中才发现,物理层测试就像给汽车做体检,终端电阻相当于神经系统的基础代谢率,信号时序则是神经传导速度。简单来说&#xf…...

Mac鼠标滚轮方向反了?3分钟教你用MOS实现Win式滚动(附避坑指南)

Mac鼠标滚轮方向反向?3种专业方案实现Win式滚动逻辑 刚切换到Mac的Windows用户常会遇到一个令人抓狂的问题——鼠标滚轮方向完全反了。在Windows中向下滚动滚轮时页面会向下移动,而Mac却让页面向上升。这种反直觉的操作方式源于苹果"自然滚动"…...

3个高级技巧:用ComfyUI Manager彻底改变你的AI绘画工作流

3个高级技巧:用ComfyUI Manager彻底改变你的AI绘画工作流 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various cu…...

Starward米家游戏启动器:3分钟快速上手,告别繁琐游戏管理

Starward米家游戏启动器:3分钟快速上手,告别繁琐游戏管理 【免费下载链接】Starward Game Launcher for miHoYo - 米家游戏启动器 项目地址: https://gitcode.com/gh_mirrors/st/Starward 还在为管理多个米哈游游戏而烦恼吗?每次都要打…...

7个Masa模组中文汉化包:让Minecraft说中文的终极指南

7个Masa模组中文汉化包:让Minecraft说中文的终极指南 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 还在为Minecraft中那些强大的Masa系列模组全是英文界面而头疼吗&#x…...

通达信缠论插件终极指南:3步实现专业级K线分析可视化

通达信缠论插件终极指南:3步实现专业级K线分析可视化 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 想要在通达信软件中实现专业的缠论分析吗?通达信缠论可视化分析插件正是你需…...

Python网易云音乐下载终极指南:3步轻松保存高品质音乐库

Python网易云音乐下载终极指南:3步轻松保存高品质音乐库 【免费下载链接】netease-cloud-music-dl Netease cloud music song downloader, with full ID3 metadata, eg: front cover image, artist name, album name, song title and so on. 项目地址: https://gi…...

Neat Bookmarks:终极浏览器书签管理解决方案,告别混乱找回效率

Neat Bookmarks:终极浏览器书签管理解决方案,告别混乱找回效率 【免费下载链接】neat-bookmarks A neat bookmarks tree popup extension for Chrome [DISCONTINUED] 项目地址: https://gitcode.com/gh_mirrors/ne/neat-bookmarks 你是否也曾面对…...

从零到一:OpenSPG Docker化部署全流程实战

1. 环境准备:Docker与Docker Compose安装 第一次接触OpenSPG时,我花了两天时间才把环境折腾明白。现在回头看,其实只要把Docker和Docker Compose装对版本,后面基本不会踩坑。建议直接用官方脚本安装,比手动配置省心得多…...

3分钟解锁加密音乐:Unlock Music 让你的音乐文件重获自由 [特殊字符]

3分钟解锁加密音乐:Unlock Music 让你的音乐文件重获自由 🎵 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web …...

MFC中单选框与复选框控件的实战应用与优化技巧

1. MFC单选框与复选框控件基础入门 第一次接触MFC的单选框(Radio Button)和复选框(CheckBox)时,我完全被它们的组属性搞晕了。记得当时做了个问卷调查界面,结果所有单选框都能同时选中,简直是个灾难现场。后来才发现,原来MFC的单选…...

持续交付特征工程

持续交付特征工程:数据驱动时代的敏捷引擎 在机器学习项目的生命周期中,特征工程是模型性能的关键决定因素。传统特征工程往往依赖一次性开发,难以适应快速迭代的业务需求。持续交付特征工程(Continuous Delivery for Feature En…...

GitHub 热榜项目 - 日榜(2026-04-12)

GitHub 热榜项目 - 日榜(2026-04-12) 生成于:2026-04-12 统计摘要 共发现热门项目: 13 个 榜单类型:日榜 Token赞助:siliconflow 本期热点趋势总结 本期 GitHub 热榜呈现出 AI Agent(智能体)工程化与…...

Unity PSD导入器:彻底改变游戏UI资源处理流程的智能工具

Unity PSD导入器:彻底改变游戏UI资源处理流程的智能工具 【免费下载链接】UnityPsdImporter Advanced PSD importer for Unity3D 项目地址: https://gitcode.com/gh_mirrors/un/UnityPsdImporter 你是否曾为处理复杂的Photoshop UI设计文件而烦恼&#xff1f…...

零门槛网络拓扑革命:Topology一站式可视化解决方案

零门槛网络拓扑革命:Topology一站式可视化解决方案 【免费下载链接】topology 项目地址: https://gitcode.com/gh_mirrors/top/topology 在复杂的网络环境中,你是否曾为难以理清设备连接关系而烦恼?是否因为传统绘图工具操作繁琐、无…...

internlm2-chat-1.8b在教育场景应用:自动批改作文+生成习题的AI助教落地案例

internlm2-chat-1.8b在教育场景应用:自动批改作文生成习题的AI助教落地案例 想象一下,一位语文老师深夜还在批改堆积如山的作文本,既要圈出错别字、病句,又要写评语、给建议,常常忙到深夜。另一边,数学老师…...

毕业季自救指南:用百考通AI告别论文焦虑,高效搞定学术写作

当论文截止日期步步紧逼,你是否正在经历深夜查文献、反复修改格式、为降重焦头烂额的无助时刻?或许,你需要的不仅是一杯咖啡,更是一个懂学术、更懂你的智能伙伴。 深夜两点,图书馆的灯光依然零星亮着。电脑屏幕上闪烁的…...

绿联NAS远程访问终极指南:5分钟搞定内网穿透(附SSH详细步骤)

绿联NAS远程访问实战:零基础掌握内网穿透技术 想象一下这样的场景:你正在外地出差,突然需要调取家里NAS上的一份重要文件;或是周末在咖啡馆想用手机访问公司内网的绿联NAS共享资料。传统方案需要复杂的公网IP配置和路由器端口映射…...

PyFluent:3种方法让CFD仿真效率提升200%

PyFluent:3种方法让CFD仿真效率提升200% 【免费下载链接】pyfluent Pythonic interface to Ansys Fluent 项目地址: https://gitcode.com/gh_mirrors/pyf/pyfluent 想象一下,当你的CFD仿真工作不再需要反复点击图形界面,而是通过几行P…...

LingBot-Depth实操手册:Gradio config接口解析与API文档调用方法

LingBot-Depth实操手册:Gradio config接口解析与API文档调用方法 1. 引言:从稀疏数据到精准三维 想象一下,你手头有一张普通的照片,还有一个从廉价深度传感器(比如某些手机或消费级设备)获取的深度图。这…...