树莓派上传数据到OneNet平台(基于OneNET Studio 5.0,2022最新)


前言

(OneNet平台已更新,本教程可能不适配)
(可代做树莓派与OneNet最新平台:xiaobaiwangke)

最近在帮同学解决毕设问题,接触到了onenet物联网平台,发现网上找到的都是旧版本的教程,而且官方文档给的实在是过于混乱对于新手特别不友好,于是在这里记录一下我的调试结果和思路。


一、与OneNET的第一面

首先我们进入到onenet官网https://open.iot.10086.cn/,注册登录,并点进右上角的控制台,进入到控制台页面,如下图所示
我们可以大概看到Studio的功能主要分为两大部分:我的产品,我的项目
我的产品: 指的是将物联网设备接入平台
我的项目: 对前端应用的开发
我们是要将树莓派获取到的数据上传,所以属于对我的产品进行开发
在这里插入图片描述

二、进入Studio页面

平台概览: 大家可以自行看下了解下
设备接入与管理: 重点,所有操作都是在此完成
产品:一组相同功能的设备的集合
设备:具体的设备,产品的子集,比如我的设备就是树莓派
在这里插入图片描述


三、新建产品和设备

3.1 点击产品管理–添加产品
产品名称和省市自己填就好了重点是产品类别,选择和自己要开发的接近的
节点类型直连,接入协议http,联网方式wifi,点击确定

在这里插入图片描述

3.2 现在我们进入刚创建好的产品页面查看,可以看到具体信息
这里重点看一下物模型,这里会大家选择的产品类别自动帮你生成一些物模型,简单说就是帮你定义好了一些数据名,提高开发效率,为了演示,我这里只保留一个温度的数据。

在这里插入图片描述
点击–设置物模型–批量删除,就可以删除你不需要的数据名
在这里插入图片描述
3.3 接入设备
点击左侧的设备管理—添加设备–输入设备名字,即可完成创建
点击详情,可以看到设备详情,已经自动有了温度属性,但是没有数据,接下来就是http上传数据
在这里插入图片描述


四、http接口协议探究

在这里卡了很久,对于一个新手,官网文档的体验实在是太糟糕了,根本无从下手,新版旧版的接口不同,文档中也没有标注。
这里整理了新版接口的文档,供大家参考。
.http接入简介 了解大致接入流程
https://open.iot.10086.cn/doc/iot_platform/book/device-connect&manager/HTTP/HTTP-introduce.html

.设备属性上报API(设备属性就是设备数据,比如我的温度就是我新建的树莓派设备的属性)
https://open.iot.10086.cn/doc/iot_platform/book/device-connect&manager/HTTP/api/devicePropertyNotify.html

.接入安全认证(http请求时需要在header加入token参数,这里介绍了token的生成原理)
https://open.iot.10086.cn/doc/v5/develop/detail/624

大家尽量多看看文档,看不懂的结合下一步的POST测试就能看懂了


1. 根据http简介里的说明和设备属性上报API的说明, POST的地址为

https://open.iot.10086.cn/studio/http//device/thing/property/post?topic=$sys/产品ID/设备名称/thing/property/post&protocol=http

在这里插入图片描述在这里插入图片描述
2.POST参数
参数我们直接复制官方提供的参数,自己修改
https://open.iot.10086.cn/doc/iot_platform/book/device-connect&manager/thing-model/protocol/OneJSON/property&event.html
我这里复制是上传设备属性,并且只保留了一个
注意:改好标识符,复制之前的物模型的标识符
在这里插入图片描述

{
  "id": "123",
  "version": "1.0",
  "params": {
    "CurrentTemperature": {
      "value": 23
    }
  }
}

3.header参数

有两个

Content-Type:application/json
token:version=2018-10-31&res=products%*****************

token具体是什么请参考这里 https://open.iot.10086.cn/doc/v5/develop/detail/624
官方提供了工具,输入自己的参数后可以自动生成


五、在线post测试

随便找一个在线post的网站,填入我们上一步的内容
在这里插入图片描述
返回的信息是成功了
在这里插入图片描述
我们在OneNet网页里的设备里刷新,发现已经有数据显示了
在这里插入图片描述
如果失败了可以自己排查下问题
在这里插入图片描述

六、python代码实现

既然在线post成功了,python实现就很简单了,直接附上代码

"""
@author:xiaoing
@Time:2022/4/14 10:34
@Version: v1.0
"""

import urllib.request
import json
import time
from time import sleep
# 设备名
deviceId = ""
# 产品id
product_id = ""
# 产品key
APIKey = ""
# 鉴权token详见https://open.iot.10086.cn/doc/v5/develop/detail/624
token = "version=2018-10-31&res=products%***********"

# 上传函数,调用的是设备属性API
def http_put_data(data):
    url = "https://open.iot.10086.cn/studio/http//device/thing/property/post?topic=$sys/" + \
        product_id+"/"+deviceId+"/thing/property/post&protocol=http"
    d = time.strftime('%Y-%m-%dT%H:%M:%S')
    # CurrentTemperature是物模型的标识符,数值这里直接给了固定数date
    values = {
        "id": "123",
        "version": "1.0",
        "params": {
            "CurrentTemperature": {
                "value": data
            },
            "LightLux": {
                "value": data
            }
        }
    }
    header = {"Content-Type": "application/json", "token": token}
    jdata = json.dumps(values).encode("utf-8")
    request = urllib.request.Request(url, jdata, header)
    request.get_method = lambda: 'POST'
    request = urllib.request.urlopen(request)
    return request.read()


if __name__ == '__main__':
    R = http_put_data(10)
    print(R)


总结

写的比较乱,不想研究的直接复制python代码配置参数运行就好了,可以满足上传传感器数据的需要。

我的测试结果
在这里插入图片描述

  • 13
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
非常感谢您的提问!以下是使用 Python 语言将 ESP32 数据上传OneNet 的案例及其详细讲解: 1. 首先,我们需要在 OneNet 上创建一个设备,并获取其设备 ID 和 API Key。 2. 接下来,我们需要在 ESP32 上安装 MicroPython,并使用它来编写上传数据的代码。以下是一个示例代码: ```python import urequests import ujson import network import time # 设置 Wi-Fi 连接信息 ssid = 'your_wifi_ssid' password = 'your_wifi_password' # 设置 OneNet 设备信息 device_id = 'your_device_id' api_key = 'your_api_key' # 连接 Wi-Fi sta_if = network.WLAN(network.STA_IF) sta_if.active(True) sta_if.connect(ssid, password) while not sta_if.isconnected(): time.sleep(1) # 上传数据 data = {'temperature': 25, 'humidity': 50} url = 'http://api.heclouds.com/devices/%s/datapoints' % device_id headers = {'api-key': api_key, 'Content-Type': 'application/json'} response = urequests.post(url, headers=headers, data=ujson.dumps(data)) print(response.text) ``` 3. 在代码中,我们首先设置了 Wi-Fi 连接信息和 OneNet 设备信息。然后,我们连接 Wi-Fi,并等待连接成功。最后,我们上传了一个包含温度和湿度数据的 JSON 对象到 OneNet 上。 4. 在上传数据时,我们需要使用 OneNet 的 HTTP API,并在请求头中添加 API Key。我们还需要将数据转换为 JSON 格式,并在请求体中发送。 5. 最后,我们可以在 OneNet数据流中查看上传数据,并进行相应的数据分析和处理。 希望这个案例能够帮助您实现将 ESP32 数据上传OneNet。如果您有任何问题或疑问,请随时联系我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值