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」微信公众号把握阿里巴巴前端新动向


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

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