Redian新闻
>
前端玩转大数据 - 家庭温湿度数据采集与分析

前端玩转大数据 - 家庭温湿度数据采集与分析

科技

夏日已至,气温升高,又到了一年难熬的梅雨季节。作为一名技术宅,我望了眼藏在角落里吃灰的树莓派,便萌生了通过树莓派完成数据采集,经过大数据处理,得到可视化家庭温湿度报表的想法。

最终的效果如下,我产出了两个看版,第一个可以看到最近1小时每分钟的温湿度情况,第二个可以看到一天每小时的温湿度情况。


大数据处理流程概览



首先,我们先来了解一下大数据处理的主要步骤,主要为数据产生、数据采集与存储、数据分析与处理、数据应用4个步骤,通过访问阿里云大数据产品官网,可以了解到这些信息:

  1. 数据产生:业务系统每天产生的大量业务数据、日志,存储在各自独立的数据源里。
  2. 数据采集与存储:通过DataWorks提供数据集成服务,可以将多种数据源类型,根据设定的调度任务,定时同步系统的数据至MaxCompute。
  3. 数据分析与处理:完成数据采集后,可以在MaxCompute中对数据进行离线处理(俗称ETL过程,Extract-Transform-Load);也可以结合Flink和Hologres对数据进行实时处理。
  4. 数据应用:数据加工完成后,可以通过报表进行可视化展示与分享。

图片来源:https://www.aliyun.com/product/bigdata/ide

我整理出了本次实现案例的数据开发方案,如下图所示:

  • 数据产生:树莓派连接温湿度传感器,间隔2秒读取数据,并实时上报到SLS日志服务进行存储。
  • 数据采集与存储:使用数据集成工具,将SLS日志服务的数据同步至MaxCompute。
  • 数据分析与处理:遵循数仓规范,在DataWorks里完成数据开发。
  • 数据应用:将开发完成的数据关联到QuickBI,进行可视化报表搭建。


接下来,我们按照这个流程逐步实现。


一、数据产生



概览:使用树莓派连接温湿度传感器,基于JavaScript我们可以快捷完成数据的读取,随后基于阿里云SLS服务,将采集到的数据实时上报并存储。 

什么是树莓派


图片来源:https://www.raspberrypi.com/products/raspberry-pi-4-model-b/


树莓派于2012年问世,外形只有信用卡大小,它是一款基于ARM的微型电脑主板,却具有电脑的所有基本功能,此外还具有GPIO接口能力,可以很方便完成与硬件的通信。

它出现的本意并非撼动消费者市场,而是以低廉的价格去促进计算机教育,做出好玩的实验,这是树莓派流行的主要原因。

什么是GPIO编程

GPIO(General-Purpose IO Ports),即通用IO接口。GPIO主要分为输入和输出两种功能。可以实现一些简单设备的控制。比如在输入模式下,将该IO连接传感器,可以用于检测外部状态;当作为输出时,可以通过输出高/低电平来控制外部设备的运转。

树莓派天然支持GPIO编程,以树莓派4B为例,它提供了40个接口,其中21个为GPIO接口,见下图圈出来的位置。


图片来源:https://pinout.xyz/

树莓派目前提供多种编程语言的开发SDK,这极大地降低了我们操作硬件的成本,我们不需要掌握电位变化的基础知识,只需要调用API便可以轻松读取数据,接下来我们来介绍本文的核心 -- DHT11温湿度传感器。

DHT11温湿度传感器

DHT11温湿度传感器,可以测量20-90%的湿度区间, 0~50℃的温度区间,采样周期 >= 1秒/次,外观如下图所示:


图片来源:https://developer.aliyun.com/article/843529

它包含三个针脚,分别是电源正负极、一个数据针脚。通过将信号针脚与树莓派的某一个GPIO针脚连接,便可以源源不断的读取信息。

采集与上报数据

我们按照下图将树莓派与传感器进行连接,其中传感器的数据针脚连接到树莓派的编号为21的GPIO针脚。


连接成功后,我们基于开源项目 node-dth-sensor 来完成传感器数据的获取,只需要编写简单的JavaScript代码,调用 read 方法,就可以获取到温湿度数据,如下所示:

const sensor = require("node-dht-sensor");
const SENSOR_TYPE = 11// 传感器类型,本例为DHT11型号传感器,因此赋值为11
const GPIO_PIN = 21;// GPIO针脚编号,本例中连接到了21编号,这里根据实际连线情况需要变化参数。
sensor.read(SENSOR_TYPE, GPIO_PIN, function (err, temperature, humidity{
    if (!err) {
      console.log("temperature", temperature, "humidity", humidity);
    }
  });

随后,我们结合阿里云SLS日志服务,每隔2秒,做一次数据上报,示意代码如下:

const sensor = require("node-dht-sensor");
const SLS = require("./sls"); // 基于sls日志服务的sdk做简单封装
const projectName = "自定义";
const logStoreName = "自定义";
const reporter = new SLS(projectName);
const SENSOR_TYPE = 11// 传感器类型,本例为DHT11型号传感器,因此赋值为11
const GPIO_PIN = 21// GPIO针脚编号,本例中连接到了21编号,这里根据实际连线情况需要变化参数。
setInterval(() => {
  sensor.read(SENSOR_TYPE, GPIO_PIN, function (err, temperature, humidity{
    if (!err) {
      reporter.put(logStoreName, {
        temperature,
        humidity,
      });
    }
  });
}, 2000);

最后,我们使用pm2运行该段脚本,使其在后台常驻运行:

$ pm2 start dht11.js

进入SLS日志服务控制台,检查是否有数据上报成功:


二、数据采集与存储


概览:这一节我们的目标是将SLS的日志数据采集并存储到MaxCompute里,本案例中我们为了尽可能实时地看到数据情况,将数据采集的频率设置为5分钟/次,实现近实时数据采集,也可以大致满足我们的需求。 

第一步:建立需要存储同步后的数据的表,按照数仓规范,存放业务源头数据的表,我们需要将其命名为ods_前缀,其英文全称为Operational Data Store,在数据分析与处理章节,我们会详细介绍。



第二步:使用数据集成工具完成数据同步,获取SLS里的上报时间需要将采集字段命名为__receive_time__


第三步:设置任务调度时间,每5分钟执行一次,每次获取执行时向前5分钟的数据,在调度配置里使用$[yyyymmddhh24miss]参数表达当前时间(精确到秒),使用$[yyyymmddhh24miss-1/24/60*5]参数表达当前时间的前5分,提交任务,进入到运维中心后,便可以看到调度任务已经在等待中了。


第四步:使用临时查询工具,检查数据是否成功同步。


三、数据分析与处理



概览:在Dataworks里进行数据处理,依据数仓建设规范分别构建ODS层、DWD层、DWS层、ADS层。根据上报的温湿度明细数据,计算出最近1小时每分钟的温湿度数据、每天每小时的温湿度数据。 

首先,在数据分析处理之前,需要先明确最终需要产出的结果是什么:

  • 最近1小时每分钟的温湿度情况
  • 每小时的温湿度变化情况以及是否舒适
  • 每日舒适率

以下是个人的定义,不一定严谨,仅供参考:

  • 舒适区间:人体感觉适宜的温度在22到26度之间,相对湿度在40%到70%,在这样的温度和湿度的环境下人体感觉相对比较舒服。
  • 舒适率:(舒适小时数 / 当天已统计小时数) * 100%,例如 上午10:00,当天共统计10个小时,其中舒适小时数为5个小时,因此当天舒适率为 (5/10)*100% = 50%

随后我们进行数据处理阶段,数据处理阶段是非常灵活的,为了尽可能让数据资产规范可持续消费,应当遵循一定规范进行建设,目前业界普遍按照维度建模和数仓建模的思路来组织整个开发过程,具体如下:

  • 第一步:构建ODS层,目标是1比1完整接入,不考虑易用性,仅仅要求全。这一步将SLS日志同步到ods_sensor表里
  • 第二步:构建DWD层,目标是加入规范,数据清洗,拼接相关字段,让数据好用。这一步将ods_sensor里的日期时间戳转化为标准的date格式,并且完成是否为舒适数据的判断,最终生产为dwd_sensor表
  • 第三步:构建DWS层,目标是对数据适度汇总,让数据易用。这一步根据dwd_sensor表,生产出最近1小时和每小时的轻度汇总表,分别为dws_sensor_latest_1h和dws_sensor_1day
  • 第四步:构建ASD层,与业务直接关联的需求在此完成,上述舒适率便是一个个性化需求,因此放在这里构建,产出ads_comfort_rate_day

最终构建后的数仓结构如下(在dataworks里以可视化方式呈现表依赖关系):


四、数据应用


概览:这一步只需要将产出的数据表,关联到Quick BI中,便可以快捷搭建出可视化看板。 

第一步:新建数据源,与MaxCompute形成关联,随后便可以获取到所有的表信息


第二步:新建数据集,将MaxCompute表在这里进一步加工,例如调整名称,字段类型调整,展示格式调整。


第三步:搭建看板,挑选适合的图表,将字段关联,你还可以增加各种过滤器进行筛选。



五、小结



通过采集温湿度数据并进行可视化处理,让沉睡已久的树莓派重新焕发生机,整个过程是充满乐趣的。提及日常生活,我们每天每个人其实都在不断地产生数据,大数据离我们并不远,运动手环、智能家居、购物推荐其实都在无形应用着这些数据,我们既是生产者,亦是消费者。

希望本文可以唤起大家动手进行大数据处理的热情,采集并消费身边的数据,人人都可以做大数据分析。




关注「Alibaba F2E」微信公众号把握阿里巴巴前端新动向


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
中华几千年史上民国大饥荒居首从《淘特斗地主》说起,前端如何做 h5 游戏的游戏体验咽拭子采集,双方如何配合才有效?体感43℃+雷暴警告! 蒙特利尔本周高温湿闷, 出行当心…重磅官宣!中国将有序增加国际航班!隔离期有望缩短至“7+7”!华人亲测香港中转大陆!6万合作药店,27亿条数据,今天又一家健康大数据公司上市「英雄帖」美食创业寻找前端工程师,期待热爱美食的你加入最新的疫苗接种与预防新冠信息2022年上半年SCI论文撤稿大数据分析;中国撤稿958篇,占到全球的38%完成2亿美金D轮融资,「神策数据」从大数据延伸到营销科技领域|最前线老年医学SCI论文选刊及大数据分析(2022)k8s01# K8s日志采集与服务质量QoS第11期读书会预告 | 英文学术文献的阅读与分析:实例研讨看了一季度数据,我为华为捏了把汗疯狂增长的核酸采集站,能成为5G应用的典型场景么?近视度数高的人,你的眼底可能已经「裂」了正在Netflix刷剧的我,竟偶遇了一只玩转数据的“现金奶牛”?(企业分析)如何下手开始企业分析?--- 从底层逻辑向上做企业分析(第一课)前端性能优化实战千万级可观测数据采集器--iLogtail代码完整开源首次!注入年轻的脑脊液,或能逆转大脑衰老越南河粉店及周边真是热死人,户外核酸采集就别穿“大白”了乌克兰最新资讯与分析(6.24)终于有人把工业数据采集讲明白了前端质量|基于业务驱动的前端性能有效实践案例证券分析师的基本功:如何收集、处理和分析行业数据简述APP资产收集与突破抓包限制反转大瓜?00后面试被拒后直接将公司举报到歇业引发爆议!ES06# Filebeat采集原理与监控指标梳理我在北京做兼职核酸采集员赌徒心理, 难忘的惨痛经历我学语文教语文的一生(46)成年后,近视度数真的还会增加吗?浅谈前端开发规范
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。