Changes

Jump to: navigation, search
no edit summary
{{InfoBoxTop}}
{{AppliesToSBCLynx}}
{{AppliesTo AXEL ULite AN}}
{{AppliesTo SBC Lynx AN}}
{{AppliesToIoT}}
{{AppliesTo IoT AN}}
{{InfoBoxBottom}}
{{WarningMessage|text=This application note was validated against specific versions of the kit only. It may not work with other versions. Supported versions are listed in the ''History'' section.}}
== History ==
{| class="wikitable" border="1"
|-
|0.5.0
|April May 2017
|First draft
|-
|0.6.0
|May 2017
|Added section "Configuring SBC Lynx as an MQTT broker"
|-
|}
==Introduction==
[[:Category:SBC_Lynx|SBC Lynx provides ]] is extremely flexible in terms of [[Connectors,_buttons_and_switches_(SBC_Lynx)|communication interfaces]] and [[Additional_industrial_I/Os_(XUAL)|I/O ports]]. When used in combination with a Linux distribution such as [[XUELK-AN-002:_Running_Debian_distribution|Debian]], it is an ideal solution to implement compact highly-integrated cost-effective gateways/controllers supervisors for [http://internetofthingsagenda.techtarget.com/definition/Industrial-Internet-of-Things-IIoT Industrial Internet of Things applications (IIoT)].
IIoT is a vast field that includes several disciplines. At field level, the typical IIoT system requires
This application note provides some examples of hardware and software configurations that can be used for these purposes. Also, it shows how to harness the versatility of SBC Lynx to integrate on the same platform even processing and controlling functionalities. [1]
The examples were tested on an SBC Lynx board equipped with [[Wireless_Module_(DWM)|optional wireless module]] and that runs Debian distribution, as described [[XUELK-AN-002:_Running_Debian_distribution|here]]. 
==Cloud interfacing==
At the time of this writing, tens of cloud platforms are available on the market addressing IoT and IIoT applications. [1] Some of them provide free accounts for small projects or evaluation purposes. The following sections describe how to interface an SBC Lynx-based gateway to some of such platforms.
The following sections describe how to interface an SBC Lynx-based gateway to such platforms.
 
[1] See for example [[#List of IoT cloud platforms (not exhaustive)|this section]].
===Ubidots===
[https://ubidots.com Ubidots] is ''a codeless IoT Platform designed to help you prototype and scale your IoT projects to production''.
This application notes example consists of three step to connect SBC-LYNX to ubidotssteps.The first part describes how shows:*How to connect the sbc-lynx SBC Lynx to ubidots and send Ubidots *How to upload data to the platform (ubidots)cloud.The second part describes how to visualize on the dash board dashboard of the ubidotsThe third part is Ubidots. Tha last one shows how to setup set up events so as to get a notification====Sending data to Ubidots====The SBC LYNX board used specification: CPU: based on NXP/Freescale i.MX6UL2xRS232-2xRS485 on Serial Multi ProtocolOperating Systems: Linux, Debian (Jessie)IEC-61131 PLC runtime Cross Checking the Sbc-lynx board distribution used and the command used to check the distribution is lsb_release –a and looks like the below one
The procedure here described was tested on a SBC Lynx running Debian distribution. For more details, please refer to [[XUELK-AN-002:_Running_Debian_distribution|this application note]].
====Connecting and uploading data to Ubidots====
As stated before, it is assumed that the board runs a Debian distribution:
<pre class="board-terminal">
root@arm:~# lsb_release -a
No LSB modules are available.
Release: 8.7
Codename: Jessie
</pre>
I) Connecting the SBC-LYNX devices To connect to the Ubidots IoT cloudby means platform, a client written in Python will be used. The client will make use of ubidot python api client To connect our SBC LYNX board to the ubidots using ubidot’s api Ubidots' client library, the first step is to install the “Python ubidots python API client” that is available on the PyPal as ubidots(https://pypi.python.org/pypi/ubidots/ (First we need to have a python installed on our board).) The command to To install it, please issue the API client to the sbcl-ynx board is following commands as follows<code>root</code> userFirst Login to Sbc<pre class="board-lynx board with root privileges (sudo) and excute these commands:terminal">
apt-get update
apt-get upgrade
easy_install pip
pip install ubidots
</pre>
Now we have installed to our target device (local gateway/device=sbc-lynx) On the necessary library python api ubidots client II) To connect our SBC LYNX board to the ubidot IoT cloud side, we need to have a user account on the ubidots cloud .com platform and get the API(a unique key for each account ) and token from the website, very simple.  Go to the website of the ubidots cloud, https://ubidots.com/ and click the sign up option on the right upper corner of the website and create the account I have created for my activity and here I put it in belowusername =zerihunpass = Zeri@204920  [[File:XUELK-AN-IIoT-1.png|thumb|center|600px|caption]]
To get Go to the Api key for [https://ubidots.com/ website of the created account, go to Ubidots cloud] and click the sign up option on the right upper corner of the home page of website to create the ubidots and click on the user name then you will see four options which are My Profile, API Credentials, Docs and Log Outaccount.
[[File:XUELK-AN-IIoT-21.png|thumb|center|600px|caption]]
Click the API Credentials
To get the API token for the just created account, go to the right upper corner of the home page and click on the username. Then you will see four options which are ''My Profile'', ''API Credentials'', ''Docs'' and ''Log Out''.
[[File:XUELK-AN-IIoT-3.png|thumb|center|600px|caption]]
[[File:XUELK-AN-IIoT-2.png|thumb|center|600px]]
Here in below I wrote mine API key and token as an example which will be needed when we generate an instance to communicate with the target device (Sbc-lynx board)
API KEY = 4435dd4dd5454114fc2e5425b3dd9361de0f2ffa
Token = fwSetosAgIG3d128YdzP5fi4hADzWU
Click the ''API Credentials''. The API token (<code>fwSetosAgIG3d128YdzP5fi4hADzWU</code> in this example) is a string which will be used later to initialize the API client instance.
III) Now, after creating the user profile on the ubidots cloud side, we can be connected to it by creating an Api[[File:XUELK-Client instance from the Lynx boardAN-IIoT-3.png|thumb|center|600px]]
To create an instance, the code is:
To create and initialize an API Client instance, use the following code:
<pre class="board-terminal">
from ubidots import ApiClient
api = ApiClient(token=' fwSetosAgIG3d128YdzP5fi4hADzWU ') After establishing the instance with the cloud, we will retrieve the variable.The variable is where we want to save the value that we will send to theCloud. But before sending data to the cloud side, we first go to the device option and define our own device and create the variables (equivalent to sensors)To create variables, there are three option in the upper center of the home page of the ubidots shown below  [[File:XUELK-AN-IIoT-4.png|thumb|center|600px|caption]]  Click the device option, then we will get the following  [[File:XUELK-AN-IIoT-5.png|thumb|center|600px|caption]]</pre>
Click the device and add variable (equivalent to sensors)
On the cloud side, it is necessary to create the variables that will store the values uploaded by the SBC Lynx. In the example, three variables are created: <code>Fall_sensor</code>, <code>Flood_sensor</code> and <code>Temp_sensor</code>. To create variables, there are three options in the upper center of the home page of the Ubidots interface, as shown below.
[[File:XUELK-AN-IIoT-4.png|thumb|center|600px]]
[[File:XUELK-AN-IIoT-6.png|thumb|center|600px|caption]]
Click the device option, then we will get the following:
[[File:XUELK-AN-IIoT-5.png|thumb|center|600px]]
After adding the variables, we need their id therefore to find their id put the cursor on bottom side of each variable box then, you will see “I”option then click it you will get the id of the variable that is used to establish an instance to this variable with the target device(sbc -lynx)
In my case (for example), I have added to my Click the device three different variables named as Fall_sensor, Temp_sensor and Flood_sensoradd a variable:[[File:XUELK-AN-IIoT-6.png|thumb|center|600px]]
To create an instance, use the following format
my_variable_lynx = api.get_variable('id _variable form the ubidots')
Having instantiating variableAfter adding the variables, we can save a new value with need their IDs. To get them, put thefollowing line:new_value = my_variablecursor on bottom side of each variable box.save_value({'value': xxxxxxxxxxx})Here is my simple python script to send random data Then, you will see "I" option. Click it to get the ubidotsID.
To create an instance of the variable on the SBC Lynx side, use the following format code:
<pre class="board-terminal">
my_variable = api.get_variable('<variable ID>')
</pre>
[[FileTo upload a value to the Ubidots platform, we can use a code like this:XUELK<pre class="board-AN-IIoT-7terminal">new_value = my_variable.png|thumb|center|600px|caption]]save_value({'value': <value>})</pre>
Following is a code snippet that uploads random data to the platform:
<pre class="board-terminal">
from ubidots import ApiClient
import random
test_value_3 = random.randint(1,10)
test_value_3 = my_variable_3.save_value({'value':test_value_3})
</pre>
====Visualizing data on the cloud dashboards====
To visualize the data sent to Ubidots, we have to use the ''Dashboards'' section, where we can configure how we want to visualize the data.
When we execute this python code from the sbc-lynx boardFirst, it will send random data to click the ubidots (to each variable, in my case it is three variable) ====Visualizing data on the cloud dashboards====To visualize ''Dashboards'' link. Click the data sent to the ubodots, we have an option called Dash board "+" symbol on the ubidots cloud side, we have three steps to adjust the dashboard that is the place where we right upper corner. Then you will select get the way we want "How would you like to visualize the see your data?" question and different options below it:*Chart* Metric*Map*Indicator*Controller*...[[File:XUELK-AN-IIoT-8.png|thumb|center|600px]]
Click the Dash board
Click the “+ “symbol on the right upper corner
Then you will get “How would you like to see your data?” and different option below this question like Chart, metric, map, indicator, controller etc
In this example, the option ''chart'' was selected. As such, several further options are available:
[[File:XUELK-AN-IIoT-9.png|thumb|center|600px]]
[[File:XUELK-AN-IIoT-8.png|thumb|center|600px|caption]]
For all of the variables, the ''Line chart'' option was chosen. The following image shows how the data visualization looks like:
[[File:XUELK-AN-IIoT-10.png|thumb|center|600px]]
====Events and notifications====Ubidots allows sending notifications—for instance in the form of text messages (SMS) or emails—to the authorized users, based on the events configured on the cloud. In my case, I have selected the first option chartfollowing example, a variable that was not mentioned in this case there are several option to use the previous sections is used (<code>heartbeat</code>).
To configure notification options, click enter the ''Events'' section.
[[File:XUELK-AN-IIoT-11.png|thumb|center|600px]]
[[File:XUELK-AN-IIoT-9.png|thumb|center|600px|caption]]
Then sekect the device (<code>My_device_1</code> in the example) ...
[[File:XUELK-AN-IIoT-12.png|thumb|center|600px]]
In my case, I have selected the first option (Line chart) then confirm and I have done the same for all my three variables and the dash board after sending data looks the below one
... and click the variable you wish to configure the notification for.
[[File:XUELK-AN-IIoT-13.png|thumb|center|600px]]
[[File:XUELK-AN-IIoT-10.png|thumb|center|600px|caption]]
After selecting the variable, we will define the condition that triggers the notification. In this case, it is triggered when the <code>heartbeat</code> variable is less than 4:
[[File:XUELK-AN-IIoT-14.png|thumb|center|600px]]
[[File:XUELK-AN-IIoT-15.png|thumb|center|600px]]
====Notification setting (event scheduling setting)====
Sending sms or email to authorized user based on the event configured on the cloud.
In the Event section, we can set a trigger, sms or an email to get
notification based our interest.
Last, we compose the message we want to be emailed every time the notification is triggered.
[[File:XUELK-AN-IIoT-16.png|thumb|center|600px]]
==Device-to-device communications=====Configuring SBC Lynx as an MQTT broker===This example shows how to install an MQTT broker on SBC Lynx, running Debian distribution. "MQTT, a simple, lightweight, publish/subscribe messaging protocol on top of the TCP/IP protocol, is the ideal protocol for the emerging IoT world" [[File:XUELK-AN1] and is becoming one on the most common protocols used for machine-IIoTto-11machine communications.png|thumb|center|600px|caption]]
In contrast to HTTP with its request/response paradigm, MQTT is based on a publish/subscribe model, as depicted in the following image. This makes it suitable for "Internet of Things" messaging where highly constrained devices are used (low power sensors, mobile devices, embedded computers, microcontrollers, etc.).
[[File:MQTT-architecture.png|thumb|center|600px]]
Publish/Subscribe is an event-driven way of communicating and it enables messages to be pushed to clients. The central communication point is the MQTT broker (server). It is in charge of routing all messages between the senders and the rightful receivers. Each client (sensors) that publishes (transmits) a message to the broker includes a topic into the message. The topic is the routing information for the broker. Each client that wants to receive messages subscribes to a certain topic and the broker delivers all messages with the matching topic to the client.
For more details, please refer to the publicly available resources such as [http://www.steves-internet-guide.com/mqtt/ this link].
When we click the “Even option “, we will get the following
[[File1] https:XUELK//www.ibm.com/developerworks/cloud/library/cl-mqtt-bluemix-iot-ANnode-IIoTred-12app/====Installing the broker====Eclipse Mosquitto™ broker will be installed on SBC Lynx. Eclipse Mosquitto™ is an open source (EPL/EDL licensed) message broker that implements the MQTT protocol versions 3.1 and 3.1.1.png|thumb|center|600px|caption]]
The procedure was tested on an [[XUELK-AN-002:_Running_Debian_distribution|SBC Lynx running Debian Jessie distribution]].
First, import the repository package signaling key:
<pre class="board-terminal">
wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
sudo apt-key add mosquito-repo.gpg.key
</pre>
Then click the device (with the name already created, in this case mine device name = my_device_1) and select the variable.
Make the reposioty available for the mqtt:
<pre class="board-terminal">
cd /etc/apt/sources.lit.d/
sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.list
</pre>
[[File:XUELK-AN-IIoT-13.png|thumb|center|600px|caption]]
Install Mosquitto
<pre class="board-terminal">
sudo apt-get update
sudo apt-get install mosquitto
</pre>
After selecting the variable, we will put the if then statement
Install Mosquitto developer libraries to develop MQTT clients
<pre class="board-terminal">
sudo apt-get install libmosquitto-dev
</pre>
[[File:XUELK-AN-IIoT-14.png|thumb|center|600px|caption]]
Execute the following command to install Mosquitto client packages
<pre class="board-terminal">
sudo apt-get install mosquitto-clients
</pre>
After putting a value to the if – then statement, we will select a means to get notification
Ensure that Mosquitto broker is running
<pre class="board-terminal">
sudo service mosquitto status
</pre>
[[File:XUELK-AN-IIoT-15.png|thumb|center|600px|caption]]
To verify that the broker is running properly, you can perform this simple test.
Then, we will put Open a statement (message) terminal and issue this command to get as a notification either for sms (cell phone number) or email for email notification. Here in below I put snap shot of the final step of subscribe the event setting topic <code>mqtt</code><pre class="board-terminal">mosquitto_sub -h localhost -t "mqtt" -v</pre>
[[File:XUELKOpen another terminal and issue the given below command to publish message to the topic <code>mqtt</code><pre class="board-ANterminal">mosquitto_pub -IIoTh localhost -16.png|thumb|center|600px|caption]]t "mqtt" -m "Hello MQTT"</pre>
Now the message <code>Hello MQTT</code> will be displayed in the first terminal where the topic <code>mqtt</code> was subscribed.
In this way, we can connect our device ==References=====List of IoT cloud platforms (sbcnot exhaustive)===*mnubo *Oracle *Swarm *Axeda *OpenRemote *Etherios *ioBridge *SAP Internet of Things Solutions *Zatar *ThingWorx *Arrayent *Sine-lynx) to the ubidots cloud with Ubidot’s python api client and send data to the cloud then visualize it on the cloud in way we configured and also get notification Wave Technologies *Ayla Networks *Echelon *EVRYTHNG *Exosite *Xively *Marvell *Carriots *Arkessa *GroveStreams *CeNSE by means HP *ARM *Nimbits *Open Sen.se *Paraimpu 15 *Sociot.al *NewAer *SensorCloud *ThingSpeak *Yaler *Jasper *XobXob *Linkafy *Revolv *Wind River *Wovyn *InfoBright *Contiki *2lemetry *AllJoyn *InterDigital *Superflux Internet of different waysThings Academy (IoTA) *HarvestGeek *MediaTek Labs *Streamlite LTE *Bosch Software Innovations Suite *Geras *Ubidots *Opensensors.IO *Tinamous *Temboo *Eyehub *Nearbus *Exosite *Emoncms *Gemalto *IBM Watson *Microsoft Azure*Amazon AWS *Senseiot*Parse *SICS *Element blue *Sparkfun *Kaa *Salesforce *PRDIX
dave_user, Administrators
5,138
edits

Navigation menu