ESP32温湿度数据上云后怎么办?三种方法教你用Postman、Python和Node.js调用OneNET API

张开发
2026/4/20 22:45:17 15 分钟阅读

分享文章

ESP32温湿度数据上云后怎么办?三种方法教你用Postman、Python和Node.js调用OneNET API
ESP32温湿度数据上云后的实战指南Postman、Python与Node.js调用OneNET API全解析当ESP32成功将温湿度数据上传至OneNET平台后真正的数据价值挖掘才刚刚开始。本文将深入探讨三种主流技术方案——Postman手动测试、Python自动化脚本和Node.js服务开发帮助开发者根据项目需求选择最适合的API调用方式。1. 理解OneNET北向API的核心机制在开始编码之前我们需要先了解OneNET北向API的基本工作原理。北向API是平台提供给开发者用于获取设备数据的标准接口采用RESTful风格设计支持JSON格式的数据交互。关键认证参数api-key: 平台分配的产品级密钥device_id: 目标设备的唯一标识符datastream_id: 数据流标识如temperature、humidity提示OneNET API的响应通常包含errno字段0表示成功非零值需参考官方错误码文档排查问题。API请求的典型响应结构如下{ errno: 0, data: { count: 1, datastreams: [ { id: temperature, datapoints: [ { value: 26.5, at: 2023-05-20T14:30:00 } ] } ] } }2. 使用Postman进行API快速测试Postman是API开发的瑞士军刀特别适合在项目初期进行接口验证和调试。以下是详细操作步骤环境准备下载安装Postman推荐使用桌面版准备有效的API Key和设备ID确保网络能够访问OneNET API端点api.heclouds.com请求配置方法GETURLhttp://api.heclouds.com/devices/[device_id]/datapointsHeadersapi-key: [your_api_key]Content-Type: application/json参数设置Query Paramsdatastream_id: temperature,humiitylimit: 10 获取最近10条记录start: 2023-05-01T00:00:00 可选时间范围常见问题排查表错误现象可能原因解决方案401 UnauthorizedAPI Key无效或缺失检查Headers中的api-key404 Not Found设备ID错误核对设备管理页面的准确ID400 Bad Request参数格式错误检查时间格式是否符合ISO 86013. Python自动化脚本开发对于需要定期获取数据进行分析的场景Python脚本是理想选择。我们将使用requests库实现自动化数据获取。3.1 基础请求实现import requests import json def get_onenet_data(device_id, api_key, datastreamstemperature,humidity, limit10): url fhttp://api.heclouds.com/devices/{device_id}/datapoints headers { api-key: api_key, Content-Type: application/json } params { datastream_id: datastreams, limit: limit } try: response requests.get(url, headersheaders, paramsparams) response.raise_for_status() data response.json() if data.get(errno) ! 0: raise Exception(fAPI Error: {data.get(error)}) return data[data][datastreams] except Exception as e: print(fError fetching data: {str(e)}) return None # 使用示例 if __name__ __main__: device_id your_device_id api_key your_api_key sensor_data get_onenet_data(device_id, api_key) if sensor_data: for stream in sensor_data: print(f{stream[id]}: {stream[datapoints][0][value]})3.2 高级功能扩展数据持久化将获取的数据存储到CSV文件import csv from datetime import datetime def save_to_csv(data, filenamesensor_data.csv): with open(filename, modea, newline) as file: writer csv.writer(file) for stream in data: for point in stream[datapoints]: writer.writerow([ datetime.now().isoformat(), stream[id], point[value], point.get(at, ) ])定时任务使用APScheduler实现定时采集from apscheduler.schedulers.blocking import BlockingScheduler scheduler BlockingScheduler() scheduler.scheduled_job(interval, minutes5) def scheduled_job(): data get_onenet_data(device_id, api_key) if data: save_to_csv(data) print(Data saved successfully) scheduler.start()4. 构建Node.js数据服务对于需要实时数据展示的Web应用Node.js提供了高效的解决方案。我们将使用Express框架构建RESTful API。4.1 基础服务搭建const express require(express); const axios require(axios); const app express(); const PORT 3000; const ONENET_CONFIG { baseUrl: http://api.heclouds.com, apiKey: your_api_key, deviceId: your_device_id }; app.get(/api/sensor-data, async (req, res) { try { const response await axios.get( ${ONENET_CONFIG.baseUrl}/devices/${ONENET_CONFIG.deviceId}/datapoints, { headers: { api-key: ONENET_CONFIG.apiKey, Content-Type: application/json }, params: { datastream_id: temperature,humidity, limit: 1 } } ); if (response.data.errno ! 0) { throw new Error(response.data.error); } res.json({ success: true, data: formatSensorData(response.data.data.datastreams) }); } catch (error) { res.status(500).json({ success: false, message: error.message }); } }); function formatSensorData(datastreams) { return datastreams.reduce((acc, stream) { acc[stream.id] stream.datapoints[0].value; return acc; }, {}); } app.listen(PORT, () { console.log(Server running on port ${PORT}); });4.2 添加WebSocket实时推送const WebSocket require(ws); const wss new WebSocket.Server({ port: 8080 }); wss.on(connection, (ws) { console.log(New client connected); // 定时推送数据 const interval setInterval(async () { try { const data await fetchOneNetData(); ws.send(JSON.stringify(data)); } catch (error) { console.error(Push error:, error); } }, 5000); ws.on(close, () { clearInterval(interval); console.log(Client disconnected); }); }); async function fetchOneNetData() { const response await axios.get( ${ONENET_CONFIG.baseUrl}/devices/${ONENET_CONFIG.deviceId}/datapoints, { headers: { api-key: ONENET_CONFIG.apiKey }, params: { datastream_id: temperature,humidity, limit: 1 } } ); return formatSensorData(response.data.data.datastreams); }5. 技术方案对比与选型建议不同的应用场景需要不同的技术方案下面是三种方式的详细对比特性PostmanPythonNode.js学习曲线低中中高执行方式手动触发脚本/定时任务持续服务开发速度最快快中等适合场景API调试数据分析/自动化Web应用/实时系统扩展性有限强最强维护成本低中高选型建议快速验证API选择Postman定期数据采集与分析Python脚本配合Jupyter Notebook实时监控仪表盘Node.js WebSocket 前端框架如Vue/React在实际项目中我们经常需要将温湿度数据与其他系统集成。例如当温度超过阈值时触发空调控制或者根据历史数据生成预测模型。这些高级应用都需要建立在稳定可靠的API调用基础上。

更多文章