Changes

Jump to: navigation, search

XUELK-AN-005: Implementing an Industrial IoT gateway/supervisor

11,854 bytes added, 09:53, 14 February 2020
no edit summary
{{InfoBoxTop}}
{{AppliesToSBCLynx}}
{{AppliesToIoT}}
{{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 /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 *collecting data from different in nature networks and fieldbuses (an RS485 bus, an Ethernet LAN, an IO-Link port, etc.)*uploading the data to the cloud over an Internet connection. 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]].   [1] It is worth remembering that SBC Lynx supports IEC 61131-3 compliant soft-PLC engines as well, such as [http://www.axelsw.it/index.php?option=com_content&view=article&id=163&Itemid=1897&lang=en Axel LogicLab]. ==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.   [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 example consists of three steps. The first shows:*How to connect the SBC Lynx to Ubidots *How to upload data to the cloud.The second part describes how to visualize on the dashboard of Ubidots. Tha last one shows how to set up events so as to get a notification. 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 -aNo LSB modules are available.Distributor ID: DebianDescription: Debian GNU/Linux 8.7 (jessie)Release: 8.7Codename: Jessie</pre> To connect to the Ubidots platform, a client written in Python will be used. The client will make use of the Ubidots' client library (https://pypi.python.org/pypi/ubidots/). To install it, please issue the following commands as <code>root</code> user:<pre class="board-terminal">apt-get updateapt-get upgradeapt-get install python-setuptoolseasy_install pippip install ubidots</pre> On the cloud side, we need to have a user account on the ubidots.com platform and get the API (a unique key for each account ) and token from the website, very simple.  Go to the [https://ubidots.com/ website of the Ubidots cloud] and click the sign up option on the right upper corner of the website to create the account.  [[File:XUELK-AN-IIoT-1.png|thumb|center|600px]]   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-2.png|thumb|center|600px]]   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. [[File:XUELK-AN-IIoT-3.png|thumb|center|600px]]  To create and initialize an API Client instance, use the following code:<pre class="board-terminal">from ubidots import ApiClientapi = ApiClient(token='fwSetosAgIG3d128YdzP5fi4hADzWU')</pre>  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]]  Click the device option, then we will get the following:[[File:XUELK-AN-IIoT-5.png|thumb|center|600px]]  Click the device and add a variable:[[File:XUELK-AN-IIoT-6.png|thumb|center|600px]]  After adding the variables, we need their IDs. To get them, put the cursor on bottom side of each variable box. Then, you will see "I" option. Click it to get the ID.  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> To upload a value to the Ubidots platform, we can use a code like this:<pre class="board-terminal">new_value = my_variable.save_value({'value': <value>})</pre> Following is a code snippet that uploads random data to the platform:<pre class="board-terminal">from ubidots import ApiClientimport randomapi = ApiClient(token='fwSetosAgIG3d128YdzP5fi4hADzWU')my_variable_1 = api.get_variable('58cfe99b7625427aeab8a5e8')test_value_1 = random.uniform(0,1)test_value_1 = my_variable_1.save_value({'value':test_value_1})my_variable_2 = api.get_variable('58d0df2f7625427ae8065765')test_value_2 = random.randint(1,10)test_value_2 = my_variable_2.save_value({'value':test_value_2})my_variable_3 = api.get_variable('58d0f2d77625427ae6d4847f')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. First, click the ''Dashboards'' link. Click the "+" symbol on the right upper corner. Then you will get the "How would you like to see your data?" question and different options below it:*Chart* Metric*Map*Indicator*Controller*...[[File:XUELK-AN-IIoT-8.png|thumb|center|600px]]  In this example, the option ''chart'' was selected. As such, several further options are available:[[File:XUELK-AN-IIoT-9.png|thumb|center|600px]]  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 the following example, a variable that was not mentioned in 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]]  Then sekect the device (<code>My_device_1</code> in the example) ...[[File:XUELK-AN-IIoT-12.png|thumb|center|600px]]  ... and click the variable you wish to configure the notification for.[[File:XUELK-AN-IIoT-13.png|thumb|center|600px]]  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]]  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" [1] and is becoming one on the most common protocols used for machine-to-machine communications. 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].   [1] https://www.ibm.com/developerworks/cloud/library/cl-mqtt-bluemix-iot-node-red-app/====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. 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.keysudo apt-key add mosquito-repo.gpg.key </pre>  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>  Install Mosquitto<pre class="board-terminal">sudo apt-get updatesudo apt-get install mosquitto</pre>  Install Mosquitto developer libraries to develop MQTT clients<pre class="board-terminal">sudo apt-get install libmosquitto-dev</pre>  Execute the following command to install Mosquitto client packages<pre class="board-terminal">sudo apt-get install mosquitto-clients</pre>  Ensure that Mosquitto broker is running<pre class="board-terminal">sudo service mosquitto status</pre>  To verify that the broker is running properly, you can perform this simple test. Open a terminal and issue this command to subscribe the topic <code>mqtt</code><pre class="board-terminal">mosquitto_sub -h localhost -t "mqtt" -v</pre> 
IIoT is a vast field Open another terminal and issue the given below command to publish message to the topic <code>mqtt</code><pre class="board-terminal">mosquitto_pub -h localhost -t "mqtt" -m "Hello MQTT"</pre>
This application note provides some examples of hardware and software configurations that can Now the message <code>Hello MQTT</code> will be used for this purpose. The examples were tested on a 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]]displayed in the first terminal where the topic <code>mqtt</code> was subscribed.
==References=====List of IoT cloud platforms (not exhaustive)===*mnubo *Oracle *Swarm *Axeda *OpenRemote *Etherios *ioBridge *SAP Internet of Things Solutions *Zatar *ThingWorx *Arrayent *Sine-Wave Technologies *Ayla Networks *Echelon *EVRYTHNG *Exosite *Xively *Marvell *Carriots *Arkessa *GroveStreams *CeNSE by 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 Things 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