在一个 IoT 设备上集成 IT 服务管理与 AI 服务
现在的监控工具通常通过事故或电子邮件通知来发送警报。但是,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 设备。
图 1 给出了此解决方案的预期架构。对于每次异常中断,IBM Workload Scheduler 都会向 Watson IoT Platform 发送 MQTT 发布消息。TJBot 有一个本地 Node-RED 应用程序负责监听这些消息并对这些 MQTT 消息主题做出反应。TJBot 利用了它的传感器,并被配置为闪烁 LED 灯,使用伺服电动机挥动手臂,拍一张照片并使用 Watson Visual Recognition 服务确定它是否看到了人脸,最后使用 Twilio 服务触发呼叫通知(如果未检测到人脸),或者使用 Watson Text-to-Speech 服务通过其扬声器讲出消息(如果检测到人脸)。
用于您的 TJBot 的 Raspberry Pi 需要能够与 Watson IoT Platform(MQTT 代理)进行通信,所以您需要安装 Eclipse Paho MQTT 客户端来访问 MQTT 库。
- #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
- #service iot getdeviceid
- #update - node - js - and - nodered
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。
因为 TJBot 上的 Node-RED 安装正在访问 Watson IoT Platform,所以 IBM Workload Scheduler 需要使用不同的凭证来连接 Watson IoT Platform。因此,您需要从 Watson IoT Platform 请求一个应用程序 API 密钥,以便可以使用这些凭证提交 MQTT 消息主题。
稍后在配置 Node-RED 应用程序时会使用这些凭证。
最后,需要将一些 Watson 服务添加到您的应用程序,为您的认知警报系统装入大脑。这些服务有助于确定 TJBot 所在的桌旁是否有人,并让 TJBot 发出警报声。
将 MQTT 客户端安装在您的 Raspberry Pi 上后,它就会开始运行。需要停止它才能为它配置新的设备凭证。
- #sudo service iot stop
- #sudo vi / etc / iotsample - raspberrypi / device.cfg
- #Device configuration file
- org = <yourOrgId>
- type = tjbotiot
- id = <yourMac>
- auth-method = token
- auth-token = <yourToken>
- #End of Configuration file
- #sudo service iot start
您已经更新了 Node-RED,已将必要的 Node-RED 模块安装在 Raspberry Pi 上,并配置了您的 IBM Cloud 应用程序,现在可以导入 Node-RED 流并配置它了。我会带您了解这些节点和它们的功能,并展示需要配置的节点。
让我们查看一下该流中的节点。
该流从标为 TJBot IoT – workload-sched 的 ibmiot 输入节点开始。此节点用于接收 IBM Workload Scheduler 发送的事件。
备注:如果一次作业运行导致异常中断,则会触发事件规则 MQTT_TRIGGER_ER(将在后面的第 5 小节中创建)来运行一个 MQTT 作业。该 IBM Workload Scheduler MQTT 作业导致在 Watson IoT Platform 中的 workload-sched 主题上发布一个 JSON 对象。第 5 小节会详细介绍该 IBM Workload Scheduler 作业步骤。
在输入节点后,流的下一部分(部署在 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"
- }
- };
该流经历 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 节点。如果
不为 null,则表明检测到人脸,没有必要发出呼叫或发送 SMS 消息。TJBot 仅说出作业名称和返回代码,挥动手臂并闪烁 LED 灯。
- msg.result.images[0].faces[0]
在 have opsswitch 节点的属性为 null 时,表明未检测到人脸,TJBot 会发出呼叫并发送一条 SMS 消息。
Extract Data 函数还发送一个颜色有效负载,用于点亮安装在 TJBot 上的 neopixel LED 灯。在这个示例中,该函数向 neopixels 节点发送了一个 red 字符串。
它还将一个有效负载发送到 text-to-speech 服务,在这里生成一个供 TJBot 的扬声器播放的文件。输入您在第 2 小节末尾处添加的 Text to Speech 服务所保存的凭证。
要让伺服电动机挥动手臂,需要配置名为 Servo 的 rpi-gpio out
节点。
确保您使用的 GPIO 与该节点上的设置相匹配。在 GPIO 字段中,我选择了 Pin 22 – GPIO25。
对于 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, you have an incident on your queue, please take the necessary action. Hello, you have an incident on your queue, please take the necessary action.
IBM Workload Scheduler 是一个软件自动化工具,它为自动化工作负载管理和监控提供了支持。 利用该工具的 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}"}
每个异常中断的作业都会触发一个 MQTT 作业在 Watson IoT Platform 上发布一条消息。
。
- RASPBERRY_PUBLISH_APPID
- JOBNAME=%{jobStatChgEvt1.JobName}
点击查看大图
- JOBRC=%{jobStatChgEvt1.ReturnCode}
该命令提交之前创建的 MQTT 作业,将异常中断的作业的名称和返回代码传递给它(作为自定义参数 1 和 2)。
本文介绍了如何将像 IBM Workload Scheduler 这样的 IT 服务管理产品与 IBM Watson IoT Platform、IBM Cloud 和一个使用低成本硬件构建的机器人 (TJBot) 相集成。通过使用 Node-RED,可以快速连接后端进程与新服务,设计能让 IT 操作人员受益的可靠功能。
考虑通过以下一种(或多种)方式增强您的认知警报系统:
来源: http://www.ibm.com/developerworks/cn/iot/library/iot-cognitive-alert-system-bot/index.html