IoT Starter 应用程序使您能够使用 IoT 轻松地将移动设备转变为传感器。
下图概述了设备如何与 IoT Foundation 进行交互。您的移动设备要向 IoT Foundation 注册,并为使用来自您设备的数据的应用程序生成 API 密钥。
IoT Starter 应用程序可通过以下步骤进行设置:
1. 设置您的 Bluemix 应用程序和 Internet of Things 服务
2. 在您的 IoT 组织中创建一个设备
3. 将 IoT Starter 应用程序安装在您的移动设备上
4. 使用 Node-RED 扩展 IoT Starter 应用程序(或构建您自己的应用程序)
(大约时间:30 分钟)
下面设置 Bluemix 和 IoT 的操作说明类似于为流量模拟器提供的操作说明。
回页首
首先,我们需要创建一个 Bluemix 应用程序,以便有东西来使用来自设备的传感器数据。
1. 使用您的 IBM ID 注册使用IBM Bluemix。基本帐户可免费使用 30 天。
2. 在仪表板中,创建一个新应用程序。
3. 选择 Internet of Things Foundation 样板应用程序。
4. 下图显示了该应用程序的详细信息。在图的右侧,提供了该应用程序的名称(例如 iotf-starter)。这将生成该应用程序的默认路径 http://iotf-starter.mybluemix.net。单击 Create。
5. 创建应用程序后,将会加载应用程序仪表板,您的应用程序会自动启动。
6.. 在您的应用程序完成准备后,添加 Internet of Things 服务:在应用程序仪表板中,单击 Add Service,然后选择 Internet of Things Foundation(靠近底部)。备注:如果您已经创建了一个 IoT 服务,可单击 Bind Service 代替 Add Service。
7. 下一步,为服务提供一个名称(例如 iot-starter)。
8. 接下来,单击应用程序仪表板中的 Internet of Things 服务。这将打开该服务的配置页面。从这里,您可以单击 ‘launch’ 按钮来打开 Internet of Things Foundation 仪表板。
回页首
下一步是在您的新 IoT 组织中创建一个注册的设备。
1. 在完成第 1 步后,现在您应该可以看到您的 Internet of Things Foundation 仪表板。
2. 首先,在组织名称旁边寻找由 6 字符组成的字符串(例如 e3dp4x)— 这是您的 deviceOrg,您在连接到 IoT 时将会使用它。
3. 接下来,要向您的组织注册一个设备。设备用于识别来自 IoT Starter 应用程序的惟一连接。单击 Add Device 创建一个新设备类型。
对于 iOS 应用程序,可使用 ‘iPhone’。
对于 Android 应用程序,可使用 ‘Android’。
请注意,对于 IoT Starter 应用程序,这些设备类型是区分大小写的,必须按这里显示的形式进行输入。
4. 指定惟一的 deviceId(例如 AAA),然后单击 Continue。
5. 现在您会看到您设备的凭据——记下这些信息。记下 auth-token,在连接到 IoT 时将会使用它。(备注:复制并粘贴 auth-token,不要键入,以避免输入造成混淆的值)
在上方的示例图中,我们有:
deviceOrg:e3dp4x
deviceType:iPhone
deviceId:AAA
auth-token:18FA+etA*cNq9CJjHz
现在,您会在组织的设备表中看到该设备。因为我们还未从应用程序连接,所以此设备还没有数据或事件。
回页首
完成 Bluemix 和 IoT Foundation 步骤后,最后一步是安装 iOS 或 Android IoT Starter 应用程序。
对于 IBM 员工:
1. 在您设备上访问IBM DST App Center (bit.ly/dstcenter),并安装 IBM App Center 应用程序。
2. 安装 IBM App Center 后,启动它,找到 IoT Starter 应用程序并安装它。
如果在 iOS 设备上,该应用程序被命名为 ‘IoTstarter’。
如果在 Android 设备上,该应用程序将被命名为 ‘IoT Starter Android’。
对于非 IBM 员工:
即将在您附近的地方推出应用商店……
还可以在 GitHub 上获得每个应用程序的源代码:
针对 iOS 的 IoT Starter
针对 Android 的 IoT Starter
回页首
首次启动该应用程序时,会出现一个登录屏幕,您必须在其中输入以下信息:
您的 IoT 组织 ID
您的设备 ID
您的设备授权令牌
输入正确的值后,设备就可以连接到您的 IoT 服务了。按下 activate sensor 按钮来建立连接。
在连接应用程序时,它可以处理一些不同种类的输入和输出。所有输入都来自 IoT 命令主题。所有输出都进入 IoT 时间主题。有关 IoT 事件和命令的更多信息,请参阅 IoT 文档和秘诀。以下是应用程序发送和接收的消息的示例。
输入是设备从 IoT 收到的消息。这些消息可能是某个应用程序发送的,也可能是另一个向同一个组织注册的设备发送的。直到您创建某个应用程序来将消息发布到您的设备,IoT Starter 应用程序才会收到任何消息。
a. 颜色命令消息:应用程序收到颜色命令消息时,IoT 视图的背景颜色会根据颜色命令消息的内容而发生更改。颜色命令消息的内容为:
{ "d":{ "r":0.0<r<255.0, "g":0.0<g<255.0, "b":0.0<b<255.0, "alpha":0.0<a<1.0 } }
b. 照明命令消息:当应用程序收到照明命令消息时,设备手电筒将根据其当前状态来打开或关闭照明。如果没有手电筒,应用程序会显示一条提醒消息来表明这种情况。目前,该应用程序忽略了 JSON 消息数据的字段。照明命令消息的内容为:
{ "d":{ "text":"some text here", } }
c. 文本命令消息:在应用程序收到文本命令消息时,该消息会被添加到日志视图中。文本命令消息的内容为:
{ "d":{ "text":"your text here" } }
d. 提醒命令消息:在应用程序收到提醒命令消息时,它会在应用程序的当前视图上显示一个对话框,并将该消息添加到日志视图中。提醒消息的内容为:
{ "d":{ "text":"your text here" } }
输出是设备发布到 IoT 的消息。这些消息随后可由一个应用程序或向同一个组织注册的另一个设备接收。只要连接上 IoT Starter 应用程序,该应用程序就会发布消息,无论其他地方是否有另一个处理它们的应用程序。
a. 加速事件消息:在连接到 IoT 设备时,应用程序不断发布它的加速计数据。加速消息的内容为:
{ "d":{ "acceleration_x":#, "acceleration_y":#, "acceleration_z":#, "roll":#, "pitch":#, "yaw":#, "lat":#, "lon":# } }
b. 触摸移动事件消息:只要用户在查看应用程序的 IoT 视图时触摸了屏幕,应用程序就会发布触摸移动事件消息。触摸移动消息的内容为:
{ "d":{ "screenX":#, "screenY":#, "deltaX":#, "deltaY":#, "ended":0|1 } }
c. 文本事件消息:按下 IoT 视图上的发送文本按钮时,应用程序就会发送文本消息。文本消息的内容为:
{ "d":{ "text":"your text here" } }
回页首
也可以选择将 IoT Starter 应用程序连接到 IoT Quickstart 。要连接到 Quickstart,可在 Organization 字段中指定 quickstart,并提供任何有效的设备 ID。在连接到 Quickstart 时,惟一受支持的事件是状态事件。加速事件消息将作为状态事件消息来发布,其他所有事件消息都不会发布。应用程序连接到 Quickstart 时也不会订阅任何事件或命令。
将应用程序连接到 IoT Quickstart 可以轻松地可视化设备发布的数据。
回页首
Node-RED 是一个将 Internet of Things 连接在一起的可视工具。Node-RED 允许您设计一些逻辑“流”,将各种各样的输入(MQTT、TCP 和 HTTP)链接到输出(MQTT、HTTP、Twitter、MongoDB 和 Cloudant),以便快速向应用程序添加逻辑。
访问 http://iotf-starter.mybluemix.net/red/(将 ‘iotf-starter’ 替换为您的 Bluemix 应用程序名称),以便访问您应用程序的 Node-RED 画布。
第一个 Node-RED 流是一个简短示例,它将一条消息注入到一个 ibmiot 输出节点中,该节点将向您的 IoT 组织发布一条消息。然后,此消息被一个 ibmiot 输入节点收到,显示在您的 Node-RED 应用程序的调试面板中。
1. 在您的 IoT 仪表板中,创建一个类型为 ‘Node-RED-sample’、设备 id 为 ‘noderedsample’ 的新设备。
2. 在您的 Node-RED 应用程序中,将一个 inject 输入节点拖到画布上。双击该节点并将 ‘payload’ 更改为 String,然后在 payload 字段中输入 ‘test message’。
3. 将一个 ibmiot 输出节点拖到画布上,并将它连接到 inject 节点。双击该节点来编辑它的配置。设置以下属性:
Authentication:Bluemix Service
Output Type:Device Command
Device Type:Node-RED-sample
Device ID:noderedsample
Command Type:test
Format:String
Data:test message
4. 将一个 ibmiot 输入节点拖到画布上。双击该节点来编辑它的配置。设置以下属性:
Authentication:Bluemix Service
Input Type:Device Command
Device Type:Node-RED-sample
Device ID:noderedsample
Command:test
Format:All
图 1. Figure xxx. Requires a heading
5. 将一个 debug 节点拖到画布上,并将它连接到 ibmiot 输入节点。
6. 单击 Deploy 来启动应用程序。
7. 在屏幕右侧,切换到 Debug 选项卡。
8. 最后,单击 inject 节点左侧的按钮来发送一条消息。
如果所有设置都正确,您会在 Debug 面板中看到一个包含 ‘test message’ 的条目。您刚才已从您的 IoT 组织成功地发送和接收到一条消息。
要将此示例导入您的 Node-RED 应用程序,可选择 Import → Clipboard 并粘贴入以下代码:
点击查看代码清单
关闭 [x]
[{"id":"b122d8e0.c7246","type":"ibmiot in","authentication":"boundService","apiKey":"","inputType":"cmd","deviceId":"noderedsample","applicationId":"","deviceType":"Node-RED-sample","eventType":"test","commandType":"test","format":"json","name":"IBM IoT App In","service":"registered","allDevices":false,"allApplications":"","allDeviceTypes":false,"allEvents":false,"allCommands":"","allFormats":true,"x":139,"y":138,"z":"3f16d263.e01496","wires":[["fa295123.c7766"]]},{"id":"e42ef7a6.f0908","type":"ibmiot out","authentication":"boundService","apiKey":"","outputType":"cmd","deviceId":"noderedsample","deviceType":"Node-RED-sample","eventCommandType":"test","format":"String","data":"test message","name":"IBM IoT App Out","service":"registered","x":343,"y":67,"z":"3f16d263.e01496","wires":[]},{"id":"299a71f9.fb9af6","type":"inject","name":"test message","topic":"","payload":"test message","payloadType":"string","repeat":"","crontab":"","once":false,"x":137,"y":67,"z":"3f16d263.e01496","wires":[["e42ef7a6.f0908"]]},{"id":"fa295123.c7766","type":"debug","name":"","active":true,"console":"false","complete":"false","x":318,"y":138,"z":"3f16d263.e01496","wires":[]},{"id":"c9bd571b.e0e9f8","type":"comment","name":"Sample 1:Basic flow","info":"","x":133,"y":26,"z":"3f16d263.e01496","wires":[]}]
现在我们已经看到了与您的 IoT 组织通信的基本流,您可以创建一个新流来与 IoT Starter 应用程序进行实际交互。下一个流将从设备接收加速事件消息,并向其发布回命令消息。
1. 将一个 ibmiot 输入节点拖到画布上。双击该节点来编辑它的配置。设置以下属性:
Authentication:Bluemix Service
Input Type:Device Event
Device Type:All
Device ID:All
Event:accel
Format:json
2. 将一个 function 节点拖到画布上,并将它连接到 ibmiot 输入节点。双击 function 节点来编辑它的配置。输入以下代码:
var accelZ = msg.payload.d.acceleration_z; var r = 0.0; var b = 0.0; var g = 0.0; if (accelZ > 0) { g = 255.0; } else if (accelZ < 0) { r = 255.0; } else { r = 104; g = 109; b = 115; } a = 1.0; msg.eventOrCommandType = "color"; msg.payload = JSON.stringify({"d":{"r":r,"b":b,"g":g,"alpha":a}}); return msg;
3. 将一个 ibmiot 输出节点拖到画布上,并将它连接到 function 节点。双击该节点来编辑它的配置。设置以下属性:
Authentication:Bluemix Service
Output Type:Device Command
Device Type:iPhone
Device ID:AAA
Command Type:text
Format:json
Data:{"d":{"value":"text"}}
备注:这些属性基于第 2 步:Internet of Things (IoT) Foundation 中的创建的设备而设置。
4. 单击 Deploy 来启动应用程序。
如果所有设置都正确,当您将 IoT Starter 应用程序连接到您的 IoT 组织时,就会看到应用程序的背景颜色变化。此流中的 function 节点监视收到的消息上的 acceleration_z 属性值,并根据该值发送不同的颜色命令消息。如果该值是正值(您的电话正面朝上放在桌子上),则发送绿色。如果该值是负值(您的电话正面朝下放在桌子上),则发送红色。如果设备是完全垂直的,将发送默认的灰色背景颜色。
需要注意以下几点:
ibmiot 输出节点的配置值在这种情况下实际上是无关紧要的,因为我们会在函数代码中覆盖它们。
如果使用模拟设备,您的加速计数据将保持为 0,背景不会更改。
要将此示例导入您的 Node-RED 应用程序,可选择 Import → Clipboard 并粘贴入以下代码:
点击查看代码清单
关闭 [x]
[{"id":"2a8baa.ecd60456","type":"comment","name":"Sample 2:IoT Starter accel to color flow","info":"","x":196,"y":275,"z":"3f16d263.e01496","wires":[]},{"id":"b83ddfdb.7b3368","type":"ibmiot in","authentication":"boundService","apiKey":"","inputType":"evt","deviceId":"","applicationId":"","deviceType":"+","eventType":"accel","commandType":"","format":"json","name":"IBM IoT App In","service":"registered","allDevices":true,"allApplications":"","allDeviceTypes":true,"allEvents":false,"allCommands":"","allFormats":false,"x":117,"y":313,"z":"3f16d263.e01496","wires":[["64ebf370.5a0b5c"]]},{"id":"64ebf370.5a0b5c","type":"function","name":"Handle accel","func":"msg.deviceId = msg.payload.d.deviceId;/nmsg.deviceType = msg.payload.d.deviceType;/nmsg.format = /"json/";/n/nvar accelZ = msg.payload.d.acceleration_z;/nvar r = 0.0;/nvar b = 0.0;/nvar g = 0.0;/nif (accelZ > 0) {/n/tg = 255.0;/n} else if (accelZ < 0) {/n/tr = 255.0;/n} else {/n/tr = 104;/n/tg = 109;/n/tb = 115;/n}/na = 1.0;/n/t/nmsg.eventOrCommandType = /"color/";/nmsg.payload = JSON.stringify({/"d/":{/"deviceId/":msg.deviceId, /"r/":r,/"b/":b,/"g/":g,/"alpha/":a}});/n/nreturn msg;","outputs":1,"x":287,"y":313,"z":"3f16d263.e01496","wires":[["56d70240.c2bd14"]]},{"id":"56d70240.c2bd14","type":"ibmiot out","authentication":"boundService","apiKey":"","outputType":"cmd","deviceId":"AAA","deviceType":"iPhone","eventCommandType":"text","format":"json","data":"{/"d/":{/"value/":/"text/"}}","name":"IBM IoT App Out","service":"registered","x":469,"y":313,"z":"3f16d263.e01496","wires":[]}]
回页首
不需要创建 Node-RED 应用程序即可与 IoT Foundation 交互。在 IoT 仪表板中,您可以创建一个 API 密钥和令牌。有了这些凭据,您就可以将任何具有 MQTT 客户端的应用程序连接到您的 IoT 设备,并执行所有与 Node-RED 应用程序相同的功能。