本文是文章“ 将 Raspberry Pi 作为网关连接到 IBM Watson IoT Platform ”的延续,在这一部分中,我们将使用 Raspberry Pi 和 Arduino UNO 设备演示网关的设备管理功能。强烈建议您阅读前一篇文章,以便更好地理解 IBM Watson IoT Platform 中的网关功能,然后再继续阅读本文。
IBM Watson Internet of Things Platform 中的设备管理功能创建了一种新的连网设备--托管设备。根据定义,托管设备必须包含一个管理代理,该代理可以理解 Watson IoT Platform 设备管理协议,将管理设备的请求发送到 Watson IoT Platform 设备管理服务器。IBM Watson IoT Platform 中的托管设备增加了一些强大功能,比如远程管理设备、执行远程更新、重新启动、更新位置和执行诊断等。
网关在与之相连的设备的设备管理中发挥着重要作用。这些设备中许多设备都因为太过基础而无需托管。对于托管设备,网关上的设备管理代理充当着所连接设备的代理。网关用来管理所连接设备的协议是可以任意选择,所连接的设备上不需要设备管理代理。网关只需要确保与其相连的设备能够履行其作为托管设备的职责,执行实现此目的所需的所有转换和处理工作。网关的管理代理不仅仅充当着附加设备与 Watson IoT Platform 之间的透明通道。
例如,连接到网关的设备不大可能自行下载固件。在这种情况下,网关的设备管理代理会解释下载固件的请求,并将固件下载到自己的存储器上。然后,当设备收到执行升级的指示时,网关的设备管理代理就会将固件推送到设备并升级它。
请参阅 文档 ,了解 IBM Watson IoT Platform 设备管理功能的详细信息,以便创建您自己的管理代理。
如果没有 Raspberry Pi 和 Arduino UNO,不要担心,您仍然可以按照本文中的说明,连接您的设备作为网关,并管理一个或多个附加设备。在这种情况下,您可以使用 Windows 或 Linux 服务器替代 Raspberry Pi 作为网关。此外,该示例用一个模拟器代替 Arduino UNO 来响应网关请求。
本文通过 Raspberry Pi 网关管理 Arduino Uno 设备,以此演示以下网关设备管理 (DM) 功能。
所有这些 DM 功能都基于单个示例( 可从此处获得) ,本文分 4 个部分对它们进行了解释。因此,在完成本文的所有 4 个部分之前,请让您的示例保持运行。
本文在网关秘诀中提供的示例上添加一个网关管理代理,以演示网关的端到端功能,例如,在发送和接收针对网关和附加设备的传感器事件和命令时执行 DM 操作。在第 1 步中,在 Raspberry Pi 网关上运行的管理代理将网关和 Arduino Uno 设备作为托管设备来连接到 IBM Watson IoT Platform,以便它们可以参加 DM 活动。然后,该代理将会监听来自 Watson IoT Platform DM 服务器的 DM 请求,在收到请求时,它会完成相关操作,并向服务器发送完成状态作为响应。另外,只要出现错误,该代理就会更新诊断信息,并频繁地将网关/附加设备的位置更新到 Watson IoT Platform。
下图中给出了包含 DM 组件的端到端场景。
(本文中的图是使用 Fritzing.org 和 draw.io 制作的。)
本文使用了以下示例来演示网关中的 DM 支持:
请参阅此文章,了解如何通过 Micro USB 数据线连接 Raspberry Pi 和 Arduino Uno,必须连接它们才能继续本文的学习。
为了演示网关设备管理支持,我们需要设置 Watson IoT Platform 组织并在其中注册 Raspberry Pi 作为网关。本节将介绍如何执行相关设置。
执行本文中介绍的步骤,在 IBM Watson Internet of Things Platform 中注册您的网关。
在这一步中,我们成功地创建了 Watson IoT Platform 服务并在其中注册了 Raspberry Pi 网关。
启动托管网关示例。
ManagedRasPiGateway 示例 合并了管理代理和其他网关功能,比如发布和接收设备事件。我们将通过执行以下步骤来启动该示例。
1.打开一个与 Raspberry Pi 网关的 SSH 会话,从 GitHub 下载最新的 Java Client Library for Watson IoT Platform。
curl -LO https://github.com/ibm-messaging/iot-java/releases/download/0.0.11/com.ibm.iotf-0.0.11.zip
(备注:如果有更高版本可用,请将版本从 0.0.11 更改为更高版本。)
2.使用 unzip 解压存档文件 com.ibm.iotf-0.0.11.zip。例如,输入以下命令:
unzip com.ibm.iotf-0.0.11.zip
3.如果尚未注册 Arduino Uno 设备,则需要使用 Waton IoT Platform API 注册它。为此,我们需要使用组织的 API 密钥和令牌。还可以执行以下步骤来达到同样的目的:
4.修改 DMDeviceSample.properties 文件,输入您在“在 IBM Watson IoT Platform 中注册您的网关”小节中记下的以下网关设备注册细节。
## Gateway Registration detail Organization-ID = <Your Organization ID> Device-Type = <Your Gateway Device Type> Device-ID = <Your Gateway Device ID> Authentication-Method = token Authentication-Token = <Your Gateway Token> ## Application key and token to create the device type API-Key = <Your Organization API-Key> API-Token = <Your Organization Token> Port = <Specify the port in which Arduino Uno connects to Raspberry Pi.Required only if the port is not /dev/ttyACM0>
(备注:仅在 Arduino Uno 未通过端口 /dev/ttyACM0 连接时指定端口。请参阅本文的“将 Arduino Uno 连接到 Raspberry Pi”小节,查找 Arduino Uno 连接到 Raspberry Pi 所用的端口。如果您在模拟器模式下运行,则不需要查找该端口。也就是说,您没有硬件。)
5.通过指定以下命令来运行托管网关示例:
java -Djava.library.path=/usr/lib/jni -cp com.ibm.iotf.client-0.0.11.jar:com.ibm.iotf.samples-0.0.11.jar:lib/* com.ibm.iotf.sample.devicemgmt.gateway.ManagedRasPiGateway
(请注意,/usr/lib/jni 是 RxTX 库所在的目录,请参阅网关秘诀,了解如何将 RxTx 库安装在 Raspberry Pi 上。如果您在模拟器模式下运行,则不需要安装它。)
6.可以观察到,网关和 Arduino Uno 设备连接到 IBM IoT Platform 并列出示例代理可执行的各种设备管理操作:
List of device management operations that this agent can perform are: manage [gateway|device] [lifetime] ::Request to make the gateway/device as Managed device in WIoTP unmanage [gateway|device] ::Request to make the gateway/device unmanaged location [gateway|device] :: updates a random location of the device/gateway errorcode [gateway|device] :: appends/clears a simulated ErrorCode log [gateway|device] :: appends/clears a simulated Log message display ::Toggle the Arduino Uno event display on the console quit :: quit this sample
7.可以在 Watson IoT Platform 仪表板中观察到,网关细节已被修改为 DMDeviceSample.properties 文件中提供的信息。您可以通过管理请求来更新网关/附加设备的信息。
8.此外,如果 Sketch 程序在 Arduino Uno 设备上运行,您可以观察到,该示例将来自 Arduino Uno 的传感器事件发布到了 IBM Watson IoT Platform。
9.在控制台中键入 display 来禁止在控制台中打印 Arduino Uno 事件。要打开它,请在控制台中再次键入 display。
display
在这一步中,我们成功地将 Raspberry Pi 网关和 Arduino Uno 连接到了 Watson IoT Platform。
在这一步中,我们将连接 Raspberry Pi 网关和 Arduino Uno 设备作为托管设备。
网关必须发送一个针对自己的设备和 Arduino Uno 设备的管理请求,然后才能参与设备管理活动。该请求应该是网关在连接到 Watson IoT Platform 后发送的第一个设备管理请求。设备管理代理在启动或重新启动时通常会发送这个请求。请参阅 以下链接 ,了解管理请求的更多信息。)
1.在 SSH 会话中键入“ manage ”和一个可选的 lifetime 参数(以秒为单位),以便发送针对网关和 Arduino Uno 设备的管理请求,让它们可以参与 DM 活动:
manage 3600
(如果希望只发送针对网关的管理请求,而不是针对 Arduino Uno 的请求,可以键入“manage gateway”。类似地,如果想要只发送针对 Arduino Uno 设备的管理请求,可以键入“manage device”。)
2.在控制台中观察以下消息:
Gateway is connected as managed device now !! Arduino Uno device is connected as managed device now !!
3.备注:如果指定了 lifetime 参数,代理必须在 lifetime 过期之前发送另一个消息请求,否则该设备将被标记为休眠。所以在本例中,代理必须在 1 小时(3600 秒)之前发送另一条管理请求。
在这一步中,我们成功地将网关和附加的 Arduino Uno 设备作为托管设备连接到了 IBM Watson IoT Platform。
在本文的这一部分中,我们演示了如何将网关和附加设备作为托管设备连接到 IBM Watson IoT Platform。请继续阅读本文的下一部分,学习更新附加设备的固件。
不要结束示例应用程序,请让它保持运行状态,因为本文的剩余部分需要让该示例保持运行,而且网关/附加设备将处于托管状态。