跳到主要内容

Mendix、AWS 和物联网

Mendix、AWS 和物联网

您可能已经看到我们最近宣布扩大与 AWS 的战略合作关系,以及最近, Mendix 和 AWS 一直在合作创建一系列演示器和模板。我们希望展示这些出色的平台如何协同工作,就像我们针对金融服务和保险的加速器一样。

我们热衷于向您展示的一件事是 Mendix 和 AWS。本博客描述了我们已经构建的演示以及我们如何做到的。

本文与 西蒙·布莱克 (宣传和技术支持高级经理) 阿利斯泰尔·克劳福德 (解决方案传播者)和 阿德里安·普雷斯顿 (解决方案传播者)。

场景

正如我们在冷链物流博客中所讨论的那样,我们了解了冷链物流的场景以及如何跟踪温控货物的运输。为了实现这一点,我们使用了 Mendix 创建由 AWS 服务支持的 Web 应用程序前端。使用这些工具,我们希望构建:

  • 面向办公室用户的 Web 应用程序
  • 为实地工作人员提供移动版本
  • 支持 AWS 云架构来处理和提供数据

构建演示第 1 部分:IoT 和 AWS

为了简化真实数据的演示(并消除对带有传感器的实体卡车的需求),我们决定构建一个数据模拟器,然后使用它将数据输入 AWS 服务。

为了处理 AWS 中的 IoT 数据,我们选择使用 AWS Timestream,因此我们从这里开始。我们从 Timestream 创建了一个数据馈送,该数据馈送代表温度和湿度的传感器数据。我们还需要旅程数据和来自最终 IoT 设备的数据;锁和备用压缩机。

锁是一个简单的布尔值,用于存储它们是否已接合。备用压缩机也是一个开启或关闭的布尔值,但它会被反馈到 Timestream 数据的模拟器中,因此当压缩机开启时,温度数据会呈下降趋势。

我们决定实施的 AWS 功能之一是图像识别。在我们给出的场景中,卡车将运输新鲜农产品(在本例中为水果),需要在交货时进行检查。交货完成后,另一端的货物检查人员拍下照片,我们可以通过 AWS Rekognition 运行该照片,检测产品是好是坏。

以下是有关如何在 AWS 中创建这些数据集和功能的简要概述。

设置AWS IoT

为了从设备接收数据,我们利用了 AWS IoT Core.我们首先需要ed 设置我们的设备(在物联网中也称为) 事情。我们设立了一个 = 卡车上的车辆数据和卡车上每个集装箱的另一种数据。这将帮助我们跟踪车辆并监控集装箱的状况。 

一旦使用正确的安全策略设置了这些,我们就可以自动访问用于发送和接收数据的 MQTT 发布和订阅机制。

最后,我们可以在 AWS IoT Core 中配置一个规则,将来自我们的车辆和集装箱的传入数据存储在 TimestreamDB 中以供进一步使用。

设置 Amazon Timestream 数据库

Amazon Timestream 数据库的设置非常简单。我们创建了一个名为“物流”的数据库,并在其中创建了一个名为“集装箱”的表来保存集装箱传感器数据,以及一个名为“运输”的表来接收卡车数据。

为了在应用程序启动后不久在 Amazon Timestream 数据库中提供一些历史数据,应用程序通过向数据库添加一组随机生成的记录来初始化“事物”。这是使用与 AWS Java SDK 交互以访问 Timestream 记录写入功能的 Java 操作完成的。

随后,新数据通过 AWS IoT Core 中的规则添加到数据库表中。规则通过 AWS IoT Core 获取传感器/模拟器发布的选定消息,并将其写入指定的数据库表中。

一旦我们启动并运行了 AWS Timestream 数据库,我们就需要创建一些旅程数据。

生成旅程数据

在实际的旅程和设备跟踪场景中,我们的卡车设备通常会配备 GPS 模块来发送位置、航向和速度数据。这将为我们提供纬度、经度、英里/小时(或公里/小时)和加速度数据。

为了模拟旅程,我们利用了一些现有的模拟路线,这些路线通过 AWS 向公众开放。它们有一组很棒的静态路线,这些路线有出发地、目的地,然后是一系列以逼真的模式分布在它们之间的阶段或点。所有这些都采用 JSON 格式,易于理解。

对于大多数其他传感器数据,我们利用一些简单的数学运算来生成符合我们的阈值的随机值 - 例如温度和湿度。

生成行程数据后,我们就可以模拟跟踪卡车,接下来我们需要实现图像识别功能并构建数据集。

AWS Rekognition

为了简化产品(在我们的案例中是水果)质量检查过程,我们决定实施一些人工智能。AWS 拥有一系列针对多种场景设计的机器学习和人工智能解决方案。对于图像和视频识别,AWS 提供了 AWS Rekognition。Rekognition 提供了一系列预先训练的机器学习模型,并允许您训练自己的模型。对于我们的用例,我们希望允许用户拍摄一些水果的照片并检查其质量。

首先,我们需要训练我们的 Rekognition 模型,以了解好水果和坏水果的样子。要建立一个有效的模型,拥有一个好的数据集非常重要。我们能够提供的图像越多,我们得到的训练模型的结果就越好。幸运的是,有许多免费的开放数据集可以帮助我们加速开发。我们发现这个数据集有数千张代表腐烂和新鲜水果的图像:

https://www.kaggle.com/datasets/sriramr/fruits-fresh-and-rotten-for-classification

我们获取了这个数据集并将其上传到 AWS S3,以便 AWS Rekognition 可以使用这些图像进行自我训练和测试。构建一个检测自定义标签的模型既快速又简单。只需 6 个步骤,您就可以构建一个检测标签的模型:

训练数据集时AWS Rekognition 可以根据 S3 中使用的文件夹名称自动标记您的图像,也可以手动添加标签。由于数据集很大,我们决定使用自动标签分配。这意味着t 在构建数据集时,我们不必手动为每个图像添加标签。 这 SAVed 我们花费了大量的时间和精力。在构建数据集时,提供训练数据集和测试数据集非常重要。这使得 AWS Rekognition 自我训练 然后测试 使用训练集建立的模型的准确率。 

 

使用数据集训练模型后(大约需要 30 分钟),需要启动模型。训练并启动模型后,它就可以通过 AWS API 接受请求(详细信息可在本文后面找到),并根据图像输入检测标签。

构建演示第 2 部分: Mendix

为了开始构建,我们绘制了一些线框和流程,我们的 UX 设计师提出了 Figma 设计来指导应用程序的外观和感觉。

现在我们大概知道它最终会是什么样子,我们可以开始把各个部分组合在一起了。

  • 集成
  • 领域模型
  • 应用

构建从支持系统的管理工具和预填充系统数据的方法开始。我们创建了域模型实体来存储卡车、集装箱、司机和运输货物所需的信息。然后,我们创建了例程,使用示例数据预填充此实体以进行演示,并让其他人将来可以轻松使用它。

然后,卡车被链接到行程数据,集装箱被连接到 Timestream 数据源。

整合 Mendix 使用 AWS Timestream
当物流应用程序需要从 Timestream 检索历史 IoT 数据时,可以通过设置 SELECT 语句并通过 Timestream 查询 Java 操作运行该语句来完成。这是一个 Java 操作,旨在使用 AWS Java SDK 对 Timestream 数据库执行查询并返回结果。

为了支持数据生成并检查其是否正常工作,我们创建了一些管理页面来预览、修改和导出数据。导出特别有用,因为我们创建的 JSON 文件随后可用作演示应用程序中预填充的数据源。

接下来,我们在概览页面上展示了我们构建的卡车和司机信息。这让后台用户有机会选择他们想要查看的车辆。演示中只有一辆车启动,但如果有几辆车,选择起来就很容易了。

点击一辆卡车,您可以查看该卡车的详细信息和当前状态。这就是模拟信息的来源。从上到下,我们从集装箱选择器开始,因为我们系统中的每辆卡车都有两个集装箱,这控制着下面部分中监视器的视图。

接下来是右上角的地图。 Mendix的默认小部件非常适合显示位置,但当时没有内置选项来绘制路线或轻松显示移动的卡车。在市场上快速搜索也没有找到任何能满足我们需求的东西,所以我们创建了自己的 可插入小部件 使用 React 和 JavaScript。这个新的小部件显示路线、沿路线行驶的卡车以及它前进的方向。

底部显示所选集装箱内的温度和湿度更新以及它们运输的产品。此外,还有备用压缩机和锁的开关。所有这些都需要连接到我们的 Timestream 数据。

然后定期刷新数据以提供最新信息。任何由温度或湿度突破阈值触发的警报都会通过 Web 套接字传递到客户端,以便几乎立即更新。我们通过 Amazon SNS 扩展了此功能,以提供短信和电子邮件通知。

所有操作均记录在时间轴中,显示卡车行程中的关键事件,从警报到车门锁定,再到车门解锁。所有传感器数据也以详细视图呈现。

 

最后一个难题是为现场用户开发移动应用程序。对于这个演示,我们决定使用响应式 Web 应用程序,而不是原生移动应用程序,因此很多设计都可以在后台系统和移动版本之间重复使用。

    

最后要实现的是检查表和 Rekognition API。表格很简单;一张货物图片、到货日期和一些状况评估。拍完照片后,它会提交给 Rekognition API,我们训练它根据大量图像样本识别好苹果和坏苹果。它会返回好或坏的质量评估以及对结果的信心程度。

整合 Mendix 使用 AWS Rekognition

易于集成 Mendix 使用 AWS Rekognition。AWS 通常提供多种集成到其平台的方法。您可以使用您选择的语言使用 SDK,也可以选择使用底层 API。使用 Mendix 我们有两个选择:要么使用 AWS Java SDK,要么使用 Mendix REST 微流操作。我们选择采用 REST 路线,以尽量减少对 Java 的依赖,并使用尽可能多的本机 Mendix 尽可能(Mendix 这是迄今为止最简单、最快捷的途径,因为与 REST API 集成是一个简单的过程,而不是与我们不熟悉的 SDK 集成。)

我们首先专注于实现主要活动,即检测自定义标签。使用此 API,我们能够在 Mendix: https://docs.aws.amazon.com/rekognition/latest/APIReference/API_DetectCustomLabels.html

首先,我们为响应构建了一个 JSON 片段,并构建了一个导入映射来处理响应。

接下来,我们需要一种方法将图像以 Base64 编码字符串的形式发送到 AWS,并将其保存在“Bytes”属性中。为此,我们为 Mendix System.Image,选择Contents属性,并将外部名称改为:“Bytes”。

然后我们使用导出映射和上述消息定义,让我们将图像转换为正确的 JSON 格式。

最后,需要进行 Microflow 调用以将图像发送到 AWS 识别并返回机器学习模型检测到的标签。在此 microflow 调用中,我们有一系列 AWS Rekognition 所需的参数。首先,Microflow 将图像导出为 JSON 对象字符串,其中有一个名为“Bytes”的属性。然后将其与有效负载中的其他参数一起用于 REST 操作。

在 REST 操作中,我们使用传入参数的 AWS 区域来定义位置。添加 API 所需的 HTTP 标头。添加必要的请求负载和响应映射。

我们为演示者打造的最后一个魔法更具技术性。 在被子下面。 AWS API 要求使用名为 Sig4 的流程对每个 API 调用进行签名。它使用 AccessKey 和 SecretKey 在发送 HTTP 请求之前对其进行签名,以确保其真实性。在 After Startup Microflow 上,我们添加了一个 Java Action 来拦截对 AWS Rekognition 的所有调用,并在发送之前添加其他所需的 Sig4 标头。

所有与 AWS Rekognition 和 Sig4 Interceptor 的集成都将在 Mendix Marketplace 即将推出。这进一步简化了与 AWS Rekognition 的集成,让您能够按照视频中演示的方式使用 AWS Rekognition。

把它包起来

我们的演示应用程序展示了如何在从源头到商店的运输过程中跟踪和监控产品。我们使用 AWS IoT Core 通过 AWS Timestream 服务监控温度、湿度和位置,并使用 Rekognition 分析图像。然后我们使用 Mendix 快速构建一个响应式前端来连接这些服务并向多种设备类型实时提供数据。

如果你想了解更多关于如何使用 Mendix 和 AWS,请注册参加我们 30 月 XNUMX 日的网络研讨会,我们将在会上展示 Mendix 由 AWS 服务提供支持的平台。我们准备了一个演示,您将在其中看到正在创建的智能应用程序,以改善易腐货物的运输物流。 在这里注册!

选择你的语言