大数据这么玩 - 家庭温湿度数据采集与分析

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
大数据开发治理平台DataWorks,Serverless资源组抵扣包300CU*H
简介: 本文用树莓派连接温湿度传感器,配合阿里云DataWorks、MaxCompute以及Quick BI等产品,完成了家庭温湿度数据采集与分析。

本文用树莓派连接温湿度传感器,配合阿里云DataWorks、MaxCompute以及Quick BI等产品,完成了家庭温湿度数据采集与分析。

引言

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

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

image.png

大数据处理流程概览

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

  1. 数据产生:业务系统每天产生的大量业务数据、日志,存储在各自独立的数据源里。

  2. 数据采集与存储:通过DataWorks提供数据集成服务,可以将多种数据源类型,根据设定的调度任务,定时同步系统的数据至MaxCompute。

  3. 数据分析与处理:完成数据采集后,可以在MaxCompute中对数据进行离线处理(俗称ETL过程,Extract-Transform-Load);也可以结合Flink和Hologres对数据进行实时处理。

  4. 数据应用:数据加工完成后,可以通过报表进行可视化展示与分享。

image.png

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

我整理出了本次实现案例的数据开发方案:

  • 数据产生:树莓派连接温湿度传感器,间隔2秒读取数据,并实时上报到SLS日志服务进行存储。

  • 数据采集与存储:使用数据集成工具,将SLS日志服务的数据同步至MaxCompute。

  • 数据分析与处理:遵循数仓规范,在DataWorks里完成数据开发。

  • 数据应用:将开发完成的数据关联到Quick BI,进行可视化报表搭建。

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

一、数据产生

说明

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

什么是树莓派

image.png

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

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

什么是GPIO编程

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

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

image.png

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

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

DHT11温湿度传感器

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

image.png

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

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

采集与上报数据

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

46379493-E80D-46BA-A97B-B27187B80983.jpeg

连接成功后,我们基于开源项目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日志服务控制台,检查是否有数据上报成功。

image.png

二、数据采集与存储

说明

概览:这一节我们的目标是将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

  • 第四步:构建ADS层,与业务直接关联的需求在此完成,上述舒适率便是一个个性化需求,因此放在这里构建,产出ads_comfort_rate_day

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

image.png

四、数据应用

说明

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

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

image.png

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

image.png

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

五、小结

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

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

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
13天前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
41 4
|
13天前
|
SQL 消息中间件 分布式计算
大数据-124 - Flink State 01篇 状态原理和原理剖析:状态类型 执行分析
大数据-124 - Flink State 01篇 状态原理和原理剖析:状态类型 执行分析
50 5
|
1月前
|
存储 大数据 测试技术
用于大数据分析的数据存储格式:Parquet、Avro 和 ORC 的性能和成本影响
在大数据环境中,数据存储格式直接影响查询性能和成本。本文探讨了 Parquet、Avro 和 ORC 三种格式在 Google Cloud Platform (GCP) 上的表现。Parquet 和 ORC 作为列式存储格式,在压缩和读取效率方面表现优异,尤其适合分析工作负载;Avro 则适用于需要快速写入和架构演化的场景。通过对不同查询类型(如 SELECT、过滤、聚合和联接)的基准测试,本文提供了在各种使用案例中选择最优存储格式的建议。研究结果显示,Parquet 和 ORC 在读取密集型任务中更高效,而 Avro 更适合写入密集型任务。正确选择存储格式有助于显著降低成本并提升查询性能。
293 1
用于大数据分析的数据存储格式:Parquet、Avro 和 ORC 的性能和成本影响
|
2月前
|
分布式计算 Hadoop 大数据
Jupyter 在大数据分析中的角色
【8月更文第29天】Jupyter Notebook 提供了一个交互式的开发环境,它不仅适用于 Python 编程语言,还能够支持其他语言,包括 Scala 和 R 等。这种多语言的支持使得 Jupyter 成为大数据分析领域中非常有价值的工具,特别是在与 Apache Spark 和 Hadoop 等大数据框架集成方面。本文将探讨 Jupyter 如何支持这些大数据框架进行高效的数据处理和分析,并提供具体的代码示例。
77 0
|
8天前
|
存储 SQL 分布式计算
湖仓一体架构深度解析:构建企业级数据管理与分析的新基石
【10月更文挑战第7天】湖仓一体架构深度解析:构建企业级数据管理与分析的新基石
12 1
|
13天前
|
存储 消息中间件 大数据
大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解
大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解
20 4
|
13天前
|
消息中间件 druid 大数据
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(二)
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(二)
21 2
|
13天前
|
消息中间件 分布式计算 druid
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(一)
大数据-153 Apache Druid 案例 从 Kafka 中加载数据并分析(一)
37 1
|
29天前
|
JSON 数据可视化 数据挖掘
Polars函数合集大全:大数据分析的新利器
Polars函数合集大全:大数据分析的新利器
51 1
|
11天前
|
SQL 分布式计算 大数据
大数据平台的毕业设计01:Hadoop与离线分析
大数据平台的毕业设计01:Hadoop与离线分析