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

举报
DS小龙哥 发表于 2022/11/08 09:43:53 2022/11/08
【摘要】 介绍OneNet上可视化界面数据源设置方法,过滤器使用方法,云端设备数据的获取方法。

一、OneNET View 介绍

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

三、数据过滤器使用

3.1 帮助文档

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

image-20221102113132617

3.2 数据源模板

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

image-20221102113244999

3.3 可视化页面

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

image-20221102113413328

image-20221102113433475

这是创建好的数据源:

image-20221102113454533

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

image-20221102113538269

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

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

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

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

{ "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 字段。

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

return [{
    "value": "数据上报时间:" + data[0].update_at
}]

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

image-20221102114003674

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

image-20221102114117928

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

image-20221102114130471

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

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

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

image-20221102114335432

image-20221102114345433

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

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

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

{ "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 }

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

// 最终数据应该是一个数组
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-20221102114738467

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

3.6 不使用数据过滤器

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

比如:仪表盘。

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

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

image-20221023152804012

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

image-20221102222952944

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

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

AT+LBS?

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

+LBS: LAC = 9a0f,CID = 96f1b17

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

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

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

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

(1)上传数据点为例

请求方式:POST

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

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… 数据的值

请求头部示例

POST http://api.heclouds.com/devices/2*****30/datapoints HTTP/1.1

请求参数示例

{
    "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
                }
            ]
        }
    ]
}

返回示例

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

组合HTTP报文: (温度)

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)

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代码实现数据点上传:

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

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… 最新数据点

请求示例

GET http://api.heclouds.com/devices/20474930/datastreams/temperature HTTP/1.1

返回示例

{
    "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代码实现数据流获取:

//查询最新的数据流
/*
请求方式: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)

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-20221103165341445

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

GET /devices/1009326949/datastreams HTTP/1.1
Host: api.heclouds.com
api-key: Q1=mhFwn=zt6nfp1EYvSsUcwUX8=
Connection: close
    

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。