python实现onenet平台上传、获取数据

向onenet平台传数据

  • 代码只实现了简单的上传的功能,没有做其他的功能,比如说数据的产生什么的,所以上传的数据是直接给出的
"""
@author:wgc
@Time:2019/5/10 15:19
@Version: v1.0
"""

import urllib.request
import json
import time
from time import sleep
#设备ID
deviceId = "525627026"
APIKey = "Sda0nUGoDiV4TfgZh=S8gZLALZ0="


#上传函数
def http_put_data(data):
    url = "http://api.heclouds.com/devices/" + deviceId + '/datapoints'
    d = time.strftime('%Y-%m-%dT%H:%M:%S')

    values = {"datastreams": [ {"id": "CO2", "datapoints": [{"value": data}]}, {"id": "PM25", "datapoints": [{"value": data}]},
                               {"id": "PM10", "datapoints": [{"value": data}]},{"id": "VOC", "datapoints": [{"value": data}]} ]}

    jdata = json.dumps(values).encode("utf-8")
    request = urllib.request.Request(url, jdata)
    request.add_header('api-key', APIKey)
    request.get_method = lambda: 'POST'
    request = urllib.request.urlopen(request)
    return request.read()


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

  • 效果

在这里插入图片描述
这个返回结果也只是直接把平台自定义的返回输出一下,这个结果就表明已经成功了,如果上传出错,他会告诉我们错误的个数及提示错误

  • 平台上的效果
    在这里插入图片描述

--------------------------2021-4-17更新部分-------------------

onenet平台查看数据

1、登陆onenet平台 --> 控制台
链接:https://open.iot.10086.cn/
在这里插入图片描述

2、进入设备管理:鼠标滑到’全部产品服务‘那里 --> 增值服务 --> 设备管理DMP在这里插入图片描述
3、查看数据
1)通过设备概览查看数据量(可以用来检测是否上传成功)
在这里插入图片描述

在这里插入图片描述
这里只能看到数据数看不到具体的数值,可以通过2)看到具体数据。
2)查看具体数值
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果不断地传输数据就可以看到实时动态,这个我应该是做了,后面整理好可以分享出来。
--------------------------更新部分到这里结束------------------

从平台上获取数据

  • 源码
"""
@author:wgc
@Time:2019/5/9 13:55
@Version: v1.0
"""

import requests
import json

#设备ID
deviceId = "525627026"
APIKey = "Sda0nUGoDiV4TfgZh=S8gZLALZ0="

# 基本设置
url = "http://api.heclouds.com/devices/"+deviceId+"/datastreams"
headers = {'api-key': APIKey}

# 获得结果并打印
r = requests.get(url, headers=headers)
t: str = r.text


#print(t)
params = json.loads(t)
#上面这个语句是将我们获得的内容转成数据字典,这样转是因为我们接收到的内容具有数据字典的形式
#转换成数据字典利于我们后面的操作
#print params['error'][]


#print(type(params))
#如果执行上面这条语句我们可以看到返回的结果是dict,也就是我们已经成功转换


x = params['data']
#这个语句是从数据转换后的数据字典中获取我们需要的数据,从结果上看params是一个list
#在data前面的都只是一些描述内容,参考教程:https://blog.csdn.net/zhiaicq_r/article/details/79278530


print('环境参数'+'\t\t\t\t'+'更新时间'+'\t\t\t\t\t'+'数值')
#接下来是获取不同的数据流
for index,values in enumerate(x):
    #只需要更新时间,id和值,所以这里对获得的数据字典做一下更改
    #print(values)
    #这里得到的values也是一个数据字典

    #因为在onenet那边对这些数据没有给出来,而且也没有意义,所以我们就不在这里显示,因此现将其删除
    del values['unit']
    del values['unit_symbol']
    del values['create_time']

    #print(values.items())


    #print(values['update_at'])
    #这里不知道为什么直接使用values.get('update_at','')和values.get('current_value','')
    #或者用values['update_at']和values['current_value']报:KeyError错误,而且if里面的那条语句会执行
    #所以我们通过get方法解决,其中要注意的是,如果没有给定第二个参数,那么默认输出NONE
    a= str(values.get('update_at',''))
    b= str(values.get('current_value',''))

    #因为如果有更新时间就会有相应最新的值,所以这里只用其中一个作为判断条件
    if (a != ""):
        if (values['id'] == 'PM25' or values['id'] == 'PM10' ):
            print(str(values['id']) + '\t\t\t' + a + '\t\t\t' + b)
        else:
            print(str(values['id']) + '\t\t\t\t' + a + '\t\t\t'+ b)
    else:
        if(values['id'] == 'VOC' or values['id'] == 'VOC'):

           print(values['id']+ '\t\t\t' +'目前还没有收到任何数据')
        else:
           print(values['id'] + '\t\t' + '目前还没有收到任何数据')
  • 效果

在这里插入图片描述

  • 说明

    这里得到的数据是经过处理的,如果不处理的话,会包含一些没有没有用的数据,不便于我们看,而且这样 分割之后我们好引用。从平台上获取到的是一个json的格式,里面是数据字典和列表的嵌套,用python的话很 轻松就搞定了

总结

不管是数据的上传还是下载,其实都挺简单的,代码的可移植性也很高,只要改了设备ID和APIKey就能用在别的设备上,所以只要我们大概了解一下协议怎么封装数据,以及自己设备的ID和PAIKey就可以了,对于onenet的使用,平台上都有很详细的解释,这个还挺友好的

评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值