前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OneNet数据可视化View页面上的数据过滤器使用介绍

OneNet数据可视化View页面上的数据过滤器使用介绍

作者头像
DS小龙哥
发布2022-11-17 16:22:52
1.7K0
发布2022-11-17 16:22:52
举报

一、OneNET View 介绍

代码语言:javascript
复制
OneNET View 3.0 全新上线,快捷、易用的数字孪生底座,助力行业应用场景开发。支持3D场景搭建嵌入,2D/3D组件互调、提供海量组件/模型。
全新上线数据集功能,基于 MySQL 5.X 和 MySQL 8.X 数据库,可视化建立表关联、过滤条件,实现数据建模,更快速打通大屏与数据库。

一、产品能力
拖拽式编辑 
免编程、10分钟可快速搭建应用界面。
多数据源对接
支持OneNET内置数据、第三方数据库、Excel静态文件多种数据源。
数据建模
全新上线数据集功能,基于 MySQL 5.X 和 MySQL 8.X 数据库,拖拽建立表关联等功能实现数据建模,快速打通大屏与数据库。
3D数字孪生
全新3D引擎,提供海量行业属性模型场景搭建,一键嵌入2D项目。
行业组件调用
物联网行业可视化模板,3D组件拓展包,5G专网应用。
数据过滤
可通过代码编辑器对数据进行快速过滤筛选或逻辑加工。
    
    
二、产品优势
丰富的组件
提供多种地图、表盘、图表等不同分类的2D/3D组件,总数超过500个(注* 行业拓展包需另购)。
数据无缝对接
免编程、免运维,10分钟快速生成物联网展示应用。
快速应用开发/部署
拖拽式编辑、10分钟快速完成展示应用搭建;灵活部署方式,支持轻量化大屏部署。
2D/3D组件互调
可在3D场景内调用2D面板组件(组合),亦可在2D编辑器中一键嵌入3D场景,灵活应用。

二、场景介绍

在使用onenet物联网平台时,会通过设备上传数据到平台,然后设计界面进行展示。

界面上的控件显示数据都需要指定数据源。 一个数据源对应对应一个设备的数据点。

一个数据点可以传一个值,也可以传多个值。 如果传递多个值,就需要使用过滤器进行拆解,提取本次需要的数据进行显示,不同的控件就提取不同的数据显示,各取所需,下面就介绍这个过滤器如何实现。

image-20221102112608464
image-20221102112608464

三、数据过滤器使用

3.1 帮助文档

官网的帮助文档地址:https://open.iot.10086.cn/doc/v5/develop/detail/355

image-20221102113132617
image-20221102113132617

3.2 数据源模板

第一步要先创建数据源模板,然后再使用数据源模板创建数据模型。

image-20221102113244999
image-20221102113244999

3.3 可视化页面

可视化页面设置控件的数据源。

image-20221102113413328
image-20221102113413328
image-20221102113433475
image-20221102113433475

这是创建好的数据源:

image-20221102113454533
image-20221102113454533

当设备上传数据之后,可以在这里看到源数据:

image-20221102113538269
image-20221102113538269

而过滤器的作用就是,从这个JSON数据里提取需要的数据进行显示。

3.4 案例1:显示数据上报时间

需求: 设备连接上云端之后会不间断的上报温度数据,我想在界面上显示最新一次温度数据上报时间,怎么办?

通过看数据源得知,温度节点上传数据源格式如下:

代码语言:javascript
复制
{ "data": [ { "update_at": "2022-11-01 22:53:00", "unit": "摄氏度", "id": "temp", "unit_symbol": "℃", "current_value": 22.1, "at": "2022-11-01 22:53:00", "value": 22.1 } ], "type": "OneNET", "rate": 5, "nums": 1, "name": "temp1_OCix", "authType": "secure", "apiKey": "LuUNWqtlwSHtwKW590zPlQ+IiEl6TZiEuk7jc6Vyym0=", "productId": "551886", "devId": "1009326949", "vDevId": "", "dsId": "temp", "vDsId": "", "protocol": "HTTP", "id": "temp1_OCix", "fields": [], "refreshing": false }

想要得到里面的时间,也就是update_at 字段。

那么过滤器代码就这样写:

代码语言:javascript
复制
return [{
    "value": "数据上报时间:" + data[0].update_at
}]

在可视化页面上,拖拽一个文本控件,然后点击文本控件,在右边设置数据源:(具体完成过程,看下面截图里的序号)

image-20221102114003674
image-20221102114003674

设置好保存之后,点击上面的数据处理结果,验证下过滤器返回的数据格式是不是自己想要的。

image-20221102114117928
image-20221102114117928

处理结果如下: 这个是正确的。

image-20221102114130471
image-20221102114130471

这个格式怎么判断是否是正确的?

首先,拖一个新文本控件到界面上时,可以看到这个文本控件本身就有数据,这个数据是能显示的,那么这个时候,就可以看看这个数据格式是怎么样。

下面是拖拽了一个新的标题文本控件到界面,看了它的数据处理结果,和我们上面的一样的格式,依次判断我们自己设置的过滤器语法是否正确。

image-20221102114335432
image-20221102114335432
image-20221102114345433
image-20221102114345433

3.5 案例2:使用地图显示GPS数据

如果设备具有定位功能,会上传GPS数据到云平台,云平台界面上可以使用地图显示。

通过数据源得知,设备上传的GPS数据如下:

代码语言:javascript
复制
{ "data": [ { "update_at": "2022-11-02 11:13:57", "unit": "", "id": "GPS", "unit_symbol": "", "current_value": { "lon": 109.731653, "lat": 28.289839 }, "at": "2022-11-02 11:13:57", "value": { "lon": 109.731653, "lat": 28.289839 } } ], "type": "OneNET", "rate": 5, "nums": 1, "name": "GPS_data_T3sD", "authType": "secure", "apiKey": "LuUNWqtlwSHtwKW590zPlQ+IiEl6TZiEuk7jc6Vyym0=", "productId": "551886", "devId": "1009326949", "vDevId": "", "dsId": "GPS", "vDsId": "", "protocol": "HTTP", "id": "GPS_data_T3sD", "fields": [], "refreshing": false }

然后根据地图控件需要的格式,编写对应的过滤器:

代码语言:javascript
复制
// 最终数据应该是一个数组
var result = [];
var dataPoint = null;
//循环处理选中的数据源的数据点
for (var i = 0; i < data.length; i++) {
    // 从数据点中取出需要的数据,通过配置键值对使得数据格式符合要求
    dataPoint = {
        dev1: {
            lon: data[i].value.lon,
            lat: data[i].value.lat,
        },
    };
    // 将这个数据点添加进结果中
    result.push(dataPoint);
}
return result;
image-20221102114721223
image-20221102114721223
image-20221102114738467
image-20221102114738467

处理结果正确,最终也显示了数据。

3.6 不使用数据过滤器

如果上传的数据就是一个值,就不用过滤器提取,很多控件可以直接显示值。

比如:仪表盘。

需要提取复杂数据字段的才需要过滤器。

四、有人云的4G模块如何获取GPS信息?

image-20221023152804012
image-20221023152804012

如果是GPS版本,就可以直接通过指令获取:

image-20221102222952944
image-20221102222952944

如果不是GPS定位版本,上面3个指令无法使用,只能使用基站定位。

查询基站定位的指令如下:

代码语言:javascript
复制
AT+LBS?

获取到基站信息之后,返回的数据:

代码语言:javascript
复制
+LBS: LAC = 9a0f,CID = 96f1b17

得到基站之后,可以通过百度、高德等地图的http接口将基站转为经纬度。

onenet也支持基站转为经纬度的功能。

帮助文档地址:https://open.iot.10086.cn/doc/v5/develop/detail/724

image-20221102223329731
image-20221102223329731

意思是: 通过MQTT向指定的主题上报数据点,这个数据点包含了基站信息。然后服务器会将转换后的经纬度返回来,如果设备订阅了平台下消息,就会收到数据。

五、OneNet的HTTP协议API接口使用介绍

文档地址:https://open.iot.10086.cn/doc/multiprotocol/book/develop/http/api/api-usage.html

平台提供开放的API接口,用户可以通过HTTP/HTTPS调用,进行设备管理,数据查询,设备命令交互等操作,在API的基础上,根据自己的个性化需求搭建上层应用,另外通过HTTP协议接入的设备不会显示在线状态。

image-20221103112032072
image-20221103112032072

(1)上传数据点为例

请求方式:POST

URL:http://api.heclouds.com/devices/device_id/datapoints

代码语言:javascript
复制
device_id:需要替换为设备ID
url参数

参数名称

格式

是否必须

说明

type

string

数据格式,默认为完整JSON型(见示例)

http body参数

参数名称

格式

是否必须

说明

datastreams

array-json

设备数据流信息的json数组,见datastreams描述表

datastreams描述表

参数名称

格式

是否必须

说明

id

string

数据流或者数据流模板名称

datapoints

array-json

数据点。可以一次性向设备云上传多个数据流,每个数据流中可以包括多个数据点,见datapoints描述表

datapoints描述表

参数名称

格式

是否必须

说明

at

date

上传数据点时间。如果为空,则设备云会取当前时间。如果存在其格式必须为"YYYY-MM-DDThh:mm:ss"的形式(例如:2015-03-22T22:31:12)

value

string/int/json…

数据的值

请求头部示例
代码语言:javascript
复制
POST http://api.heclouds.com/devices/2*****30/datapoints HTTP/1.1
请求参数示例
代码语言:javascript
复制
{
    "datastreams": [{
            "id": "temperature",
            "datapoints": [{
                    "at": "2013-04-22T00:35:43",
                    "value": "bacd"
                },
                {
                    "at": "2013-04-22T00:55:43",
                    "value": 84
                }
            ]
        },
        {
            "id": "key",
            "datapoints": [{
                    "at": "2013-04-22T00:35:43",
                    "value": {
                        "x": 123,
                        "y": 123.994
                    }
                },
                {
                    "at": "2013-04-22T00:35:43",
                    "value": 23.001
                }
            ]
        }
    ]
}
返回示例
代码语言:javascript
复制
{
    "errno": 0,
    "error": "succ"
}
组合HTTP报文: (温度)
代码语言:javascript
复制
POST /devices/1012473502/datapoints HTTP/1.1
api-key:jBPrSkWktqQjnWKlOTh1OTxKKfM=
Host:api.heclouds.com
Connection:close
Content-Length:61

{"datastreams":[{"id":"data","datapoints":[{"value":1234}]}]}
组合HTTP报文: (GPS)
代码语言:javascript
复制
POST /devices/1009326949/datapoints HTTP/1.1
api-key:Q1=mhFwn=zt6nfp1EYvSsUcwUX8=
Host:api.heclouds.com
Connection:close
Content-Length:90

{"datastreams":[{"id":"GPS","datapoints":[{"value":{"lon":109.731653,"lat":28.289839}}]}]}
Qt代码实现数据点上传:
代码语言:javascript
复制
void Widget::OneNet_POST_DataStreams()
{
    QString requestUrl;
    QNetworkRequest request;

    //设置请求地址
    QUrl url;

    //获取token请求地址
    requestUrl = QString("http://api.heclouds.com/devices/%1/datapoints")
                 .arg(1009326949);

    //自己创建的TCP服务器,测试用
    //requestUrl="http://127.0.0.1:8080";

    //设置数据提交格式
    request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json;charset=UTF-8"));

    //设置api-key
    request.setRawHeader("api-key","Q1=mhFwn=zt6nfp1EYvSsUcwUX8=");

    //构造请求
    url.setUrl(requestUrl);

    request.setUrl(url);

    //上传GPS数据为例
    QString text =QString("{\"datastreams\":[{\"id\":\"%1\",\"datapoints\":[{\"value\":%2}]}]}")
            .arg("GPS")
            .arg("{\"lon\":109.731653,\"lat\":28.289839}");

    //发送请求
    manager->post(request, text.toUtf8());
}

(2)查询设备数据流

请求方式:GET

URL: http(s)😕/api.heclouds.com/devices/device_id/datastreams/datastream_id

代码语言:javascript
复制
device_id:需要替换为设备ID
datastream_id:需要替换为数据流ID
返回参数

参数名称

格式

说明

errno

int

调用错误码,为0表示调用成功

error

string

错误描述,为"succ"表示调用成功

data

json

接口调用成功之后返回的设备相关信息,见data描述表

data描述表

参数名称

格式

说明

id

string

数据流ID

create_time

string

数据流创建时间

update_at

string

最新数据上传时间

current_value

string/int/json…

最新数据点

请求示例
代码语言:javascript
复制
GET http://api.heclouds.com/devices/20474930/datastreams/temperature HTTP/1.1
返回示例
代码语言:javascript
复制
{
    "errno": 0,
    "data": {
        "update_at": "2017-11-20 10:03:10",
        "id": "temperature",
        "create_time": "2017-11-20 09:59:35",
        "current_value": "31303130303030303433"
        }
    },
    "error": "succ"
}
Qt代码实现数据流获取:
代码语言:javascript
复制
//查询最新的数据流
/*
请求方式:GET
URL: http(s)://api.heclouds.com/devices/device_id/datastreams/datastream_id
device_id:需要替换为设备ID
datastream_id:需要替换为数据流ID
*/
void Widget::OneNet_Get_DataStreams()
{
    QString requestUrl;
    QNetworkRequest request;

    //设置请求地址
    QUrl url;

    //获取token请求地址
    requestUrl = QString("http://api.heclouds.com/devices/%1/datastreams/%2")
                 .arg("1009326949")
                 .arg("temp");

    //自己创建的TCP服务器,测试用,用来看请求的报文格式
//    requestUrl = QString("http://localhost/devices/%1/datastreams/%2")
//                 .arg("1009326949")
//                 .arg("temp");

    //设置数据提交格式
    request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));

    //设置api-key
    request.setRawHeader("api-key","Q1=mhFwn=zt6nfp1EYvSsUcwUX8=");

    //构造请求
    url.setUrl(requestUrl);

    request.setUrl(url);

    //发送请求
    manager->get(request);
}

组合的报文格式:

(注意: 报文发送时后边要跟上2个换行符\r\n\r\n)

代码语言:javascript
复制
GET /devices/1009326949/datastreams/temp HTTP/1.1
Host: api.heclouds.com
Content-Type: application/json
api-key: Q1=mhFwn=zt6nfp1EYvSsUcwUX8=

利用TCP调试助手测试:

注意:数据发送区,后面要加两个回车再发送。

image-20221103165251123
image-20221103165251123
image-20221103165341445
image-20221103165341445

如果想获取设备下全部的最新数据点,就不用指定数据点的名称: 按下面这种方式写。

代码语言:javascript
复制
GET /devices/1009326949/datastreams HTTP/1.1
Host: api.heclouds.com
api-key: Q1=mhFwn=zt6nfp1EYvSsUcwUX8=
Connection: close
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-11-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、OneNET View 介绍
  • 二、场景介绍
  • 三、数据过滤器使用
    • 3.1 帮助文档
      • 3.2 数据源模板
        • 3.3 可视化页面
          • 3.4 案例1:显示数据上报时间
            • 3.5 案例2:使用地图显示GPS数据
              • 3.6 不使用数据过滤器
              • 四、有人云的4G模块如何获取GPS信息?
              • 五、OneNet的HTTP协议API接口使用介绍
                • (1)上传数据点为例
                  • 请求方式:POST
                  • url参数
                  • http body参数
                  • 请求头部示例
                  • 请求参数示例
                  • 返回示例
                  • 组合HTTP报文: (温度)
                  • 组合HTTP报文: (GPS)
                  • Qt代码实现数据点上传:
                  • 请求方式:GET
                  • 返回参数
                  • 请求示例
                  • 返回示例
                  • Qt代码实现数据流获取:
              • (2)查询设备数据流
                • 组合的报文格式:
                  • 利用TCP调试助手测试:
                  相关产品与服务
                  云数据库 MySQL
                  腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档