转载

在 IBM IoT Foundation 中备份与还原设备配置

简介

数据备份是 IT 最重要的领域之一,对于任何业务的顺利运行都至关重要。数据丢失的方式多种多样,最常见的原因是设备的物理故障、随机误差、被盗或遭遇灾害,比如火灾、洪水,等等。仅将数据保存到一个地方(比如文件夹)的情况也很常见。这意味着,如果该数据被意外地更改或删除,则需要很长的时间和相当大的代价来恢复它。

越来越多的病毒和恶意软件也给业务信息带来了风险,一旦病毒和恶意软件感染了您的设备,它们通常会删除或损坏您的数据。这是备份您的数据的另一个原因,也是备份如此重要的一个原因。

使用 IBM IoTF 事件和命令来备份设备配置

本文将使用一个示例演示如何在 Cloudant NoSQL DB 中备份某个设备的配置文件,并稍后还原相同的配置文件。IBM IoT Foundation 事件 和 命令 用于备份和还原配置文件。请参阅 文档 ,了解关于基本概念(比如设备、应用程序、事件、命令,等等)的更多信息。

本文将使用下列事件和命令演示配置文件的备份与还原:

  • backup-command – 一条命令,将由应用程序发送给设备,以便备份配置文件。
  • backup-event – 一个事件,将由设备在收到 backup-command 时发送,该事件包含配置文件的内容。
  • restore-command – 一条命令,将由应用程序发送给设备,以便还原配置文件,该命令包含配置文件的内容。
  • restore-ack – 一个事件,将由设备在完成还原操作后发送,用于通知还原操作的状态。

上述命令和事件的名称只是随机名称,可以使用任何有效的 MQTT 标识符对它们进行替换。

本文是在 Raspberry Pi 和 Windows 平台上演示的,前者用于运行设备示例,后者用于运行应用程序示例。但您也可以在其他环境上运行。

回页首

示例代码

如果想了解幕后情况,请参考本节。

本文使用了两个示例来演示设备配置的备份与还原,它们都是使用 Java Client Library for IBM IoT Foundation 编写的,简化了与 IBM IoT Foundation 的交互。

  • 设备示例 – 响应应用程序命令,比如 backup & restore。
  • 应用程序示例 – 向设备发送命令,并与 Cloudant NoSQL DB 交互,以便存储和检索配置文件。

请参阅下文,了解这些示例在更高级别上做了些什么。

将设备连接到 IBM IoT Foundation

设备示例使用了来自 IoTF Java Client Library 的 com.ibm.iotf.client.device.DeviceClient 类,简化了与 IBM IoT Foundation 的设备交互。

设备示例中的 createDeviceClient() 方法创建了一个 DeviceClient 实例,通过传递以下必要属性将设备连接到 IBM IoT Foundation。

  • org – 组织的 ID(这是必填字段,在 quickstart 流中,提供了 org 作为 quickstart)。
  • type – 设备的类型(这是必填字段)。
  • id – 设备的 ID(这是必填字段)。
  • auth-method – 身份验证方法(这是可选字段,仅对已注册的流是必需的,目前唯一受支持的值是“token”)。
  • auth-token – API 密钥令牌(这是可选字段,仅对已注册的流是必需的)。

请参阅 编程指南的设备部分 ,了解有关使用 Java Client Library 的设备可以执行的操作的列表的更多信息。

将应用程序连接到 IBM IoT Foundation

应用程序示例使用了来自 IoTF Java Client Library 的 com.ibm.iotf.client.app.ApplicationClient 类,简化了与 IBM IoT Foundation 的应用程序交互。

应用程序示例中的 createApplicationClient() 方法创建了一个 ApplicationClient 实例,并通过传递必要属性将应用程序连接到 IBM IoT Foundation。

  • org – 组织的 ID(这是必填字段,在 quickstart 流中,提供了 org 作为 quickstart)。
  • id – 您的应用程序在您组织中的唯一 ID。
  • auth-method – 身份验证方法,(目前唯一受支持的值是“apikey”)。
  • auth-key – API 密钥(如果 auth-method 是“apikey”,则必须提供该值)。
  • auth-token – API 密钥令牌(如果 auth-method 是“apikey”,则必须提供该值)。
  • enable-shared-subscription – true 或 false(仅在需要启用共享订阅时是必需的)。

请参阅 编程指南的应用程序部分 ,了解有关使用 Java Client Library 的应用程序可以执行的操作的列表的更多信息。

订阅应用程序命令

在 DeviceClient 建立连接时,会自动订阅适用于该设备的所有命令。

设备示例中的 setCommandCallback() 方法添加了一个简单的命令回调处理程序来处理特定命令,比如来自应用程序的 backup-command 和 restore-command。

订阅设备事件

默认情况下,应用程序会订阅来自所有已连接设备的所有事件。为了监听来自某个特殊设备的事件,应用程序示例中的 subscribeToEvents() 方法添加了一个事件回调处理程序,并订阅了来自某个特定设备的事件。

备份操作

应用程序示例中的 sendBackupCommand() 方法,通过将命令 backup-command 发送给指定设备触发了备份。如下图所示,应用程序通过 IBM IoT Foundation 向 Device #1 和 Device #2 都发送了一个备份命令。

在 IBM IoT Foundation 中备份与还原设备配置

在收到备份命令后,设备示例中的 processBackupCommand() 方法将会检索配置文件 sample.config 的内容,并发送相同的内容作为一个 IoTF 事件,通过 IBM IoT Foundation 向应用程序发送 backup-event 命令。如下图中所示,Device #1 和 #2 将配置文件作为设备事件发送到 IBM IoT Foundation。

在 IBM IoT Foundation 中备份与还原设备配置

在收到 backup-event(配置文件的内容)后,应用程序示例中的 processEvent() 方法会将相同的内容存储到 Cloudant NoSQL DB 中。您可以将配置文件的多个版本存储在 Cloudant DB 中,如上图所示。

还原操作

应用程序示例中的 sendRestoreCommand() 方法触发了还原操作,触发方式为:检索来自 Cloudant DB 的配置文档,并将还原命令 restore-command 以及配置文件的内容发送给指定设备。如下图所示,应用程序发送了适用于 Device #1 和 Device #2 的还原命令,以及要还原的配置文件。

在 IBM IoT Foundation 中备份与还原设备配置

在收到 restore-command 后,设备示例中的 processRestoreCommand() 方法将会使用新的内容替换配置文件的内容,并向应用程序发送一个确认事件 restore-ack 来通知还原操作的状态,如下所示。

在 IBM IoT Foundation 中备份与还原设备配置

在收到 restore-ack 事件(配置文件的内容)后,应用程序示例中的 processEvent() 方法会在屏幕上显示还原操作的状态。

回页首

准备工作

将您的 Raspberry Pi 设备准备好。

1. 将您的 Raspberry Pi 连接到互联网。

2. 如果尚未安装 Oracle Java,请使用以下命令安装它:

sudo apt-get update && sudo apt-get install oracle-java7-jdk

回页首

创建 Cloudant NoSQL DB

创建 Cloudant NoSQL DB 来存储设备配置文件。

1. 转到 Bluemix。如果您已是一名 Bluemix 用户,请像平常一样登录。如果您对 Bluemix 不熟悉,可以通过注册获得一个免费 30 天的试用版。

2. 在 Bluemix 应用程序中,单击“CATALOG”选项卡。

3. 选择“Cloudant NoSQL DB”服务(备注:如果无法找到该服务,请使用搜索框),如下所示。

在 IBM IoT Foundation 中备份与还原设备配置

4. 为您的设备键入一个名称并单击 Create 按钮。

5. 导航到 Service Credentials 选项卡,如下所示,note down the username & password 是必填字段,稍后用于从 Python 模块连接到 Cloudant DB 服务。

在 IBM IoT Foundation 中备份与还原设备配置

6. 导航到 Managed 选项卡,单击 Launch 按钮访问 Cloudant DB,如下所示。

在 IBM IoT Foundation 中备份与还原设备配置

在这一步中,我们成功创建了 Cloudant NoSQL DB。

回页首

在 IBM IoT Foundation 中注册您的设备

为了演示备份和还原操作,我们需要安装 IoT Foundation Organization 并在其中注册设备。本节将展示如何可以实现相同的设置。

创建 IoT Foundation Organization

1. 打开您喜欢的浏览器并转到 Bluemix。如果您已是一名 Bluemix 用户,请像平常一样登录。如果您对 Bluemix 不熟悉,可以通过注册获得一个免费 30 天的试用版。

2. 在 Bluemix 应用程序中,单击“CATALOG”选项卡。

3. 选择“Internet of Things Foundation”设备(备注:如果无法找到该服务,请使用搜索框)。

4. 为您的设备键入一个名称并单击 Create 按钮。

5. 在“Connect your devices”部分,单击“Launch dashboard”。这会将您带到 IBM IoT Foundation 组织空间。此 IoTF 组织是一个用于连接和管理 IoT Foundation 设备的空间,以便您的应用程序可以访问它的实时数据和历史数据。

注册您的设备

1. 单击“Devices”选项卡。

2. 在屏幕的底部,单击“Add Device”按钮。

3. 单击“Create Device Type”并指定一个名称,例如“iotsample-devicetype″。单击屏幕右下角的“Next”。

4. 单击下一组屏幕的“Next”,直到看见屏幕右下角的“Create”选项。

5. 单击 Create。

6. 选择您刚刚创建的“iotsample-devicetype”设备类型并单击 Next。

7 输入一个唯一设备 id,它会将您的设备与您可能连接到 IoTF 的其他所有设备区分开来(您可以使用“1”作为设备 id,或者使用更复杂的 id,比如设备的 MAC 地址)。

8. 单击下一组屏幕上的“Next”,直到看见屏幕右下角的“Add”选项。

9. 单击“Add”来添加您的设备,这会为您提供 Device Credentials。记录这些细节,因为稍后我们需要使用它们与 IoT Foundation 进行交互。

  • 组织 ID
  • 设备类型
  • 设备 ID
  • 身份验证方法
  • 身份验证令牌

10. 现在您应该会在 Device 选项卡中看到您已注册的设备。

在这一步中,我们成功创建了 IoTF 服务,并在其中注册了 Raspberry Pi 设备。

回页首

启动设备示例

启用一个设备示例,它将监听来自应用程序的备份与还原命令。

1. 使用 SSH 连接到您的 Raspberry Pi 设备。您可以使用任何设备,只要该设备和设备示例一样支持 Java,而且是用 Java 编写的。

2. 从 Github 下载最新的 iotf java 客户端库:

curl -LO https://github.com/ibm-messaging/iot-java/releases/download/0.0.5/com.ibm.iotf-0.0.5.zip

3. 解压归档文件 com.ibm.iotf-0.0.5.zip。

4. 您会看到一个名为 sample.config 的文件——这是我们将在本文中备份与还原的文件。sample.config 文件包含 Raspberry Pi 的系统配置参数以及样本设备注册细节。

5. 通过输入您在前面步骤中记下的以下设备注册细节来修改 device.prop 文件:

Organization-ID = <Your Organization ID> Device-Type = <Your Device Type> Device-ID = <Your Device ID> Authentication-Method = token Authentication-Token = <Your Device Token>

(这些属性创建了用来与 IBM Internet of Things Foundation 服务进行交互的定义)

6. 通过指定以下命令来运行设备事件公布样本:

java -cp com.ibm.iotf.client-0.0.5.jar:com.ibm.iotf.samples-0.0.5.jar:lib/*  com.ibm.iotf.sample.client.device.BackupAndRestoreDeviceSample

7. 通过观察可以发现,设备连接到了 IBM IoT Foundation,并开始监听来自应用程序的命令。

设备已成功连接到 IBM IoT Foundation,让我们通过在下一步中启动应用程序来备份与还原示例配置文件。

回页首

启动应用程序示例

启动用 Java 编写的命令行应用程序示例,它会向设备发送备份与恢复命令。

要将应用程序连接到 IBM IoT Foundation,必须生成 API 密钥和令牌。这可以通过执行以下步骤实现。

1. 从浏览器启动 IBM IoT Foundation 仪表板

2. 单击 ACCESS 选项卡

3. 单击 API Keys 选项卡

4. 单击“Generate API Key”按钮,如下所示:

在 IBM IoT Foundation 中备份与还原设备配置

5. 记下“API Key”和“Authentication Token”。我们需要使用它们来连接到 IoT Foundation,以便订阅设备事件。

启动应用程序示例

1. 将最新的 iotf java 客户端库下载到您的 Windows 平台(或任何环境),您将在那里运行应用程序:

https://github.com/ibm-messaging/iot-java/releases/download/0.0.5/com.ibm.iotf-0.0.5.zip

(整个库的源代码都呈现在 Github 中的 此处 )

2. 解压归档文件 com.ibm.iotf-0.0.5.zip。

3. 打开一个命令行提示符并导航到解压归档文件 com.ibm.iotf-0.0.5.zip 的目录。

4. 通过输入您的组织 ID、应用程序的 API 密钥和身份验证令牌来修改 application.prop 文件,如下所示:

Organization-ID = <Your Organization ID> API-Key = <Your Organization's API Key> Authentication-Token = <Your Organization's Token> Device-Type = <Device Type where the application will send the backup & restore command> Device-ID = <Device ID where the application will send the backup & restore command>

(使用您早先记下的 API 密钥和令牌替换此处的 API 密钥和令牌)

5. 通过指定 Cloudant NoSQL DB 用户名和密码来运行应用程序示例,如下所示:

java -cp com.ibm.iotf.client-0.0.5.jar;com.ibm.iotf.samples-0.0.5.jar;lib/*   com.ibm.iotf.sample.client.application.BackupAndRestoreApplicationSample <username> <password>

(备注:必须使用早先记下的 Cloudant NoSQL DB 用户名和密码替换此处的 Cloudant NoSQL DB 用户名和密码)

6. 通过观察可以发现,应用程序在 Cloudant NoSQL DB 中创建了一个 config 数据库,如果没有显示该数据库,请连接到 IBM IoT Foundation 并向用户提供操作列表,如下所示:

在 IBM IoT Foundation 中备份与还原设备配置

到目前为止,我们已经将设备和应用程序都连接到了 IBM IoT Foundation。并在 IBM IoT Foundation 中创建了 config 数据库来存储配置文件的内容。让我们在下一步中备份 sample.config 文件。

回页首

备份配置文件

使用 IoTF 命令和事件将 sample.config 文件备份到 Cloudant NoSQL DB 中。

1. 在应用程序命令提示符下,键入“backup”– 这会在内部将一个 backup-command 发送到 Raspberry Pi 设备。

2. 通过观察可以发现,在设备控制台上,设备将会接收 backup-command,并将 sample.config 的内容作为设备事件发送给 IoT Foundation。

3. 然后可以观察到,在应用程序控制台上,将会接收备份事件,将它存储到 Cloudant DB 中,并显示文档的 id。请注意,稍后存储配置文件时需要使用此 id。

4. 转到浏览器并刷新 Cloudant DB 页面,您会观察到,在 config 数据库下创建了一个新文档。

在 IBM IoT Foundation 中备份与还原设备配置

5. 单击 DB 名称查看已存储的文档的列表。

在 IBM IoT Foundation 中备份与还原设备配置

6. 您会观察到页面上显示了一个具有应用程序上显示的 id 的文档。在这里,文档的 id 是 6f65a7227bc94307abd8e7e45f6177a5。

7. 双击文档查看内容。

在 IBM IoT Foundation 中备份与还原设备配置

8. 您会观察到,配置文件的内容已存储在 DB 中。

在最后一步中,我们成功地将 sample.config(设备配置文件)的内容存储到了 Cloudant NoSQL DB 中。

回页首

修改配置文件

在运行设备代码时,在设备上打开 sample.config 文件(使用另一个 SSH 终端)并修改它的内容。例如,将 config_hdmi_boost 的值从 4 修改为 5 并保存。

在下一节中,让我们用原始内容还原 sample.config 文件。

回页首

还原配置文件

利用 IoTF 命令和事件,用原始内容还原 sample.config 文件。

1. 在应用程序命令提示符下,键入“restore <Cloudant doc ID>”,如下所示:

restore 6f65a7227bc94307abd8e7e45f6177a5

(请注意,在备份过程中,必须使用控制台上显示的 id 来修改文档 id。)

2. 您会观察到,应用程序从 Cloudant NoSQL DB 读取配置文件文档,然后将相同内容作为还原命令 restore-command 的一部分进行发送。

3. 在设备控制台上可以观察到,restore-command 已被处理,并且已使用原始版本还原了 sample.config 文件的内容。

4. 打开 sample.config 文件,您会观察到,已经使用原先的值 4 还原了 config_hdmi_boost 属性的值。

在这一步结束时,我们已成功地将 sample.config(设备配置文件)的内容还原到了 Raspberry Pi 设备上。

回页首

结束语

在本文中,我们演示了如何使用 Java Client Library for IBM IoT Foundation Connect,将设备配置文件备份到 Cloudant NoSQL DB 中,以及如何从该数据库中还原配置文件。开发人员可以查看在 Github 存储库中可用的代码,了解幕后的情况。开发人员可以考虑将本文作为一个模板,实现与备份和恢复相关的任何进一步的操作。

原文  http://www.ibm.com/developerworks/cn/iot/iot-backup-restore-device-configuration-in-ibm-iot-foundation-2/index.html?ca=drs-
正文到此结束
Loading...