通过 IoT 设备模拟器、AWS IoT Analytics、Amazon QuickSight、Microsoft Power BI 和 Tableau 了解商业结果

2019 年 9 月 20 日

通过 IoT 设备模拟器、AWS IoT Analytics、Amazon QuickSight、Microsoft Power BI 和 Tableau 了解商业结果

客户在确定并同意对其业务具有真实的潜在商业结果前,他们的软件开发周期往往会较慢。本文重点介绍了客户应如何在实际开发和设计设备的同时,考虑使用模拟设备来探索商业结果,然后建造和部署真实的设备以提供真实的仪表数据,从而达成实际的商业结果。


这种方法的转变不仅可以增加开发和部署期间的跨职能领域(业务和工程/IT)协作机会,同时也可以为了解 IoT 实施的完整价值主张奠定坚实的基础。我们将这一优点称之为“可以快速建造设备以满足最低值得爱产品 (MLP) 要求”,强调在实际的设备硬件和软件开发时以设备遥测为中心。


顺序式 IoT 实施


传统的 IoT 开发和实施往往会遵循预先规定的顺序模式。


  1. 放大、设计或取得 IoT 设备并执行现场测试;

  2. 将传感器安装到设备上并执行功能测试;

  3. 开发和测试 IoT 设备软件;

  4. 固定好设备并将其连接到 AWS IoT Core(使用或不使用 AWS Greengrass);

  5. 定义 AWS 用户和应用程序策略,然后附加到证书;

  6. 执行数据存储和基本的分析功能;

  7. 将遥测数据纳入现有或新的可视化和报告中;

  8. 开发 IoT 运行报告指标(包括设备运营 KPI 和 IoT 解决方案驱动的 KPI);

  9. 演进业务集成功能并定期沟通结果;

  10. 以 IoT 数据和分析作为关键出发点,持续分析 IoT 价值主张的 ROI;

  11. 一般而言,在完成大规模的设备部署前,业务团队和主要利益相关方可能没有能力评估 IoT 的效果。这种方法可能会延误 IoT 驱动功能的采用,原因包括:1) 无法方便地理解和沟通内在商业价值;2) 物理设备开发与实际的 IoT 数据生成、获取和使用之间存在时间差,这可能打击采用的热情;3) 大规模 IoT 实施的测试和验证可能会导致关注重点偏离分析,有可能会破坏 IoT 实施的总体成功。


迭代式 IoT 开发从数据和分析开始


借助分析和设备模拟器驱动的新功能,还可以选择从模拟的数据出发,以迭代/敏捷的方式实际开始开发 IoT 解决方案。模拟器生成的数据与实际设备生成的数据之间的差异,能够以区别不明显的方式建模。哪些种类的数据最适合特定的 IoT 实施? 生成数据的频率是多久一次? 哪些种类的可视化最能补充或丰富现有的商业职能功能?


典型的迭代式 IoT 分析开发模式将如下所示。


  1. 模式设备数据并与业务、软件和工程利益相关方一起对模拟数据进行迭代式调整。主要目的是从设备模拟器上取得基本与生产期间设备生成的数据相同的数据;

  2. 识别创建分析和可视化需要的元数据。其中一些数据可能位于 S3 存储桶中;

  3. 丰富文档、转换、筛选数据;

  4. 使用 Power BI、Tableau 或 QuickSight 等可用的 BI 工具建立可视化原型。

  5. 迭代第 1 至 4 步,直到达成业务和技术目标为止;

  6. 创建开发、测试解决方案以及将其部署到生产环境所需的设计文档、信息模型和构件;


通过 AWS IoT Analytics 率先开始 IoT 迁移


使用 IoT 设备模拟器的另一个重要理由是,它有利于确立将现有 IoT 实施迁移到的 AWS IoT 的定位。现有的 IoT 实施已经生成了数据,使用 AWS IoT Core 和 AWS IoT Analytics 可以帮助企业真实了解 AWS 如何帮助弥补当前所实施分析解决方案的一些不足。此外,IoT 模拟和可视化可以从首先从业务的角度来完成,然后再从技术层面来调整迁移策略。


底层数据面(数据模型、数据类型、频率等)可以与当前实施相同,同时通过使用 AWS 现成的功能与现有 BI 工具和可视化集成,从而在数据注入和分析环节进行更多创新的迭代。


总体解决方案架构



取得 AWS 账户后,要发挥 IoT 解决方案的商业价值,需要满足的下一个前提条件是设置 IoT 设备模拟器。IoT 设备模拟器是为您的 AWS 账户部署的一个解决方案,它使用 Web 界面来支持“软”设备与您账户中区域的 AWS IoT 终端节点进行交互。


部署好 IoT 设备模拟器并登录后,您应会看到与以下类似的窗口。



让我们设置一个新的设备类型,然后在它下面创建新的设备(小工具)。在一个设备类型下创建的所有设备都会以定义类型创建期间定义的结构和频率生成数据。


我创建了一个叫做 tankfillsensor 并具有如下 JSON 负载的设备类型。数据传输持续时间为 6000 秒(或 6000000 毫秒),频率为 5 秒(5000 毫秒)。此设备类型发布有关 MQTT 主题 liquidtank/fillpercentage 的数据。


{  "deviceid": "799fc110-fee2-43b2-a6ed-a504fa77931a",  "fillpercentage": 99.4,  "batterystatus": "true",  "datetime": "2018-02-15T21:50:18",  "latlong": "{ 'latitude': 38.9072, 'longitude': 77.0369 }",  "gridlocationid": 1000,  "attribute1": "asdqwiei1238"}
复制代码


导航至左侧的小工具后,我们可以单击“添加小工具”,我们添加了 10 个同一类型 (tankfillsensor) 的设备。完成之后,我们启动每个设备,设备模拟已经开始。



我们导航至 AWS IoT Core,然后进入“测试”选项卡并订阅 liquidtank/fillpercentage,我们可以看到所定义的设备正在发布数据。我们发现设备模拟器实际上添加了一个与您的设备关联的设备 ID (id),以免您忘记在 MQTT 负载中添加



现在我们可以使用规则引擎将数据发送到某个 AWS IoT Analytics 通道。我们创建了一个叫做 IoTAnalytics_liquid_tank_fill 的新规则,其 SQL 语句如下。


SELECT *, parse_time("yyyy-MM-dd HH:mm:ss z", timestamp()) as ingest_dt FROM 'liquidtank/fillpercentage'
复制代码


为了让我们选择的操作将 MQTT 消息发送到我们同时创建的叫做 liquid_tank_fill 的 IoT Analytics 通道,我们创建了此规则操作。



我们导航至 IoT Analytics,可以看到 liquid_tank_fill 通道已经将数据保留期限设置为无限期。



然后我们单击“管道”并创建一个叫做 pipeline_ltf 的新管道,同时定义新的操作并将数据存储在一个叫做 fillpercentage_ds1 的数据存储中。我们已将向该管道添加了 2 项活动:将加注百分比除以 10,并创建一个新的字段以将十进制值存储为 fieldpercentage1=fieldpercentage/100 和 batterystate = batterystatus+1。



现在我们已经创建了数据存储,并且在管道处理中定义了两外 2 个新属性,并且我们可以使用刚刚创建的数据存储来创建一个数据集。


在 IoT Analytics 窗口中单击分析,然后单击数据集。创建一个叫做 fillpercentage_dataset1 的数据集,此数据集带有一个如下的简单查询。我们可以看到,除原始的传入字段外, fillpercentage1 和 batterystate 这两个字段都已添加。


SELECT * FROM fillpercentage_ds1 where __dt >= current_date - interval '7' day
复制代码


将此数据集设置为每小时运行一次。



您可以在 Jupyter 笔记本中访问此数据集以用于报告,或者直接在 QuickSight 中访问。但如果您使用 Power BI 或 Tableau 来满足整个企业的报告需求,您可能需要下载该文件并将其导入到自己的企业 BI 应用程序中。


下面是一个使用 QuickSight 创建的可视化示例。在 QuickSight 中,为了从 IoT Analytics 连接到某个数据集,请单击“管理数据”和“新数据集”,然后下翻至 AWS IoT Analytics 并选中 fillpercentage_dataset1。



原始数据集可以通过左侧的 CSV 文件来访问,并且可以下载该文件以在 Power BI 或 Tableau 中使用。另一个方案是使用与以下类似的 Python 脚本(每小时执行一次,间隔 30 分钟)并从 AWS IoT Analytics 下载 CSV 数据集。


以下脚本将会获取 CSV 数据集 fillpercentage_dataset1 并将其保存为 filetoimport.csv。它还将保存到您自己的 S3 存储桶中。


#!/usr/bin/python# -*- coding: latin_1 -*- 
import awscliimport osimport sysimport urllibimport boto3
# define where the aws cli command output will be stored# define the AWS IoT Anaytics data setfilename = 'foobar.txt'awsiotdataset = 'fillpercentage_dataset1's3bucket = 'iotidcv's3filename ='filetoimport_s3.csv'
# build the AWS CLI command to get the URL of the datasetcommand = 'aws iotanalytics get-dataset-content --dataset-name ' + awsiotdataset + ' > ' + filename
# execute the commandos.system(command)
## utility functions for string manipulationdef left(s, amount): return s[:amount]
def right(s, amount): return s[-amount:]
def mid(s, offset, amount): return s[offset:offset+amount]
#################
# function to save file to s3 bucket def save_to_s3(bucket,filename, content): client = boto3.client('s3') # can change the S3 key as you see fit k = "folder/subfolder/"+filename client.put_object(Bucket=bucket, Key=k, Body=content) #############
# open filef = open(filename)
# read in file lineslines = f.readlines()
# get the second line of the AWS CLI command line file output - 0 is the first linelinewithurl = lines[1]
# extract the pre-signed URL from the line# extract the pre-signed URL of the S3 bucket where the AWS IoT dataset is stored in AWS# url = linewithurl[-(len(linewithurl)-len('ENTRIES ')):]
# extract the pre-signed URL of the S3 bucket where the dataset is storedurl = right(linewithurl, len(linewithurl)-len('ENTRIES '))
# open up the presigned url and download the file as a CSV called filetoimport.csvcsvfile = urllib.URLopener()
csvfile.retrieve(url, "filetoimport.csv")

# optional, save the csv to your s3 bucket# just for confirmation, show the presigned URLprint(url) + '\n URL length: ' + str(len(url)) + '.Total line length with URL in it is: ' + str(len(linewithurl)) + + '.IoT Data Set saved as filetoimport.csv'
# uncomment the line below---------------------------to activate s3 save# change the name of the bucket to match yours at the top of the scriptsave_to_s3(s3bucket, s3filename, open('filetoimport.csv','rb'))
print('CSV file saved to S3 bucket name: ' + s3bucket + ', file name: folder/subfolder/' + s3filename + '.')# ------------------------------------
复制代码


以上脚本使用 aws cli,但您可以轻松更改为使用对应的 REST API,检索 JSON 应答,然后访问 URI(在顶部添加 import json 和 import requests 并从负载中检索 dataURI)。


client = boto3.client('iotanalytics')
response = client.get_dataset_content( datasetName='aws_iota_dataset', versionId='$LATEST_SUCCEEDED') data = reponse.json()url = data([0],['dataURI'])
复制代码


在安装了 Power BI 的实例上,现在我可以连接到存储该 CSV 文件的 S3 存储桶,并使用“获取数据”菜单并输入 S3 存储桶的 URL 和文件名 https://s3.amazonaws.com/iotidcv/folder/subfolder/filetoimport_s3.csv。此外,我还可以从我的桌面电脑使用此 CSV 文件。


这时将显示与以下类似的屏幕,在几分钟内我就可以开始在 Power BI 中创建可视化。



这是一个使用 Power BI 可视化的例子,它根据 AWS IoT Analytics 生成的 CSV 文件按照日期时间和设备 ID 显示贮罐加注百分比值。


下例显示了为某个特定设备筛选并带有一条趋势线的 Power BI 可视化。



在 Tableau 中,我从 S3 存储桶下载并连接到该文件。我获得一个以下类似的屏幕。


Tableau 还可以用于连接到 Amazon Athena。https://www.tableau.com/about/blog/2017/5/connect-your-s3-data-amazon-athena-connector-tableau-103-71105



我们可以使用 CSV 数据来创建 Tableau 可视化。



下面是放大特定设备数据的时间序列可视化示例。



本博客探索了如何将 AWS IoT Analytics 作为一个主动迭代式和交互式的平台使用,从而快速建立 IoT 解决方案的原型以及进行开发、部署和监控。通过使用 IoT 设备模拟器,消除了设备遥测方面的硬件依赖,并且可以借助从 Amazon QuickSight 到 Microsoft Power BI 和 Tableau 等多种报告工具可视化显示商业结果。


总之,AWS IoT Analytics 可以与 IoT 设备模拟器组合用于战略用途(规划、构思和数据映射)以及战术用途。从 IoT 应用程序开发的早期阶段到生产,它不仅可帮助将 IoT 生成的数据可视化,同时还可帮助识别与各个设备关联的潜在传感器和指标,这种方法可让利益相关方直接了解关键商业指标。AWS IoT Analytics 生成的数据集十分干净,可以与现有的 Jupyter 笔记本 (Python)、BI 控制面板、企业可视化工具和运行报告集成。此外,干净的 IoT 数据集可以直接用于通过 Amazon SageMaker 开发和运行机器学习模型。


本文转载自博客 aws。


原文链接:


https://amazonaws-china.com/cn/blogs/china/before-developing-real-devices-exploring-a-business-outcome-with-simulated-devices/


2019 年 9 月 20 日 13:47216
用户头像

发布了 1191 篇内容, 共 25.4 次阅读, 收获喜欢 15 次。

关注

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布
暂无评论
发现更多内容

典型的大型互联网应用系统的技术方案和手段

LeetCode题解:104. 二叉树的最大深度,递归,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

快讯2020第十三届亚洲国际物联网展览会-南京站

InfoQ_caf7dbb9aa8a

全屋智能2020第十三届(南京)国际智能家居展览会

InfoQ_caf7dbb9aa8a

区块链教育 丨 首批区块链专业新生正式入学

CECBC区块链专委会

区块链技术 区块链教育

“海外同步优惠”与“中国专享折扣”十大必败榜抢先放送

爱极客侠

内存条的讲解

亚兰—硅的传奇official

原创 内存 硬件 计算机 哔哩哔哩

java安全编码指南之:lock和同步的正确使用

程序那些事

java安全编码 java安全 java安全编码指南 java编码

讲一讲我所认为的「人生三最」,你或许能够参悟到什么

非著名程序员

程序员 个人成长 时间管理 精力管理

震精,京东T8工程师每天熬夜到天明,竟只是为一套编程实战文档

周老师

Java 编程 程序员 架构 面试

做好分库分表其实很难之二

架构师修行之路

微服务 分库分表

MySQL事务隔离级别

长沙造纸农

MySQL 事务隔离级别 mysql事务 事务 MySQL 运维

架构1期第四周作业1-大型互联网系统技术梳理

道长

极客大学架构师训练营

架构师训练营第1期第四周作业二

道长

极客大学架构师训练营

记一次MySQL日期范围查询优化

墨凡

MySQL SQL优化

从联想ThinkStation工作站,窥见工具文明的新纪元

脑极体

手把手教你AspNetCore WebApi:Serilog(日志)

AI代笔

ASP.NET Core web api serilog

古北水镇的夜

张晓楠

生活 摄影

LeetCode题解:111. 二叉树的最小深度,递归,JavaScript,详细注释

Lee Chen

前端进阶训练营

对不起,学会这些 Linux 知识后,我有点飘

cxuan

Linux 后端 操作系统 计算机

20年开源老司机手把手教你玩开源——openEuler入门指南

openEuler

Linux 开源 系统操作

架构师作业第三周学习总结

Wee权

JDK 中的栈竟然是这样实现的?

王磊

Java 数据结构和算法

2020第十三届(南京)智慧城市技术与应用产品展览会

InfoQ_caf7dbb9aa8a

用NOSql给高并发系统加速

架构师修行之路

nosql redis 分布式 微服务

产品分析

时间是一个人最好的证明

产品经理 产品设计

Apache Doris在云真信智能决策分析平台的应用实践

DorisDB

数据库 数据仓库 金融科技

架构师训练营第 1 期 - 第四周学习总结

Anyou Liu

极客大学架构师训练营

Spring Cloud 微服务实践(7) - 日志

xiaoboey

kafka 微服务 Spring Cloud 日志 spring cloud stream

关于国际化语言 Intl

西贝

Java 前端 国际化 格式化

架构师训练营第三周作业

Wee权

通过 IoT 设备模拟器、AWS IoT Analytics、Amazon QuickSight、Microsoft Power BI 和 Tableau 了解商业结果-InfoQ