毕设-解决移动端用HTTP协议从onenet平台上获取数据流的多个数据点的问题

3 篇文章 1 订阅
3 篇文章 0 订阅

onenet平台

OneNET是由中国移动打造的PaaS物联网开放平台。平台能够帮助开发者轻松实现设备接入与设备连接,快速完成产品开发部署,为智能硬件、智能家居产品提供完善的物联网解决方案。

产品信息

至于怎么创建产品我就不做过多的介绍了,我个人创建的是多协议接入的产品。在这里插入图片描述
在这个产品里面我添加了两个设备

在这里插入图片描述
kfb1是我的终端设备,使用树莓派作为终端上传数据。为什么使用树莓派呢,因为树莓派功能强大而且可以使用Python进行编程相对于C语言,可以大大缩短开发时间而且容易上手。我个人觉得使用树莓派作为终端是比较可行的。后面我会介绍一下我对树莓派的配置以及怎么获取数据和相关功能的配置文件。
下面是我的终端上传的数据展示。在数据流里面打开。
在这里插入图片描述

补充说明

相关参数的介绍
这个项目是通过调用api的方式来获取数据,使用的是http协议.由于http协议的相关文档没有详细的请求参数。于是我又参考了mqtt协议的文档。并且使用里面的参数拿到了数据。文档链接: link.
在这里插入图片描述

数据的获取

我的毕业设计包含微信小程序、h5移动端app和pc端网页。下面介绍一下移动端获取数据的方法。
官方提供了api的调用,我在微信小程序里面使用api获取的数据。`

下面介绍一下使用sdk方法来获取数据
我的移动端APP使用官方提供的sdk来获取数据流和多个数据点
官方sdk可以去onenet平台下载,我也有上传到资源里面,大家可以下载使用。
1.获取多个数据流,把数据流最新的数据点渲染到页面上

//从onenet平台获取数据
          var devicesid = '11111111111' //改成你自己的设备id
          var apikey = 'ssssssssssssssss' //改成你自己的APIkey
          var api = new OneNetApi(apikey);
          /**
           * 读取设备多个数据流
           * api.getDataStreams(设备id)
           * 如果请求成功会返回数据,请求失败会返回错误码
           * */
          api.getDataStreams(devicesid).done(function (data) {
            console.log('数据请求成功,服务器返回data为:', data);
            var tempdatas = data.data[0];//温度
            var humdatas = data.data[1];//湿度
            var luxdatas = data.data[2];//光照强度
            var tem = tempdatas.current_value
            //jQuery的方法渲染数据
            $("#temp").text('' + tem + '℃'); 
            var hum = humdatas.current_value
            $("#hum").text('' + hum + '%');
            var lux = parseInt(luxdatas.current_value)
            $("#lux").text('' + lux + 'Lux');
            //vue写法
            // vm.tem =tempdatas.current_value
            // vm.hum = humdatas.current_value
            // vm.lux = parseInt(luxdatas.current_value)
          });

2.获取单个数据流的多个数据点
获取单个数据流的多个数据点,处理数据,把数据点通过Vue组件通过图表的方式展示。

历史数据界面
这里把获取到的数据通过Vue的方法来渲染数据,折线图利用Vue的组件库 https://v-charts.js.org/#/line

      let that = this

       //从onenet平台获取数据
        var devicesid = '11111111111' //改成你自己的设备id
        var apikey =  'ssssssssssssssss' //改成你自己的APIkey
        var api = new OneNetApi(apikey);

        // 获取温度的数据节点
        api.getDataPoints(devicesid, {
        datastream_id: 'temperature',//数据流的ID
        start: '2020-10-01T08:00:35' //获取数据点开始的时间
         }).done(function (data) {
         console.log('api调用完成,服务器返回data为:', data);
         //对获取到的数据进行处理
            var temp = data.data.datastreams[0].datapoints
             for (let i in temp) {
               temp[i].at = temp[i].at.slice(5, -4); // 去掉时间,保留日期
              }
             console.log(temp);
   
             var temp1 = JSON.parse(JSON.stringify(temp).replace(/at/g, '日期')) //修改数组里面对象的属性名
             var temp2 = JSON.parse(JSON.stringify(temp1).replace(/value/g, '温度'))
             console.log(temp2[0]);
             var tempData = {
               columns: ['日期', '温度'],
               rows: temp2,
            }
            console.log(tempData);
           that.tempData = tempData
        });

总结

以上就是我毕业设计项目里面通过onenet平台获取数据的方法,我自己做这个项目的时候由于参考文献比较少所以花的时间比较多,有的方法分享出来大家一起互相学习。希望可以帮助到大家,有更好的方法或者建议请留言或私信。

  • 17
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 27
    评论
对于使用ESP8266开发板的开发者,可以使用ESP8266 SDK中提供的TCP/IP协议栈对OneNet平台数据流进行访问。以下是基本的实现步骤: 1. 在OneNet平台中创建数据流,并获取其设备ID和数据流名称。 2. 使用ESP8266 SDK中提供的TCP/IP协议栈,建立与OneNet平台的TCP连接。 3. 使用EDP协议向OneNet平台发送订阅请求,以获取数据流数据。 4. 解析OneNet平台发送的数据,并作出相应的处理。 以下是一个简单的示例代码,用于获取OneNet平台中设备ID为123456的数据流: ```c #include "ets_sys.h" #include "osapi.h" #include "user_interface.h" #include "espconn.h" #define ONE_NET_ADDR "183.230.40.39" // OneNet平台地址 #define ONE_NET_PORT 876 // OneNet平台端口 #define DEVICE_ID "123456" // 设备ID #define STREAM_NAME "data_stream" // 数据流名称 static esp_tcp conn_tcp; static espconn conn; void on_connected(void *arg) { // 连接成功后,发送订阅请求 char request[128]; os_sprintf(request, "{\"cmd\":\"%s\",\"devid\":\"%s\",\"api_key\":\"%s\"}\r\n", "subscribe", DEVICE_ID, "API_KEY"); espconn_sent(&conn, request, os_strlen(request)); } void on_received(void *arg, char *data, unsigned short len) { // 处理接收到的数据 } void on_disconnected(void *arg) { // 连接断开后,重新连接 espconn_connect(&conn); } void user_init(void) { // 初始化TCP连接 conn.type = ESPCONN_TCP; conn.state = ESPCONN_NONE; conn.proto.tcp = &conn_tcp; conn.proto.tcp->local_port = espconn_port(); conn.proto.tcp->remote_port = ONE_NET_PORT; ipaddr_aton(ONE_NET_ADDR, &conn.proto.tcp->remote_ip); // 设置回调函数 espconn_regist_connectcb(&conn, on_connected); espconn_regist_recvcb(&conn, on_received); espconn_regist_reconcb(&conn, on_disconnected); // 建立TCP连接 espconn_connect(&conn); } ``` 需要注意的是,上述代码中的API_KEY需要替换为OneNet平台中对应设备的API_KEY。同时,需要根据EDP协议的规定,处理接收到的数据

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值