Sunteți pe pagina 1din 50

IBM Bluemix http://ibm.

biz/bluemixph
A platform where developers can act like kids in a sandbox except this box is enterprise-grade.

IBM Bluemix Tutorial


Connecting a Device using Internet of Things of Bluemix v1.0
This laboratory exercise demonstrates how to connect a device to an Internet of Things service in
Bluemix.

Prerequisite

Item Comment
Bluemix Account do the Creating a Bluemix Account laboratory exercise if you do not
have a Bluemix account
cf tool do the Setting-up Laboratory Environment (section: Installing the cf
tool) laboratory exercise to install the cf tool
JDK do the Setting-up Laboratory Environment (section: Installing Java
JDK) laboratory exercise to install JDK

Creating an Internet of Things Service


1. Go to the IBM Bluemix website and login using your Bluemix account (http://ibm.biz/bluemixph).
2. In the menu, click the CATALOG link.

3. In the Internet of Things area, click the Internet of Things icon.

IBM Bluemix Tutorial 1


Connecting a Device using Internet of Things of Bluemix v1.0
4. Fill-up the "Add service" form. In the App field, select Leave Unbound. In the Service name
field, type Internet of Things-demo. Click CREATE.

5. In the Internet of Things-demo page, click Launch dashboard.

IBM Bluemix Tutorial 2


Connecting a Device using Internet of Things of Bluemix v1.0
6. Another page will open showing the dashboard of the Internet of Things-demo service you created.
Take note of the Organization name assigned to your service. In the screenshot below, the
organization is 9cf3j2. The organization name varies for every Internet of Things service you create.

IBM Bluemix Tutorial 3


Connecting a Device using Internet of Things of Bluemix v1.0
Connecting a Device to Your Internet of Things Service
7. In your Internet of Things dashboard, click Devices.

8. Click Add Device.

IBM Bluemix Tutorial 4


Connecting a Device using Internet of Things of Bluemix v1.0
9. Since you do not have an actual device, you will use an emulator that represents an actual device.
Although only an emulator is used, this emulator will communicate with the Internet of Things
service in the same way an actual device will communicate with the service. The emulator you will
be using have the following characteristics:
Device Type: Arduino
Device ID : 080028572C3f

In an actual device the device ID is usually the MAC address of the device. In the emulator, you are
using a hypothetical MAC address 080028572C3f. You may use a different device ID but it is
recommended in this experiment that you use 080028572C3f.

Fill-up the "Register Device" form. In the Device Type field, select Create a device type and
below it type Arduino. In the Device ID field, type 080028572C3f. Click Continue.

IBM Bluemix Tutorial 5


Connecting a Device using Internet of Things of Bluemix v1.0
10. In the Connect Your Device page, copy the values from org to auth-token. Since the auth-token
contains special characters, it is suggested that you copy and save the information in a text file and
not just copy the contents on a piece of paper. Take note that the screenshot below is just an
example. The value of auth-token changes every time you register a new device.

IMPORTANT:
It is important that you copy ACCURATELY the information especially auth-token. Once you
click Done you cannot anymore recover the auth-token value.
In an actual deployment, you should keep the auth-token a secret otherwise other people
who knows the auth-token of your device can easily use this credential to connect to your
Internet of Things service.

After you copied the information, click Done.

IBM Bluemix Tutorial 6


Connecting a Device using Internet of Things of Bluemix v1.0
11. Your device is now shown in your dashboard. Notice that the Last Event column is Unavailable.
This means that your device has not sent a single message to your Internet of Things service. This
column will be updated once your device is running.

12. Download device-emulator.zip. Extract the folder found inside the zip file to the folder
c:\bluemixtemp. Make sure that the following folder structure is followed:
c:\bluemixtemp
device-emulator
Arduino.java
Emulator.java
:
run.bat

IBM Bluemix Tutorial 7


Connecting a Device using Internet of Things of Bluemix v1.0
13. Download the Paho Java Client is an MQTT client library. This library allows Arduino.java to
communicate with your Internet of Things service. To download, go to
https://repo.eclipse.org/content/repositories/paho-releases/org/eclipse/paho/

IBM Bluemix Tutorial 8


Connecting a Device using Internet of Things of Bluemix v1.0
14. Click the folder of the latest version (e.g., org.eclipse.paho.client.mqttv3/). Take note that in future
releases, the librarys version might get updated (e.g, v4 or higher). Access the latest version.

IBM Bluemix Tutorial 9


Connecting a Device using Internet of Things of Bluemix v1.0
15. Select the folder indicating the latest version (e.g., 1.0.2).

IBM Bluemix Tutorial 10


Connecting a Device using Internet of Things of Bluemix v1.0
16. Download the jar file (e.g., org.eclipse.paho.client.mqttv3-1.0.2.jar) and save it in the same folder
where Arduino.java is located. Rename the jar file to mqtt.jar.

17. Open the Arduino.java file in a text editor. Change the following values:
ORGANIZATION
PASSWORD

DO NOT use the values in the screenshot below. Use the org and auth-token values for the
ORGANIZATION and PASSWORD, respectively. These are the values you copied in the Connect Your
Device step.

IMPORTANT: It is important that you use the correct ORGANIZATION and PASSWORD values,
otherwise your device will not be able to send and receive messages from your Internet of Things
service.

IBM Bluemix Tutorial 11


Connecting a Device using Internet of Things of Bluemix v1.0
18. You may examine the Arduino.java file to have an idea on how an actual device connects to the
Internet of Things service.

Notice the values of PUBLISH_TOPIC and SUBSCRIBE_TOPIC:


PUBLISH_TOPIC = "iot-2/evt/devicestatus/fmt/json";
SUBSCRIBE_TOPIC = "iot-2/cmd/+/fmt/json";

You will understand later the purpose of these values.

You do not need to examine the other Java files since these are only created as part of the emulator.
Once you are done examining Arduino.java, save and close the file.

19. In the device-emulator folder, double click compile.bat. Make sure that there are no errors.
Press any key to close the compile.bat console.

IBM Bluemix Tutorial 12


Connecting a Device using Internet of Things of Bluemix v1.0
20. In the device-emulator folder, double click run.bat. The emulator should run. The emulator has
two windows: a console and a GUI.

The console provides a text-based notification on the status of the device. For example, it shows the
notification Setting LED to off to indicate that the LED is turned off. A notification Message
Sent: { "d": { "temp": 25.0, "led": 0 } } means that the device is sending the
message to the Internet of Things Service. The temp value 25.0 means that the virtual temperature
sensor of the device is sensing a temperature of 25.0 degrees Celsius. In addition, a led value of 0
means that the LED is turned off.

You can drag the fire towards or away the device in order to adjust the temperature sensed by the
virtual temperature sensor.

IBM Bluemix Tutorial 13


Connecting a Device using Internet of Things of Bluemix v1.0
21. Go back to the Internet of Things dashboard. In the Last Event column, there should be a Just
now text. If you do not see Just now, you may need to refresh the browser. Take note that the
text is originally Unavailable. Since your device is already running and sending messages to your
Internet of Things service, the text changed to Just now.

22. Click the + icon at the right side of the Just now text to see the details of the messages the
Internet of Things service is receiving. Take note that will keep on updating as long as your device is
running. The dashboard of your Internet of Things service is a good tool to verify if your device is
successfully connected to your service.

23. Do not close your device.

IBM Bluemix Tutorial 14


Connecting a Device using Internet of Things of Bluemix v1.0
Creating a Simple Remote Control Application to Interact
with the same Internet of Things Service
24. Go back to your Bluemix account. Click CATALOG.

25. In the Boilerplate area, click the Node-RED Starter icon.

IBM Bluemix Tutorial 15


Connecting a Device using Internet of Things of Bluemix v1.0
26. Fill-up the "Create an app" form. Use the same value for the Name and Host field. Click
CREATE. As a convention, use the name simpleremotecontrol-<your name> in the Name and
Host field.

IBM Bluemix Tutorial 16


Connecting a Device using Internet of Things of Bluemix v1.0
27. In Getting Started with click VIEW APP OVERVIEW.

28. Wait for your application to start.

29. Click BIND A SERVICE OR API.

IBM Bluemix Tutorial 17


Connecting a Device using Internet of Things of Bluemix v1.0
30. Select the Internet of Things-demo service created earlier. Click ADD.

31. When asked to restage the application, click CANCEL since you will add another service.

32. Click ADD A SERVICE OR API.

IBM Bluemix Tutorial 18


Connecting a Device using Internet of Things of Bluemix v1.0
33. In the Web Application area, click the mongodb icon. Note that mongodb is different from
MongoLab.

IBM Bluemix Tutorial 19


Connecting a Device using Internet of Things of Bluemix v1.0
34. Click CREATE.

35. When asked to restage the application, click RESTAGE.

36. Wait for your application to start.

IBM Bluemix Tutorial 20


Connecting a Device using Internet of Things of Bluemix v1.0
37. You will be redirected to the Node-Red in Bluemix page. Click the Go to your Node-RED flow
editor button.

38. In the Node palette (left pane), look for the ibmiot input node. Take note that there are two ibmiot
nodes, one is an input and the other one is an output. You may move your mouse over the node to
know if it is an input or output node.

IBM Bluemix Tutorial 21


Connecting a Device using Internet of Things of Bluemix v1.0
39. Drag and drop an ibmiot input node to the work area.

IBM Bluemix Tutorial 22


Connecting a Device using Internet of Things of Bluemix v1.0
40. Double-click the ibmiot input node in the work area. Change the values of the form to the following:
Authentication : Bluemix Service
Input Type : Device Event
Device Type : Arduino
Device Id : 080028572C3f
Event : devicestatus
Format : json
Name : <no need to update this>

Recall that the value of PUBLISH_TOPIC in Arduino.java is


PUBLISH_TOPIC = "iot-2/evt/devicestatus/fmt/json";

This PUBLISH_TOPIC value is consistent with the values set in the ibmiot input node.

Click Ok.

IBM Bluemix Tutorial 23


Connecting a Device using Internet of Things of Bluemix v1.0
41. In the Node palette, look for the debug node.

42. Drag and drop a debug node to the work area to the right of the ibmiot input node.

43. Connect the ibmiot input node to the debug node. To do this, click (and hold) over the rounded-
square symbol of the ibmiot input node. Move the mouse until you reach the rounded-square
symbol of the debug node. Release the mouse button.

44. Click the Deploy button.

45. Make sure that you see a Successfully deployed message.

IBM Bluemix Tutorial 24


Connecting a Device using Internet of Things of Bluemix v1.0
46. In the right pane, click the debug tab and wait for messages to appear. These messages are the
messages sent by the device. The device is sending messages to the Internet of Things service. On
the other hand, the simpleremotecontrol app receives the messages from the same service.

47. Go back to the device and drag the fire to change its value. Check the debug tab and see if the
message changes.

IBM Bluemix Tutorial 25


Connecting a Device using Internet of Things of Bluemix v1.0
48. In the Node palette, look for the ibmiot output node. Take note that this time an output node is
needed as oppose to the previous steps that used an input node.

49. Drag and drop an ibmiot output node to the work area at the bottom of the debug node.

IBM Bluemix Tutorial 26


Connecting a Device using Internet of Things of Bluemix v1.0
50. Double-click the ibmiot output node in the work area. Change the values of the form to the
following:
Authentication : Bluemix Service
Output Type : Device Command
Device Type : Arduino
Device Id : 080028572C3f
Command Type : led-on
Format : json
Data : {}
Name : <no need to update this>

Recall that the value of SUBSCRIBE_TOPIC in Arduino.java is


SUBSCRIBE_TOPIC = "iot-2/cmd/+/fmt/json";

In thes SUBSCRIBE_TOPIC, the value after cmd is + which stands for ALL. This means that any
message with any command type is accepted by device. Since the ibmiot output nodes command
type is set to led-on, the node will be sending a message with a led-on command type. This
message is received by the device. If you will review further Arduino.java, if this message with a
led-on command type is received, it will turn on the LED.

The ibmiot output node will not automatically send a message. It needs to be triggered. The next
few steps will handle this.

IBM Bluemix Tutorial 27


Connecting a Device using Internet of Things of Bluemix v1.0
51. Click Ok.

52. In the Node palette, look for the inject node.

IBM Bluemix Tutorial 28


Connecting a Device using Internet of Things of Bluemix v1.0
53. Drag and drop an inject node to the work area to the left of the ibmiot output node.

54. Double-click the inject node in the work area. Change the values of the form to the following:
Payload : blank
Topic : <leave this blank>
Repeat : none
Fire once at start : <do not select>
Name : Turn On LED
Format : json
Data : {}
Name : <no need to update this>

Cllick Ok.

IBM Bluemix Tutorial 29


Connecting a Device using Internet of Things of Bluemix v1.0
55. Connect the inject node to the ibmiot output node.

56. Click the Deploy button.

57. Make sure that you see a Successfully deployed message.

58. Go back to your device and take note that the LED is off.

59. Go back to the simpleremotecontrol app. Click the trigger button of the inject node. This will
trigger the ibmiot output node to send a message with a command type led-on.

60. Go back to your device and verify that the LED is now on.

IBM Bluemix Tutorial 30


Connecting a Device using Internet of Things of Bluemix v1.0
61. In the Node palette, look for the http node.

62. Drag and drop an http node to the work area on top of the inject node.

IBM Bluemix Tutorial 31


Connecting a Device using Internet of Things of Bluemix v1.0
63. Double-click the http node in the work area. Change the values of the form to the following:
Method : GET
url : /led-on
Name : <no need to update this>

Cllick Ok.

64. In the Node palette, look for the function node.

IBM Bluemix Tutorial 32


Connecting a Device using Internet of Things of Bluemix v1.0
65. Drag and drop a function node to the work area to the right of the http node.

66. Double-click the function node in the work area. Set the function to:
msg.payload = "{}"
return msg;

Cllick Ok.

IBM Bluemix Tutorial 33


Connecting a Device using Internet of Things of Bluemix v1.0
67. In the Node palette, look for the http response node.

68. Drag and drop an http response node to the work area to the right of the function node.

69. Connect the following nodes:


http node to function node
function node to http response node
function node to ibmiot output node

The purpose of adding the http node, function node, and http response node to the work area will
be seen later.

70. Click at the left-top area near the http node. Do not release the mouse button. Drag until the
following nodes are selected:

IBM Bluemix Tutorial 34


Connecting a Device using Internet of Things of Bluemix v1.0
http node
function node
http response node
inject node
ibmiot output node

Release the mouse button. The five (5) node are now selected.

71. Press Ctrl+C to copy the selected nodes.

72. Press Ctrl+V to paste a new set of the five nodes. Move the mouse to adjust the position of the new
set of five nodes. Place them just below the original set.

IBM Bluemix Tutorial 35


Connecting a Device using Internet of Things of Bluemix v1.0
73. Double-click the new http node in the work area. Change the values of the form to the following:
Method : GET
url : /led-off
Name : <no need to update this>

Cllick Ok.

IBM Bluemix Tutorial 36


Connecting a Device using Internet of Things of Bluemix v1.0
74. Double-click the new inject node in the work area. Change the values of the form to the following:
Payload : blank
Topic : <leave this blank>
Repeat : none
Fire once at start : <do not select>
Name : Turn Off LED
Format : json
Data : {}
Name : <no need to update this>

Cllick Ok.

IBM Bluemix Tutorial 37


Connecting a Device using Internet of Things of Bluemix v1.0
75. Double-click the new ibmiot output node in the work area. Change the values of the form to the
following:
Authentication : Bluemix Service
Output Type : Device Command
Device Type : Arduino
Device Id : 080028572C3f
Command Type : led-off
Format : json
Data : {}
Name : <no need to update this>

Click Ok.

76. Click the Deploy button.

IBM Bluemix Tutorial 38


Connecting a Device using Internet of Things of Bluemix v1.0
77. Make sure that you see a Successfully deployed message.

78. Go back to your device and take note that the LED is on.

79. Go back to the simpleremotecontrol app. Click the trigger button of the new inject node. This will
trigger the ibmiot output node to send a message with a command type led-off.

80. Go back to your device and verify that the LED is now off.

81. The following steps will now demonstrate the purpose of the http node, function node, and http
response node.

Open another tab on the browser. Type the following URL on the browser and press enter:

http://simpleremotecontrol-<name>.mybluemix.net/led-on

82. Go back to your device and verify that the LED is now on.

IBM Bluemix Tutorial 39


Connecting a Device using Internet of Things of Bluemix v1.0
83. Go back to the browser. Change the URL of the browser to the following and press enter:

http://simpleremotecontrol-<name>.mybluemix.net/led-off

84. Go back to your device and verify that the LED is now off.

85. Go back to the simpleremotecontrol app.

86. Drag and drop a function node to the work area to the right-top of the ibmiot input node.

IBM Bluemix Tutorial 40


Connecting a Device using Internet of Things of Bluemix v1.0
87. Double-click the function node in the work area. Set the function to:
var d = new Date();

// convert to msec
// subtract local time zone offset
// get UTC time in msec
var utc = d.getTime() - (d.getTimezoneOffset() * 60000);

// create new Date object for different city


// using supplied offset
var nd = new Date(utc + (3600000*+8));

msg.payload._id = "1234";

msg.payload.timestamp= nd.toISOString();//.toLocaleString();

return msg;

Click Ok.

IBM Bluemix Tutorial 41


Connecting a Device using Internet of Things of Bluemix v1.0
88. In the Node palette, look for the mongodb output node. Take note that there are two mongodb
nodes in the palette, an input-output node and an output node.

89. Drag and drop a mongodb output node to the work area to the right of the function node that was
added in the previous steps.

IBM Bluemix Tutorial 42


Connecting a Device using Internet of Things of Bluemix v1.0
90. Double-click the mongodb output node in the work area. Change the values of the form to the
following:
Service : <name of the mongodb service>
Collection : device_status
Operation : save
Only store msg.payload object : select
Name : <no need to update this>

Click Ok.

91. Connect the following nodes:


ibmiot input node to function node
function node to mongodb output node

These connections allow the mongodb database to be updated with the latest temperature reading
and LED status.

92. Click the Deploy button.

IBM Bluemix Tutorial 43


Connecting a Device using Internet of Things of Bluemix v1.0
93. Make sure that you see a Successfully deployed message.

IBM Bluemix Tutorial 44


Connecting a Device using Internet of Things of Bluemix v1.0
Creating another Remote Control Application that Provides
an improved UI of the Simple Remote Control Application
94. Download remote-control.zip. Extract the folder found inside the zip file to the folder
c:\bluemixtemp. Make sure that the following folder structure is followed:
c:\bluemixtemp
remote-control
.bp-config
index.html
status.php

95. Open index.html using a text editor. Look for the text NOTE. Change the URL to
http://simpleremotecontrol-<your name>.mybluemix.net/. Take note that this is the URL of the
Node-Red project created earlier.

IBM Bluemix Tutorial 45


Connecting a Device using Internet of Things of Bluemix v1.0
96. Open a Windows command prompt. Enter the following command to go to the directory of the
sample application.
Windows Command Prompt
CMD>cd c:\bluemixtemp\remote-control
CMD>dir

97. Enter the following command to login to Bluemix. Enter your Bluemix username and password
when prompted.
Windows Command Prompt
CMD>cf login -a https://api.ng.bluemix.net

IBM Bluemix Tutorial 46


Connecting a Device using Internet of Things of Bluemix v1.0
98. Enter the following command to upload the sample web application to Bluemix.
Windows Command Prompt
CMD> cf push remotecontrol-<your name> --no-start -m 64M -b
https://github.com/dmikusa-pivotal/cf-php-build-pack

99. If you encounter the error The host is taken, modify the name of the application and try to upload
the application again.

100. Go back to your Bluemix account and click the DASHBOARD link.

101. In the dashboard, click your newly uploaded application.

IBM Bluemix Tutorial 47


Connecting a Device using Internet of Things of Bluemix v1.0
IBM Bluemix Tutorial 48
Connecting a Device using Internet of Things of Bluemix v1.0
102. Click BIND A SERVICE OR API.

103. Select the mongodb service created earlier. Click ADD.

104. If your application is still staging, wait for the staging process to complete.

105. Click START.

IBM Bluemix Tutorial 49


Connecting a Device using Internet of Things of Bluemix v1.0
106. Wait for your application to start.

107. Click the route top open the remotecontrol app.

108. The remotecontrol app shows the temperature reading and the current status of the LED. These
information are taken from mongodb. Recall that the mongodb is periodically updated in the
simpleremotecontrol app.

109. Go back to the device and drag the fire to change its value. Check the remotecontrol app and
see if the temperature reading changed.

110. Press the Turn ON LED and Turn OFF LED buttons. Check the LED in the device if its status
changes based on the button that was pressed. Take note that the Turn ON LED and Turn OFF LED
buttons can control the status of the LED because in the index.html file the two buttons are tied to
the URLs that will allow the LED to turn on and off.

IBM Bluemix Tutorial 50


Connecting a Device using Internet of Things of Bluemix v1.0

S-ar putea să vă placă și