彩票走势图

物联网仿真的价值:通过服务虚拟化入侵Alexa

翻译|使用教程|编辑:郑恭琳|2021-03-24 11:19:27.497|阅读 123 次

概述:如果您像我一样,就会不断想象完全实现的物联网生态系统的未来可能性。在家庭环境中,我想象我的汽车,GPS和Nest可以一起工作,以预测我的到来并对气候控制进行适当的调整。或是冰箱,打蛋器和Amazon Fresh在我什至不知道需要它们之前就毫不费力地互相订购鸡蛋,这是什么未来。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:


如果您像我一样,就会不断想象完全实现的物联网生态系统的未来可能性。在家庭环境中,我想象我的汽车,GPSNest可以一起工作,以预测我的到来并对气候控制进行适当的调整。或是冰箱,打蛋器和Amazon Fresh在我什至不知道需要它们之前就毫不费力地互相订购鸡蛋,这是什么未来。

在其他时候,我坚信物联网将带来反乌托邦式的未来(如Wired令人发指的详细描述)。

幸运的是,我们处于这种互连水平上的某些方式。物联网的发展还处于起步阶段,物联网开发人员必须克服一些关键的挑战。

似乎已经达成共识,环境复杂性是一个重大挑战,这是一个棘手的挑战,因为复杂性是物联网领域的重点–作为物联网设备的开发者,我可能会与许多下游的第三方API集成,而其他开发人员可能会使用我公开的API

在物联网需求增加之前,我们可能已经通过创建物理测试实验室在API和设备生态系统中测试了我们的设备。现在,这是一个过时且昂贵的主张,并且开发人员通常无法控制来自第三方API或设备的数据(这对于边缘案例测试至关重要)。

这就是为什么服务虚拟化是解决方案的关键部分。我们可以模拟下游API并控制设备消耗的数据,以验证集成测试中的异常情况。


今天的例子

在本文中,我将使用Amazon Echo演示这些功能,因为它可以成为家庭IoT生态系统的中心枢纽(也许您甚至可以像我一样拥有一个)。

首先,我将指导您完成使用AWS Lambda实施自己的Alexa技能的步骤。通过此电话,您可以询问Alexa的天气状况,以获取邮政编码。

然后,我们将在Azure中部署Parasoft虚拟服务,以模拟来自Weather API的响应,以进行边缘案例测试。 (例如,当有雷雨或外面有101 F时,Alexa会怎么说?)

跟随自己的先决条件:

  • 互联网连接(很明显)

  • 您自己的Amazon EchoEcho Dot可以改善体验,但您也可以使用模拟器。

  • 一个Amazon开发人员帐户(//developer.amazon.com/)和Amazon Web服务帐户(//aws.amazon.com/)。

  • //openweathermap.org/api上以开发人员身份注册,以获取开放天气APIAPI密钥。

  • 一个用于访问Microsoft AzureMicrosoft帐户(//signup.live.com)。

  • REST APIJSON的基本了解。


这将如何运作?

在第1部分中,我们将设置Alexa技能和Lambda函数。


  1. 用户将对Alexa说话(用户的输入称为“发言”)。

  2. 我们的Alexa技能会将这种“话语”映射为“意图”

  3. 我们的Alexa技能将向我们的AWS Lambda函数发送一个JSON请求。 LambdaAmazon的一项强大功能,可让您上传一些代码并按需在云中执行它。您只需要在执行时付费即可。在此示例中,Lambda函数将决定如何处理我们的Intent请求,并具有代表Alexa为用户创建响应消息的逻辑。

  4. 要创建响应,我们的Lambda函数必须调用开放天气API来获取当前的天气信息。

在第2部分中,我们将在Azure中部署Parasoft虚拟服务器。然后,我们将在Lambda函数和OpenWeatherMap API之间放置一个Parasoft代理。该代理将使我们能够控制来自AWS Lambda的天气请求,将其发送到真正的OpenWeatherMap API或带有罐装响应的虚拟表示。



1部分:设置我们的Alexa技能和Lambda函数

1. 首先,我们需要确保我们位于Amazon Web Services控制台(//console.aws.amazon.com)的“美国东部(弗吉尼亚北部)”地区。当前,这是Lambda可用的唯一区域:


2. 首先创建Lambda函数。登录(//console.aws.amazon.com/lambda/)并选择蓝色的“创建Lambda函数”按钮:


3. 在“选择蓝图”下,选择“空白功能”,然后选择Alexa技能套件作为Lambda功能的触发器。如果您在列表中没有看到“ Alexa Skills Kit”,则可能不在“美国东部(弗吉尼亚北部)”区域。



这里发生了什么事?我们必须指定调用Lambda函数的方式,Alexa Skills Kit将允许Alexa启动它(一旦它收到正确的话语,我们稍后将对其进行配置)。

4. 给该函数命名为virtualWeather”,然后选择“ Node.js 4.3”作为运行时。就本文而言,我们将使用我已经在此处构建的技能,因此请立即下载。如果您想查看底层的源代码,可以在这里找到。


5. 在“代码输入类型”下拉列表中,选择“上传.ZIP文件”,然后选择在步骤4中下载的virtual-weather.zip


6. 并添加两个环境变量-hostapi_key


目前,“主机”应等于//api.openweathermap.org。 “ api_key”是当您注册为开发人员时将从OpenWeatherMap收到的32位字母数字键(有关执行此操作的信息,请参见上面的前提条件列表)。

7. 在Lambda函数处理程序和角色”下,在“角色”下拉菜单下选择“创建自定义角色”。在出现的新窗口中,将所有内容保留为默认值,然后选择“允许”。

8. 返回“配置功能”页面,您可以为其他所有设置保留默认选项,然后单击“下一步”。如果一切正常,在“查看”页面上,选择“创建功能”。

9. 创建函数后,请确保复制页面右上角的ARN ID。我们稍后将需要它:


10. 现在我们的Lambda函数就位了,我们必须定义一个Alexa Skill。 登录到Amazon Developer门户(//developer.amazon.com)并选择Alexa选项卡。 选择“ Alexa技能套件入门:


11. 点击“添加新技能”。 为其指定名称和“天气”的调用名称

12. 在“交互模型”下的“意图模式”下发布以下内容:


{

"intents": [

{

"slots": [

{

"name": "Zip",

"type": "AMAZON.Number"

}

],

"intent": "GetWeatherForZipIntent"

}

]

}


13. 在示例话语下发布以下内容:

GetWeatherForZipIntent whats the weather for zip code {Zip}

GetWeatherForZipIntent whats the weather for {Zip}

GetWeatherForZipIntent whats the weather in {Zip}

最后两个步骤准确地指定了我们的用户如何与我们的技能进行交互。我们的示例话语将用户的语音输入映射到Intents.Intent类型(在这种情况下为GetWeatherForZipIntent)和用户指定的邮政编码将在请求中发送给我们的Lambda函数。

14. 在配置下,选择AWS Lambda ARNAmazon资源名称),然后输入您先前复制的函数ARN

我们已经准备好进行测试!在“文字”标签下,输入示例“话语”,例如“ 91016的天气如何”,然后点击“询问天气”。您应该看到发送到Lambda函数的JSON请求及其响应:


如果您的Echo已连接到该帐户,并且已启用此技能以对其帐户进行测试(可以在“测试”页面上进行此操作),则也可以与Alexa交谈以进行测试。说出类似“ Alexa,询问天气,91016的天气如何”之类的内容。

这就是Alexa设置!还不错吧?


但是,本文开头提出的复杂性和外部依存关系面临的主要挑战是什么?

我们的Lambda函数依赖于提供实时,真实数据的外部API。作为物联网设备的开发人员或测试人员,我们如何确保我们接收到需要测试不同条件的下游数据?

例如,让我们看一下我们的Alexa技能weather.js的一部分:


我们这里有一些简单的逻辑,可以根据我们的天气描述添加适合天气的短语。例如,“撑一把雨伞!” JSON响应的描述字段中提到下雨时,我们对Alexa响应的响应。

那么我们将如何测试呢?除非您准备好进行可靠的雨舞,或者碰巧住在西雅图,否则这将不容易。将测试自动化(为此我们需要来自OpenWeather API的一致,可重复的数据,这不太可能)添加到组合中,我们遇到了一个非常棘手的问题。

显而易见,简单的答案是服务虚拟化。这将使我们能够模拟Weather API并测试不同的情况。 Parasoft拥有免费的服务虚拟化平台(连续测试平台),可在Azure中进行30天的免费试用。


2部分:使用服务虚拟化对Alexa技能进行边缘案例测试

1. 登录到您的Azure门户,然后选择“新建”以访问市场:


2. 在市场中,搜索Parasoft”,然后选择“按需服务虚拟化”。如果您先前已从Parasoft处获得了特殊许可,则可以选择“ BYOL”选项。单击创建。

3. 提供虚拟机的名称,然后输入用户名和密码。您可以选择为VM创建新的资源组,也可以将其添加到现有VM。所有其他选项可以保留为默认值。单击确定。


4. 选择虚拟机大小(建议为DS2_V2或更好)。单击确定。

5. 如果需要,您可以在“设置”下更改其他配置。建议不要更改默认配置,除非有特殊原因。单击确定。

6. 单击“摘要”视图上的“确定”。

7. 在购买视图上,单击购买。免费试用期结束后(前30天),我们将向您收费。 VM创建过程将需要几分钟才能完成。


8. VM的状态为“正在运行”后,选择VM并复制其公共IP地址。


9. 在浏览器中转到http// <VM_IP_Address>。连续测试平台主菜单将出现。一旦“在线百分比”窗口小部件显示为“ 100%”,虚拟机将被完全配置并初始化:


10. 在顶部附近,单击“添加系统”:


11. 选择“从文件导入系统”,然后浏览到AlexaWeatherSystem.zip(在此处下载)。选择“AzureVirtServer”作为目标服务器,然后单击“导入”:我们现在已经导入了AlexaWeatherSkill系统,虚拟服务和相关数据。


12. 最后,将代理端点放置在Lambda函数和OpenWeatherMap API之间。代理部署在http// <VM_IP_Address>9080 / proxy

进入AWS Lambda//console.aws.amazon.com/lambda/)中的virtualWeather函数,并将我们创建的环境变量更改为代理端点:


13. 在我们的环境(http// <VM_IP_Address> / em / ui / environments / 1)中,我们现在可以控制返回到Lambda函数的数据以测试不同的条件。这将改变我们Alexa的按需行为!从OpenWeatherMap API组件下的下拉菜单中选择T-Storm,然后选择“设置”按钮:


现在,流量已定向到我们的虚拟T暴风”服务,并且正在返回响应(指示下雨和雷暴)。说出类似“ Alexa,询问virtualWeather 91016中的天气”之类的内容,您会听到“拿一把雨伞!蒙罗维亚有雷暴和大雨。”

现在,我们可以控制天气了!


下一步:

那么,从这里去哪里呢?以下是一些可能的后续步骤:

  • 如果您想修改现有的虚拟响应(或创建自己的虚拟响应),请访问:http// <VM_IP_Address> / em / virtualassets / manage
  • 当前,虚拟响应将报告Test City”中的天气,而不是与您指定的邮政编码关联的城市名称。您可能会增强虚拟服务,以通过邮政编码进行查找,以在虚拟响应中提供正确的城市名称。
  • 您可以修改我的Lambda函数代码并将其构建/部署到AWS Lambda上。也许您可以修改Alexa响应以包含API返回的更多天气数据。您可以在以下位置找到该存储库://github.com/sdebrosse/virtualize-weather
  • 将其克隆到Linux计算机上后(只能在Linux环境上构建它),需要配置AWS CLI并安装npm / nodejs。在repo文件夹中,您可以执行“ npm run deploy”以将更改部署到Lambda

我也强烈推荐Brian Donohue在这里撰写有关创建您的第一个Alexa技能的文章。我也推荐Ryan Ray在这里的文章。我已经针对他们在本文中使用的Lambda函数改编了他们两个教程中的代码。





标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn

文章转载自:

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP