新版ONENET(2024/4/24)通过view3.0可视化保姆级教程(一学就会)附效果图


⏩ 大家好哇!我是小光,想要成为系统架构师的嵌入式爱好者。
⏩上一篇是STM32通过ESP8266连接最新版的ONENET,成功将数据上传之后,本篇文章使用ONENET的view3.0可视化对数据进行可视化做一个详细教程。
⏩感谢你的阅读,不对的地方欢迎指正。
STM32通过ESP8266连接新版ONENET代码(更新时间:2024/4/10)
加入小光嵌入式交流群(qq群号:737327353)免费获取博主所有资料哦!


view3.0可视化

  • 效果展示
  • 项目简介
  • 可视化数据源配置
    • 物模型
    • 数据源模板配置
  • 可视化项目配置
    • 创建项目
    • 数据源配置
    • 过滤器配置
      • 折线图过滤器
      • 文本过滤器配置
      • 常用过滤器代码
  • 项目关联与发布
  • 问题汇总(2024/4/24)
  • 总结

效果展示

这是我使用ONENET view3.0做的一个简单的可视化界面,跟着博主一步步来,简简单单可视化,其中会遇到的问题都会一 一解答。
数据如何通过STM32开发板上传到ONENET可以看上篇文章:
STM32通过ESP8266(MQTT)连接新版ONENET(2024/4/23)(保姆级教程)附运行结果
在这里插入图片描述

项目简介

该气象仪基于STMF103ZET6,采用温湿度模块,光照模块,风速模块,风向模块来对环境进行数据检测。通过ESP8266将所有数据上传ONENET物联网平台。

可视化数据源配置

物模型

该项目有温湿度、光照强度、风速、风向、风级6个物模型。如何配置以及和STM32如何上传详看上篇文章。
在这里插入图片描述

数据源模板配置

在控制台进入数据可视化:
在这里插入图片描述
先获取相关配置参数:鼠标放在右上角头像,点击访问权限:
在这里插入图片描述
记下以下两个数据,后面会用到:
在这里插入图片描述
创建数据源模板的时候,新版ONENT一定是物联网平台,用户ID和accessKey很多人都会输错,一定要填写的是ONENET用户的ID和key,这样就没问题了。
在这里插入图片描述

可视化项目配置

创建项目

1.新建可视化项目
在这里插入图片描述
当然如果你充值了,那你就可以使用别的现成的模板或者基础模板。
在这里插入图片描述

2.添加控件,这上面有各种控件,比如我比较喜欢用的仪表盘和折线图,一些标题啥的配置我就不教大家了。
在这里插入图片描述

数据源配置

创建数据源
在这里插入图片描述
使用我们刚才创建的数据源模板创建数据源:
在这里插入图片描述
然后就能看到我们创建好的数据源,一般默认是数据源模板名称+随即英文,我们对其修改即可:
在这里插入图片描述
选择对应的数据源就可以啦,对于这种只需要数据的控件把过滤器关掉数据就正常啦。
在这里插入图片描述

过滤器配置

简单控件只需要数据的比如仪表盘等等就不需要使用过滤器了,其他控件的配置也可以参考以下代码实现。

折线图过滤器

像这种有坐标的可以使用下方过滤器代码,一般横轴是时间,纵轴是数据。
在这里插入图片描述
折线图过滤器代码:

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

别忘了保存哦!

文本过滤器配置

如果你想把数据和文本做一个简单的对应可以使用以下过滤器代码,根据情况自己进行修改哦,比如说我这个我上传的风向是一个角度,如何根据角度判断是什么风呢?使用简单的三目运算符可以巧妙解决这个问题。
在这里插入图片描述
文本控件过滤器代码:

var wind = data[data.length - 1].value;
return [{
    name: data[data.length - 1].at,
    value: wind == 0 ? '北风' :
        wind == 45 ? '东北风' :
        wind == 90 ? '东风' :
        wind == 135 ? '东南风' :
        wind == 180 ? '南风' :
        wind == 225 ? '西南风' :
        wind == 270 ? '西风' :
        wind == 315?'西北风':'错误',
}]

常用过滤器代码

参考官方文档:数据可视化view常用过滤器代码
一、迭代处理
通常数据源返回的结果大多是数组类型,通过迭代可以对每个元素进行处理。

data.forEach((item, index) => {
  // console.log('元素:', item, ';下标:', index);
});

二、获取数组第一项

// first([1, 2]); // -> 1
function first(arr) {
  var len = arr ? arr.length : 0;
  if (len) return arr[0];
}

三、获取数组最后一项

// last([1, 2]); // -> 2
function last(arr) {
  var len = arr ? arr.length : 0;
  if (len) return arr[len - 1];
}

四、数组最大值,最小值

//数组最大值
function maxArr(arr) {
  return Math.max.apply(null, arr);
}
//数组最小值
function minArr(arr) {
  return Math.min.apply(null, arr);
}

五、数组求和,平均值

// 这一块的封装,主要是针对数字类型的数组
// 求和
function sumArr(arr) {
  return arr.reduce(function(pre, cur) {
    return pre + cur;
  });
}

// 数组平均值,小数点可能会有很多位,这里不做处理
function covArr(arr) {
  return this.sumArr(arr) / arr.length;
}

六、从数组中随机获取元素

function randomOne(arr) {
  return arr[Math.floor(Math.random() * arr.length)];
}

七、随机返回一个范围的数字

//ecDo.randomNumber(5,10)
//返回5-10的随机整数,包括5,10
//ecDo.randomNumber(10)
//返回0-10的随机整数,包括0,10
//ecDo.randomNumber()
//返回0-255的随机整数,包括0,255
function randomNumber(n1, n2) {
  if (arguments.length === 2) {
    return Math.round(n1 + Math.random() * (n2 - n1));
  } else if (arguments.length === 1) {
    return Math.round(Math.random() * n1);
  } else {
    return Math.round(Math.random() * 255);
  }
}

八、时间格式处理

/**
 * @param timestamp 时间戳
 **/
function formatDate(timestamp) {
  var date = new Date(timestamp); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
  var Y = date.getFullYear() + '-';
  var M =
    (date.getMonth() + 1 < 10
      ? '0' + (date.getMonth() + 1)
      : date.getMonth() + 1) + '-';
  var D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ';
  var h =
    (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
  var m =
    (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) +
    ':';
  var s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
  return Y + M + D + h + m + s;
}

九、返回数组(字符串)一个元素出现的次数

//ecDo.getEleCount('asd56+asdasdwqe','a')
//result:3
//ecDo.getEleCount([1,2,3,4,5,66,77,22,55,22],22)
//result:2
function getEleCount(obj, ele) {
  var num = 0;
  for (var i = 0, len = obj.length; i < len; i++) {
    if (ele === obj[i]) {
      num++;
    }
  }
  return num;
}

十、对象数组排序

//var arr=[{a:1,b:2,c:9},{a:2,b:3,c:5},{a:5,b:9},{a:4,b:2,c:5},{a:4,b:5,c:7}]
//ecDo.arraySort(arr,'a,b')a是第一排序条件,b是第二排序条件
//result:[{"a":1,"b":2,"c":9},{"a":2,"b":3,"c":5},{"a":4,"b":2,"c":5},{"a":4,"b":5,"c":7},{"a":5,"b":9}]
function arraySort(arr, sortText) {
  if (!sortText) {
    return arr;
  }
  var _sortText = sortText.split(',').reverse(),
    _arr = arr.slice(0);
  for (var i = 0, len = _sortText.length; i < len; i++) {
    _arr.sort(function(n1, n2) {
      return n1[_sortText[i]] - n2[_sortText[i]];
    });
  }
  return _arr;
}

十一、数组逆序

// arrayReverse([3,2,1,4])  // [4, 1, 2, 3]
function arrayReverse(arr) {
  var len = arr ? arr.length : 0;
  if (len) return arr.reverse();
}

项目关联与发布

在应用开发中添加项目,随便填
在这里插入图片描述
添加我们的设备,添加后会自动添加产品
在这里插入图片描述
因为我已经添加过了所以没有显示
在这里插入图片描述
在可视化界面我们可以选择是否关联到我们刚刚添加的项目
在这里插入图片描述
关联之后执行下方操作就可以查看我们的可视化界面啦!
在这里插入图片描述

问题汇总(2024/4/24)

1.数据源模板和数据源创建时无法选择数据源的问题?
解答:创建数据源模板的时候,新版ONENT一定是物联网平台用户ID和accessKey很多人都会输错,一定要填写的是ONENET用户的ID和key,这样就没问题了。

2.使用ESP8266发送AT指令上传数据包,ONENET接收数据失败的问题?
解答:(1)过滤器未规范配置,具体参考上文。
(2)数据包格式有问题,参考官方文档:MQTT数据接入物模型数据交互
新版上传代码数据包格式:
在这里插入图片描述

/*
{
	"id": "123",
	//"version": "1.0",(可选)
	"params": {
		"temp": {
			"value": "12345",
			//"time": 1706673129818(可选)
		},
		"humi": {
			"value": 23.6,
			//"time": 1706673129818(可选)
		}
	}
}
*/

unsigned char OneNet_FillBuf(char *buf)
{
	
	char text[48];
	
	strcpy(buf,"{\"id\":\"123\",\"params\":{");
	//温度
	memset(text,0,sizeof(text));
	sprintf(text,"\"temp\":{\"value\":%d},",DHT11_Data.temp_int);
	strcat(buf,text);
	//湿度
	memset(text,0,sizeof(text));
	sprintf(text,"\"humi\":{\"value\":%d}",DHT11_Data.humi_int);
	strcat(buf,text);
	
	strcat(buf,"}}");

	return strlen(buf);

}

总结

本篇文章使用ONENET的view3.0可视化对数据进行可视化做一个详细教程。总体来说新版在数据格式上进行了优化,上传数据非常方便而且不容易断联。可视化界面没有太大改变,感谢你的阅读,不对的地方欢迎指正。
STM32通过ESP8266连接新版ONENET代码(更新时间:2024/4/10)
加入小光嵌入式交流群(qq群号:737327353)免费获取博主所有资料哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/569338.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AnaTraf网络流量分析仪:实时分析工具助您优化网络架构

导言&#xff1a; 在如今高度互联的数字时代&#xff0c;网络流量分析成为了企业和组织必备的工具之一。AnaTraf网络流量分析仪作为一款高性能的实时网络流量分析工具&#xff0c;不仅能够帮助用户进行全流量回溯分析、网络流量监控和网络性能分析&#xff0c;更可以快速排除网…

两天速通阿里

感觉这一周太梦幻了&#xff0c;就像一个梦&#xff0c;很不真实~~~ 感觉这个暑期&#xff0c;我的运气占了99成&#xff0c;实力只有百分之一 4.15上午 腾讯csig 腾讯云部门&#xff0c;面完秒进入复试状态 4.16下午 美团优选供应链部门&#xff0c;4.18上午发二面 4.17晚上 阿…

C#基础|属性Property之读写特性和经典总结

哈喽&#xff0c;你好&#xff0c;我是雷工。 本节学习属性特性——控制读写操作&#xff0c;以下为学习笔记。 01 只读属性 写法1&#xff1a;直接去掉set方法&#xff0c;可以在定义的时候初始化。 示例&#xff1a; public string CourseName{get&#xff1b;}“雷工笔记…

2024年学浪提取视频#小浪助手

2024年&#xff0c;学习视频已经成为人们获取知识和提升技能的重要途径&#xff0c;而学浪视频平台以其丰富多样的学习资源备受瞩目。然而&#xff0c;有时我们可能只需要其中的一小部分内容&#xff0c;而不想将整个视频都下载下来。在这个时候&#xff0c;小浪助手作为一款强…

软件无线电系列——Nyquist采样定理

本节目录 一、Nyquist采样定理 1、Nyquist采样定理的定义 2、Nyquist采样定理的证明本节内容 一、Nyquist采样定理 如果对某一时间连续信号进行采样&#xff0c;当采样速率达到一定数值时&#xff0c;就可以根据这些采样值准确地确定原信号。 1、Nyquist采样定理的定义 何为Ny…

这操作真牛!APT杜绝软件包被篡改

0x00 简介 我们介绍了传统包管理器、新型包管理器的工作方式&#xff0c;其中用了大篇幅介绍 APT 包管理器&#xff0c;但是没有对安全人员比较关心的软件包校验问题进行介绍 0x01 大众疑问环节 这部分主要是从常规 Linux 使用者的视角&#xff0c;提出一些平时工作过程中的…

到底什么是爬虫

1. 引言 在数据驱动的世界里&#xff0c;网络爬虫&#xff08;Web Crawling&#xff09;技术扮演着获取和处理网上数据的关键角色。无论是为了数据分析、机器学习项目的数据集构建还是简单地监测网页变化&#xff0c;学习如何创建一个基本的网页爬虫可以大大提升你的工作效率和…

万兆以太网MAC设计(7)ARP协议报文格式详解以及ARP层模块设计

文章目录 前言&#xff1a;1、ARP协议详解2、ARP工作机制 二、ARP_RX模块设计三、ARP_TX模块设计四、ARP_table模块5、仿真5.1、发送端5.2、接收端5.3、缓存表 总结 前言&#xff1a; 1、ARP协议详解 ARP数据格式&#xff1a; 硬件类型:表示硬件地址的类型。它的值为1表示以太…

postman接口自动化

1.基础知识 1.打开postman新建一个文件夹。 &#xff08;建立每一部分文件夹可以更好的管理接口信息&#xff09; 2.postman基本介绍 这里用到的是我自己的一个项目。 params&#xff1a;查询字符串&#xff0c;一般作为url的一部分。 authorization &#xff1a;鉴权&…

CentOS 7.9.2007 中Docker使用GPU

一、安装nvidia驱动 1.1&#xff0c;查看显卡驱动 # 查看显卡型号 lspci | grep -i nvidia 1.2&#xff0c;进入 PCI devices &#xff0c;输入上一步查询到的 2204 1.3&#xff0c;进入 官方驱动 | NVIDIA&#xff0c;查询 Geforce RTX 3090 驱动并下载 1.4&#xff0c;禁用…

数据结构(C):时间复杂度和空间复杂度

目录 &#x1f680; 0.前言 &#x1f680; 1.为何会有时间复杂度和空间复杂度的概念 &#x1f680; 2.时间复杂度 2.1初步时间复杂度 2.2大O表示法 2.2.1.O&#xff08;N*N&#xff09; 2.2.2.O&#xff08;N&#xff09; 2.2.3.O&#xff08;1&#xff09; 2.3最坏情况…

Set A Light 3D Studio:轻松上手,打造专属3D作品!

set a light 3d studio mac版是mac上一款功能方面相当强大的3D摄影棚布光工具&#xff0c;可以帮助摄影行业的工作用户在进行3D室内拍摄的时候&#xff0c;完成对灯光的位置调整设置&#xff0c;只要运用该软件&#xff0c;支持对各种灯光的道具摆放位置&#xff0c;灯光的反射…

Pycharm远程连接实验室服务器Conda环境配置

如何配置Pycharm和远程服务器 这类博客较多&#xff0c;参考内容 https://blog.csdn.net/fengbao24/article/details/125515542 Python解释器选择&#xff08;conda3&#xff09; 1. Settings -> Add Interpreter -> On SSH 注意&#xff0c;这里的SSH需要在你把远程…

Python读写文本URL蓝牙WIFI自动连接电子名片位置坐标智能海报等NDEF标签

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?id615391857885&spma1z10.5-c.w4002-21818769070.11.60ad789erlonvk 近场通信&#xff08;Near Field Communication&#xff0c;简称NFC&#xff09;&#xff0c;是一种新兴的技术&…

雨云 湖北十堰 8272CL 高防高性能云服务器测评

雨云 湖北十堰 高防云服务器&#xff0c;铂金8272CL高性能处理器&#xff0c;2核2G 10兆 400G防御&#xff0c;仅需60元/月&#xff1b;8核16G 20兆 400G高防&#xff0c;仅需170元/月&#xff0c;年付8折1632元/年&#xff08;约136元/月&#xff09;。 企业级纯NVME固态硬盘高…

javase__进阶 day18 多线程02

1. 线程池 1.1 线程状态介绍 当线程被创建并启动以后&#xff0c;它既不是一启动就进入了执行状态&#xff0c;也不是一直处于执行状态。线程对象在不同的时期有不同的状态。那么Java中的线程存在哪几种状态呢&#xff1f;Java中的线程 状态被定义在了java.lang.Thread.Stat…

Nginx 防盗链

原文&#xff1a;https://blog.iyatt.com/?p14998 基于 Nginx 1.18 服务器默认配置文件路径&#xff1a;/etc/nginx/sites-available/default 屏蔽非指定域名的解析 我这里如果发现请求的地址不是我的 iyatt.com&#xff0c;就会返回 403 比如有人用其它域名指向我的服务器…

基于 Spring Boot 博客系统开发(四)

基于 Spring Boot 博客系统开发&#xff08;四&#xff09; 本系统是简易的个人博客系统开发&#xff0c;为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。&#x1f33f;&#x1f33f;&#x1f33f; 基于 Spring Boot 博客系统开发&#xff08;三&#xff09;&#x1f…

MySQL库表占用空间排序

在进行数据库备份恢复时&#xff0c;经常会碰到耗时很长的问题。大概率是因为某些库表的占用空间太大。 以下语句按照库表占用空间大小&#xff0c;进行降序排序&#xff1a; SELECT table_schema AS Database,table_name AS Table,ROUND((data_length index_length) / 1024…

【C语言】结构体,联合体,枚举--->自定义类型详解!

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 1. 结构体 1.1 结构体定义 1.2 结构体的声明 1.3 结构体变量的定义和初始化 1.4 结构体的特殊声明->匿名声明 1.5 结构体的自应用 2. 结构体内存对齐…
最新文章