云端物联网数据分析:从数据采集到洞察挖掘
1. 物联网相关基础概念与工具
1.1 关键概念与工具介绍
在物联网领域,有几个关键的概念和工具值得我们深入了解:
- MQTT 协议 :它是一种运行在 TCP/IP 协议之上的轻量级消息传递协议,采用发布 - 订阅机制。与传统的重量级协议不同,MQTT 以其高效、灵活的特点,在物联网通信中得到了广泛应用。
- Mosquitto :作为一个开源的消息代理,它实现了 MQTT 协议的 3.1 和 3.1.1 版本。开源的特性使得开发者可以根据自己的需求对其进行定制和扩展。
- Eclipse Paho 项目 :该项目提供了 MQTT 的开源客户端实现,为开发者提供了方便快捷的方式来使用 MQTT 协议进行通信。
- Paho Python 客户端 :具体的 Python 模块为 paho - mqtt ,它使得 Python 开发者可以轻松地与 MQTT 代理进行交互。
- Dweepy :是一个简单的 Python 客户端,用于与 dweet.io 进行交互,方便我们使用 Python 向 dweet.io 发布数据。
1.2 相关概念测试题目解答
以下是对相关测试题目的解答,帮助大家更好地理解这些概念:
| 题目 | 选项 | 正确答案 |
| ---- | ---- | ---- |
| MQTT 是 | A. 一种运行在 TCP/IP 协议之上,采用发布 - 订阅机制的重量级消息协议
B. 一种运行在 TCP/IP 协议之上,采用发布 - 订阅机制的轻量级消息协议
C. 等同于 HTTP | B |
| Mosquitto 是 | A. 实现 MQTT 协议 3.1 和 3.1.1 版本的开源消息代理
B. 实现 MQTT 协议 3.1 和 3.1.1 版本的闭源消息代理
C. 实现 RESTful API 的开源消息代理 | A |
| Eclipse Paho 项目提供 | A. HTTP 的开源客户端实现
B. dweet.io 的开源客户端实现
C. MQTT 的开源客户端实现 | C |
| 以下哪个 Python 模块是 Paho Python 客户端 | A. paho - client - pip
B. paho - mqtt
C. paho - http | B |
| Dweepy 是 | A. 一个简单的 Python 客户端,用于 dweet.io,可方便地使用 Python 向 dweet.io 发布数据
B. 一个简单的 Python 客户端,用于 Mosquitto,可方便地向 Mosquitto 消息代理发布消息
C. 一个简单的 Python 客户端,用于 PubNub 云,可方便地向 PubNub 云发布消息 | A |
1.3 物联网云服务应用总结
通过结合多种基于云的服务,我们能够轻松地将从传感器收集到的数据发布到云端,并在基于 Web 的仪表板上进行可视化展示。而且,由于大多数云服务都提供了 Python API,我们可以方便地编写 Python 代码与这些流行的云服务进行交互。
在实际应用中,我们使用了 MQTT 协议及其发布/订阅模型来处理设备上的命令,并通过消息指示命令是否成功处理。我们先后使用了 PubNub 云、Mosquitto 和 Eclipse Paho 来实现相关示例,掌握了如何编写能够与物联网设备建立双向通信的应用程序,以及如何让物联网设备之间进行通信。
2. 物联网与大数据的关系
2.1 大数据的无处不在
在当今数字化时代,大数据无处不在。我们每进行一次操作,如点击屏幕、发送推文、在红灯前停车、乘坐公交车等,都会在不知不觉中产生有价值的数据。这些数据通过物联网设备上的传感器收集,并发布到云端。
例如,假设我们编写了一段运行在 Intel Galileo Gen 2 板上的 Python 代码,每秒执行以下操作:
- 从温湿度传感器读取环境温度。
- 从温湿度传感器读取环境湿度水平。
- 从十个不同位置的土壤湿度传感器读取土壤体积含水量。
- 发布包含环境温度、环境湿度和十个土壤体积含水量的消息。
2.2 数据量的惊人增长
如果我们每秒进行一次测量,那么数据量的增长将是非常惊人的:
- 每分钟:所有变量的测量次数为 60 次。
- 每小时:测量次数为 3,600(60 * 60)次。
- 每天:测量次数为 86,400(3,600 * 24)次。
- 每年(非闰年):测量次数为 31,536,000(86,400 * 365)次。
而且,我们通常不会只有一个物联网设备在收集和发布数据。假设有 3,000 个物联网设备运行相同的代码,那么每年将产生 94,608,000,000 次测量。此外,我们还需要分析其他数据源,如传感器所在位置与天气相关的推文。因此,我们面临着大量结构化和非结构化数据的分析挑战,这正是大数据实践的范畴。
2.3 传感器连接与地址配置
在连接传感器时,我们需要考虑传感器的类型和连接方式。假设所有传感器都是数字传感器,我们可以将它们连接到 I2C 总线,但前提是所有传感器具有不同的 I2C 总线地址。
以 Catnip Electronics 设计的数字土壤湿度传感器为例,其默认 I2C 地址为 0x20(十六进制 20),但我们可以轻松更改它。具体步骤如下:
1. 将每个传感器连接到 I2C 总线。
2. 将新地址写入寄存器 1。
3. 向传感器的 I2C 地址写入 6 以重置传感器,新地址将生效。
我们可以对所有传感器重复上述步骤,为每个传感器分配不同的 I2C 地址。更多关于该数字土壤湿度传感器的信息可以在 http://www.tindie.com/products/miceuz/i2c - soil - moisture - sensor 上查看。
3. Intel IoT Analytics 结构与设备设置
3.1 Intel IoT Analytics 概述
当我们需要收集和分析大量物联网设备的传感器数据时,云解决方案是一个不错的选择。Intel IoT Analytics 就是这样一个强大的基于云的服务,它与 Intel Galileo Gen 2 板和 Python 配合得非常好。
在使用 Intel IoT Analytics 之前,我们需要注册一个账户。可以使用有效的电子邮件和密码创建账户,也可以使用现有的 Facebook、Google+ 或 GitHub 账户登录。注册完成后,点击确认电子邮件中的激活链接,即可开始使用其免费服务,无需输入信用卡或支付信息。Intel IoT Analytics 的主网页为 https://dashboard.us.enableiot.com ,在使用该云服务处理敏感数据之前,请务必查看其条款和条件。
3.2 账户与设备的基本概念
创建账户并首次登录后,我们会看到“创建新账户”页面。在“账户名称”中输入所需的名称,例如“温度和湿度”,并保留传感器健康报告的默认选项,然后点击“创建”,系统将显示新创建账户的“我的仪表板”页面。
每个账户代表一个独立的工作空间,包含自己的传感器和相关数据。我们可以创建多个账户,并在它们之间轻松切换。“我的仪表板”页面会显示注册设备的数量、传输设备的数量和观测值的数量。每次从注册设备向 Intel IoT Analytics 发布数据时,都会为该设备创建一个观测值。默认情况下,页面显示所有注册设备最近一小时观测值的总和。
作为用户,我们可以管理多个账户,每个账户可以包含多个设备。每个账户有一个名称和一个标识符(accountId),每个设备有一个全局唯一的标识符(deviceId)。例如,我们使用的 Intel Galileo Gen 2 板,包含传感器,将成为我们创建的账户中的一个设备。
3.3 设备的组件类型
在 Intel IoT Analytics 中,每个设备可以看作是一个端点,包含一个或多个组件,这些组件可以提供以下两种类型的信息:
- 执行器(Actuator) :可以在设备上修改的设置,例如旋转伺服电机的轴角度或打开 LED 灯。
- 时间序列(Time series) :从传感器捕获的一系列值,即一组观测值。例如,使用温湿度传感器获取的环境温度值的集合,以华氏度表示并包含时间戳。
在我们的示例中,我们需要一个设备来使用以下组件从连接到板的数字温湿度传感器获取值:
- 以华氏度(ºF)表示的环境温度观测值的时间序列。
- 以摄氏度(ºC)表示的环境温度观测值的时间序列。
- 以百分比表示的环境湿度水平观测值的时间序列。
3.4 设备设置步骤
3.4.1 检查通信
我们使用的 Intel Galileo Gen 2 板的镜像中预安装了 Intel IoT Analytics 的本地代理。只要我们没有对 Yocto Linux 元发行版进行特定更改以禁用特定组件,代理就会作为守护进程在设备上运行。代理包含 iotkit - admin 命令行实用程序,我们可以使用它来执行与 Intel IoT Analytics 的特定交互。
首先,我们需要检查 iotkit - admin 命令行实用程序是否能够与 Intel IoT Analytics 建立正确的通信。在 SSH 终端中运行以下命令:
iotkit - admin test
如果连接成功,我们将看到类似以下的输出,最后一行提供了构建信息,即版本:
2016 - 04 - 05T02:17:49.573Z - info: Trying to connect to host ...
2016 - 04 - 05T02:17:56.780Z - info: Connected to dashboard.us.enableiot.com
2016 - 04 - 05T02:17:56.799Z - info: Environment: prod
2016 - 04 - 05T02:17:56.807Z - info: Build: 0.14.5
3.4.2 获取设备 ID
在 SSH 终端中运行以下命令以获取设备 ID(deviceId):
iotkit - admin device - id
默认情况下,设备 ID 等于网络接口卡的 MAC 地址,例如:
2016 - 04 - 05T02:23:23.170Z - info: Device ID: 98 - 4F - EE - 01 - 75 - 72
如果需要更改设备 ID,可以使用以下命令:
iotkit - admin set - device - id new - device - id
需要注意的是,新的设备 ID 必须是全局唯一的标识符。在我们的示例中,我们将使用 kansas - temperature - humidity - 01 作为设备 ID,在所有命令中替换该名称。
3.4.3 激活设备
在网页浏览器中打开 Intel IoT Analytics 仪表板,点击左上角的菜单图标,选择“账户”,系统将显示“我的账户”页面。在“详细信息”选项卡中,如果激活码包含“(Code Expired)”文本,则表示激活码已过期,需要点击激活码文本框右侧的刷新图标(两个箭头的图标)来刷新激活码。刷新后,会出现一个倒计时器,显示激活码的剩余有效时间,我们有一小时的时间来使用该激活码。点击眼睛图标查看隐藏的激活码并复制。
在 SSH 终端中运行以下命令,使用之前生成的激活码激活设备:
iotkit - admin activate 01aCti0e
请将 01aCti0e 替换为您自己的激活码。执行该命令后,将生成类似以下的输出:
2016 - 04 - 05T02:24:46.449Z - info: Activating ...
2016 - 04 - 05T02:24:49.817Z - info: Saving device token...
2016 - 04 - 05T02:24:50.646Z - info: Updating metadata...
2016 - 04 - 05T02:24:50.691Z - info: Metadata updated.
此时,我们的 Intel Galileo Gen 2 板(即设备)已与提供激活码的“温度和湿度”账户关联,并且该命令生成了必要的安全凭证,即设备令牌。
3.4.4 查看和编辑设备信息
在网页浏览器中,点击 Intel IoT Analytics 仪表板左上角的菜单图标,选择“设备”,系统将显示“我的设备”页面,列出当前账户中已激活的所有设备。之前激活的 kansas - temperature - humidity - 01 设备将显示在列表中,其“名称”列显示为“Kansas - temperature - humidity - 01 - NAME”,“状态”列显示为“活动”。
点击列表中的设备 ID( kansas - temperature - humidity - 01 ),可以查看和编辑设备详细信息。我们可以添加标签和属性,以便在列表中更轻松地过滤设备。当我们需要处理多个设备时,这些功能非常有用。
通过以上步骤,我们完成了在 Intel IoT Analytics 中设置设备的基本操作。后续我们还可以进一步配置组件、收集传感器数据、分析数据以及设置规则触发警报等。
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B(检查iotkit-admin通信):::process
B --> C{通信成功?}:::decision
C -->|是| D(获取设备ID):::process
C -->|否| B
D --> E(更改设备ID):::process
E --> F(刷新激活码):::process
F --> G(激活设备):::process
G --> H(查看和编辑设备信息):::process
H --> I([结束]):::startend
这个流程图展示了在 Intel IoT Analytics 中设置设备的主要步骤,从检查通信开始,经过获取和更改设备 ID、刷新激活码、激活设备,最后查看和编辑设备信息,形成一个完整的设备设置流程。
4. Intel IoT Analytics 组件配置与数据处理
4.1 组件配置概述
在完成设备设置后,接下来需要在 Intel IoT Analytics 中配置组件。我们之前提到,对于连接到 Intel Galileo Gen 2 板的数字温湿度传感器,需要配置三个时间序列组件,分别是以华氏度(ºF)表示的环境温度观测值、以摄氏度(ºC)表示的环境温度观测值以及以百分比表示的环境湿度水平观测值。
我们可以通过两种方式进行组件配置:一是结合 Intel IoT Analytics 网站提供的用户界面(UI)和 iotkit - admin 实用程序;二是编写使用 REST API 的 Python 代码。当需要配置的设备较少时,使用 UI 进行操作较为直观;而当需要处理大量设备时,编写代码自动化配置任务则更为高效。
4.2 使用 UI 和 iotkit - admin 配置组件
4.2.1 注册组件
首先,我们使用 iotkit - admin 命令行实用程序注册组件。在 SSH 终端中,按照以下步骤操作:
1. 确定要注册的组件信息,如组件类型(时间序列)、名称(例如“环境温度(华氏度)”)、数据类型等。
2. 使用 iotkit - admin 命令注册组件,示例命令如下:
iotkit - admin register - component "环境温度(华氏度)" "time - series" "float"
该命令表示注册一个名为“环境温度(华氏度)”的时间序列组件,数据类型为浮点型。按照同样的方式,分别注册以摄氏度表示的环境温度和环境湿度组件。
4.2.2 在 UI 中确认组件
注册完成后,在网页浏览器中打开 Intel IoT Analytics 仪表板,点击左上角的菜单图标,选择“设备”,然后点击已激活的设备 ID(如 kansas - temperature - humidity - 01 )。在设备详细信息页面中,查看已注册的组件列表,确认三个时间序列组件已成功注册。
4.3 使用 REST API 配置组件
如果需要自动化配置大量设备的组件,可以编写 Python 代码使用 REST API 进行操作。以下是一个简单的 Python 代码示例:
import requests
import json
# 设备信息
device_id = "kansas - temperature - humidity - 01"
account_id = "your_account_id"
device_token = "your_device_token"
# 组件信息
components = [
{
"name": "环境温度(华氏度)",
"type": "time - series",
"dataType": "float"
},
{
"name": "环境温度(摄氏度)",
"type": "time - series",
"dataType": "float"
},
{
"name": "环境湿度",
"type": "time - series",
"dataType": "float"
}
]
# API 地址
api_url = f"https://dashboard.us.enableiot.com/v1/api/accounts/{account_id}/devices/{device_id}/components"
# 请求头
headers = {
"Content - Type": "application/json",
"Authorization": f"Bearer {device_token}"
}
# 发送请求
for component in components:
response = requests.post(api_url, headers = headers, data = json.dumps(component))
if response.status_code == 201:
print(f"组件 {component['name']} 注册成功")
else:
print(f"组件 {component['name']} 注册失败: {response.text}")
在上述代码中,需要将 your_account_id 和 your_device_token 替换为实际的账户 ID 和设备令牌。代码通过循环遍历组件列表,使用 requests 库发送 POST 请求到 Intel IoT Analytics 的 API 地址,完成组件注册。
4.4 传感器数据收集与分析
4.4.1 数据收集
在完成组件配置后,就可以开始收集传感器数据。我们可以使用运行在 Intel Galileo Gen 2 板上的 Python 代码,每秒从传感器读取数据,并将数据发送到 Intel IoT Analytics。以下是一个简单的数据收集代码示例:
import time
import requests
import json
import random # 模拟传感器数据
# 设备信息
device_id = "kansas - temperature - humidity - 01"
account_id = "your_account_id"
device_token = "your_device_token"
# 组件 ID
component_ids = {
"环境温度(华氏度)": "your_component_id_1",
"环境温度(摄氏度)": "your_component_id_2",
"环境湿度": "your_component_id_3"
}
# API 地址
api_url = f"https://dashboard.us.enableiot.com/v1/api/accounts/{account_id}/devices/{device_id}/data"
# 请求头
headers = {
"Content - Type": "application/json",
"Authorization": f"Bearer {device_token}"
}
while True:
# 模拟传感器数据
temp_f = random.uniform(60, 80)
temp_c = (temp_f - 32) * 5 / 9
humidity = random.uniform(30, 70)
# 构建数据
data = [
{
"on": int(time.time() * 1000),
"componentId": component_ids["环境温度(华氏度)"],
"value": temp_f
},
{
"on": int(time.time() * 1000),
"componentId": component_ids["环境温度(摄氏度)"],
"value": temp_c
},
{
"on": int(time.time() * 1000),
"componentId": component_ids["环境湿度"],
"value": humidity
}
]
# 发送数据
response = requests.post(api_url, headers = headers, data = json.dumps(data))
if response.status_code == 200:
print("数据发送成功")
else:
print(f"数据发送失败: {response.text}")
time.sleep(1)
在上述代码中,需要将 your_account_id 、 your_device_token 和 your_component_id_1 、 your_component_id_2 、 your_component_id_3 替换为实际的账户 ID、设备令牌和组件 ID。代码通过 while True 循环每秒模拟读取传感器数据,并将数据发送到 Intel IoT Analytics。
4.4.2 数据分析
Intel IoT Analytics 提供了强大的数据分析功能。在网页浏览器中打开 Intel IoT Analytics 仪表板,进入相应账户的“我的仪表板”页面,可以查看收集到的数据的统计信息和可视化图表。我们可以选择不同的时间范围,如小时、天、月、季度或年,来分析数据的变化趋势。
例如,我们可以查看环境温度在一天内的变化曲线,或者比较不同时间段的环境湿度平均值。通过分析这些数据,我们可以发现潜在的规律和问题,为决策提供依据。
4.5 规则设置与警报触发
4.5.1 规则设置
在 Intel IoT Analytics 中,我们可以设置规则来触发警报。规则基于组件的数据值和条件进行定义。例如,我们可以设置当环境温度超过 80 华氏度时触发警报。
在网页浏览器中打开 Intel IoT Analytics 仪表板,点击左上角的菜单图标,选择“规则”,然后点击“创建规则”。在规则创建页面中,设置规则名称、选择要监控的组件(如“环境温度(华氏度)”)、定义条件(如“大于 80”)和警报动作(如发送电子邮件通知)。
4.5.2 警报触发
当传感器数据满足规则定义的条件时,Intel IoT Analytics 将触发警报。我们可以在仪表板的“警报”页面中查看触发的警报信息,包括警报时间、触发规则和相关组件的数据值。
通过设置规则和警报,我们可以及时发现异常情况,采取相应的措施,保障物联网系统的正常运行。
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B(选择配置方式):::process
B --> C{使用UI和iotkit - admin?}:::decision
C -->|是| D(注册组件):::process
C -->|否| E(编写Python代码使用REST API):::process
D --> F(在UI中确认组件):::process
E --> F
F --> G(数据收集):::process
G --> H(数据分析):::process
H --> I(设置规则):::process
I --> J{规则条件满足?}:::decision
J -->|是| K(触发警报):::process
J -->|否| G
K --> L(查看警报信息):::process
L --> M([结束]):::startend
这个流程图展示了在 Intel IoT Analytics 中配置组件、收集和分析数据以及设置规则触发警报的完整流程。从选择配置方式开始,经过组件注册、数据收集和分析,到设置规则并根据规则条件触发警报,形成一个闭环的物联网数据分析系统。
总结
通过本文的介绍,我们全面了解了物联网领域的相关概念、工具以及如何利用 Intel IoT Analytics 进行大数据分析。从基础的 MQTT 协议、相关工具的使用,到物联网与大数据的紧密关系,再到 Intel IoT Analytics 的结构、设备设置、组件配置、数据收集与分析以及规则设置触发警报等方面,我们逐步深入探索了物联网大数据分析的整个流程。
在实际应用中,我们可以根据具体需求选择合适的工具和方法,灵活运用这些技术,实现物联网设备之间的高效通信和数据的有效分析。无论是小型项目还是大规模的物联网部署,这些知识和技能都将为我们提供有力的支持,帮助我们更好地应对物联网时代的挑战和机遇。
以下是一个总结表格,概括了本文的主要内容:
| 主题 | 主要内容 |
| ---- | ---- |
| 物联网基础概念与工具 | 介绍 MQTT 协议、Mosquitto、Eclipse Paho、Paho Python 客户端和 Dweepy 等概念和工具 |
| 物联网与大数据关系 | 阐述大数据在日常生活中的产生以及物联网设备数据量的惊人增长 |
| Intel IoT Analytics 结构与设备设置 | 说明注册账户、获取设备 ID、激活设备和查看编辑设备信息的步骤 |
| Intel IoT Analytics 组件配置与数据处理 | 讲解使用 UI 和 iotkit - admin 或 REST API 配置组件、收集和分析数据以及设置规则触发警报的方法 |
希望本文能为读者在物联网大数据分析领域的学习和实践提供有价值的参考。
超级会员免费看
753

被折叠的 条评论
为什么被折叠?



