使用AWS IoT设备管理命令简化物联网设备远程操作

本文详细介绍AWS IoT设备管理命令功能,通过MQTT协议实现云端到设备的双向通信,包含命令创建、设备配置、执行监控和权限管理,适用于智能家居、工业物联网和车队管理等场景。

简介

在当今高度互联的现代世界中,物联网设备正在改变我们与家庭、办公室和工业的互动方式。智能技术现已从家庭扩展到汽车和工业设备。远程控制这些设备至关重要,能够提高生产力、改善用户体验并加强风险管理。本文探讨如何安全有效地向AWS IoT设备发送远程命令。

向物联网设备发送远程操作是构建智能解决方案的关键需求。远程命令使用户、操作员和技术人员能够从远程位置控制、监控和管理设备。用户可以发起近实时操作,例如打开或关闭设备、调整设置或检索数据,而无需亲临现场。在汽车、医疗保健、制造、运输和智能家居等行业,远程设备管理可提高效率、降低成本并增强整体运营灵活性。

为实现这一目标,用户经常开发定制解决方案和创造性变通方法来增强和扩展其物联网解决方案的能力。然而,随着时间的推移,这些一次性解决方案变得复杂、难以扩展,并增加了基础设施和运营成本。为应对这些挑战,AWS推出了AWS IoT设备管理命令功能,以简化远程操作及其执行的生命周期管理。

概述

命令功能是一种托管的远程操作能力,利用MQTT标准实现云端到设备的双向通信。使用命令功能,您可以实施细粒度访问控制机制,确保只有授权用户才能向特定设备发送命令。常见用例包括启动设备操作、更新设备状态和修改设备配置。

命令功能提供细粒度访问控制和高效设备管理工具,用于向单个设备传递远程操作。该功能可从AWS IoT控制台的远程操作部分访问,允许您创建具有唯一名称和可自定义数据负载的命令,支持多种数据格式,包括JSON、CBOR、Parquet和纯文本。定义的单个命令可多次用于对不同目标设备执行操作。您可以为每个命令执行设置特定的超时设置,并通过实时更新和通知监控其进度。以下工作流程和步骤概述了命令功能。

图1:AWS IoT设备管理命令功能工作流程

使用AWS IoT设备管理向设备发送命令:

  1. 创建预定义的可重用命令并将其存储在AWS IoT设备管理命令中
  2. 指定将传递给目标设备的命令负载
  3. 选择设备类型,AWS IoT事物或MQTT客户端
  4. 设备订阅命令主题$aws/commands/[things|clients]/[<thingname>|<clientId>]/executions/+/request/[json|cbor],IoT命令负载将通过该主题传递
  5. 用户通过客户端应用程序触发命令,将其负载发布到相应设备的请求主题
  6. 设备通过请求主题接收命令负载后,应执行相应操作并将响应发送回云端
  7. 设备通过$aws/commands/[things|clients]/[<thingname>|<clientId>]/executions/<executionid>/response/[json|cbor]发布命令执行进度和更新状态
  8. 命令服务向$aws/events/commandExecution/<CommandId>/+发布通知,用户接收通知(注意:接收通知是可选的,可通过AWS IoT配置)

AWS IoT设备管理命令功能的关键能力包括:

  • 在单个设备上启动多个命令的并发控制
  • 支持可能未在AWS IoT注册的设备操作
  • 可配置时间限制以控制每个命令执行的最长持续时间并确保及时完成
  • 命令进度的实时更新
  • 安全的命令传输和细粒度访问控制

向物联网设备发送远程操作的实际用例

AWS IoT设备管理命令简化了智能家居、工业物联网和车队管理应用中的云端到设备指令发送,无需构建自定义MQTT解决方案。

智能家居

原始设备制造商和智能家居集成商可以实现远程命令功能,让房主通过智能手机控制舒适度、安全和能源系统。例如,他们可以在回家前通过智能手机调整恒温器为房屋预热,或在上班后关闭忘记关的灯。如果安全摄像头检测到异常活动,房主可以远程锁门、激活警报,甚至通过连接的扬声器说话以阻止入侵者。在度假期间,他们可以通过在特定时间安排灯和电视开关来模拟有人居住。系统还可以根据天气预报自动调整设置,例如在炎热天气关闭智能百叶窗以降低空调成本,或因下雨调整灌溉计划。

工业物联网

在大型制造工厂中,集成到生产线机器和系统中的物联网设备使工厂经理能够远程且近乎实时地调整生产参数,以应对需求变化或供应链中断。当传感器检测到设备性能异常时,他们可以启动远程诊断并进行必要调整,而无需停止生产。在紧急情况下,可以远程激活安全协议以停止特定机器或整个工厂区域。工厂经理还可以通过远程命令支持预测性维护例程,根据近乎实时的设备数据安排维护任务,从而最大限度地减少停机时间并优化整体运营效率。

车队管理

车辆中的物联网设备让物流公司能够远程监控关键指标。这些包括实时位置、燃料使用、发动机健康状况和驾驶员行为。车队管理员可以降低显示机械问题的车辆的速度限制以防止损坏。当驾驶员偏离路线时,他们可以重定向导航系统。在恶劣天气期间,车队管理员可以在受影响的车辆中激活安全协议。此外,他们可以执行远程诊断和空中软件更新,减少物理维护需求。使用命令功能构建的车队管理解决方案提高了运营效率,改善了安全性,并显著减少了整个车队的停机时间和维护成本。

了解何时使用AWS IoT设备管理命令和作业功能

客户可以使用AWS IoT作业定义一组远程操作,这些操作可以发送到连接到一个或多个AWS IoT设备并在其上运行。选择使用命令还是作业功能取决于物联网用例的具体要求以及需要与连接设备进行的交互性质。

开始使用命令功能

我们将通过构建具有AWS IoT设备管理命令功能的智能洗衣机解决方案的实际用例示例进行演练。

用例:工程师正在开发一种可以远程控制的智能洗衣机。用户可以通过移动应用程序从任何地方管理他们的智能洗衣机。用户可以通过应用程序发送命令来启动或停止洗涤周期,并调整周期类型、水温和旋转速度等设置。这些命令通过MQTT协议传输到洗衣机执行。在操作期间,智能洗衣机通过MQTT发送状态更新,向用户显示剩余时间、当前周期阶段和任何警报。如果出现问题,技术人员可以远程访问机器进行故障排除并修改普通用户受限的设备设置。虽然此解决方案可以与任何移动应用程序集成,但我们将重点放在物联网后端实现上。不包括移动应用程序开发和集成细节。

假设:在本演练中,我们使用已在AWS IoT Core注册表中注册且事物ID为"SmartWasher"的设备。要注册新设备,请遵循AWS IoT入门研讨会。

本演练展示了实现和监控命令执行的分步指南:

  1. 为系统创建所需命令
  2. 配置设备以订阅相关主题来接收发出的命令
  3. 启动命令以向设备创建新的"命令执行"
  4. 从设备发布执行状态,并在跟踪应用程序上监控进度

重要说明:可以通过多种方式创建和管理命令:AWS SDK、AWS CLI和AWS管理控制台。对于本文中的示例,我们使用AWS CLI和AWS管理控制台来演示命令创建和管理。

步骤1:命令创建

让我们创建包含智能洗衣机系统三个关键功能的命令:1. 使用预定义设置启动默认洗涤周期。2. 终止洗涤周期。3. 使技术人员能够运行和访问诊断数据。

命令1:启动默认周期 要在AWS IoT中创建新命令,请首先访问AWS管理控制台并导航到AWS IoT服务。到达后,在左侧边栏中查找"管理"部分,单击"远程操作",然后选择"命令"。单击"创建命令"按钮开始过程。出现提示时,输入"StartDefaultCycle"作为命令ID。接下来,您需要创建一个包含所需负载的JSON文件(详细信息如下所示,如startdefaultcycle.json)。在命令创建界面的"指定负载"部分,上传此JSON文件。确认所有详细信息正确后,单击"创建命令"按钮完成过程,这将向AWS IoT系统添加新命令。

startdefaultcycle.json

1
2
3
4
5
6
7
{
    "Action": "RunWashCycle",
    "CycleType": "Normal",
    "Soak": "Yes",
    "SpinSpeed": "Medium",
    "WaterTemperature": "Warm"
}

图2:为默认周期创建新命令

命令2:停止周期 使用以下负载为洗衣机创建停止命令。

stopcycle.json

1
2
3
{
    "Action": "StopWashCycle"
}

命令3:检索诊断 使用此负载创建命令以获取洗衣机日志进行故障排除。

retrievediagnostics.json

1
2
3
4
5
{
    "Action": "RetrieveLogs",
    "LogType": "DiagnosticMetrics",
    "TimeRange": "12Hr"
}

命令主页将显示已创建的命令。

图3:AWS管理控制台上的命令主页

创建的命令可以通过操作菜单进行管理。选项包括根据需要编辑其设置、临时禁用它或永久删除它。

步骤2:设备设置和主题订阅

每当启动新执行时,命令服务将通过MQTT通知目标设备。收到命令执行后,设备启动一系列结构化操作。首先,它基于MQTT消息负载解释传入命令,然后执行请求的操作。执行后,设备将执行状态报告回云端,指示操作是否成功或是否遇到任何问题。为实现此通信流,设备需要订阅请求主题,所有命令执行请求都在该主题发布。处理命令后,设备应将其响应发布到指定的响应主题。在我们的模拟中,我们将演示成功和失败的命令执行以涵盖几种场景。

本文使用AWS IoT设备SDK v2 for Python来模拟SmartWasher。

请求主题: $aws/commands/things/<thing-id>/executions/+/request/json

成功订阅后SmartWasher的示例日志:

图4:显示订阅输出的终端窗口

响应主题: $aws/commands/things/<thing-id>/executions/<execution-id>/response/json

步骤3:命令执行

对于最终用户,与智能洗衣机的交互通常通过用户友好的应用程序界面(如移动应用程序)进行简化。在我们的演示中,我们将使用CLI命令模拟此体验。运行下面提到的CLI命令后,您将收到一个执行ID。此唯一标识符对于跟踪和检索命令执行信息至关重要。请记下此ID。您需要在后续查询中用此执行ID替换<execution-id>占位符。

注意:要启动新命令执行,请使用DescribeEndpoint API获取客户特定端点,端点类型为iot:Jobs。

执行命令以启动默认洗涤周期:

示例请求:

1
2
3
4
5
aws iot-jobs-data start-command-execution \
            --command-arn arn:aws:iot:<region>:<account-id>:command/StartDefaultCycle \
            --target-arn arn:aws:iot:<region>:<account-id>:thing/SmartWasher \
            --execution-timeout-seconds 3600 \
             --endpoint-url <endpoint-from-describe-endpoint-api-result>

示例响应:

1
2
3
{
    "executionId": "576fe4d7-c604-489d-af91-c37ca9f8303b"
}

成功调用StartCommandExecution API后,在SmartWasher上运行的MQTT客户端将在请求主题上接收MQTT消息,这是在SmartWasher上接收到的示例:

图5:显示MQTT消息的终端窗口

步骤4:设备更新命令执行状态

命令功能提供基于UpdateCommandExecution MQTT主题的API,供设备向云端报告状态。从上面的示例中,一旦SmartWasher开始运行洗涤周期,它可以持续将状态报告回云端。

在以下来自SmartWasher的状态更新中,它报告"浸泡"已完成。我们将使用AWS管理控制台的示例MQTT客户端来模拟来自洗衣机的状态更新。洗衣机将执行状态发布到特定于设备和执行的响应主题:

$aws/commands/things/SmartWasher/executions/<execution-id>/response/json

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
{
  "status": "IN_PROGRESS",
  "result": {
    "SOAK": {
      "s": "COMPLETED"
    },
    "RINSE": {
      "s": "PENDING"
    },
    "SPIN": {
      "s": "PENDING"
    }
  }
}

开发人员可以通过利用GetCommandExecution API来增强其具有状态监控能力的应用程序。

步骤5.1:最终用户的进度跟踪(应用程序)

为使最终用户了解命令执行情况,应用程序可以定期调用GetCommandExecution API来检索特定命令执行的近实时状态,允许用户即时跟踪进度。

获取执行状态的示例请求:

1
2
aws iot get-command-execution --execution-id <execution-id> \
--target-arn arn:aws:iot:<region>:<account-id>:thing/SmartWasher

步骤5.2:管理员或技术人员的进度跟踪

技术人员和管理员可以使用给定命令的事件主题跟踪整个车队中的命令执行状态。

$aws/events/commandExecution/<command-id>/<CommandExecutionStatus>

要测试此功能,我们可以利用AWS IoT控制台。登录控制台并导航到MQTT测试客户端。在"订阅主题"部分,订阅上述主题。

图6:订阅命令执行状态主题

执行任何命令并记下它生成的<execution-id>。使用MQTT测试客户端,将响应发布到指定的响应主题。然后,验证消息是否正确出现在命令执行状态主题中。

图7:将成功消息发布到响应主题

图8:查看命令执行状态主题结果

图9:将失败消息发布到响应主题

图10:查看命令执行状态主题结果

策略配置

为了增强安全性,可以配置AWS IoT命令,使得只有特定用户才能被授予向特定设备发送命令的权限。AWS IoT Core使用身份和访问管理权限(也称为策略)来控制对命令功能的访问。这些策略确定哪些经过身份验证的用户可以向设备发送命令。

IAM策略可以应用于单个用户、组或角色,从而允许对谁可以执行特定命令进行细粒度控制。例如,如果我们的智能洗衣机系统涉及三个具有不同访问级别的不同角色:

  • 管理员:负责创建和管理智能洗衣机的命令。此角色具有最高级别的系统控制权。
  • 家庭成员:日常用户,负责常规洗衣任务操作洗衣机。他们的访问权限仅限于日常使用所需的基本功能。
  • 技术人员:在出现问题时访问系统进行维护和故障排除。此角色具有用于诊断和维修的特殊权限。

下面提供了示例IAM策略供参考。有关全面的策略配置说明,请访问创建和管理命令文档。为确保遵循安全最佳实践和最小权限原则,请参阅AWS IoT的身份和访问管理指南。请记住,这些示例仅用于演示目的,您应始终自定义策略以满足特定的安全要求。

策略1:管理员角色

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "iot:CreateCommand",
        "iot:GetCommand",
        "iot:UpdateCommand",
        "iot:DeleteCommand"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:iot:<region>:<account-id>:command/*"
      ],
      "Condition": {
        "ArnLike": {
          "aws:PrincipalArn": [
            "arn:aws:iam::<account-id>:role/<specific-role>",
            "arn:aws:iam::<account-id>:user/<specific-user>"
          ]
        }
      }
    }
  ]
}

策略2:家庭成员或标准用户角色

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Action": [
          "iot:StartCommandExecution",
          "iot:GetCommandExecution"
        ],
        "Effect": "Allow",
        "Resource": [
          "arn:aws:iot:<region>:<account-id>:command/StartDefaultCycle",
          "arn:aws:iot:<region>:<account-id>:command/StopWashCycle",
          "arn:aws:iot:<region>:<account-id>:thing/SmartWasher"
        ]
      }
    ]
  }

策略3:技术人员角色

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Action": [
          "iot:StartCommandExecution",
          "iot:GetCommandExecution"
        ],
        "Effect": "Allow",
        "Resource": [
          "arn:aws:iot:<region>:<account-id>:command/RetrieveDiagnostics",
          "arn:aws:iot:<region>:<account-id>:thing/SmartWasher"
        ]
      }
    ]
  }

结论

总之,AWS IoT设备管理的命令功能提供了一种安全、简化且经济高效的方法来远程管理物联网设备命令,同时保持了出色的可扩展性。其轻量级设计、经济高效且专为特定目的构建的能力,相比其他自定义构建的解决方案提供了引人注目的优势。无论是管理智能家居还是工业设施,命令功能都使开发人员能够为低延迟和高吞吐量应用程序实现云端到设备交互、远程监控、控制和诊断,并让用户无论身在何处都能保持连接和控制。

相关参考

  • AWS IoT设备管理远程命令执行
  • AWS IoT设备管理定价

关于作者

Sara Akkandi是Amazon Web Services的解决方案架构师,她与客户合作设计和实施架构良好的云解决方案。利用她的技术专长,她指导组织利用AWS服务和最佳实践来有效解决其业务挑战并实现最佳结果。

Ryan Dsouza是AWS云优化成功组织的主要解决方案架构师。Ryan驻扎在纽约市,帮助客户设计、开发和运营更安全、可扩展和创新的解决方案,利用AWS能力的广度和深度来提供可衡量的业务成果。他积极参与制定战略、指导和工具,以支持客户构建优化性能、成本效益、安全性、弹性和运营卓越的解决方案,遵循AWS云采用框架和良好架构框架。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计