内容


将智能电话转换为传感器和执行器

使用 IBM Cloud 和 Watson IoT Platform 快速轻松地创建和部署 IoT 应用程序

Comments

物联网或 IoT 指的是越来越多连接网络的设备,它们每天捕获或生成海量信息。对于用户,这些设备包括移动电话、可穿戴运动设备、家用取暖和空调系统等。在工业环境中,这些设备和传感器可在制造设备、供应链和车内零部件中找到。IoT 可让我们所有人的生活变得更轻松。为了轻松地开发和部署所有规模的 IoT 解决方案,IBM 创建了 IBM Watson IoT Platform。

在本教程中,您将学习如何使用 Watson IoT Platform 构建一个简单的 IoT 解决方案,不仅将智能电话转换为传感器(读取和发送数据),还转换为执行器(读取和处理数据)。

您将在智能电话上使用一个 IoT Starter Mobile 应用程序。为了将智能电话转换为传感器,我们将构建一个 IoT 应用程序来读取从智能电话发送的 加速计值,并在这些值达到某个阈值时以一个具体的操作作为反应。为了将智能电话转换为执行器,我们将构建一个 IoT 应用程序来向智能电话发送特定的命令,然后智能电话能对它收到的命令做出反应。

构建这些 IoT 应用程序需要做的准备工作

您需要以下设备或帐户:

  • 一个 IBM Cloud® 帐户。(您可以在 这里 申请一个免费试用帐户。
  • 一部智能电话(Android 或 iOS 智能电话)。
  • 对于 iOS 智能电话,需要一个 iTunes 帐户来安装 IoT Starter Mobile 应用程序。
  • 一个 twitter 帐户,用于接收推文通知(可选)。
  • 一个具有 SMTP 中继功能的电子邮件帐户,用于接收电子邮件通知(可选)。

开始之前,检查以下信息:

  • 熟悉 IBM Cloud Platform。您需要知道如何浏览目录和实例化一个服务。(您可以完成 IBM Cloud 基础学习路线 中的教程,以全面了解 IBM Cloud。)
  • 熟悉 Node-RED。您需要理解如何使用 Node-RED 中的节点,以及如何在 Node-RED 中处理消息。Node-RED 是 JavaScript 的一个前端,所以您还需要有一定的 JavaScript 经验。您可以使用 Node-RED 网站上的入门文档 来帮助熟悉它们。
  • 查阅 IBM Cloud 文档 Watson IoT Platform 入门

我们的 IoT 应用程序的架构

我们的 IoT 解决方案的架构的总体视图如下图所示:

在本教程中,您将在 IBM Cloud 中创建一个 IoT 应用程序,该应用程序将管理其他两个 IoT 应用程序:

  • 一个 IoT 传感器应用程序,用于从智能电话读取和接收加速计值。此应用程序管理智能电话跌落或极快移动时的使用情景。如果它的加速度超过某个阈值,您会获得提醒。
  • 一个 IoT 执行器应用程序,用于向智能电话发送简单命令。我们将使用 IoT Starter Mobile 应用程序,它提供了智能电话可以解释的简单命令列表。例如,基于智能电话的位置,我们将打开或关闭灯光,或者更改智能电话的背景颜色。
1

在 IBM Cloud 中创建您的主要 IoT 应用程序

我们在 IBM Cloud 中的主要 IoT 应用程序将是 IoT 解决方案中的后端应用程序。我们的后端应用程序将读取、接收和解释传入的包含传感器数据的有效负载消息。此外,它将基于满足的某些条件,定义和发送 IoT 命令到执行器。

  1. 登录到您的 IBM Cloud 帐户。
  2. 在 IBM Cloud 目录中,从 Boilerplates 部分选择 Internet of Things Platform Starter 样板。
  3. 在右侧窗格中,为应用程序指定一个唯一名称,该名称将用于创建应用程序的唯一主机名。然后单击 CREATE(创建)

Internet of Things Platform Starter 样板自动将 Internet of Things Platform 服务和 Cloudant NoSQL Database 服务添加到您的应用程序。它还包含一个针对您的应用程序的 Node-RED 运行时环境。

2

在 Watson IoT Platform 中注册您的智能电话

您需要在 Watson IoT Platform 中注册您的智能电话,然后才能将它连接到 IoT。IBM Cloud 上的 IoT Platform 服务自动将一个 IoT 组织分配给您。IoT 组织是一个空间,拥有将设备连接到 IBM Watson IoT Platform 并进行管理,以便您的应用程序可访问它们的实时和历史数据。

  1. 在 IBM Cloud 仪表板中,选择 Internet of Things Platform 服务。然后单击 Launch dashboard(启动仪表板)
    IBM Watson IoT Platform 的仪表板将在一个新浏览器选项卡中打开。组织 ID 已分配给应用程序并显示在右上角。
  2. 在 Boards(仪表板) 页面(您在这里管理智能电话和数据)中,将鼠标悬停在左侧的菜单上并选择 Smartphones(设备)。在 Smartphones 页面上,单击 Add Smartphone(添加设备)
  3. 在 Add Smartphone 页面上,单击 Create smartphone type(创建设备类型)。智能电话类型的名称是区分大小写的,必须为 AndroidiPhone。IoT Starter Mobile 应用程序要求使用这些单词之一作为智能电话类型。

就这么简单!您的智能电话已向 Watson IoT Platform 注册。您仍需要将它连接到 Watson IoT Platform,但在这么做之前,需要在智能电话上安装和配置 IoT Starter Mobile 应用程序。

3

在智能电话上安装和配置 IoT Starter Mobile 应用程序

您将使用 IoT Starter Mobile 应用程序读取和发送来自智能电话的传感器数据,以及将智能电话转换为可接收和运行命令的执行器。此应用程序是使用 iOS 和 Android 平台上的原生语言开发的。借助这个移动应用程序,您可以发布以下事件:

  • 智能电话上的加速计 X、Y、Z 事件
  • touchMove 事件
  • text 事件
3a

在 iOS 智能电话上安装 IoT Starter Mobile 应用程序

如果您是一位经验丰富的 iOS 开发人员,可以从 ibm-watson-iot GitHub 项目下载 IoT Starter Mobile app for iOS 演示应用程序,将它导入 Xcode 开发环境,然后自行构建 .ipa 包文件。这里的步骤演示了如何使用 iTunes 手动安装 .ipa 包文件。

  1. 从我的 watson-iot-actuator GitHub 项目将 ibm-watson-iot GitHub 下载到您的计算机。
  2. 双击 .ipa 文件。iTunes 会自动打开(如果它已安装在您系统上)。
  3. 使用 USB 线将您的 iOS 智能电话连接到计算机。
  4. 在 iTunes 中,单击智能电话的图标,然后单击 Apps
  5. 单击 IoT Starter Mobile 应用程序的 Install 按钮。
  6. 在 Apps 视图的右下角,单击 Apply 按钮。
  7. 在智能电话上,打开 IoT Starter Mobile 应用程序。该应用程序的图标类似于此图标:

根据智能电话上的 iOS 版本,您可能被提示信任国际商业机器公司开发人员。在 iOS 智能电话的 General Settings 中,向下滚动并选择 Device Management。选择 International Business Machines,然后单击 Trust "International Business Machines" 链接。您会在应用程序列表中看到 IoT Starter,它将列为已验证。

3b

在 Android 智能电话上安装 IoT Starter Mobile 应用程序

如果您是一位经验丰富的 Android 开发人员,可以从 ibm-watson-iot GitHub 项目下载 IoT Starter Mobile app for Android 演示应用程序,将它导入 Android 开发环境,然后自行构建 .apk 文件。这里的步骤演示了如何手动安装 .apk 文件。

  1. 在 Android 电话上,转到 Settings > Security。在 Smartphone Administration 下,启用 Unknown sources。此设置将允许您从 Google Play 以外的地方安装 .apk 文件。
  2. 打开 Android 智能电话上的浏览器,输入此 URL:
    http://ibm.biz/asdwapk

    无需键入 URL,即可在本文中使用 QRcode。

  3. iot-starter-for-android.apk 文件下载到 Android 智能电话上。
  4. 使用一个文件浏览器在 Downloads 文件夹中找到该文件,选择 .apk 文件来安装它。
4

确认智能电话消息已发送到 Watson IoT Platform 上

将 IoT Starter Mobile 应用程序安装到智能电话上后,您需要为它配置您的 IoT 凭证,并将该应用程序连接到 Watson IoT Platform。

  1. 打开智能电话上的 IoT Starter 应用程序,指定您的企业和智能电话凭证。
  2. 打开该应用程序的配置文件。
    • 对于 Android 设备,选择右上角的菜单,然后选择 Open profiles
    • 对于 iPhone 设备,选择 Pr...iles 链接,然后选择 Open profiles
  3. 单击 Save setting 并为您的配置文件提供一个名称,比如 myProfile。单击 Save,返回到登录窗口。您的凭证现已保存,可供您下次连接时使用。
  4. 单击 Activate Sensor,这会导致您的应用程序将消息发送到 Watson IoT platform。
  5. 在(IBM Cloud 中的)Watson IoT Platform 仪表板中,在左侧菜单中选择 Smartphones。在列表中选择您的智能电话。确认 Recent Events 部分显示了加速计事件。
  6. 如果您愿意,可以向仪表板添加一个卡片来(实时)可视化您的智能电话数据。使用 IBM Cloud 上的 Watson IoT Platform 文档 学习如何创建仪表板和卡片。
5

处理来自 IoT 传感器应用程序的消息

现在您的智能电话已注册,您已确认它将加速计数据发送到 Watson IoT Platform,我们需要使用 IoT 服务将 IoT 应用程序连接到 Watson IoT 平台。然后就可以开始在我们的 IoT 解决方案中使用智能电话数据。

  1. 在 IBM Cloud 仪表板中,转到您的应用程序,单击您的应用程序路径来访问它。
  2. 打开 Node-RED 流编辑器。
  3. 在 Node-RED 编辑器(它已打开并包含一个示例流)中,选择所有现有的节点并删除它们。
  4. 从输入部分将一个 ibmiot 节点拖到您的工作区,并从输出部分将一个调试节点拖到您的工作区,以便创建一个新流。将两个节点连接起来。
  5. 双击 IBM IoT 节点来配置它。指定 IBM Cloud 服务的身份验证和设备 ID 信息,这是您向 Watson IoT Platform 注册时选择的设备。然后单击 Done。
  6. 单击 Node-RED 流编辑器右上角的 Deploy 按钮。
    在部署该流时,该按钮变为灰色。
  7. 选择 Debug 选项卡来查看来自智能电话的传感器数据。
    如果无法看到 Debug 选项卡,可能需要展开浏览器窗口(或滚动它)才能看到它。

收到的传感器数据为 JSON 格式。IoT Starter Mobile 应用程序使用 MQTT 协议发送数据。

6

在智能电话跌落时发送警报

现在,我们将更新 Node-RED 流来使用传感器数据。

我们将执行以下步骤:

  • 从 JSON 有效负载消息提取 “acceleration_y” 值
  • 针对一个加速度值(比如 iOS0.5Android7)触发一个值。
  • 调试通知消息
  • 可选地,发表一条推文或发送一封电子邮件

转到您的 Node Red 流编辑器。您将通过拖动合适的节点并连接它们来创建下面这个流,如下图所示:

  1. 要从 JSON 有效负载消息提取智能电话的绝对值 acceleration_y ,我们将添加并配置一个功能节点。在面板的功能部分,将一个函数节点拖到工作区。双击功能节点,为它配置以下值:
    1. 指定 getAcceleration_y 作为此节点的名称。
    2. 在此功能节点中,复制并粘贴以下代码:
      return {payload:Math.abs(msg.payload.d.acceleration_y)};
    3. 单击 Done
  2. 要在 acceleration_y 值上创建一个触发器,我们将添加并配置一个开关节点。在面板的功能部分,将一个开关节点拖到工作区。将功能节点连接到开关节点。双击开关节点,为它配置以下值:
    1. 指定 testAcceleration_y 作为此节点的名称。
    2. 指定 msg.payload 作为属性。
    3. condition value 下拉列表中,选择 ">=?",然后为 iOS 指定 0.5,为 Android 指定 7
    4. 在最后的下拉列表中,选择 stopping after first match
    5. 单击 Done
  3. 要定义您想在电话跌落时发送的通知消息,我们将添加和配置一个模板节点。在面板的功能部分,将一个模板节点拖到工作区。将开关节点连接到模板节点。双击模板节点,为它配置以下值:
    1. 指定 Acceleration_y_exceed_message 作为此节点的名称。
    2. 指定 msg.payload 作为属性。
    3. 将以下代码复制并粘贴到节点编辑器中:
      Wow!Is your phone falling?
      Its acceleration y = {{payload}}!
    4. 单击 Done
  4. 要限制通知消息数量和避免重复的通知消息,我们将添加和配置一个延迟节点。在面板的功能部分,将一个延迟节点拖到工作区。将模板节点连接到延迟节点。双击延迟节点,为它配置以下值:
    1. 指定 Limit Rate 作为此节点的名称。
    2. Action 下拉列表中,指定 Limit rate to。然后将速率设置为 1 并选择 Minute
    3. 勾选 Drop intermediate message 复选框。
    4. 单击 Done
  5. 要在流的 Debug 选项卡中显示通知消息,我们将添加和配置一个调试节点。在面板的输出部分,将一个调试节点拖到工作区。将延迟节点连接到调试节点。
  6. 为了避免 Debug 选项卡中显示太多调试信息,可以单击调试节点中的绿色矩形来激活和停用调试节点。

    浏览器顶部会显示一条消息,解释调试节点已激活还是停用。
  7. 要测试您的 IBM Cloud 应用程序(和 Node-RED 流),完成以下步骤:
    1. 单击 Deploy 重新部署您的 Node-RED 流。
    2. 在智能电话上,运行 IoT Mobile Starter 应用程序,然后单击 Activate Sensor
    3. 快速上下移动智能电话,以模拟它的跌落过程。
    4. 在 Node-RED 流编辑器中的 Debug 选项卡中,确认显示了 acceleration_y 值和通知消息。
6a

通过推文获得通知

如果您有一个 Twitter 帐户,可通过推文形式发送通知。

  1. 在 Node-RED 编辑器中,在面板的社交部分,将一个 twitter out 节点拖到工作区。将 twitter out 节点连接到延迟节点输出。
  2. 双击 twitter out 节点,为它配置以下值:
    1. 在 twitter out 对话框中,选择 Twitter ID 下拉列表旁边的铅笔图标。
    2. 在下一个对话框中,单击该按钮向 Twitter 执行身份验证。在显示的窗口中,指定您的 Twitter 凭证并授权您的 IBM Cloud 应用程序使用您的 Twitter 帐户。
    3. 单击 Add 添加该 Twitter 帐户。
    4. 在 twitter out 对话框中,确保选择了您的 ID。
  3. 单击 Deploy 测试您的流的这个新版本。如果 Deploy 按钮是红色的,则意味着您的流已更新并需要重新部署。如果 Deploy 按钮是灰色的,则意味着您的流已部署。
  4. 要测试此通知方法,可完成以下步骤:
    1. 在智能电话上,确保 IoT Starter 应用程序正在运行,并在必要时单击 Activate Sensor
    2. 快速上下移动智能电话,以模拟它的跌落过程。
    3. 在 Debug 选项卡中,确认您看到了加速度值和通知消息。
    4. 访问您的 Twitter 应用程序,确认您看到了包含来自 IBM Cloud 应用程序的通知消息的推文。
6b

通过电子邮件获得通知

如果您有一个 SMTP 电子邮件帐户,可以让应用程序发送一封包含智能电话正在跌落的通知的电子邮件。您可能需要配置电子邮件的安全设置,以便允许您的应用程序发送电子邮件。例如,如果您使用的是 Gmail 帐户,则必须在 Sign-in & security 设置中启用 Allow less secure apps 选项。

  1. 在 Node-RED 编辑器中,在面板的社交部分,将一个 e-mail out 节点拖到工作区。将 e-mail out 节点连接到延迟节点输出。
  2. 双击 e-mail out 节点,为它配置以下值:
    1. To 字段中,指定您的电子邮件地址。
    2. Server 字段中,指定您的 SMTP 服务器地址,比如 smtp.gmail.com。
    3. Port 字段中,指定发送电子邮件的 SMTP TCP 端口,比如 465。
    4. Userid 字段中,指定用于向 SMTP 服务器执行身份验证的用户名。此用户名可以是您的电子邮件地址。
    5. Password 字段中,指定与您的用户名关联的密码。
  3. 要测试此通知方法,请完成以下步骤:
    1. 在智能电话上,确保 IoT Starter Mobile 应用程序正在运行,并在必要时单击 Activate Sensor
    2. 快速上下移动智能电话,以模拟它的跌落过程。
    3. 在 Debug 选项卡中,确认您看到了加速度值和通知消息。
    4. 访问您的邮件应用程序,确认您看到了包含来自 IBM Cloud 应用程序的通知消息的电子邮件。
7

向智能电话发送命令

目前为止,您的智能电话充当着传感器。但是,您可以使用 IoT Starter Mobile 应用程序将智能电话转换为执行器,只需让智能电话接收并执行命令即可。

IoT Starter Mobile 应用程序可管理 3 种事件:

  • 加速计的 accel 事件
  • touchmove 事件,表示智能电话上的滑动事件
  • text 事件,表示文本命令

该应用程序可接收和执行 4 种命令:

  • 灯光 - 该命令将打开或关闭智能电话上的灯光。
  • 颜色 - 该命令将更改 IoT Starter Mobile 应用程序的背景颜色。
  • 警报 - 该命令将显示应用程序中的警报消息。
  • 任何文本值 - 该命令将记录应用程序中的消息。
7a

在 Node-RED 中创建 IoT Actuator 应用程序

  1. 从我的 watson-iot-actuator GitHub 项目 将 /flows/commands.json 文件 下载到您的计算机。
  2. 在文本编辑器中打开 commands.json 文件,确保所有代码都在一行上。如有必要,请删除所有换行符。复制这行代码。
  3. 在 Node-RED 编辑器中,单击加号图标创建一个连接到工作区的新流。
  4. Ctrl+I 打开 Import Nodes 对话框。粘贴该行代码,然后单击 Import。工作区中显示了下面的流:
  5. 要为您的 IoT Actuator 应用程序自定义此流,需要按下面的描述配置这些节点:
    1. 双击 IoT App In 节点,指定您在注册智能电话时使用的智能电话 ID。单击 Done
    2. 双击 IoT App Out 节点,指定智能电话 ID、智能电话类型(iPhone 或 Android)。单击 Done
  6. 单击 Deploy
7b

在智能电话上测试这些命令

  1. 在智能电话上,确保 IoT Starter Mobile 应用程序正在运行,并在必要时单击 Activate Sensor
  2. 四处移动您的智能电话;翻动和倾斜它。电话上的应用程序的背景颜色发生了改变。您的智能电话正在接收 accel 事件。
  3. 在移动智能电话上,在前台打开 IoT Starter Mobile 应用程序,在屏幕上使用一根手指左右滑动。检查应用程序中的 Log 选项卡。有两条消息被记录。您的智能电话正在接收 touchmove 事件。
  4. 在智能电话上,返回到 IoT 选项卡。单击 Send Text 按钮。键入任何文本值,单击 Submit 按钮。
  5. 再次检查 Log 选项卡,可以看到记录了两条消息。您的智能电话正在接收 text 事件。
  6. 在智能电话上,返回到 IoT 选项卡。单击 Send Text 按钮。在字段中键入 alert,然后单击 Submit 按钮。一个弹出框显示了一条警报。您的智能电话正在接收 alert 事件。
  7. 在智能电话上,返回到 IoT 选项卡。单击 Send Text 按钮。在字段中键入 light,然后单击 Submit 按钮。智能电话上的灯光将打开;该命令可能并不适用于所有 Android 智能电话,但适用于所有 iOS 智能电话。您的智能电话正在接收 light 事件。可以再次单击 Send Text,键入 light,灯光将会关闭。

在下一步中,我们将创建一个 IoT 应用程序,将智能电话用作传感器和执行器的概念结合起来。

8

在水平翻转智能电话时打开和关闭它的灯光。

现在您已看到如何将智能电话转换为传感器或执行器,让我们创建一个 IoT 应用程序来将智能电话同时转变为二者!在此场景中,我们在每次水平翻转智能电话时打开或关闭它的灯光。

我们将测试来自智能电话的加速度 Z,检查此值是正值还是负值并保存状态。

  • 在加速度 Z 是正值时,如果然后灯光关闭,则发送 light 命令到电话来打开灯光。
  • 在加速度 Z 是负值时,如果然后灯光已打开,则发送 light 命令到电话来关闭灯光。
  1. 转到 Node Red 流编辑器。将拖动合适的节点并连接它们来创建下面这个流,如下所示:
  2. 在面板的功能部分,将一个函数节点拖到工作区。
    1. 为此功能节点指定一个名称。例如,将它命名为 Detect Flip
    2. 将以下代码剪切并粘贴到功能节点编辑器中:
      var accelerationZ = msg.payload.d.acceleration_z;
      var isAlreadySwitchedOn = context.get('isAlreadySwitchedOn')|| false;
      
      // For Android reverse this test !!!
      if (accelerationZ > 0) {    
      	if (!isAlreadySwitchedOn) {
      		isAlreadySwitchedOn = true;
      		msg.eventOrCommandType = "light";
      		msg.payload = JSON.stringify({"d":{"text":"Received light on message"}}); 
      	}
      } else {
      	if (isAlreadySwitchedOn) {
      		isAlreadySwitchedOn = false;
      		msg.eventOrCommandType = "light";
      		msg.payload = JSON.stringify({"d":{"text":"Received light off message"}}); 
      	} 
      }
      context.set('isAlreadySwitchedOn', isAlreadySwitchedOn);
      return msg;
    3. 单击 Done
  3. 将一个开关节点拖到工作区。此节点将测试我们是否需要向电话发送一条命令。在字段中填入以下值:
    1. 为此 switch 节点指定一个名称。例如,将它命名为 Flip Detected
    2. 将 Property 设置为 msg.eventOrCommandType
    3. 在下拉列表中选择 is not null
    4. 在底部下拉列表中选择 stopping after first match
    5. 单击 Done
  4. 将一个 ibmiot out 节点拖到工作区。此节点将向电话发送 light 命令。在字段中填入以下值:
    1. 为此节点指定一个名称。例如,将它命名为 IBM IoT Out
    2. Authentication 下拉列表中选择 IBM Cloud Service
    3. Output Type 下拉列表中选择 Smartphone Command
    4. 输入智能电话类型(iPhone 或 Android)。
    5. 输入智能电话 ID。
    6. Command Type 文本框中输入 text
    7. Format 文本框中指定 json
    8. Data 框中,键入此字符串:
      {"d":{"value":"text"}}
    9. 单击 Done
  5. 部署新流。拿起电话,单击 Activate Sensor 来运行 IoT Starter Mobile 应用程序。
    1. 观察 Node-Red 流中的 Debug 选项卡,查看从电话传入的 MQTT 消息。
    2. 水平翻转电话,确认灯光已打开。
    3. 再将它翻转回来,确认灯光已关闭。

如果您的 Android 智能电话没有正确解释 light 命令,可以将功能节点中的代码替换为以下代码。它提供了一个替代解决方案,该解决方案使用的 color 命令会在每次水平翻转电话时更改 IoT Starter Mobile 应用程序的背景颜色,而不是打开或关闭智能电话的灯光。

var accelerationZ = msg.payload.d.acceleration_z; 
var r = 0.0; 
var b = 0.0; 
var g = 0.0; 
a = 1.0; 

 
if (accelerationZ < 0) { 
    // green 
    r = 102.0; 
    g = 255.0; 
    b = 102.0; 
} else { 
   // purple 
    r = 178.0; 
    g = 102.0; 
    b = 255.0; 
} 
msg.eventOrCommandType = "color"; 
msg.payload = JSON.stringify({"d":{"r":r,"b":b,"g":g,"alpha":a}}); 
return msg;

结束语

在本教程中,学习了如何创建和部署 IoT 应用程序,如何轻松地将智能电话转换为传感器和执行器设备,如何轻松地将它连接到 IBM Watson IoT Platform,以及如何从智能电话发送和接收数据。

通过使用 IBM Cloud Platform 和 Watson IoT Platform,可以加快开发速度,减少上市准备时间。企业可以快速连接其设备(他们自己的一组传感器和/或执行器),构建 IoT 应用程序,解决特定的业务问题,以及变革其公司和行业。


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=物联网
ArticleID=1041790
ArticleTitle=将智能电话转换为传感器和执行器
publish-date=01042017