新版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位的话不需乘1000var 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.mzph.cn/news/827827.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java-AQS的原理

文章目录 基本概述1. 设计思想2. 基本实现 一些关键词语以及常用术语&#xff0c;主要如下&#xff1a; 信号量(Semaphore): 是在多线程环境下使用的一种设施&#xff0c;是可以用来保证两个或多个关键代码段不被并发调用&#xff0c;也是作系统用来解决并发中的互斥和同步问题…

SQLAlchemy的使用

SQLAlchemy中filter函数的使用 https://blog.csdn.net/m0_67093160/article/details/133318889

在浏览器输入网址,Enter之后发生了什么?

在浏览器输入网址&#xff0c;Enter之后发生了什么&#xff1f; 很多八股文会给出&#xff1a; 1. DNS Resolution2. Establishing a Connection3. Sending an Http Request4. Receiving the HTTP Response5. Rendering the Web Page 但今天我斗胆插入第0.9步URL Parsing&#…

适用于手机蓝牙的热敏晶体FA1612AS

EPSON推出的一款1612小尺寸无源热敏晶体:FA1612AS。FA1612AS的额定频率为38.4Mhz的晶体单元&#xff0c;采用无铅材料&#xff0c;符合ROHS标准&#xff0c;内置热敏电阻&#xff0c;可用于移动电话&#xff0c;蓝牙等。热敏晶体FA1612AS的产品特性:额定频率:38.4MHZ外部尺寸规…

JS----前端将列表数据转树型数据

前端将列表数据转树型数据 场景&#xff1a;后端返回列表数据&#xff0c;由前端根据业务需求完成树型数据转换&#xff0c; 常用于侧边导航菜单&#xff0c;下拉树型数据项等 export function listToTree(data: []) {var map: any {},tree: any []data.forEach((item: any…

每天五分钟计算机视觉:基于YOLO算法精确分类定位图片中的对象

滑动窗口的卷积的问题 滑动窗口的卷积实现效率很高,但是它依然不能够输出最精准的边界框,比如下面所示: 我们可以看到蓝色框不论在什么位置都不能很好的确定车的位置,有一个算法是YOLO 算法它能够帮助我们解决这个问题。 YOLO 算法 比如我们的输入图像是100*100,我们会…

【OceanBase诊断调优 】—— 如何快速定位SQL问题

作者简介&#xff1a; 花名&#xff1a;洪波&#xff0c;OceanBase 数据库解决方案架构师&#xff0c;目前负责 OceanBase 数据库在各大型互联网公司及企事业单位的落地与技术指导&#xff0c;曾就职于互联网大厂和金融科技公司&#xff0c;主导过多项数据库升级、迁移、国产化…

CSS的网页美化功能

<1>文字类 通常情况下&#xff0c;一般使用span对文字进行重点突出&#xff0c;用div来操作一段代码块。 字体的所有属性&#xff1a; 属性描述font在一个声明中设置所有的字体属性font-family指定文本的字体系列font-size指定文本的字体大小font-style指定文本的字体样…

5-内核开发-/proc File System 学习

5-内核开发-/proc File System 学习 课程简介&#xff1a; Linux内核开发入门是一门旨在帮助学习者从最基本的知识开始学习Linux内核开发的入门课程。该课程旨在为对Linux内核开发感兴趣的初学者提供一个扎实的基础&#xff0c;让他们能够理解和参与到Linux内核的开发过程中。…

经典案例|使用Supabase解决可视化大屏项目的常见问题

敏博科技专业致力于应急管理行业&#xff0c;提供以物联网技术和感知预警算法模型为核心的先进产品和解决方案。应急管理行业的业务非常繁多和复杂&#xff0c;很多时候都需要在短时间内交付出稳定高效的业务系统。如下两张图某市的安全生产监测预警系统 MemFire Cloud应用开…

Redis入门到通关之Redis数据结构-Hash篇

文章目录 ☃️ 概述☃️底层实现☃️源码☃️其他 欢迎来到 请回答1024 的博客 &#x1f353;&#x1f353;&#x1f353;欢迎来到 请回答1024的博客 关于博主&#xff1a; 我是 请回答1024&#xff0c;一个追求数学与计算的边界、时间与空间的平衡&#xff0c;0与1的延伸的后…

模型部署的艺术:让深度学习模型跃入生产现实

模型部署的艺术&#xff1a;让深度学习模型跃入生产现实 1 引言 1.1 部署的意义&#xff1a;为何部署是项目成功的关键 在深度学习项目的生命周期中&#xff0c;模型的部署是其成败的关键之一。通常&#xff0c;一个模型从概念构思、数据收集、训练到优化&#xff0c;最终目的…

电子信息制造工厂5G智能制造数字孪生可视化平台,推进数字化转型

电子信息制造工厂5G智能制造数字孪生可视化平台&#xff0c;推进数字化转型。5G智能制造数字孪生可视化平台利用5G网络的高速、低延迟特性&#xff0c;结合数字孪生技术和可视化界面&#xff0c;为电子信息制造工厂提供了一种全新的生产管理模式。不仅提升生产效率&#xff0c;…

SpringBoot学习之Kafka下载安装和启动【Windows版本】(三十四)

一、配置Java环境变量 打开CMD输入java -version检查java环境变量是否配置正确,如果配置正确在CMD窗口输入java -version应该输出如下: ​ 怎么配置Java环境变量这里我就不赘叙了,网上教程很多,请读者自行搜索操作。 二、下载Kafka 1、Kafka官网地址:Apache Kafka,…

解决DataGrip连接MySQL8时出现时区错误问题

解决办法&#xff1a;在url后面拼接时区参数 ?serverTimezoneAsia/Shanghai

DS进阶:AVL树和红黑树

一、AVL树 1.1 AVL树的概念 二叉搜索树&#xff08;BST&#xff09;虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家G.M.Adelson-…

easyx库的学习(鼠标信息)

前言 本次博客是作为介绍easyx库的使用&#xff0c;最好是直接代码打到底&#xff0c;然后看效果即可 代码 int main() {initgraph(640, 480, EX_SHOWCONSOLE|EX_DBLCLKS);setbkcolor(RGB(231, 114, 227));cleardevice();//定义消息结构体ExMessage msg { 0 };//获取消息wh…

大语言模型微调过程中的 RLHF 和 RLAIF 有什么区别?

目前想要深入挖掘大型语言模型&#xff08;LLM&#xff09;的全部潜力需要模型与我们人类的目标和偏好保持一致。从而出现了两种方法&#xff1a;来自人类反馈的人力强化学习&#xff08;RLHF&#xff09;和来自人工智能反馈的人工智能驱动的强化学习&#xff08;RLAIF&#xf…

FPGA秋招-笔记整理(1)

一、关键路径 关键路径通常是指同步逻辑电路中&#xff0c;组合逻辑时延最大的路径&#xff08;这里我认为还需要加上布线的延迟&#xff09;&#xff0c;也就是说关键路径是对设计性能起决定性影响的时序路径。也就是静态时序报告中WNS&#xff08;Worst Nagative Slack&…

如何从架构层面降低公有云多可用区同时故障的概率

阿里云和腾讯云都曾出现过因一个组件故障而导致所有可用区同时瘫痪的情况。本文将探讨如何从架构设计的角度减小故障域&#xff0c;在故障发生时最小化业务损失&#xff0c;并以 Sealos 的稳定性实践为例&#xff0c;分享经验教训。 抛弃主从&#xff0c;拥抱点对点架构 从腾…