现在的监控工具通常通过事故或电子邮件通知来发送警报。但是,IT 团队往往需要一种更加直观的感知方法。例如,在收到事故或电子邮件时,或者出现来自 IT 服务管理工具的操作时,IT 操作员需要通过扬声器发出一种听得见的信号,或者通过灯泡发出一种看得见的信号。这些类型的警报意味着操作员不再需要密切注视屏幕或他们的智能手机。
根据当前架构实现一个集成了服务管理系统与这些类型的设备的解决方案,这可能很复杂。本文将演示如何使用一组低成本的硬件( 一个 TJBot 机器人中的 Raspberry Pi )和 Watson API、IBM Watson IoT Platform 以及其他 IBM Cloud 服务,为您的 IT 运营构建一个认知警报系统。
演示用例:认知警报系统
在这个用例中,公司通过 IBM Workload Scheduler 对整个 SAP 批处理工作流进行了自动化。操作团队希望在出现异常中断时收到警报。在出现严重警报时,团队希望能打开一盏灯并呼叫操作员。但是,如果操作员已经在现场,他们希望仅触发可视警报;也就是说,不发出呼叫。
IBM Workload Scheduler 提供了一个用于 MQTT 的插件,可以使用该插件连接到一个 MQTT 代理(比如 Watson IoT Platform 中的代理),并订阅设备,发布消息和发送命令。团队可以构建一个 IoT 设备(比如一个包含 Raspberry Pi 的 TJBot,包括摄像头和传感器),然后使用这个用于 MQTT 的 IBM Workload Scheduler 插件来控制 IoT 设备。
给出了此解决方案的预期架构。对于每次异常中断,IBM Workload Scheduler 都会向 Watson IoT Platform 发送 MQTT 发布消息。TJBot 有一个本地 Node-RED 应用程序负责监听这些消息并对这些 MQTT 消息主题做出反应。TJBot 利用了它的传感器,并被配置为闪烁 LED 灯,使用伺服电动机挥动手臂,拍一张照片并使用 Watson Visual Recognition 服务确定它是否看到了人脸,最后使用 Twilio 服务触发呼叫通知(如果未检测到人脸),或者使用 Watson Text-to-Speech 服务通过其扬声器讲出消息(如果检测到人脸)。
图 1. 认知警报系统的架构

构建此应用程序需要做的准备工作
- 一个 IBM Cloud 帐户。可以在 此处 申请一个免费试用帐户。IBM Cloud 提供了 Watson IoT Platform,这个 MQTT 消息代理充当着所有组件之间的异步连接器。
- 一个 Twilio 开发人员帐户。可以 在此处注册一个免费帐户 。Twilio 是一个用于通信的开发人员平台,可用它向应用程序添加语音、视频和消息等功能。
- IBM Workload Scheduler 帐户。如果您无法访问企业内部的 IBM Workload Scheduler 实例,可以 订阅一个 30 天免费试用帐户 。IBM Workload Scheduler 自动化、监控并控制整个 IT 基础架构中的工作流。
- 一个 TJBot 。该用例的关键组成部分是构建一个 TJBot,这是一个使用了 Raspberry Pi 的 IoT 设备。要构建 TJBot,可以观看 此视频 ,查阅 GitHub 操作说明 ,或按照 Instructables recipe 进行操作。(Watson IoT Platform 开发大使 Brian Innes 正在制作一个 指导您构建自己的机器人的 IoT 实践视频系列 ,该视频系列可能对设置您自己的 TJBot 有所帮助。)
备注: 如果您缺乏构建完整 TJBot 的某些部件,可以通过一个 Raspberry Pi、一个扬声器和一个摄像头来完成此工作。 - Eclipse Paho MQTT 客户端 ,用来与 MQTT 消息代理进行通信。
1
配置您的 Raspberry Pi
用于您的 TJBot 的 Raspberry Pi 需要能够与 Watson IoT Platform(MQTT 代理)进行通信,所以您需要安装 Eclipse Paho MQTT 客户端来访问 MQTT 库。
- 检查您的 Raspbian 安装,查看是否安装了 libssl 1.0 或更高版本(较新的 Raspbian 版本附带了 libssl 1.1),Raspbian 是一个基于(针对 Raspberry Pi 硬件进行了优化的)Debian 的免费操作系统:
#dpkg-query -l | grep libssl
- 如果没有安装它,请运行以下命令来下载并安装它:
#wget http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.0.0_1.0.1t+deb8u6_armhf.deb #sudo dpkg –I libssl1.0.0_1.0.1t+deb8u6_armhf.deb
- 安装正确的 MQTT 客户端后,获取您的 Raspberry Pi 的 MAC 地址。稍后会使用该地址在 Watson IoT Platform 上注册您的 Raspberry Pi。输入此命令:
#service iot getdeviceid
- 因为这个用例需要进行处理,以便在本地执行,所以我已将 TJBot 的传感器移植到 Node-RED,以方便组件间的连接。
- 更新您的 Raspberry Pi 上的 Node-RED 。以用户
pi
的身份运行此命令:
#update-node-js-and-nodered
- 安装这些附加的 Node-RED 模块。 观看此视频 获得安装信息。
- rpi-ws281x-native
- node-red-node-pi-neopixel(介绍 LED 功能)
- node-red-contrib-speakerpi(介绍扬声器)
- node-red-contrib-camerapi(介绍摄像头)
- node-red-contrib-micropi(麦克风捕获声音)
- node-red-node-twilio(执行呼叫的 Twilio 节点)
- node-red-node-watson (Watson Services API)
- node-red-node-cf-cloudant(Cloudant 数据库)
- node-red-contrib-ibm-watson-iot(Watson IoT 服务)
- node-red-contrib-scx-ibmiotapp
- node-red-contrib-gpio(介绍伺服控制)
- rasp-io
- 更新您的 Raspberry Pi 上的 Node-RED 。以用户
2
在 IBM Cloud 上创建一个 Watson IoT Platform 服务
IBM Workload Scheduler 需要连接到 Watson IoT Platform 来发布 MQTT 消息主题。TJBot(在它的 Node-RED 应用程序中使用 ibmiot 节点)收到 IBM Workload Scheduler 发送的事件并在该主题内查找消息。您需要使用 IBM Cloud 中的 Watson IoT Platform 来请求 IoT 服务,以便全面启用 TJBot。
您将使用 Internet of Things Platform Starter 样板,因为它部署了您的应用程序中包含的 4 个服务:Internet of Things Platform、IBM SDK for Node.js、Node-RED 和 Cloudant。
2a
在 Internet of Things Platform 服务上注册 Raspberry Pi 设备
- 登录到您的 IBM Cloud 帐户。
- 从 IBM Cloud Dashboard,单击 Catalog 。
- 从左侧菜单窗格中的 Platform 下,选择 Internet of Things 。然后选择 Internet of Things Platform 服务。
- 定义一个 服务名称 ,比如
iot-raspberry
,并单击 Create 。
- 单击 Launch 打开 Watson IoT Platform。
- 从左侧菜单窗格,单击 Devices ,然后单击 Device Types 选项卡。 Device types 将具有类似特征的设备分组到一起;例如,可以将您的所有 Raspberry Pi 分组到一起。
- 单击 Add Device Type 。
- 在 Name 字段中,输入
tjbotiot
。 - 依次单击 Next 、 Done 和 Register 。
- 创建设备类型后,添加您的 Raspberry Pi 设备。
- Select Existing Device Type 会列出您刚注册的设备类型:
tjbotiot
。 - 在 Device ID 字段中,输入一个唯一 ID;比如
myraspberry
。 - 接受接下来的 3 个面板上的默认设置以完成设备凭证,稍后需要使用这些凭证来配置 MQTT Paho 客户端。
- Select Existing Device Type 会列出您刚注册的设备类型:
2b
从 Watson IoT Platform 为 IBM Workload Scheduler 请求一个 API 密钥
因为 TJBot 上的 Node-RED 安装正在访问 Watson IoT Platform,所以 IBM Workload Scheduler 需要使用不同的凭证来连接 Watson IoT Platform。因此,您需要从 Watson IoT Platform 请求一个应用程序 API 密钥,以便可以使用这些凭证提交 MQTT 消息主题。
- 在 Watson IoT Platform 中,从左侧菜单窗格单击 Apps 。
- 单击 Generate API Key ,然后单击 Generate 。记住您的密钥,稍后会使用它配置 IBM Workload Scheduler(例如
a-n7ha45-vzj07dmv6p
)。
稍后在配置 Node-RED 应用程序时会使用这些凭证。
2c
将 Watson 服务添加到您的应用程序
最后,需要将一些 Watson 服务添加到您的应用程序,为您的认知警报系统装入大脑。这些服务有助于确定 TJBot 所在的桌旁是否有人,并让 TJBot 发出警报声。
- 在 IBM Cloud 目录中,搜索以下服务并添加到您的应用程序:
- Visual Recognition
- Text-to-Speech
- 保持该服务未绑定,但查看并复制用于每个服务的凭证。稍后配置 Node-RED 应用程序中的节点时需要使用这些凭证。
3
为 Raspberry Pi 配置设备凭证
将 MQTT 客户端安装在您的 Raspberry Pi 上后,它就会开始运行。需要停止它才能为它配置新的设备凭证。
- 在 Raspberry Pi 上,输入此命令:
# sudo service iot stop
- 在 vi 上(或使用您喜欢的文本编辑器)打开
device.cfg
文件。
#sudo vi /etc/iotsample-raspberrypi/device.cfg
- 编辑凭证信息,使之与您将 Raspberry Pi 设备添加到 Watson IoT Platform 时收到的凭证相匹配。
#Device configuration file org = <yourOrgId> type = tjbotiot id = <yourMac> auth-method = token auth-token = <yourToken> #End of Configuration file
- 重新启动 IoT 服务。
#sudo service iot start
4
配置本地 Node-RED 应用程序
您已经更新了 Node-RED,已将必要的 Node-RED 模块安装在 Raspberry Pi 上,并配置了您的 IBM Cloud 应用程序,现在可以导入 Node-RED 流并配置它了。我会带您了解这些节点和它们的功能,并展示需要配置的节点。
- 转到 GitHub 。
- 复制 GitHub 文件中的流。
- 打开您的 Node-RED 本地安装(主机名:1880)。
- 从 汉堡包形状的 菜单中,选择 Import > Clipboard 。Import nodes 窗口将会打开。
- 将内容粘贴到此处并单击 Import 。
- 导入该流后,附加到 Node-RED 并安装必要的节点模块,使该流类似于下图。
让我们查看一下该流中的节点。
4a
配置 ibmiot 输入节点以接收事件
该流从标为 TJBot IoT – workload-sched 的 ibmiot 输入节点开始。此节点用于接收 IBM Workload Scheduler 发送的事件。

- 双击 TJBot IoT – workload-sched 节点。
- 单击铅笔符号来配置该节点。
- 在 Name 字段中,输入
my-tjbot
。 - 在 API Key 字段中,输入之前生成的 API 密钥(例如
a-n7ha45-vzj07dmv6p
)。
- 单击 Update 。
- 再次双击 TJBot IoT – workload-sched 节点,在 Authentication 字段中选择 API Key ,选择您刚注册的 API 密钥
my-tjbot
,然后配置 ibmiot 节点设置。
- 在 Input Type 字段中,选择 Device Event .该节点将会监听 IoT 设备发送的事件。
- 对于 Device Type 和 Format 字段,选择 All 。
- 对于 Device Id 字段,输入您的 Raspberry Pi 的 MAC 地址。
- 对于 Event 字段,输入
workload-sched
。IoT 设备在这里发布事件。
备注:如果一次作业运行导致异常中断,则会触发事件规则 MQTT_TRIGGER_ER
(将在后面的第 5 小节中创建)来运行一个 MQTT 作业。该 IBM Workload Scheduler MQTT 作业导致在 Watson IoT Platform 中的 workload-sched 主题上发布一个 JSON 对象。第 5 小节会详细介绍该 IBM Workload Scheduler 作业步骤。

4b
查看提取数据的函数
在输入节点后,流的下一部分(部署在 TJBot 的本地 Node-RED 安装上)从一个来自 IBM Workload Scheduler MQTT 作业的 JSON 对象开始。

Extract Data函数解析作业名称和返回代码(供其他服务使用),它还发送一个颜色字符串供 TJBot 中的 neopixel LED 灯使用。
Extract Data函数包含以下代码:
//Extract data and compose message var messageText = msg.payload.jobname messageText = "The job " + msg.payload.jobname + " abended with return code " + msg.payload.jobrc; return { "job":{ "text": messageText, "color": "Red" } };
4c
配置 Watson Services 节点
该流经历 Extract Data 函数后,在 capture 节点上捕获一幅图像。我使用了一个名为 raspstill
的命令。该图像由一个视觉识别 API 用于分析图像中的面部。

在您安装 node-red-node-watson 节点模块时,Node-RED 上显示了 Watson Services 节点托盘,可以在流上看到它们被导入为 visual api 和 text to speech 节点。
确保您在 visual api 节点上添加了您的 API 密钥,并为 text to speech 节点添加了用户名和密码。回想一下,在第 2 小节结束时,您从 IBM Cloud 请求了两个服务,其中包括一个用于 Visual Recognition 服务的服务。获取它的 API 密钥并粘贴到该节点的 API Key 下。

视觉识别 API 的输出被发送到名为 have ops 的 switch 节点。如果 msg.result.images[0].faces[0]
不为 null,则表明检测到人脸,没有必要发出呼叫或发送 SMS 消息。TJBot 仅说出作业名称和返回代码,挥动手臂并闪烁 LED 灯。
在 have ops switch 节点的属性为 null 时,表明未检测到人脸,TJBot 会发出呼叫并发送一条 SMS 消息。

4d
配置 LED 节点
Extract Data函数还发送一个颜色有效负载,用于点亮安装在 TJBot 上的 neopixel LED 灯。在这个示例中,该函数向 neopixels 节点发送了一个 red 字符串。

它还将一个有效负载发送到 text-to-speech 服务,在这里生成一个供 TJBot 的扬声器播放的文件。输入您在第 2 小节末尾处添加的 Text to Speech 服务所保存的凭证。
4e
配置 rpi-gpio 节点和 have ops switch 节点
要让伺服电动机挥动手臂,需要配置名为 Servo 的 rpi-gpio out 节点。

确保您使用的 GPIO 与该节点上的设置相匹配。在 GPIO 字段中,我选择了 Pin 22 – GPIO25 。

4f
配置 twilio-api 节点
对于 SMS 消息和电话交互,可以使用 Twilio API、帐户 SID 和令牌将其配置到一个本地 Node-RED Twilio 节点。

创建一个新的 Twilio 帐户并输入来自 Twilio 订阅的信息。

定义用于发送 SMS 消息的电话号码。SMS 消息的内容来自我定义的第一个函数。
"messageText = "The job " + msg.payload.jobname + " abended with return code " + msg.payload.jobrc; "

Twilio 输出节点 sms job abend 将一条 SMS 消息发送到该节点上注册的操作员电话号码。为了实现电话呼叫,需要为呼叫输出添加并配置另一个 Twilio 节点。该消息是静态的,可以根据您的喜好进行修改,在示例中,我使用了来自 Twilio 的 twimlets 在 URL 字段中实现基本的语音功能。
http://twimlets.com/message?Message=Hello,%20you%20have%20an%20incident%20on%20your%20queue,%20please%20take%20the%20necessary%20action.%20Hello,%20you%20have%20an%20incident%20on%20your%20queue,%20please%20take%20the%20necessary%20action.

5
配置 IBM Workload Scheduler MQTT 作业并监控事件规则
IBM Workload Scheduler 是一个软件自动化工具,它为自动化工作负载管理和监控提供了支持。 利用该工具的 MQTT 作业自动化能力连接到 MQTT 服务器,订阅一个主题,或向一个主题发布一条消息(一个事件或命令)。
5a
创建一个新的 MQTT 作业来发布 MQTT 消息
- 在 IBM Workload Scheduler 中,单击 Administration > Manage Workload Definitions 。Workload Designer 窗口将会打开。
- 选择作业类型 MQTT (9.4.0.01) 。
- 使用以下 MQTT 参数来定义 MQTT 作业:
Server: <yourOrgId>.messaging.internetofthings.ibmcloud.com Port: 8883 Use SSL: TLS v1.2 User name (your API key): a-<yourOrgId>-<Key> Password (from the application registration): *** Client ID: a:<orgId>:App5 Topic: iot-2/type/my-tjbot/id/<deviceID>/evt/workload-sched/fmt/json MQTT Message: {"jobname":"${agent:JOBS.JOBNAME}", "jobrc":"${agent:JOBS.RC}"}
5b
定义一条新的事件规则来监控环境中的作业异常中断
每个异常中断的作业都会触发一个 MQTT 作业在 Watson IoT Platform 上发布一条消息。
- 选择 Administration > Create Event Rules 。Event Rule Creator 面板将会打开。
- 将该规则命名为
MQTT_TRIGGER_ER
。 - 拖动事件 Job Status Changed 。
- 对于 Internal status ,选择 ABEND 。
- 从 Actions 中拖动类型 Submit job 。
- 对于 Job name 字段,单击 Look up 搜索您的作业
RASPBERRY_PUBLISH_APPID
。 - 选择该作业后,它会自动填充 Job workstation name 字段。
- 将 自定义参数 1 添加为
JOBNAME=%{jobStatChgEvt1.JobName}
- 将 自定义参数 2 添加为
JOBRC=%{jobStatChgEvt1.ReturnCode}
该命令提交之前创建的 MQTT 作业,将异常中断的作业的名称和返回代码传递给它(作为自定义参数 1 和 2)。
结束语
本文介绍了如何将像 IBM Workload Scheduler 这样的 IT 服务管理产品与 IBM Watson IoT Platform、IBM Cloud 和一个使用低成本硬件构建的机器人 (TJBot) 相集成。通过使用 Node-RED,可以快速连接后端进程与新服务,设计能让 IT 操作人员受益的可靠功能。
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。