毫无疑问,微软Azure和IOTA都将在未来的物联网(IoT)领域扮演重要角色。这两个平台都可以提供独特的解决方案,确保大数据可以以安全的和可扩展的方式进行处理。Simlyn通过展示一个可应用于现实世界的概念证明来连接两个平台:由物理硬件设备提供的数据将可以发送到云端。Web应用程序使用IOTA的Flash Library模拟供需模型。所有FLASH Channel交易都存储在NoSQL数据库中,该数据库充当机器算法演示源。
由于部署一会儿就会变得非常耗时,所以我发布了一个YouTube视频,让您了解Simlyn的一些特性。还有一个离线模式的演示。
Simlyn是开放的和正在进行中的任务。如果您有任何问题,请随意创建一个pull请求或创建一个issue。
架构
从架构的角度来看,Simlyn由六个独立部分组成:
- Raspberry Pi 3:连接到Bosch BME280的物理硬件设备。
- IoT Hub:启用物联网设备之间可靠的双向通信。
- Node Web App:使用flash.lib.js提供Flash Channel支持,充当前端解决方案。
- Web API:用于处理数据库调用的.NET Core Web API。
- Cosmos DB:NoSQL数据库,用于低延迟和大规模可扩展应用程序。
- Power BI:提供实时分析支持的业务工具。
Simlyn是如何工作的?
Windows 10 IoT Core运行在一个Raspberry Pi 3上。该设备使用MQTT协议将温度和湿度数据发送到一个Azure IoT Hub。传入的流量被路由到部署在Azure中的Node Web App。这个Web App实现了IOTA的Flash Library来处理双向的off-Tangle支付通道。此外,该app使用chart.js和Bootstrap框架显示图形输出。IOTA和Azure之间的另一个链接是存储Flash Channel交易的NoSQL数据库(Azure Cosmos DB)。由于Cosmos DB支持低延迟,所以数据可以用于机器学习场景、图形演示,甚至是实时计费分析。我连接了Power BI,来演示一种显示Flash Channel交易图形输出的简单方法。
要求
如果你想运行Simlyn,请确保你有:
- Microsoft Azure Subscription(从这里开始注册免费订阅)
- Visual Studio 2017(免费社区版本对此演示非常好)
- Node, NPM, .NET Core 2.0
- 带Bosch BME280 传感器模块的Raspberry Pi 3
- Windows 10 Dev Machine,因为我们正在为Raspberry Pi 3部署Universal Windows Platform (UWP) app。
- Visual Studio Code或其它你熟悉的Web IDE
在线模式
在线模式包含了前面面讲到的架构的设置步骤。如果您想在本地运行Simlyn,我建议您浏览离线模式场景。
一、部署Azure服务
打开Visual Studio solution:Simlyn ARM Deployment。 按照这个指南将模板部署到Azure Resource Group(RG)中。 确保您在参数文件中正确设置了变量。 请同时验证下面列出的Azure资源设置是否正确。
资源类型 | 设置 | 值 | 描述 |
---|---|---|---|
IoT Hub | Devices | Enabled | 设置你的IoT设备。 |
Web App (Node) | Web Sockets | Enabled | 通过TCP提供全双工通信。 |
Web App (Node) | Azure.IoT.IoTHub.ConnectionString | 由IoT Hub提供的连接字符串 | 用于dev注册的IoT Hub连接字符串。 |
Web App (Node) | Azure.IoT.IoTHub.ConsumerGroup | 由IoT Hub提供的consumer group | 使阅读者能够独立阅读消息。 |
Web App (Node) | Deployment Option | 本地 Git 部署 | 从本地Git仓库将你的app部署到Azure Web Apps。 |
API App (.NET) | CORS | * | 跨源资源共享(CORS)允许在外部主机上的浏览器中运行JavaScript代码。 |
Cosmos DB | Throughput (RU/s) | 400 | Cosmos DB的货币。 |
二、将通用Universal Windows Platform (UWP) app发布到Raspberry Pi 3。
- 确保你按照这个指南正确的将Raspberry Pi 3与BME280传感器连接起来。
- 在Raspberry Pi 3上安装Windows 10 IoT Core(如果您遇到性能下降的问题,请确保使用16GB或更大的SD卡)
- 打开位于Simlyn Universal Windows Platform App文件夹中的MainPage.xaml.cs类。 按如下所述更新变量:
- private string iotHubUri = ""; 33行
- private string deviceKey = ""; 34行
- deviceClient = DeviceClient.Create(iotHubUri, new DeviceAuthenticationWithRegistrySymmetricKey("Your Device Name", deviceKey), TransportType.Mqtt); 39行
- 将Visual Studio远程连接到Raspberry。这个教程展示了基本步骤。
- 构建Visual Studio solution(Ctrl + Shift + B),这可能需要一段时间,因为VS要下载并安装项目中使用的NuGet包。
- 将app部署到设备上(也可以发布)。当我们在Broadcom处理器上运行这个示例时,请确保选择“ARM”作为目标平台。
- 部署完成后,您就能够在控制台中看到一些调试输出。 您可以通过切换到Azure portal中的IoT Hub来验证云数据输入。
三、配置和发布Web API。
如果到目前为止还没有完成,请在您的机器上安装.NET 2.0或更高版本。
打开Simlyn Web API并切换到globals.c类。编辑以下参数(通过使用Azure portal切换到Cosmos DB数据库帐户来获取所有参数):
- public static readonly string DocDBDatabaseId = "<Your Database ID>"; 行 13
- public static readonly string DocDBEndpoint = "<Your Cosmos DB Endpoint Uri>"; 行 14
- public static readonly string DocDBAuthKey = "<Your Doc DB Auth key>"; 行 15
- public static readonly string DocDBCollectionHistory = "<Your Collection Name>"; 行 20
右键单击该项目并选择Publish 。 将API部署到您在步骤1中创建的其中一个Web app资源
当我们使用Swagger package时,进入<resourcename>.azurewebsites.net/swagger以查看公共的.NET POST和GET操作
四、配置和发布Node Web App
- 使用Visual Studio Code或您喜欢的web IDE打开目录Simlyn Node App下的/public/javascripts/文件夹。编辑以下变量:
- var apiService = '<Your FQDN of the API // eg, https://simlyn-backend.azurewebsites.net/api>' 在 index.js 第6行
- var apiService = '<Your FQDN of the API // eg, https://simlyn-backend.azurewebsites.net/api>' 在 iotaflash.js 第2行
- var UseMockedData = false 在 index.js 第72行的
- 切换到文件IOTAHelpers/globals.js并更新下面列出的变量(您可以使用在线种子生成器并使用IOTA的轻钱包创建地址)。确保你的地址由81个字符组成,如果需要删除校验和。
- oneSeed :<seedOne>
- twoSeed:<seedTwo>
- oneSettlement:<settlementOne>
- twoSettlement:<settlementTwo>
- 确保您按照本教程启用了本地git仓库部署。 使用Azure portal从web app resource复制git仓库URL
- 通过运行下面的cmdlet将节点应用发布到Azure
- git remote add simlynnodeapp <Git clone URL from the Azure portal>
- git push simlynnodeapp master:master
- 部署会需要一些时间,因为cmdlet要启动Node build和release任务。
- 您现在可以浏览 https://yourwebapp.azurewebsites.net并开始模拟。
- 点击“End Simulation”按钮后,IOTA的Final Bundle被创建。 我没有实现AttachToTangle功能,因此演示会自动重置
五、启用Power BI可以查看Cosmos DB数据库提供的坐标
- 下载Power BI Desktop应用
- 创建一个新项目并从Cosmos DB数据库导入数据。您可以阅读本指南。
- 打开Query Editor,然后选择coordinates列
- 选择coordinates字段,并创建一个新的Power BI Map
离线模式
您也可以在离线模式下运行Simlyn。这意味着Node app与云(除了Cosmos DB)和硬件设备之间没有交互。还有一个可用的离线模式演示。
打开命令行工具并在按下面设置环境变量
- set Azure.IoT.IoTHub.ConnectionString=<randomstring>
- set Azure.IoT.IoTHub.ConsumerGroup=<randomstring>
使用Visual Studio代码或您常用的IDE打开Node app。 将mockedData布尔值设置为true
- var mockedData = true (在public/javascripts/index.js中)
切换到IOTAHelpers/globals.js并更新下面列出的变量(使用在线生成器获取创建种子,然后登录钱包生成地址)。 确保你的地址由81个字符组成,如有需要可删除校验和。
- oneSeed : "seedOne"
- twoSeed: "seedTwo"
- oneSettlement: "settlementOne"
- twoSettlement: "settlementTwo"
切换到命令行并运行以下节点命令
- npm install
- npm start
打开浏览器并转到localhost:3000
后期需要完善的功能
- 更美观的用户界面/用户体验元素(响应现在不是很流畅)
- 以更安全的方式存储敏感数据(种子,个人信息等,例如,Azure Key Vault)
- 启用更多支付选项(例如,按照千字节而不是调用量)
- 实施“附加到缠结(Attach to Tangle)”功能
- 利用更多Azure服务(例如,流分析,Power BI等)
- 将NodeJS Web app拆分为consumer和receiver应用
- 实施Azure Active Directory(AAD)以保护应用服务
本文为翻译内容,可能存在技术术语的翻译歧义以及作者可能会不定期修改原文,所以建议参照原文进行阅读。