OneNet 平台HTTP上报与获取设备数据

本文介绍如何使用Python脚本通过HTTP方式与OneNet平台进行数据交互,包括数据上报和获取的方法。首先需要完成平台注册及设备创建等准备工作,然后通过Python脚本实现数据流的上报与读取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OneNet 平台HTTP上报与获取设备数据

@date:2017-03-24

事前准备

最近在看一些相关的物联网平台,中移动的onenet平台成为了首选,其中开放的接口比较明了,虽说现在的功能还比较简单,设备接入、数据上报与获取、触发应用及实时展现数据流功能。
- 访问ONENET平台http://open.iot.10086.cn/,进入右上角开发者中心,注册用户并登陆
- 根据文档中心http://open.iot.10086.cn/doc/art243.html#66,创建产品
- 创建设备
- 创建数据流
- 准备一台可以访问外网的机器,在该机器上安装python2.7版本,这里主要是想利用python脚本模拟设备的行为

调测

前面事前准备的步骤可根据开发者文档详细操作,调测目的是想验证HTTP设备是否可以接入平台,上报与获取相关数据。来吧,这里注意下python的版本问题,2与3版本API用法还是相差很大的。
HTTP方式,不论上报还是获取,data内容均为JSON格式。

上报数据

不说了,上代码

import urllib2
import json
import time
from time import sleep

DEVICE_ID='50479xx'
API_KEY='mNdiaXJ=1Nzdr57x8owelKi0QIs='

#添加代理
def http_proxy_handle():
    proxy_handler = urllib2.ProxyHandler({'http':'10.10.100.188:3328'})
    opener = urllib2.build_opener(proxy_handler)
    urllib2.install_opener(opener)
    return

def http_put_data(data):
    url='http://api.heclouds.com/devices/'+DEVICE_ID+'/datapoints'
    d = time.strftime('%Y-%m-%dT%H:%M:%S')
    values={'datastreams':[{"id":"temperature","datapoints":[{"at":d,"value":data}]}]}
    jdata = json.dumps(values)                  # 对数据进行JSON格式化编码
    print jdata
    request = urllib2.Request(url, jdata)
    request.add_header('api-key', API_KEY)
    request.get_method = lambda:'POST'           # 设置HTTP的访问方式
    request = urllib2.urlopen(request)
    return request.read()

http_proxy_handle()
rsp = http_put_data(30)
print rsp

执行结果如下

{"errno":0,"error":"succ"}

这里你可以在平台WEB界面中设备的数据展示中查看到己上报数据。

获取数据

获取数据是设备从平台获取己上报的数据,其代码如下

# get sensor data
def http_get_data():
        url='http://api.heclouds.com/devices/'+DEVICE_ID+'/datapoints'
        request = urllib2.Request(url)
        request.add_header('api-key',API_KEY)
        request.get_method = lambda:'GET'           # 设置HTTP的访问方式
        request = urllib2.urlopen(request)
        return request.read()

执行结果如下

{
    "errno": 0,
    "data": {
        "count": 2,
        "datastreams": [
            {
                "datapoints": [
                    {
                        "at": "2017-03-24 12:24:50.000",
                        "value": 20
                    }
                ],
                "id": "img"
            },
            {
                "datapoints": [
                    {
                        "at": "2017-03-24 13:36:34.000",
                        "value": 20
                    }
                ],
                "id": "temperature"
            }
        ]
    },
    "error": "succ"
}
OneNet平台是中国移动物联网开放平台,它支持多种协议,包括HTTP、MQTT等,用于设备数据上报。STM32是一款广泛使用的ARM Cortex-M微控制器系列,适用于各种嵌入式系统。 当使用STM32向OneNet平台上报事件时,通常需要构造HTTP请求或者使用MQTT协议,通过网络模块发送数据OneNet服务器。这里提供一个简化的HTTP POST请求函数示例,用于上报数据: ```c #include "net.h" // 假设你的系统中有一个网络库的头文件 #include "http.h" // 假设你的系统中有一个HTTP库的头文件 // 假设OneNet平台的API接口为 http://api.heclouds.com/devices/{device_id}/datapoints #define ONENET_API_URL "http://api.heclouds.com/devices/%s/datapoints" #define USER_AGENT "STM32-HTTP-Client/1.0" // 定义用户代理字符串 // 函数用于上报设备数据OneNet平台 int one_net_data_post(char* device_id, char* json_data) { int ret = 0; char url[100]; // 存储完整的URL // 构造完整的URL snprintf(url, sizeof(url), ONENET_API_URL, device_id); // 发送HTTP POST请求 ret = http_post(url, json_data, strlen(json_data), "application/json", NULL, 0, USER_AGENT); // 判断返回值,根据实际情况处理错误 if (ret != 0) { // 处理错误 } return ret; } // 以下是如何调用上面定义的函数 int main(void) { // 假设你的设备ID和数据如下 char device_id[] = "your_device_id"; char json_data[] = "{\"datastreams\":[{\"id\":\"temperature\",\"datapoints\":[{\"value\":25.5}]}]}"; // 上报数据 one_net_data_post(device_id, json_data); // 其他逻辑... return 0; } ``` 请注意,这个示例是高度抽象的,实际应用中需要根据你所使用的网络库和HTTP库的具体API来实现。在真实的STM32项目中,你可能需要配置网络接口,处理网络连接,以及编写更完善的错误处理逻辑。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值