tag:blogger.com,1999:blog-73766214175714057112024-03-19T07:04:39.583+03:00Eclipse Open IoT Challenge ActivitiesAnonymoushttp://www.blogger.com/profile/04094315302192887515noreply@blogger.comBlogger7125tag:blogger.com,1999:blog-7376621417571405711.post-1041622745566822942017-02-27T18:37:00.000+03:002017-08-10T21:47:08.994+03:00<h2 style="text-align: center;">
<span id="docs-internal-guid-7f50c9d2-358e-a4c6-7469-6c94307c8cbd"><span style="font-family: "arial"; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: large;">Rule-Based Fault Management for Environmental Monitoring IoT system</span></span></span></h2>
<h3 style="text-align: center;">
<span style="font-family: "arial"; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: large;">Final report</span></span></h3>
<div>
<br />
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Description of the project</span></h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Th<span style="font-family: "arial" , "helvetica" , sans-serif;">e <a href="https://iot-sergevas.blogspot.com/2016/12/rule-based-fault-management-for.html" target="_blank">idea</a> of the project was to build a fault management solution for distributed IoT systems. Fault managment, along with security, is among the most important management features of IoT networks. </span></span></span></span><span style="font-family: "arial" , "helvetica" , sans-serif;">The solution had to demonstrate three main fault management functions:</span></div>
<div>
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">detect faults in IoT system from symptons (events and messages, containing raw data about faults);</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">isolate and diagnose the causes of faults;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">apply the fault recovery procedures.</span></li>
</ul>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The <i>rule-based reasoning technic</i> had to be used for the implementation of these functions.</span></div>
</div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The environmental monitoring IoT system was selected a</span><span style="font-family: "arial" , "helvetica" , sans-serif;">s an example of the diagnosable system.</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<br />
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The current status</span></h3>
</div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The following is already done:</span></div>
<div>
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">the hardware part of environmental monitoring system created;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">the sensor node software fully implemented;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">the Raspberry Pi based field IoT gateway configured to work as the Wireless Access Point;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Mosquitto MQTT broker installed and configured on the IoT gateway component;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">the IoT gateway software partially implemented (this work is in progress, see GitHub <a href="https://github.com/sergevas/rbfmiot-iot-gateway" target="_blank">repo</a> with the sources);</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">one DigitalOcean 1Gb CentOS 7 droplet created;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Docker and Docker Compose installed on the droplet;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Docker daemon secured with TLS;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Eclipse Hono v0.5-M3 deployed on the droplet and tested.</span></li>
</ul>
</div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Well, there is still much to be done :)</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"></span><br />
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Changes in the components of the solution</span></h3>
</div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Current changes are related to the implementation of the sensor node and field gateway components:</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiy6JKWvvBWwNL4KjwIJgn9npBgl50okNqDNp91Mqj-00qYNHQQ6Dn_n0kmHvEFE8UCA7p9EV6WMBKkY9rschXQblR_6WoCrGHWR_KjXeipOVsbZdm35n2ReIqGmXzNvSP1TBnsik-BPjE/s1600/eiotc_3_0_component_view_revised.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiy6JKWvvBWwNL4KjwIJgn9npBgl50okNqDNp91Mqj-00qYNHQQ6Dn_n0kmHvEFE8UCA7p9EV6WMBKkY9rschXQblR_6WoCrGHWR_KjXeipOVsbZdm35n2ReIqGmXzNvSP1TBnsik-BPjE/s640/eiotc_3_0_component_view_revised.png" width="596" /></a></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The sensor node component's ESP-12 modules replaced with SparkFun ESP8266 Things. The </span><span style="font-family: "arial" , "helvetica" , sans-serif;">Raspberry Pi based IoT gateway now configured as the WAP for sensor nodes and connected to the router using LAN connection.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">I initially considered Kura for the IoT gateway, but after some research think it's a bit overcomplicated for the case of the project. I needed to implement bidirectional MQTT - AMQP bridge to connect Mosquiotto broker, which running locally on Raspberry PI and Eclipse Hono AMQP telemetry endpoint, running on the </span><span style="font-family: "arial" , "helvetica" , sans-serif;">DigitalOcean</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> droplet. And as I can see there is no direct way to implement it with Kura. I would have to develop a bundle from scratch to support request-response scenario for the local Mosquitto. Also Kura's CloudService is EDC specific and it seems like it doesn't fit Hono API. So I decided to implement custom IoT micro-gateway using Apache Camel and run it as Linux service on IoT gateway component. I</span><span style="font-family: "arial" , "helvetica" , sans-serif;">n this case it will be possible to connect to Hono using Hono API through AMQP protocol.</span><br />
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></h3>
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Lessons learned</span></h3>
</div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">As it is seen now, the declared scope of the project turned out to be too broad for the stated time frame. And, unfortunately, working full-time, it was not always possible to fully engage in the Challenge.</span></div>
Anonymoushttp://www.blogger.com/profile/04094315302192887515noreply@blogger.com0tag:blogger.com,1999:blog-7376621417571405711.post-64117401506388162382017-02-18T21:56:00.001+03:002017-03-02T22:08:38.098+03:00<h2 style="text-align: center;">
<span id="docs-internal-guid-7f50c9d2-358e-a4c6-7469-6c94307c8cbd"><span style="font-family: "arial"; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: large;">Rule-Based Fault Management for Environmental Monitoring IoT system</span></span></span></h2>
<h3 style="text-align: center;">
<span style="font-family: "arial"; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: large;">Sensor node software</span></span></h3>
<div>
<span style="font-family: "arial"; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: large;"><br /></span></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">In this post I'm showing the software part of the <a href="https://iot-sergevas.blogspot.ru/2017/01/rule-based-fault-management-for.html" target="_blank">sensors</a>. The code is implemented with Arduino IDE. Libs used:</span><br />
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;"><i>ESP</i> - provides ESP8266 specific functions;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;"><i>Wire</i> - provides I2C protocol support;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;"><i>ESP8266WiFi</i> - WiFi related functions;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;"><i>EEPROM</i> - allows to work with persistent data storadge;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://github.com/knolleary/pubsubclient" target="_blank"><i>PubSubClient</i></a> - a client library for MQTT support.</span></li>
</ul>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The software is devided into two parts: a) BME280 I2C driver lib and b) Arduino sketch with the sensor functionality. Next I'm describing the implementation of each part.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">BME280 driver</span></h3>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The BME280 sensor driver is implemented as Arduino library. The BME280 </span><a href="https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BME280_DS001-11.pdf" style="font-family: arial, helvetica, sans-serif;" target="_blank">datasheet</a><span style="font-family: "arial" , "helvetica" , sans-serif;"> was the main reference for the implementation. The library functional spec is following:</span></div>
<div>
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">I2C interface support only;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">Forced mode support only; </span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">allows to dynamically set the BME280 I2C address;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">allows to dynamically set SDA and SCL pins fot I2C interface;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">oversampling isn't used </span>(acceptable for the environmental measurements);</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">IIR filter isn't used (also acceptable for the environmental measurements);</span></li>
</ul>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The public API of the library includes two constructors and three methods:<script src="https://gist.github.com/sergevas/8226261d2a4c466f017cdf97f1deac09.js"></script></span></div>
</div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The UML diagram depicts the library usage workflow:</span><br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjmvus3mTp5PxTDkiWrRPTTVVnoHp8Dsre69RhqeP_g3dtEXbI2tFv8sEUCT3zOCYcX4ODt_GcKJa5Nc9J3NBGqP2lWKbHVC8e5ykNRHzsA28Fc_mCRTmKQWXTZ7QptSUvo5no1P1dC1E/s1600/BME280_driver_activity_diagram.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjmvus3mTp5PxTDkiWrRPTTVVnoHp8Dsre69RhqeP_g3dtEXbI2tFv8sEUCT3zOCYcX4ODt_GcKJa5Nc9J3NBGqP2lWKbHVC8e5ykNRHzsA28Fc_mCRTmKQWXTZ7QptSUvo5no1P1dC1E/s1600/BME280_driver_activity_diagram.png" /></a></div>
<div style="text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The diagram is self-explanatory. One thing can be mentioned here that according to BME280 datasheet (see <i>3.3.3. Forced mode</i>) the Forced mode has to be selected again for each subsequent measurement cycle. For this purpose the last statement of </span><span style="font-family: "courier new" , "courier" , monospace;">readAll() </span><span style="font-family: "arial" , "helvetica" , sans-serif;">method sets the sensor mode on each method call (<i>5.4.5 Register 0xF4 "ctrl_meas"</i></span><span style="font-family: "arial" , "helvetica" , sans-serif;">):</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> <script src="https://gist.github.com/sergevas/775246cb1bb3c8b11b422bd33ae9dd5a.js"></script></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"></span><span style="font-family: "arial" , "helvetica" , sans-serif;">The BME280 ADC output values for temperature, pressure and humidity are compensated using formulas from the datasheet (<i>4.2.3 Compensation formulas</i>).</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">You can find sources for the BME280 driver in the GitHub </span><a href="https://github.com/sergevas/rbfmiot-sensor/tree/master/RBFMIOT_BME280" style="font-family: arial, helvetica, sans-serif;" target="_blank">repo</a><span style="font-family: "arial" , "helvetica" , sans-serif;">.</span><br />
<h3>
<br /><span style="font-family: "arial" , "helvetica" , sans-serif;">Arduino sketch</span></h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;"></span><br />
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The project's sensor node software is implemented as an Arduino sketch. The main features that was implemented in the sketch:</span></div>
<div>
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">wireless WiFi communication channel with the field IoT gateway;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">MQTT client, provides connectivity with MQTT broker which runs on a field IoT gateway;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">bidirectional communication with BME280 sensor;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">the use of a persistent storage for the current state of the sensor node during restarts;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">three modes of operation:</span></li>
<ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">active;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">power save;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">suspended.</span></li>
</ul>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">one-way message exchange pattern implementation over MQTT for environmental telemetry data messages;</span></li>
<li><span style="font-family: "arial" , "helvetica" , sans-serif;">request-reply message exchange pattern implementation over MQTT for control messages, sended from the field gateway to the sensor node.</span></li>
</ul>
</div>
<div>
<h4>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Startup</span></h4>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The UML sequence diagram depicts the startup process after powering the sensor node:</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuKeGiNgG_CHUpgsM5_-6wjiGx016I93si2PYClHzWYd_OGELNK6UhBjO9atpJ8QCoQgnjCwt8x77djtfIpRs8zVdAnkbCWUyrpuEGJ7GNJOqWyBoXsMA2QnRX_FUeCCB4xQe3rfhbhZY/s1600/sensor-node-uml-seq-startup.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuKeGiNgG_CHUpgsM5_-6wjiGx016I93si2PYClHzWYd_OGELNK6UhBjO9atpJ8QCoQgnjCwt8x77djtfIpRs8zVdAnkbCWUyrpuEGJ7GNJOqWyBoXsMA2QnRX_FUeCCB4xQe3rfhbhZY/s1600/sensor-node-uml-seq-startup.png" /></a></div>
<div style="text-align: left;">
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">The programm starts with reading the MAC address as it is used as a MQTT client name and included in MQTT topic tree structure. Then BME280 is initialized using I2C protocol. Then the EEPROM memory allocated - 5 bytes total (4 bytes for the sleep period value in seconds + 1 byte for the current mode id). After that WiFi connection is established with a WiFi access point, based on the Raspberry Pi. The same Raspberry PI is running local Mosquitto MQTT broker instance and the field IoT gateway software. Next steps are for </span><span style="font-family: "arial" , "helvetica" , sans-serif;">MQTT</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "arial" , "helvetica" , sans-serif;">PubSub client callback function setup, MQTT topic names initialization and the sensor node current operating mode processing.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">The following topics are configured by the sensor node:</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<br />
<table border="1" cellpadding="5" cellspacing="0" style="width: 100%;"><tbody>
<tr align="center"><td><b><span style="font-family: "arial" , "helvetica" , sans-serif;">Topic name template</span></b></td><td><b><span style="font-family: "arial" , "helvetica" , sans-serif;">Topic name example</span></b></td><td><b><span style="font-family: "arial" , "helvetica" , sans-serif;">Topic type</span></b></td><td><b><span style="font-family: "arial" , "helvetica" , sans-serif;">Purpose</span></b></td></tr>
<tr><td><span style="font-family: "arial" , "helvetica" , sans-serif;">env/<MAC_address>/status</span></td><td><span style="font-family: "arial" , "helvetica" , sans-serif;">env/5ccf7f2f1d04/status</span></td><td><span style="font-family: "arial" , "helvetica" , sans-serif;">Publish</span></td><td><span style="font-family: "arial" , "helvetica" , sans-serif;">Sensor node state messages.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">Possible values: 'off', 'sleeping', 'on'</span></td></tr>
<tr><td><span style="font-family: "arial" , "helvetica" , sans-serif;">env/<MAC_address>/temperature</span></td><td><span style="font-family: "arial" , "helvetica" , sans-serif;">env/5ccf7f2f1d04/temperature</span></td><td><span style="font-family: "arial" , "helvetica" , sans-serif;">Publish</span></td><td><span style="font-family: "arial" , "helvetica" , sans-serif;">Telemetry data messages: temperature in DegC</span></td></tr>
<tr><td><span style="font-family: "arial" , "helvetica" , sans-serif;">env/<MAC_address>/pressure</span></td><td><span style="font-family: "arial" , "helvetica" , sans-serif;">env/5ccf7f2f1d04/pressure</span></td><td><span style="font-family: "arial" , "helvetica" , sans-serif;">Publish</span></td><td><span style="font-family: "arial" , "helvetica" , sans-serif;">Telemetry data messages: atmospheric pressure in hPa</span></td></tr>
<tr><td><span style="font-family: "arial" , "helvetica" , sans-serif;">env/<MAC_address>/humidity</span></td><td><span style="font-family: "arial" , "helvetica" , sans-serif;">env/5ccf7f2f1d04/humidity</span></td><td><span style="font-family: "arial" , "helvetica" , sans-serif;">Publish</span></td><td><span style="font-family: "arial" , "helvetica" , sans-serif;">Telemetry data messages: humidity in %RH</span></td></tr>
<tr><td><span style="font-family: "arial" , "helvetica" , sans-serif;">env/<MAC_address>/request</span></td><td><span style="font-family: "arial" , "helvetica" , sans-serif;">env/5ccf7f2f1d04/request</span></td><td><span style="font-family: "arial" , "helvetica" , sans-serif;">Subscribe</span></td><td><span style="font-family: "arial" , "helvetica" , sans-serif;">Command messages: request</span></td></tr>
<tr><td><span style="font-family: "arial" , "helvetica" , sans-serif;">env/<MAC_address>/request</span></td><td><span style="font-family: "arial" , "helvetica" , sans-serif;">env/5ccf7f2f1d04/reply</span></td><td><span style="font-family: "arial" , "helvetica" , sans-serif;">Publish</span></td><td><span style="font-family: "arial" , "helvetica" , sans-serif;">Command</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">messages: reply</span></td></tr>
</tbody></table>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The </span><span style="font-family: "courier new" , "courier" , monospace;">preprocessMode()</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> function implements a conditional workflow, that depends on the current sensor node mode. Three operational modes are supported:</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /><script src="https://gist.github.com/sergevas/05b16712c7875cd9174a8c50dc311109.js"></script></span>
<span style="font-family: "arial" , "helvetica" , sans-serif; text-align: center;"><span style="text-align: left;">According to SparkFun's </span><a href="https://learn.sparkfun.com/tutorials/esp8266-thing-hookup-guide/example-sketch-goodnight-thing-sleep-mode" style="text-align: left;" target="_blank">ESP8266 Thing Hookup Guide</a><span style="text-align: left;"> </span><i style="text-align: left;">XPD </i><span style="text-align: left;">pin has to be connected to </span><i style="text-align: left;">DTR </i><span style="text-align: left;">pin to enable the sleep capability.</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif; text-align: center;"><span style="text-align: left;"><br /></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif; text-align: center;">The UML activity diagram represents the details of the workflow:</span></div>
<div style="text-align: center;">
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmnm237x5UhBwXoAZrqVMeniWeGeE43b1JpTehKm2LSihzX0JiP0fx6MHVcZkP0plc35vH8mURk7meXFK-jzxHlLQv0Md-6SrXLRHj6y6MWZYqw-XW-TJcDVWtvdWnsJ_sWnOBtI3S43o/s1600/sensor-node-uml-activity-preprocess-mode.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmnm237x5UhBwXoAZrqVMeniWeGeE43b1JpTehKm2LSihzX0JiP0fx6MHVcZkP0plc35vH8mURk7meXFK-jzxHlLQv0Md-6SrXLRHj6y6MWZYqw-XW-TJcDVWtvdWnsJ_sWnOBtI3S43o/s1600/sensor-node-uml-activity-preprocess-mode.png" /></a></div>
<br /></div>
<div style="text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">Two interesting points here:</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">1. As the <a href="http://pubsubclient.knolleary.net/index.html" target="_blank">Arduino Client for MQTT</a> only supports Clean Sessions (see for example <a href="http://www.hivemq.com/blog/mqtt-client-library-encyclopedia-arduino-pubsubclient/" target="_blank">this</a> note), the command messages that are addressed to the sensor node, can only be sent while the node is connected to the local MQTT broker, i.e. the node never receives the command message if it was sent while the node is disconnected from the broker in the deep sleep state. So as a workaround, before sending the sensor node to deep sleep in PWR_SAVE or SUSPENDED mode, the node waits for an incoming command message at a fixed interval of 5 seconds and then runs PubSub client's </span><span style="font-family: "courier new" , "courier" , monospace;">loop() </span><span style="font-family: "arial" , "helvetica" , sans-serif;">method to process incomming messages.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">2. Here is the strange thing: I've never managed to successfully process incoming request message if the </span><span style="font-family: "courier new" , "courier" , monospace;">loop() </span><span style="font-family: "arial" , "helvetica" , sans-serif;">is called once. In this case the callback function is never called. I was able to fix it by inserting the second </span><span style="font-family: "courier new" , "courier" , monospace;">loop() </span><span style="font-family: "arial" , "helvetica" , sans-serif;">call:</span><br />
<span style="font-size: large;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /><script src="https://gist.github.com/sergevas/c37f3b8b415c5e2b183ac54d7f92d946.js"></script></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"></span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif; font-size: large;">First integration test</span></div>
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">I ran integration tests using the following setup:</span><br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: center;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit2oOF7KBr_TeRnxxH2PxZz7HPtTUedAI17IHWS2BhXfLj08J0eR0qzY8ui_ArVWkQmZxeMrj3oM_lA3fFDNb2Fv3npfhvUE1WZ1f2tssuwkHr2OIHNG1gTL96VOMP3z-q-sT5C12QQK0/s1600/sensor-node-integration-test-setup.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit2oOF7KBr_TeRnxxH2PxZz7HPtTUedAI17IHWS2BhXfLj08J0eR0qzY8ui_ArVWkQmZxeMrj3oM_lA3fFDNb2Fv3npfhvUE1WZ1f2tssuwkHr2OIHNG1gTL96VOMP3z-q-sT5C12QQK0/s1600/sensor-node-integration-test-setup.png" /></a></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<br />
<div style="text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">I created several gifs to visualize the tests.</span><br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTrlQq17nNxpjJHiAE0hmfRe2_hKYoTlioaQsUgDqhpgSmdwOPeqnWtgiy55dlO9S5URNojF7QKW9eaj-JBaJWNzf_f7jJXNM9rjDQbmKS0kDs5qH9WqOBeBthu-vCFWm98qjLtifwBVc/s1600/01-sensor-status-change.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTrlQq17nNxpjJHiAE0hmfRe2_hKYoTlioaQsUgDqhpgSmdwOPeqnWtgiy55dlO9S5URNojF7QKW9eaj-JBaJWNzf_f7jJXNM9rjDQbmKS0kDs5qH9WqOBeBthu-vCFWm98qjLtifwBVc/s1600/01-sensor-status-change.gif" /></a></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">This gif reflects the following scenario:</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">1. The sensor node is configured to connect to the Mosquitto MQTT broker which runs on a field IoT gateway, based on Raspbery PI;</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">2. mqtt-spy utility is configured to connect to the same MQTT broker;</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">3. Four MQTT subscribtions are created to the topics in mqtt-spy:</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "courier new" , "courier" , monospace;">env/5ccf7f2f1dc8/status</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> env/5ccf7f2f1dc8/temperature</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> env/5ccf7f2f1dc8/humidity</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> env/5ccf7f2f1dc8/pressure</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">4. The sensor node run in </span><span style="font-family: "arial" , "helvetica" , sans-serif;">PWR_SAVE</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> mode and initially is in the deep sleep state;</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">5. The payload of a message in the </span><span style="font-family: "courier new" , "courier" , monospace;">env/5ccf7f2f1dc8/status</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> topic contains </span><span style="font-family: "courier new" , "courier" , monospace;">'off'</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> string value which corresponds the payload of a retain message of the sensor node;</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">6. When the power save period ends, the sensor node establishes wireless MQTT connection with the broker;</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">7. The node publishes new message to </span><span style="font-family: "courier new" , "courier" , monospace;">env/5ccf7f2f1dc8/status</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> with a payload, containing </span><span style="font-family: "courier new" , "courier" , monospace;">'on'</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> string indicating that the status of the node is changed.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">8. The node reads new environmental data from BME280 and publishes three new messages to </span><span style="font-family: "courier new" , "courier" , monospace;">env/5ccf7f2f1dc8/temperature</span><span style="font-family: "arial" , "helvetica" , sans-serif;">, </span><span style="font-family: "courier new" , "courier" , monospace;">env/5ccf7f2f1dc8/humidity</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> and </span><span style="font-family: "courier new" , "courier" , monospace;">env/5ccf7f2f1dc8/pressure</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> topics (see Preprocess Mode Activity Diagram).</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">9. The node publishes new message to </span><span style="font-family: "courier new" , "courier" , monospace;">env/5ccf7f2f1dc8/status</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> with a payload, containing </span><span style="font-family: "courier new" , "courier" , monospace;">'sleeping'</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> string indicating that the status of the node is changed.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">10. The node is sent to the deep sleep state.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">11. The broker disconnects the network connection as it doesn't receive any packets from the sensor node within one and a half times the Keep Alive time period.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">12. </span><span style="font-family: "arial" , "helvetica" , sans-serif;">The broker publishes the last will message of the node to </span><span style="font-family: "courier new" , "courier" , monospace;">env/5ccf7f2f1dc8/status</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> with a payload, containing </span><span style="font-family: "courier new" , "courier" , monospace;">'off'</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> string.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif; font-size: large;">Commands and command messages</span><br />
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The sensor node supports request-reply </span><span style="font-family: "arial" , "helvetica" , sans-serif;">message exchange for command messages. The current implementation supports three commands:</span><br />
<ul>
<li><i style="font-family: arial, helvetica, sans-serif;">getsensid </i><span style="font-family: "arial" , "helvetica" , sans-serif;">- returns the BME280 sensor identifier in hex string format;</span></li>
<li><i style="font-family: arial, helvetica, sans-serif;">getbattery </i><span style="font-family: "arial" , "helvetica" , sans-serif;">- returns the supply voltage (VCC) value;</span></li>
<li><i style="font-family: arial, helvetica, sans-serif;">setmode </i><span style="font-family: "arial" , "helvetica" , sans-serif;">- sets the operational mode of the node.</span></li>
</ul>
<i><span style="font-family: "arial" , "helvetica" , sans-serif;"></span></i>
<span style="font-family: "arial" , "helvetica" , sans-serif;">For a command messages very lightweight application level protocol was created. The payload of the command message is formatted as a CSV-string.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><i>Request command message format</i>:</span><br />
<b><span style="font-family: "courier new" , "courier" , monospace;"><msg_id>,</span><span style="font-family: "courier new" , "courier" , monospace;"><</span><span style="font-family: "courier new" , "courier" , monospace;">command_name</span><span style="font-family: "courier new" , "courier" , monospace;">></span><span style="font-family: "courier new" , "courier" , monospace;">,</span><span style="font-family: "courier new" , "courier" , monospace;"><</span><span style="font-family: "courier new" , "courier" , monospace;">param 1</span><span style="font-family: "courier new" , "courier" , monospace;">></span><span style="font-family: "courier new" , "courier" , monospace;">,</span><span style="font-family: "courier new" , "courier" , monospace;"><</span><span style="font-family: "courier new" , "courier" , monospace;">param 2</span><span style="font-family: "courier new" , "courier" , monospace;">></span><span style="font-family: "courier new" , "courier" , monospace;">,...,</span><span style="font-family: "courier new" , "courier" , monospace;"><</span><span style="font-family: "courier new" , "courier" , monospace;">param n</span><span style="font-family: "courier new" , "courier" , monospace;">></span></b><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">where</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "courier new" , "courier" , monospace;">msg_id</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> - unique identifier of the message (required),</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "courier new" , "courier" , monospace;">command_name </span><span style="font-family: "arial" , "helvetica" , sans-serif;">- predefined command name (required),</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "courier new" , "courier" , monospace;">param 1</span><span style="font-family: "arial" , "helvetica" , sans-serif;">, </span><span style="font-family: "courier new" , "courier" , monospace;">param 2</span><span style="font-family: "arial" , "helvetica" , sans-serif;">, </span><span style="font-family: "courier new" , "courier" , monospace;">param n</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> - the command input parameters (optional). </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><i>Reply command message format</i>:</span><br />
<b><span style="font-family: "courier new" , "courier" , monospace;"><</span><span style="font-family: "courier new" , "courier" , monospace;">correl_id</span><span style="font-family: "courier new" , "courier" , monospace;">></span><span style="font-family: "courier new" , "courier" , monospace;">,</span><span style="font-family: "courier new" , "courier" , monospace;"><</span><span style="font-family: "courier new" , "courier" , monospace;">status</span><span style="font-family: "courier new" , "courier" , monospace;">></span><span style="font-family: "courier new" , "courier" , monospace;">,</span><span style="font-family: "courier new" , "courier" , monospace;"><</span><span style="font-family: "courier new" , "courier" , monospace;">payload</span><span style="font-family: "courier new" , "courier" , monospace;">></span></b><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">where</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "courier new" , "courier" , monospace;">correl_id </span><span style="font-family: "arial" , "helvetica" , sans-serif;">- correlation identifier, must match the </span><span style="font-family: "courier new" , "courier" , monospace;">msg_id</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "arial" , "helvetica" , sans-serif;">value</span><span style="font-family: "arial" , "helvetica" , sans-serif;"> of the corresponding request message (required),</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "courier new" , "courier" , monospace;">status</span><span style="font-family: "courier new" , "courier" , monospace;"> </span><span style="font-family: "arial" , "helvetica" , sans-serif;">- command execution status. Only one possible value </span><span style="font-family: "courier new" , "courier" , monospace;">200 </span><span style="font-family: "arial" , "helvetica" , sans-serif;">is supported in the current implementation (required),</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span><span style="font-family: "courier new" , "courier" , monospace;">payload </span><span style="font-family: "arial" , "helvetica" , sans-serif;">- command output payload (optional). </span><br />
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"> Examples:</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><i style="font-family: arial, helvetica, sans-serif;"> Request command message payload: </i><span style="font-family: "courier new" , "courier" , monospace;">0001,getbattery</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><i style="font-family: arial, helvetica, sans-serif;"> Reply command message payload: </i><span style="font-family: "courier new" , "courier" , monospace;">0001,200,3153</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><i style="font-family: arial, helvetica, sans-serif;"> Request command message payload: </i><span style="font-family: "courier new" , "courier" , monospace;">0002,setmode,1</span></span><br />
<i style="font-family: arial, helvetica, sans-serif;"> Reply command message payload: </i><span style="font-family: "courier new" , "courier" , monospace;">0001,200</span></div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Command messages are handled by the message callback function of MQTT PubSub client. The callback function dispatches the command from the message to the corresponding command handler function</span><span style="font-family: "arial" , "helvetica" , sans-serif;">:</span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /><script src="https://gist.github.com/sergevas/4eb671be2ce0ca5313bd1c5ba791429d.js"></script></span></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">You can find sources of the sketch in the GitHub <a href="https://github.com/sergevas/rbfmiot-sensor/tree/master/rbfmiot-sensor" target="_blank">repo</a>.</span></span><br />
<span arial="" helvetica="" sans-serif=""><br /></span>
<span arial="" helvetica="" sans-serif=""><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: center;">
<span arial="" helvetica="" sans-serif=""><br /></span></div>
</div>
Anonymoushttp://www.blogger.com/profile/04094315302192887515noreply@blogger.com0tag:blogger.com,1999:blog-7376621417571405711.post-90829043812374324252017-01-25T16:36:00.001+03:002017-02-19T01:46:49.035+03:00<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioZ5H5uV9Vq6YhtvvSwogaliefpuGfmNYIqvOr9aWBmuPHxldzAV_z5_Wll8WCKTpPbUa0LMQWpidPMVsf3QBZavESIclnz3_u2lDW0dRFmLzXXUei1_xrIUHt_m1wTav9XhYFjIL9N84/s1600/13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="412" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioZ5H5uV9Vq6YhtvvSwogaliefpuGfmNYIqvOr9aWBmuPHxldzAV_z5_Wll8WCKTpPbUa0LMQWpidPMVsf3QBZavESIclnz3_u2lDW0dRFmLzXXUei1_xrIUHt_m1wTav9XhYFjIL9N84/s640/13.png" width="640" /></a></div>
<h2 style="text-align: center;">
<span style="font-family: "arial"; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: large;"><br /></span></span></h2>
<h2 style="text-align: center;">
<span id="docs-internal-guid-7f50c9d2-358e-a4c6-7469-6c94307c8cbd"><span style="font-family: "arial"; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: large;">Rule-Based Fault Management for Environmental Monitoring IoT system</span></span></span></h2>
<h3 style="text-align: center;">
<span style="font-family: "arial"; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: large;">Hardware setup</span></span></h3>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">For the hardware part of the system I'm using two DIY environmental sensors where each sensor consists of two parts: the external part, mounted on the outside of the window and the internal part, mounted in the apartment of the apartment building.</span></div>
<div>
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif; font-size: small;">The internal part</span></h3>
</div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The internal part is a ESP8266 module powered with LiPo 3.7V 700mAh battery. After submitting the proposal I started to work on its hardware components. And my initial development configuration looked like this:</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_smWbbwrR3NdzxAzbse1B434p2Ey58J9Ss-SSx9h04f6hCjxdij7zvXWh6xAvFkx2eVBhzmRIvIcFKbHThs6Yd0DOkUW7e1PkQW-04lxXg7_oPD1lWbMk0L72L8j9r75dvdEcaJ93ztU/s1600/01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_smWbbwrR3NdzxAzbse1B434p2Ey58J9Ss-SSx9h04f6hCjxdij7zvXWh6xAvFkx2eVBhzmRIvIcFKbHThs6Yd0DOkUW7e1PkQW-04lxXg7_oPD1lWbMk0L72L8j9r75dvdEcaJ93ztU/s640/01.png" width="640" /></a></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">But since my project won the Gift Certificate I've decided to apply it and after a little waiting got this goodies from SparkFun:</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfrTh9lzcq_-Ja_p3EUafx0plsvKbrgSOcAW5Uwl4JYxG3Ui7bKXrgDjsbXwNh9ErRMveE-cVetB3GkW9dRdrD2Q56OQ5_lB2f6Nt2coNPatH6wqgMrAaPgwsltpMcQJdqH0aJPhfTI-4/s1600/03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="449" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfrTh9lzcq_-Ja_p3EUafx0plsvKbrgSOcAW5Uwl4JYxG3Ui7bKXrgDjsbXwNh9ErRMveE-cVetB3GkW9dRdrD2Q56OQ5_lB2f6Nt2coNPatH6wqgMrAaPgwsltpMcQJdqH0aJPhfTI-4/s640/03.png" width="640" /></a></div>
<div style="text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">and modified the prototyping setup:</span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDGkPdPru_wsFTDLK131AL92jO9HnhFZMO1Hyvyp_tBi47pBejYskZ3alwAFcy0WntVp7d4_bap6m65ldT_01emn1bdvUSfE6CUmiIz1TATjNd-Ca9WovSrBWTNbdFfv-swewkIhaLbI0/s1600/04_mod.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="343" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDGkPdPru_wsFTDLK131AL92jO9HnhFZMO1Hyvyp_tBi47pBejYskZ3alwAFcy0WntVp7d4_bap6m65ldT_01emn1bdvUSfE6CUmiIz1TATjNd-Ca9WovSrBWTNbdFfv-swewkIhaLbI0/s640/04_mod.png" width="640" /></a></div>
<div style="text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">This is a final configuration that I used to develop the sensor driver software. I'll describe the sensor software development in the next post.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">SparkFun ESP8266 Thing has onboard voltage regulator and charger for 3.7V LiPo batteries. It is a great addition for solutions with autonomous power supply.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The components are mounted on a small solderable breadboard with 2x10-pin stackable headers and 4-pin break away header for the sensor ribbon cable on it:</span><br />
<table border="0" cellpadding="5" cellspacing="0" style="width: 100%px;"><tbody>
<tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgET90xhNa0G3ZDtZMTBEBU6EZqIjXCP_dBRSz1k-BvM9vI_c2AlsrJjn4i_Mt7ZX-DCmF8QprtYRYQkpx7vU542GPu0-sClCipGNxu4Da1qrrxnuLhrMu65ubvMHsRq0QeppVU8aic6hs/s1600/05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgET90xhNa0G3ZDtZMTBEBU6EZqIjXCP_dBRSz1k-BvM9vI_c2AlsrJjn4i_Mt7ZX-DCmF8QprtYRYQkpx7vU542GPu0-sClCipGNxu4Da1qrrxnuLhrMu65ubvMHsRq0QeppVU8aic6hs/s320/05.png" width="320" /></a></td><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefMStIlumBvJTd2svXBg57pc5pM99TgRmYXRfCVjfofxRKnCG7tH7a29ebvvDvn3E1mVw8U18m5pvHvfz0puhNnrXkGnFWen1R3lBqgVHIRMxjQiqkiSAPNg__z7ztMXJrSu1Q4Prn2Q/s1600/06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="209" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhefMStIlumBvJTd2svXBg57pc5pM99TgRmYXRfCVjfofxRKnCG7tH7a29ebvvDvn3E1mVw8U18m5pvHvfz0puhNnrXkGnFWen1R3lBqgVHIRMxjQiqkiSAPNg__z7ztMXJrSu1Q4Prn2Q/s320/06.png" width="320" /></a></td></tr>
</tbody></table>
<div class="" style="clear: both; text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Assembled boards and LiPo batteries are placed in a protective enclosure which made of latticed PVC-plates. The enclosure has a separate section for each board.</span><span style="font-family: "arial" , "helvetica" , sans-serif;">The back panel is removed to provide access to the </span><span style="font-family: "arial" , "helvetica" , sans-serif;">ESP8266 Thing </span><span style="font-family: "arial" , "helvetica" , sans-serif;">power switch and Micro USB connector.</span><br />
<table border="0" cellpadding="5" cellspacing="0" style="width: 100%px;"><tbody>
<tr><td><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoiwfDF8igQNmNj-tnRf4hny1b7S8DjyptHf1im6c2YzJfRXjTJjro4JCWrKFBER1DGho4wVPRejMES4gCrH85Ma9ydh22SPcwJNrV0HCM2xPDkr8m1-Hc1k_fQRGwvx_Vublf76kEvyY/s1600/02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="283" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoiwfDF8igQNmNj-tnRf4hny1b7S8DjyptHf1im6c2YzJfRXjTJjro4JCWrKFBER1DGho4wVPRejMES4gCrH85Ma9ydh22SPcwJNrV0HCM2xPDkr8m1-Hc1k_fQRGwvx_Vublf76kEvyY/s320/02.png" width="320" /></a></div>
</td><td><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgugochsUU_ojHJunNzQXcJKy7EDHk_mXlPTAuwHoIC_dsnwLfg_PLDLLBJYWZ2baQtp6-Hi7G8qhzxI-AoF8H6IuH_9plxpKTt0HVGoRszjamCzuZ_6JYD3kctsl0P481WiLBMYNgMw2o/s1600/15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgugochsUU_ojHJunNzQXcJKy7EDHk_mXlPTAuwHoIC_dsnwLfg_PLDLLBJYWZ2baQtp6-Hi7G8qhzxI-AoF8H6IuH_9plxpKTt0HVGoRszjamCzuZ_6JYD3kctsl0P481WiLBMYNgMw2o/s320/15.png" width="310" /></a></div>
</td></tr>
</tbody></table>
<div>
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif; font-size: small;">The external part</span></h3>
</div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">For the external part I made two simple sensor holders. The holder allows to place the BME280 sensor at a distance from the wall of </span><span style="font-family: "arial" , "helvetica" , sans-serif;">the building </span><span style="font-family: "arial" , "helvetica" , sans-serif;">to slightly reduce the impact of the wall proximity on the temperature measurement. Also it provides partial protection from the weather conditions.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Simple raw materials:</span></div>
</div>
<table border="0" cellpadding="5" cellspacing="0" style="width: 100%;"><tbody>
<tr><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglY1okhyphenhyphenEZZPpT5M2-aZAUHhdaRfLtemFkZwh_5q_D7c0ueB_uWN103yRlZqqjZKDGst4XQkVYASkcbxfcXB2ueL7SedB7DBuIvtyrp7B09uiZVHZRlD4wGGbrj-1JbAVYWZWN8bWbm7Y/s1600/07.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglY1okhyphenhyphenEZZPpT5M2-aZAUHhdaRfLtemFkZwh_5q_D7c0ueB_uWN103yRlZqqjZKDGst4XQkVYASkcbxfcXB2ueL7SedB7DBuIvtyrp7B09uiZVHZRlD4wGGbrj-1JbAVYWZWN8bWbm7Y/s400/07.png" width="251" /></a></td><td><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwOLvmozqFUjFAPwPKkJXet0qBUUF7VcPqR7Mn0fT_-BVYwgFA7DFvQNrH4PPpfhHL1hZmMg-NJVLbpPe4eZxHXyVbEIiQyaRSRmN6WiukdL4vYsMo2OeQtfjls_ALDWDVYwxl2g_Falw/s1600/08.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwOLvmozqFUjFAPwPKkJXet0qBUUF7VcPqR7Mn0fT_-BVYwgFA7DFvQNrH4PPpfhHL1hZmMg-NJVLbpPe4eZxHXyVbEIiQyaRSRmN6WiukdL4vYsMo2OeQtfjls_ALDWDVYwxl2g_Falw/s400/08.png" width="176" /></a></td></tr>
</tbody></table>
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">And it has not done without hot glue :)</span><br />
<table border="0" cellpadding="5" cellspacing="0" style="width: 100%px;"><tbody>
<tr><td><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUoyQqFnzuH0VkJ2tKY6MJhDyfyD5ekecLFsGdcDT1KIBnShGgqehuDUL7IfgPtxkTuX0FDP2KGvgjhBFRrTzbDRxn8p7rG9WLfYbPq6LFHRuG8DaRM-Fb70F9bdWCFDtiNtHcZuBMYQE/s1600/09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUoyQqFnzuH0VkJ2tKY6MJhDyfyD5ekecLFsGdcDT1KIBnShGgqehuDUL7IfgPtxkTuX0FDP2KGvgjhBFRrTzbDRxn8p7rG9WLfYbPq6LFHRuG8DaRM-Fb70F9bdWCFDtiNtHcZuBMYQE/s400/09.png" width="400" /></a></div>
</td><td><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu3naB6xfO1nPSWXeF7nNyNgElnyzJBXvbTjO9_KyRzsuC3haljVVWXglX0TJcNtrIbE3MPnITU1Ey4zxrh_F1b2pSFOxkAGQydImRXBjC81EuqksWAqIrBsVw16OIc4KvhaULforwpFw/s1600/10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu3naB6xfO1nPSWXeF7nNyNgElnyzJBXvbTjO9_KyRzsuC3haljVVWXglX0TJcNtrIbE3MPnITU1Ey4zxrh_F1b2pSFOxkAGQydImRXBjC81EuqksWAqIrBsVw16OIc4KvhaULforwpFw/s400/10.png" width="296" /></a></div>
</td></tr>
</tbody></table>
<div style="text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif; text-align: left;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif; text-align: left;"><br /></span><br />
<div style="text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif; text-align: left;">Unfortunately I burned one SparkFun BME280 sensor breakout board, so I had to go with 4-pin BME280, which I bought on eBay earlier last year. Here is bottom-up view of covers with sensors inside:</span></div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9M4TszIMDKd2QkUW-OT9v4yrk1KX1hvwV6wLuYtegCWosIcptiSsDafWIrD3s-8ntqmV_iGDfSZ7xiuBlzlBubkiYIj2cfC52XD8iujsDaId9jGJZvM3T02-tD6tOyNSBbU-OZYj4FCE/s1600/11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9M4TszIMDKd2QkUW-OT9v4yrk1KX1hvwV6wLuYtegCWosIcptiSsDafWIrD3s-8ntqmV_iGDfSZ7xiuBlzlBubkiYIj2cfC52XD8iujsDaId9jGJZvM3T02-tD6tOyNSBbU-OZYj4FCE/s320/11.png" width="244" /></a></div>
<div style="text-align: center;">
<div style="text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">I attached sensor holders to the window and put the fully assembled device on a sill:</span><br />
<table border="0" cellpadding="5" cellspacing="0" style="width: 100%px;"><tbody>
<tr><td><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_S9xfqQIyaeNiMiau7w51P_mJWXu0MuW6PRvoQWiHi4pj0W99qFWcZju_gm7m4utNhbM5ULu0-ZnI811o6m2xRFQGALct1vGiIDrk0tXYYs3ClQsKAYzfgStcdyNkCHvN8ore-sNgKLk/s1600/12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_S9xfqQIyaeNiMiau7w51P_mJWXu0MuW6PRvoQWiHi4pj0W99qFWcZju_gm7m4utNhbM5ULu0-ZnI811o6m2xRFQGALct1vGiIDrk0tXYYs3ClQsKAYzfgStcdyNkCHvN8ore-sNgKLk/s320/12.png" width="287" /></a></div>
</td><td><div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiq9f1udttooaaDbfcPUeZWRjLZ-hlyPokKUaN0c2nRHpqzNyAkWdAolnb9gArzcKp858MXFZXYrcb8HwoSW05WKooJ7_qQPIjJvhEU02o-S_1ClNYSiHXatMoWk2O5q5NLv2tqVS01a4/s1600/14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="265" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiq9f1udttooaaDbfcPUeZWRjLZ-hlyPokKUaN0c2nRHpqzNyAkWdAolnb9gArzcKp858MXFZXYrcb8HwoSW05WKooJ7_qQPIjJvhEU02o-S_1ClNYSiHXatMoWk2O5q5NLv2tqVS01a4/s320/14.png" width="320" /></a></div>
</td></tr>
</tbody></table>
</div>
<br />
<div style="text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif; text-align: justify;">Done.</span></div>
</div>
</div>
<div style="text-align: center;">
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="text-align: justify;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Btw, it's true: there is a lot of snow in winter in Russia :)</span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBTxQoFRN7xuNitGMhJDjcfjjMlqS8OFSWzhr8ql7kSvsP863Oyb5U78xr7FjHokNeKB5f57kpZaDoLNDPIRDFznLnrSMhLGggT5Yoi3cgpRxxdpVJ-dPX2iRI3zPJuCHHKq3F_Sv04g8/s1600/16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="425" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBTxQoFRN7xuNitGMhJDjcfjjMlqS8OFSWzhr8ql7kSvsP863Oyb5U78xr7FjHokNeKB5f57kpZaDoLNDPIRDFznLnrSMhLGggT5Yoi3cgpRxxdpVJ-dPX2iRI3zPJuCHHKq3F_Sv04g8/s640/16.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
</div>
Anonymoushttp://www.blogger.com/profile/04094315302192887515noreply@blogger.com0tag:blogger.com,1999:blog-7376621417571405711.post-12242371041233700082016-12-25T15:47:00.001+03:002017-02-19T01:19:53.654+03:00<h2 style="text-align: center;">
<span id="docs-internal-guid-7f50c9d2-358e-a4c6-7469-6c94307c8cbd"><span style="font-family: "arial"; vertical-align: baseline; white-space: pre-wrap;"><span style="font-size: large;">Rule-Based Fault Management for Environmental Monitoring IoT system</span></span></span></h2>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Fault Management is an important part of the IoT Management area in general. And several approaches exist to fault detection and diagnosis in information systems. For a 3.0 edition of the Challenge I’m working on a Fault Management solution for a distributed Environmental Monitoring IoT system. The solution is based on a Rule-Based principles of errors (symptoms) detection and faults isolation and diagnose.</span><br />
<div>
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif; font-size: small;">Components of the system</span></h3>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The solution will be implemented and deployed as a distributed system, composed of several components. Here is short description of the main components.</span></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYmdUhj5TXYFKpezGjob4OmqKU4DL6KXeT54tH42vGDeVF02JMtqLR3SjLW71wgEt31Z46YVEqA62jYnICuRMpOe3U89IBR47idaf-U3-TVlb7vuxsxNbRw-KwvBE0YLbnb1KGojbxHlM/s1600/eiotc_3_0_component_view.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYmdUhj5TXYFKpezGjob4OmqKU4DL6KXeT54tH42vGDeVF02JMtqLR3SjLW71wgEt31Z46YVEqA62jYnICuRMpOe3U89IBR47idaf-U3-TVlb7vuxsxNbRw-KwvBE0YLbnb1KGojbxHlM/s640/eiotc_3_0_component_view.png" width="596" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-family: "arial" , "helvetica" , sans-serif; font-size: small;">Component view of the solution</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif; font-size: small;"><br /></span></td></tr>
</tbody></table>
<span style="font-family: "arial" , "helvetica" , sans-serif;">1. <b>Sensor component</b>, consisting of </span><span style="font-family: "arial" , "helvetica" , sans-serif;">two identical battery powered WiFi enabled IoT sensors based on ESP8266 and BME280. The component provides temperature, humidity a barometric pressure values using push/pull communication schema with its field gateway via MQTT protocol.</span></div>
</div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">2. <b>IoT Gateway component</b>, based on Raspberry Pi component, running <a href="https://www.raspberrypi.org/downloads/raspbian/" target="_blank">Raspbian OS</a>. RPI has a wireless WiFi USB dongle connected. Eclipse Kura will be installed on the device and used as IoT gateway implementation. The gateway communicates with IoT sensors via MQTT protocol. Also <a href="https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol" target="_blank">SNMP protocol</a> agent for Raspbian OS will be deployed to enable RPi to receive SNMP commands and send SNMP trap events.<br /><br />The following components will be deployed on two or more cloud CentOS 7 instances, provided by <a href="https://vscale.io/en/" target="_blank">Vscale</a>. Some components will be run inside <a href="https://www.docker.com/" target="_blank">Docker</a> containers.<br /><br />3. <b>Connectivity component</b>, based on <a href="https://projects.eclipse.org/projects/iot.hono" target="_blank">Eclipse Hono</a>. The component will provide bidirectional communication channel for the IoT gateway and its cloud backend. Two types of communication protocols for interaction will be used: SNMP and MQTT. Telemetry data from sensors and control commands from the backend will be transmitted via MQTT. SNMP will be used for receiving TRAP and INFORM events from the OS components of the IoT gateway, and for sending GET requests from the backend. For SNMP I’m going to develop <i>SNMP Protocol Adapter</i> for Hono. So from the gateway side there will be two separate data flows: </span><span style="font-family: "arial" , "helvetica" , sans-serif;"><i>sensor readings </i>and<i> </i></span><span style="font-family: "arial" , "helvetica" , sans-serif;"><i>monitoring, error events and alarms</i>.</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br />4. <b>Fault Management component</b>, based on <a href="https://www.drools.org/" target="_blank">JBoss Drools</a>. The aim of this component is to receive symptom events (errors, alarms), detect errors, isolate and diagnose the causes of faults and apply recover activities. For this purpose a set of rules will be created for decision making and complex event processing. The component will be able to send control messages to check the status of other components and to send commands to components as a recovery procedure (trying to restart the failed component for example). The component will be deployed as a self-contained decision service, which communicates with Hono and Data storage components via <a href="http://camel.apache.org/" target="_blank">Apache Camel</a> routes.<br /><br />5. <b>Data Storage component</b>, implemented via <a href="https://redis.io/" target="_blank">Redis</a> data structure store. Two instances of the data storage will be used: one as the temporary Environmental telemetry data storage and second as the Fault Management database, which persists symptom events, notifications and alerts data.</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br />6. <b>Integration сomponent</b>, based on Apache Camel. This component will implement the business scenario of the solution by receiving Environmental telemetry data (temperature, humidity and barometric pressure values) from the Connectivity component and transmitting this data to the local <i>geoinformation SaaS service - Public Monitoring Project</i> (<a href="http://narodmon.ru/" target="_blank">narodmon.ru</a>) to display sensor readings on the world map.</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br />7. <b>UI component</b>. Will be implemented as a standalone web application. The component will deliver real-time fault and the system status data to the user, providing online visualization and notification functionality using <a href="https://en.wikipedia.org/wiki/WebSocket" target="_blank">WebSocket protocol</a>.</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">8. <b>UI client component</b> implemented as </span><a href="https://en.wikipedia.org/wiki/HTML5" style="font-family: Arial, Helvetica, sans-serif;" target="_blank">HTML5</a> <span style="font-family: "arial" , "helvetica" , sans-serif;">web client application. The component will display data, provided by the UI component web app.</span></div>
<div>
<br /></div>
<div>
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Sample Use Cases</span></h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><i>Use Case 1</i>: Two Environmental data sensors deployed in the field. One sensor is in active mode, periodically sending data readings to its field gateway. Another sensor is a reserve and is in standby mode. The first sensor stops functioning due to the power problems, for example. The Fault Management system detects the situation in which readings data cease to flow from the gateway. The system inits fault isolation procedure by sending status request control message to the malfunctioning sensor. As the sensor doesn’t respond, the system executes recovery activity by sending wake command message to the second sensor. The second sensor switches to the active mode thus continuing the operation of the overall system.</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><i>Use Case 2</i>: The Fault Management system receives multiple SNMP trap events with the information on large memory usage by OS of the IoT field gateway. The system sends SNMP GET request to retrieve the OS performance data. The response confirms the bad OS performance. The system executes the recovery procedure by sending the reset command message to the field gateway OS.</span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "arial" , "helvetica" , sans-serif;">At this time I'm working on the Sensor Component hardware and software part.</span></div>
Anonymoushttp://www.blogger.com/profile/04094315302192887515noreply@blogger.com0tag:blogger.com,1999:blog-7376621417571405711.post-63223642168199860622016-02-26T23:55:00.000+03:002018-02-14T14:10:18.139+03:00<span style="font-family: "arial" , "helvetica" , sans-serif;">Hi! Only a few <span style="font-family: "arial" , "helvetica" , sans-serif;">hour<span style="font-family: "arial" , "helvetica" , sans-serif;">s </span></span>left before the end of the Challenge, so in this post I'm going to wrap up the current status of my project. Still I hope this post is not the last one :)</span><br />
<br />
<h2>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The idea of the project</span></h2>
<a href="https://www.blogger.com/blogger.g?blogID=7376621417571405711" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Th<span style="font-family: "arial" , "helvetica" , sans-serif;">e <a href="http://iot-sergevas.blogspot.ru/2016/01/eclipse-open-iot-challenge-20-project.html" target="_blank">idea</a> was to build a smart toy with a main <span style="font-family: "arial" , "helvetica" , sans-serif;">purpose</span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"> to help babies to develop crawling activity</span></span></span></span></span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">. </span>So what has been done so far?</span><br />
<h2>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">R</span>obot </span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">chassis</span></span></h2>
<span style="font-family: "arial" , "helvetica" , sans-serif;">The robot </span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">chassis</span> prototype has been built. For the basis of the chassis I'm using <a href="https://www.parallax.com/product/28124" target="_blank">Boe-Bot Parts Kit</a> from Parallax:</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1aJd028SGlAq3NcFeN6DtFH5YEV2pl0Ptz4GYHH0kk95c4QY_i40ZPq4L_w8FmHu0wQNZ9EXLpf2GSI84pyOuPj8FbcAz2ikjY-evj5sd9KGCv5lKS-ijWa4Zvtc3aezQj9q3uZVwi0A/s1600/IMG_9538.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="283" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1aJd028SGlAq3NcFeN6DtFH5YEV2pl0Ptz4GYHH0kk95c4QY_i40ZPq4L_w8FmHu0wQNZ9EXLpf2GSI84pyOuPj8FbcAz2ikjY-evj5sd9KGCv5lKS-ijWa4Zvtc3aezQj9q3uZVwi0A/s400/IMG_9538.png" width="400" /></a></span></div>
<div style="text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">I've made slight modifications that allow me to mount the Raspberry Pi A+ on the Aluminum Chassis:</span></span><br />
<div style="text-align: center;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCuYE9pTrspjJY0F7495lpmWpmMdEgG3sVOl7PSRDcQpkRtdxOCxTdmvmiGvJUMopkjNNn3r9qKlN5QEf6hcxViUS0vig91J_3Tld6UiaEssaIHPbvSTgrHEe3hbd0XM3J-bxTJ7ZU5lw/s1600/IMG_9566.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCuYE9pTrspjJY0F7495lpmWpmMdEgG3sVOl7PSRDcQpkRtdxOCxTdmvmiGvJUMopkjNNn3r9qKlN5QEf6hcxViUS0vig91J_3Tld6UiaEssaIHPbvSTgrHEe3hbd0XM3J-bxTJ7ZU5lw/s400/IMG_9566.png" width="321" /></a></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /><span style="font-family: "arial" , "helvetica" , sans-serif;"></span></span></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Also I've<span style="font-family: "arial" , "helvetica" , sans-serif;"> repla<span style="font-family: "arial" , "helvetica" , sans-serif;">ced </span></span></span></span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Parallax <span style="font-family: "arial" , "helvetica" , sans-serif;">standard </span></span>servos fro<span style="font-family: "arial" , "helvetica" , sans-serif;">m the kit with SM-S4303R <span style="font-family: "arial" , "helvetica" , sans-serif;">continuous<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span>rotation <span style="font-family: "arial" , "helvetica" , sans-serif;">servos<span style="font-family: "arial" , "helvetica" , sans-serif;">. SM-S4303R</span></span></span> <span style="font-family: "arial" , "helvetica" , sans-serif;">has slightly higher rotation speed.<span style="font-family: "arial" , "helvetica" , sans-serif;"> <span style="font-family: "arial" , "helvetica" , sans-serif;">The robot po<span style="font-family: "arial" , "helvetica" , sans-serif;">wer source is 4<span style="font-family: "arial" , "helvetica" , sans-serif;">x<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">AA N<span style="font-family: "arial" , "helvetica" , sans-serif;">i</span>Mh</span></span></span></span></span></span></span></span></span></span></span><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span>rechargeable battery pack<span style="font-family: "arial" , "helvetica" , sans-serif;">:</span></span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=7376621417571405711" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=7376621417571405711" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSZPIaSKH6Y6-jfdNG0xrqkNhT1-ejcmkf6nTHd9AQUcDBdS7CoNQ0yc_azQJHF3SRfpezUUgByM6P1_Wm-ObRCswqbIY4HHsATQSUlg0ODa4qTCVHSpAKUK80BfkNw4qXaG1hNXcgBMc/s1600/IMG_9567.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSZPIaSKH6Y6-jfdNG0xrqkNhT1-ejcmkf6nTHd9AQUcDBdS7CoNQ0yc_azQJHF3SRfpezUUgByM6P1_Wm-ObRCswqbIY4HHsATQSUlg0ODa4qTCVHSpAKUK80BfkNw4qXaG1hNXcgBMc/s400/IMG_9567.png" width="370" /></a><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="color: #0000ee;"><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span></span></span></span></span></div>
<div class="" style="clear: both; text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Since the output voltage of the pack equals 4.8 V and does not provide enough power for Raspberry Pi, servos and other electronic parts, I'm using MT3608 DC-DC Step Up Power Apply Module to increase voltage to 5 V. Also my experiments have shown that Raspberry Pi is very sensitive to current spikes produced by servos and freezes every time when they start to rotate. To fix this I'm decided to use separate circuit to power Raspberry Pi. As a result <span style="font-family: "arial" , "helvetica" , sans-serif;">power circuit contains</span> two MT3608, connected in parallel to the power source:</span></span></span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgte5rBozBgySt1pTXMPBOi3H7OLLilm6B0ndsobSFCvW8Oqv0wyfc4F5myriKyNAZhml6B5xY6O63OZSbAl3SGJVSPtVKOmrhDLhwoOYr_QixY9GZpB20lKBjMSJMPjq__FQROnPEvHeY/s1600/IMG_9575.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgte5rBozBgySt1pTXMPBOi3H7OLLilm6B0ndsobSFCvW8Oqv0wyfc4F5myriKyNAZhml6B5xY6O63OZSbAl3SGJVSPtVKOmrhDLhwoOYr_QixY9GZpB20lKBjMSJMPjq__FQROnPEvHeY/s320/IMG_9575.png" width="320" /></a></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span></span></span></span></span></span></span></span></span></span></span></span></span></span> </span></span></span></span></span></span></span></span></span></span></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<h2>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">R<span style="font-family: "arial" , "helvetica" , sans-serif;">obot</span> configuration</span> <span style="font-family: "arial" , "helvetica" , sans-serif;">highlights</span></span></span></h2>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-weight: normal;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">The robot is connected to the wireless router via Wi-Fi wireless USB Adapter Dongle and configured to use static IP address inside a LAN.</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-weight: normal;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">To control the </span>servos of the ro<span style="font-family: "arial" , "helvetica" , sans-serif;">bo<span style="font-family: "arial" , "helvetica" , sans-serif;">t I'm using </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-weight: normal;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-weight: normal;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://github.com/richardghirst/PiBits/tree/master/ServoBlaster" target="_blank">ServoBlaster</a></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span> <span style="font-family: "arial" , "helvetica" , sans-serif;">driver <span style="font-family: "arial" , "helvetica" , sans-serif;">so<span style="font-family: "arial" , "helvetica" , sans-serif;">ftware</span></span>. Pins 15 an<span style="font-family: "arial" , "helvetica" , sans-serif;">d 16 of t<span style="font-family: "arial" , "helvetica" , sans-serif;">he <span style="font-family: "arial" , "helvetica" , sans-serif;">Raspberry Pi <span style="font-family: "arial" , "helvetica" , sans-serif;">header are configured </span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">to control <span style="font-family: "arial" , "helvetica" , sans-serif;">servos<span style="font-family: "arial" , "helvetica" , sans-serif;">. So<span style="font-family: "arial" , "helvetica" , sans-serif;">, <b><span style="font-family: "courier new" , "courier" , monospace;">/dev/servoblaster-cfg</span></b> <span style="font-family: "arial" , "helvetica" , sans-serif;">configuration</span> file <span style="font-family: "arial" , "helvetica" , sans-serif;">content</span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">:</span></span></span></span></span></span></span></span></span></span></span></span></span></span><br />
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-weight: normal;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "courier new" , "courier" , monospace;"> p1pins=15,16<br /> p5pins=<br /><br /> Servo mapping:<br /> 0 on P1-15 GPIO-22<br /> 1 on P1-16 GPIO-23</span><span style="font-family: "arial" , "helvetica" , sans-serif;"></span><span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></div>
<h2>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">R</span>obot </span><span style="font-family: "arial" , "helvetica" , sans-serif;">so<span style="font-family: "arial" , "helvetica" , sans-serif;">ftware</span></span></h2>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Th<span style="font-family: "arial" , "helvetica" , sans-serif;">e proje<span style="font-family: "arial" , "helvetica" , sans-serif;">c</span>t sources <span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">can be found <span style="font-family: "arial" , "helvetica" , sans-serif;">at <a href="https://github.com/sergevas/bcbot" target="_blank">https://github.com/sergevas/bcbot</a><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">. It i<span style="font-family: "arial" , "helvetica" , sans-serif;">s</span> a <span style="font-family: "arial" , "helvetica" , sans-serif;">m</span>aven-based multi-module projec<span style="font-family: "arial" , "helvetica" , sans-serif;">t</span></span></span></span></span></span></span>.<span style="font-family: "arial" , "helvetica" , sans-serif;"> <span style="font-family: "arial" , "helvetica" , sans-serif;">The module <a href="https://github.com/sergevas/bcbot/tree/master/bcbot/bcbot-robot" target="_blank">bcbot-robot</a> <span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">includes</span> functionality int<span style="font-family: "arial" , "helvetica" , sans-serif;">ended t<span style="font-family: "arial" , "helvetica" , sans-serif;">o <span style="font-family: "arial" , "helvetica" , sans-serif;">deploy <span style="font-family: "arial" , "helvetica" , sans-serif;">to</span> the <span style="font-family: "arial" , "helvetica" , sans-serif;">Raspberry Pi. <span style="font-family: "arial" , "helvetica" , sans-serif;">Cu<span style="font-family: "arial" , "helvetica" , sans-serif;">rrent versio<span style="font-family: "arial" , "helvetica" , sans-serif;">n of the<span style="font-family: "arial" , "helvetica" , sans-serif;"> module <span style="font-family: "arial" , "helvetica" , sans-serif;">includes</span> imp<span style="font-family: "arial" , "helvetica" , sans-serif;">le<span style="font-family: "arial" , "helvetica" , sans-serif;">mentation <span style="font-family: "arial" , "helvetica" , sans-serif;">of several <span style="font-family: "arial" , "helvetica" , sans-serif;">Apache <span style="font-family: "arial" , "helvetica" , sans-serif;">Camel routes and Californium Co<span style="font-family: "arial" , "helvetica" , sans-serif;">AP resour<span style="font-family: "arial" , "helvetica" , sans-serif;">se<span style="font-family: "arial" , "helvetica" , sans-serif;">s. <span style="font-family: "arial" , "helvetica" , sans-serif;">The software runs on Raspberry Pi as a standalone Java application. <span style="font-family: "arial" , "helvetica" , sans-serif;">The <span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://github.com/sergevas/bcbot/blob/master/bcbot/bcbot-robot/src/main/java/xyz/sergevas/iot/bcbot/robot/common/RobotMain.java" target="_blank">RobotMain</a><span style="font-family: "arial" , "helvetica" , sans-serif;"> class boots entire application<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">.<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"> <span style="font-family: "arial" , "helvetica" , sans-serif;">The class has several dependences:</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://camel.apache.org/maven/camel-2.15.0/camel-core/apidocs/org/apache/camel/main/Main.html" target="_blank">Main</a></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span>is used to boot up Camel Context<span style="font-family: "arial" , "helvetica" , sans-serif;">, <a href="https://github.com/eclipse/californium.core/blob/master/californium-core/src/main/java/org/eclipse/californium/core/CoapServer.java" target="_blank">CoapServer</a><span style="font-family: "arial" , "helvetica" , sans-serif;"> is used to<span style="font-family: "arial" , "helvetica" , sans-serif;"> initia<span style="font-family: "arial" , "helvetica" , sans-serif;">lize embedded Californium Co<span style="font-family: "arial" , "helvetica" , sans-serif;">AP Server instance<span style="font-family: "arial" , "helvetica" , sans-serif;">.<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br />
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Robot CoAP resources</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Sever<span style="font-family: "arial" , "helvetica" , sans-serif;">al <span style="font-family: "arial" , "helvetica" , sans-serif;">CoAP resource<span style="font-family: "arial" , "helvetica" , sans-serif;">s <span style="font-family: "arial" , "helvetica" , sans-serif;">we<span style="font-family: "arial" , "helvetica" , sans-serif;">re</span></span><span style="font-family: "arial" , "helvetica" , sans-serif;"> imple<span style="font-family: "arial" , "helvetica" , sans-serif;">mented<span style="font-family: "arial" , "helvetica" , sans-serif;"> an<span style="font-family: "arial" , "helvetica" , sans-serif;">d</span> can be <span style="font-family: "arial" , "helvetica" , sans-serif;">found in<span style="font-family: "arial" , "helvetica" , sans-serif;"> <a href="https://github.com/sergevas/bcbot/tree/master/bcbot/bcbot-robot/src/main/java/xyz/sergevas/iot/bcbot/robot/coap" target="_blank">xyz.sergevas.iot.bcbot.robot.coap</a> package. Current implementation <span style="font-family: "arial" , "helvetica" , sans-serif;">cont<span style="font-family: "arial" , "helvetica" , sans-serif;">ains hiera<span style="font-family: "arial" , "helvetica" , sans-serif;">rchy of <span style="font-family: "arial" , "helvetica" , sans-serif;">the CoAP resources with <a href="https://github.com/sergevas/bcbot/blob/master/bcbot/bcbot-robot/src/main/java/xyz/sergevas/iot/bcbot/robot/coap/MoveResource.java" target="_blank">MoveResource</a> c<span style="font-family: "arial" , "helvetica" , sans-serif;">lass as a root <span style="font-family: "arial" , "helvetica" , sans-serif;">resource</span> </span>for the robot motion control<span style="font-family: "arial" , "helvetica" , sans-serif;">. <span style="font-family: "arial" , "helvetica" , sans-serif;">To configure Co<span style="font-family: "arial" , "helvetica" , sans-serif;">AP server </span></span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">org.apache.camel.main.MainListener was implemented:</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br />
<pre class="brush: java; title: ; notranslate" title="">public static class RobotManagementEvent extends MainListenerSupport {
@Override
public void afterStart(MainSupport main) {
try {
ROBOT_COAP_SERVER.add(new RobotResource("robot", main.getCamelContexts().get(0)));
LOG.debug("Starting the robot CoAP server...");
ROBOT_COAP_SERVER.start();
LOG.debug("The robot CoAP server started...");
} catch (Exception e) {
LOG.error("Unable to configure and start the robot CoAP server...", e);
throw new RuntimeException("Unable to configure and start the robot CoAP server...",
e);
}
}
@Override
public void afterStop(MainSupport main) {
super.afterStop(main);
LOG.debug("Stopping the robot CoAP server...");
ROBOT_COAP_SERVER.stop();
}
}</pre>
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Servo <span style="font-family: "arial" , "helvetica" , sans-serif;">control</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;">To control the robot servos <span style="font-family: "arial" , "helvetica" , sans-serif;">Apache C<span style="font-family: "arial" , "helvetica" , sans-serif;">amel route<span style="font-family: "arial" , "helvetica" , sans-serif;">s w<span style="font-family: "arial" , "helvetica" , sans-serif;">ere</span> implemen<span style="font-family: "arial" , "helvetica" , sans-serif;">ted<span style="font-family: "arial" , "helvetica" , sans-serif;"> in the class <a href="https://github.com/sergevas/bcbot/blob/master/bcbot/bcbot-robot/src/main/java/xyz/sergevas/iot/bcbot/robot/route/servo/ServoRoute.java" target="_blank">ServoRoute</a><span style="font-family: "arial" , "helvetica" , sans-serif;">. <span style="font-family: "arial" , "helvetica" , sans-serif;">Exec Camel component <span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">interact<span style="font-family: "arial" , "helvetica" , sans-serif;">s</span> with the <span style="font-family: "arial" , "helvetica" , sans-serif;">Raspberry Pi file syste<span style="font-family: "arial" , "helvetica" , sans-serif;">m in order to update <b><span style="font-family: "courier new" , "courier" , monospace;">/dev/servoblaster</span></b> file<span style="font-family: "arial" , "helvetica" , sans-serif;"> thus controlling t<span style="font-family: "arial" , "helvetica" , sans-serif;">he servo speed and rota</span></span></span></span>t<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">ion </span>direction. </span><span style="font-family: "arial" , "helvetica" , sans-serif;">Here is the example of UR</span></span></span></span></span></span></span></span></span></span></span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">I <span style="font-family: "arial" , "helvetica" , sans-serif;">that </span>executes </span></span></span></span></span></span></span></span></span></span></span></span></span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><b><span style="font-family: "courier new" , "courier" , monospace;"><span style="font-family: "courier new" , "courier" , monospace;">echo<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span></span></span></b><span style="font-family: "courier new" , "courier" , monospace;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">command with Linux command </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">interpreter<span style="font-family: "arial" , "helvetica" , sans-serif;">:</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
<br />
<pre class="brush: java; title: ; notranslate" title="">to("exec:sh?args=-c%20%22echo%20{{servo.right.pin}}={{servo.right.speed.slow.fw}}%20%3E%20"
+ "/dev/servoblaster%20;%20echo%20{{servo.left.pin}}={{servo.left.speed.slow.fw}}%20%3E%20"
+ "/dev/servoblaster%22")
</pre>
<span style="font-family: "courier new" , "courier" , monospace;"><span style="font-family: "courier new" , "courier" , monospace;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">
</span></span></span></span></span>
<br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">All constant v<span style="font-family: "arial" , "helvetica" , sans-serif;">alues moved to <span style="font-family: "arial" , "helvetica" , sans-serif;">the</span> <a href="https://github.com/sergevas/bcbot/blob/master/bcbot/bcbot-robot/src/main/resources/bcbot.properties">properties</a> file<span style="font-family: "arial" , "helvetica" , sans-serif;">.<span style="font-family: "arial" , "helvetica" , sans-serif;"> After <span style="font-family: "arial" , "helvetica" , sans-serif;">substitution</span> of v<span style="font-family: "arial" , "helvetica" , sans-serif;">alu<span style="font-family: "arial" , "helvetica" , sans-serif;">es<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">:</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
<br />
<pre class="brush: java; title: ; notranslate" title="">exec:sh?args=-c "echo 0=162 > /dev/servoblaster ; echo 0=140 > /dev/servoblaster"<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span></span></span></span> </span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">The routes are called from CoAP resource<span style="font-family: "arial" , "helvetica" , sans-serif;">s </span></span>throug<span style="font-family: "arial" , "helvetica" , sans-serif;">h the proxy service <span style="font-family: "arial" , "helvetica" , sans-serif;">that </span>is created using Camel<span style="font-family: "arial" , "helvetica" , sans-serif;"> <a href="https://camel.apache.org/maven/camel-2.15.0/camel-core/apidocs/org/apache/camel/builder/ProxyBuilder.html">ProxyBuilder</a> class:</span></span></span></span></span></span></span></span></span></span></span></span></span></span>
<br />
<pre class="brush: java; title: ; notranslate" title="">public class BackwardResource extends CoapResource {
private static final Logger LOG = Logger.getLogger(ForwardResource.class);
private RobotMove robotMove;
public BackwardResource(String name, CamelContext camelContext) throws Exception {
super(name);
robotMove = new ProxyBuilder(camelContext).endpoint(ROBOT_MOVE_BACKWARD_ROUTE)
.build(RobotMove.class);
}
@Override
public void handlePUT(CoapExchange exchange) {
LOG.debug(format("Start handlde PUT for CoapExchange with text [%s]",
exchange.getRequestText()));
String robotSpeedMode = exchange.getRequestText();
LOG.debug(
format("Start Calling Camel route to move the robot backward with speed mode [%s]",
robotSpeedMode));
robotMove.move(robotSpeedMode);
LOG.debug("End calling Camel route...");
exchange.respond(CHANGED);
}
}</pre>
<h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Deployment <span style="font-family: "arial" , "helvetica" , sans-serif;">model</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></h3>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">T</span>he project is built and deployed<span style="font-family: "arial" , "helvetica" , sans-serif;"> in one click as an executable fat jar using <a href="https://maven.apache.org/plugins/maven-shade-plugin/">maven Shade Plugin</a><span style="font-family: "arial" , "helvetica" , sans-serif;">. <span style="font-family: "arial" , "helvetica" , sans-serif;">Linux serv<span style="font-family: "arial" , "helvetica" , sans-serif;">ice wrapper was created t<span style="font-family: "arial" , "helvetica" , sans-serif;">o<span style="font-family: "arial" , "helvetica" , sans-serif;"> <span style="font-family: "arial" , "helvetica" , sans-serif;">run <span style="font-family: "arial" , "helvetica" , sans-serif;">the robot soft<span style="font-family: "arial" , "helvetica" , sans-serif;">ware on <span style="font-family: "arial" , "helvetica" , sans-serif;">the <span style="font-family: "arial" , "helvetica" , sans-serif;">Raspberry</span> Pi<span style="font-family: "arial" , "helvetica" , sans-serif;">. The service <span style="font-family: "arial" , "helvetica" , sans-serif;">.sh file is creat<span style="font-family: "arial" , "helvetica" , sans-serif;">ed<span style="font-family: "arial" , "helvetica" , sans-serif;"> during th<span style="font-family: "arial" , "helvetica" , sans-serif;">e <span style="font-family: "courier new" , "courier" , monospace;"><b>deploy<span style="font-family: "arial" , "helvetica" , sans-serif;"> </span></b><span style="font-family: "arial" , "helvetica" , sans-serif;">maven phase <span style="font-family: "arial" , "helvetica" , sans-serif;">from <span style="font-family: "arial" , "helvetica" , sans-serif;">th<span style="font-family: "arial" , "helvetica" , sans-serif;">e <span style="font-family: "arial" , "helvetica" , sans-serif;">Apache Velocity <span style="font-family: "arial" , "helvetica" , sans-serif;"><a href="https://github.com/sergevas/bcbot/blob/master/bcbot/bcbot-robot/src/main/resources/bcbot-robot.sh.vm">template</a> <span style="font-family: "arial" , "helvetica" , sans-serif;"> </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>ev<span style="font-family: "arial" , "helvetica" , sans-serif;">e</span>ry t<span style="font-family: "arial" , "helvetica" , sans-serif;">ime <span style="font-family: "arial" , "helvetica" , sans-serif;">the</span> build process runs<span style="font-family: "arial" , "helvetica" , sans-serif;">.</span></span><br />
<h2>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">De<span style="font-family: "arial" , "helvetica" , sans-serif;">mo</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=7376621417571405711" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"></a><iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/9Z_Ox25CIJI/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/9Z_Ox25CIJI?feature=player_embedded" width="320"></iframe></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"> <span style="font-family: "arial" , "helvetica" , sans-serif;">I have recorded a short video <span style="font-family: "arial" , "helvetica" , sans-serif;">that demonstrat<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">es how the rob<span style="font-family: "arial" , "helvetica" , sans-serif;">o<span style="font-family: "arial" , "helvetica" , sans-serif;">t can be contr<span style="font-family: "arial" , "helvetica" , sans-serif;">olled remotely </span></span></span>using Copper CoAP user age<span style="font-family: "arial" , "helvetica" , sans-serif;">nt for </span>Firefox. <span style="font-family: "arial" , "helvetica" , sans-serif;">You can see <span style="font-family: "arial" , "helvetica" , sans-serif;">t</span>h<span style="font-family: "arial" , "helvetica" , sans-serif;">e robot <span style="font-family: "arial" , "helvetica" , sans-serif;">resources<span style="font-family: "arial" , "helvetica" , sans-serif;">:</span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhck4HD0tYyKKVLdQMHoR3c68RsXBy-UncZqC4r8Tn7qHe4wIMrfCTexp7sXIW0hzmtLN7sPSnkejI2HsfiikcX8oG-XAF5gmnEByhZba64FG9lXr0zRPEOzJmJnNpEL8Q8UlPWD58MGig/s1600/2016-02-28_003130.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="270" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhck4HD0tYyKKVLdQMHoR3c68RsXBy-UncZqC4r8Tn7qHe4wIMrfCTexp7sXIW0hzmtLN7sPSnkejI2HsfiikcX8oG-XAF5gmnEByhZba64FG9lXr0zRPEOzJmJnNpEL8Q8UlPWD58MGig/s400/2016-02-28_003130.png" width="400" /></a></div>
<div style="text-align: center;">
<br /></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">Currently</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"> only PUT CoAP<span style="font-family: "arial" , "helvetica" , sans-serif;"> method<span style="font-family: "arial" , "helvetica" , sans-serif;">s are supported by <span style="font-family: "arial" , "helvetica" , sans-serif;">the resource<span style="font-family: "arial" , "helvetica" , sans-serif;">s<span style="font-family: "arial" , "helvetica" , sans-serif;">. </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">A<span style="font-family: "arial" , "helvetica" , sans-serif;">s a message body, re<span style="font-family: "arial" , "helvetica" , sans-serif;">sources <span style="font-family: "arial" , "helvetica" , sans-serif;">expect a string with t<span style="font-family: "arial" , "helvetica" , sans-serif;">he f<span style="font-family: "arial" , "helvetica" , sans-serif;">ollowing </span></span></span></span>possible</span> valu<span style="font-family: "arial" , "helvetica" , sans-serif;">es<span style="font-family: "arial" , "helvetica" , sans-serif;">:</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><b>"SLOW"</b>, <b><span style="font-family: "arial" , "helvetica" , sans-serif;">"</span>MEDIUM<span style="font-family: "arial" , "helvetica" , sans-serif;">"</span> </b>and <b><span style="font-family: "arial" , "helvetica" , sans-serif;">"</span>FAS</b><span style="font-family: "arial" , "helvetica" , sans-serif;"><b>T"</b>. Th<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">ese </span>valu<span style="font-family: "arial" , "helvetica" , sans-serif;">es represent t<span style="font-family: "arial" , "helvetica" , sans-serif;">he robot speed modes. Th<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">e</span> <span style="font-family: "arial" , "helvetica" , sans-serif;">values </span>are prop<span style="font-family: "arial" , "helvetica" , sans-serif;">agated <span style="font-family: "arial" , "helvetica" , sans-serif;">as an input message payloa<span style="font-family: "arial" , "helvetica" , sans-serif;">d to Camel routes<span style="font-family: "arial" , "helvetica" , sans-serif;"> and used in content based rout<span style="font-family: "arial" , "helvetica" , sans-serif;">er EIP i<span style="font-family: "arial" , "helvetica" , sans-serif;">mplementation<span style="font-family: "arial" , "helvetica" , sans-serif;">:</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">
</span></span></span><br />
<pre class="brush: java; title: ; notranslate" title=""><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">from(ROBOT_MOVE_FORWARD_ROUTE)
.choice()
.when(bodyAs(String.class).isEqualToIgnoreCase(SERVO_SPEED_MODE_SLOW))
.to("exec:sh?args=-c%20%22echo%20{{servo.right.pin}}={{servo.right.speed.slow.fw}}%20%3E%20/dev/servoblaster"
+ "%20;%20echo%20{{servo.left.pin}}={{servo.left.speed.slow.fw}} %20%3E%20/dev/servoblaster%22")
.when(bodyAs(String.class).isEqualToIgnoreCase(SERVO_SPEED_MODE_MEDIUM))
.to("exec:sh?args=-c%20%22echo%20{{servo.right.pin}}={{servo.right.speed.medium.fw}}%20%3E%20/dev/servoblaster"
+ "%20;%20echo%20{{servo.left.pin}}={{servo.left.speed.medium.fw}}%20%3E%20/dev/servoblaster%22")"
.when(bodyAs(String.class).isEqualToIgnoreCase(SERVO_SPEED_MODE_FAST))
.to("exec:sh?args=-c%20%22echo%20{{servo.right.pin}}={{servo.right.speed.fast.fw}}%20%3E%20/dev/servoblaster"
+ "%20;%20echo%20{{servo.left.pin}}={{servo.left.speed.fast.fw}}%20%3E%20/dev/servoblaster%22")
.end().to("log:xyz.sergevas.iot.bcbot?level=DEBUG&showHeaders=true");</span></span></span></pre>
<h2 class="brush: java; title: ; notranslate" title="">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;">F</span>easibility <span style="font-family: "arial" , "helvetica" , sans-serif;">T</span>est</span></span></span></span></h2>
<div class="brush: java; title: ; notranslate" title="">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span class="" id="result_box" lang="en"><span class="hps">And here is</span> <span class="hps">a small</span> <span class="hps">test that can be</span> <span class="hps">considered successful :)</span>. <span class="hps">The efforts</span> <span class="hps">of my</span> <span class="hps">six-month</span> <span class="hps">son</span> <span class="hps">encouraged</span> <span class="hps">me to continue</span> <span class="hps">my work</span>.</span></span></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dxnceTVHpi1qjOiSaskDtBdeZiNFZrfXMEiW93H49-sqpWBife2bJhnHsBvCgwuemMOTEw7hl_6vnDDwoZXtQ' class='b-hbp-video b-uploaded' frameborder='0'></iframe><br />
<div class="brush: java; title: ; notranslate" style="text-align: center;" title="">
</div>
<pre class="brush: java; title: ; notranslate" title=""><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"> </span></span></span></pre>
<h2 style="text-align: center;">
<span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"><span style="font-family: "arial" , "helvetica" , sans-serif;"></span></span></span></h2>
</div>
Anonymoushttp://www.blogger.com/profile/04094315302192887515noreply@blogger.com0tag:blogger.com,1999:blog-7376621417571405711.post-86432740680748861762016-01-04T15:06:00.000+03:002018-02-14T14:02:28.948+03:00Eclipse Open IoT Challenge 2.0 - project beginning<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span id="docs-internal-guid-9574fe91-0f1d-4f74-dcc9-36718180ad24" style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">Hi! For the edition 2.0 of Eclipse Open IoT Challenge I'm trying to create a mobile robot based on principles of Cloud Robotics. The robot will be designed as a toy. It will demonstrate sophisticated behaviour and its main purpose is to stimulate a baby crawling development. </span></div>
<h4>
<span style="font-family: "arial" , "helvetica" , sans-serif; font-size: large;">Sample use case</span></h4>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span id="docs-internal-guid-9574fe91-0f1d-d038-54b0-bb2495feb333" style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">The robot is placed on the floor of the room. The user initiates the robot from the robot management web app. Robot starts the </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">"Search"</span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;"> behavior, trying to detect a baby (hereinafter - the Object) who plays, say, on a play rug. Robot detects the Object and starts the </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">"Approach"</span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;"> behavior. When the robot infers that the Object is found it starts the </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">"Found"</span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;"> behaviour: takes an image from camera and sends notification to the management web app. Robot stops near the Object and starts the </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">"Entertainment"</span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;"> behavior (plays music and shows funny smiles on LED panel) trying to capture the attention of the Object. If the robot determines that the distance to the Object starts to shorten (the baby tries to catch the robot), the robot starts the </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">"Stimulate"</span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;"> behaviour trying to increase the distance. If the robot detects that it is close to the obstacle from the opposite side, for example, to the room wall, the robot starts the </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">"Escape"</span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;"> behaviour: turns 90 degrees and begins to move forward.</span></div>
<span style="font-size: large;"><br /></span>
<br />
<h4>
<span style="font-family: "arial" , "helvetica" , sans-serif; font-size: large;">Architecture</span></h4>
<h3 dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-size: small;"><span style="background-color: transparent; color: black; font-family: "arial"; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;"></span></span></h3>
<div dir="ltr" id="docs-internal-guid-9574fe91-0f1e-1d59-1acd-9fc83dea8cd0" style="line-height: 1.656; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">The robot itself will implement only basic actions and commands, such as: </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">go forward</span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">, </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">stop</span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">, </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">turn right</span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">, </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">turn left</span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">, </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">play music</span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">, </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">take camera image</span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">, </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">measure distance</span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">, </span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">detect motion</span><span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">, etc. All the complex behavior will be implemented in the Cloud part of the solution. The robot will communicate with its "cloud brains" via CoAP protocol, providing several resources as a CoAP server. For example:</span></div>
<div dir="ltr" style="line-height: 1.656; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;"> </span><span style="background-color: transparent; color: black; font-family: "courier new"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">GET robot/sensor/distance/front </span></div>
<div dir="ltr" style="line-height: 1.656; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "courier new"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;"> GET robot/sensor/distance/rear</span></div>
<div dir="ltr" style="line-height: 1.656; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "courier new"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;"> GET robot/sensor/motion/left</span></div>
<div dir="ltr" style="line-height: 1.656; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "courier new"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;"> GET robot/sensor/motion/right</span></div>
<div dir="ltr" style="line-height: 1.656; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "courier new"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;"> PUT robot/move/forward</span></div>
<div dir="ltr" style="line-height: 1.656; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "courier new"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;"> PUT robot/move/backward</span></div>
<div dir="ltr" style="line-height: 1.656; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "courier new"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;"> PUT robot/action/playmuisic</span></div>
<div dir="ltr" style="line-height: 1.656; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "courier new"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;"> PUT robot/action/takeimage</span></div>
<div dir="ltr" style="line-height: 1.656; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "courier new"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;"> PUT robot/action/showsmileyfaces</span></div>
<div dir="ltr" style="line-height: 1.656; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">Sensor resources will be treated as observable resources, providing collected data as notifications for the CoAP client side in the Cloud.</span></div>
<span style="font-size: small;"></span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAp8SVIwew1r6l8IHuU26dHNY8Qm03YrnLMhEgiIoDSkWv0tbKT50pYWr0oK8KOyV1bujvQzdoPjXMA0VC7Orw8QleYCtpYgFQnbaA4AhYCNq2tEwajt8633_JVN1_6dSHBqkogdaWRp0/s1600/eiotc_2_0_component_view.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAp8SVIwew1r6l8IHuU26dHNY8Qm03YrnLMhEgiIoDSkWv0tbKT50pYWr0oK8KOyV1bujvQzdoPjXMA0VC7Orw8QleYCtpYgFQnbaA4AhYCNq2tEwajt8633_JVN1_6dSHBqkogdaWRp0/s640/eiotc_2_0_component_view.png" width="640" /></a></div>
<span style="font-size: small;"></span><br />
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-size: large;"><b><span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: 400; vertical-align: baseline;"><br /></span></b></span></div>
<div dir="ltr" id="docs-internal-guid-9574fe91-0f1f-22f3-2933-0722e58dc494" style="line-height: 1.656; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-size: large;"><b><span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: 400; vertical-align: baseline;">Components of the solution</span><span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">:</span></b></span></div>
<ol style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.656; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">Two wheeled autonomous battery powered mobile robot based on Raspberry Pi, connected to the wireless router via Wi-Fi wireless USB Adapter Dongle. Several sensors, camera module, LED matrix, audio amplifier and speakers will be mounted on the robot chassis. Robot software will be deployed on RPi as a fat jar, containing Rhiot project (https://github.com/rhiot/rhiot) components such as Pi4j component, Webcam component and Apache Camel components (CoAP component, Exec component, Netty component). Custom Camel routes and processors will be implemented for sensor data collection and camera image capture as well as for the robot servos control, audio files uploading and playback and LED matrix control. The robot will receive control commands from the Cloud client via CoAP protocol and push collected sensor data to the Cloud in form of observable resources notifications.</span></div>
</li>
</ol>
<br />
<br />
<div dir="ltr" style="line-height: 1.656; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">The following components will be deployed on a single DigitalOcean Ubuntu 14.04 droplet, where each component (except the 5th one) will be run inside its own Docker container as a microservice. These components will interact with each other using the functionality of Apache Camel via HTTP-based endpoints.</span></div>
<br />
<ol style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.656; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">CoAP Gateway component, based on Apache Camel and Californium. Works as a CoAP-HTTP cross-proxy. This component will provide RESTful API to enable other components to interact with the robot.</span></div>
</li>
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.656; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">Robot Behaviour Component, based on Apache Camel and custom Java code. The component will implement the robot behaviour using behavior-based robotics paradigm (BBR) and Subsumption architecture.</span></div>
</li>
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.656; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">Management Component implemented as a RESTful API plus single-page web client application. The purpose of this Component is to provide the end-user management tools to manual robot control, to configure of certain types of robot behavior (for example, to create playlist with children's songs for uploading, to set up symbol sequences for the robot LED display), to view history of perceptions and actions of the robot, stored in the Datastore component. Additionally, this component will utilize WebSocket protocol to display the current status of the robot, events of the robot state change and displaying the current image from the robot camera.</span></div>
</li>
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.656; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">Data-store component, based on PostgreSQL database. The component persists time series robot sensor measurement data, camera images, the robot behavior history data, notifications event data and current state of the robot.</span></div>
</li>
</ol>
<br />
<span style="background-color: transparent; color: black; font-family: "arial"; font-size: 18.666666666666664px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline;">Currently I'm working on the robot hardware/software part.</span>Anonymoushttp://www.blogger.com/profile/04094315302192887515noreply@blogger.com0tag:blogger.com,1999:blog-7376621417571405711.post-61592401211302286012015-01-27T00:43:00.001+03:002018-02-14T14:07:29.504+03:00Eclipse Open IoT Challenge - project inception<div style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">This is a description of my proposal for home automation IoT solution.</span></div>
<h4>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Case</span></h4>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">There are <a href="http://www.valtecsrl.com/image/groups/4200/VLF-R-Is.jpg" rel="nofollow" target="_blank">water meters</a> with impulse transmitting in apartments of a typical apartment building.</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Meters are already built into the apartments’ water system (two meters per flat - one for hot water and one for cold water), but their impulse transmitting outputs are not in use at the moment. Owners of apartments have to take readings of water consumption from meters and manually submit them through the website or mobile app to form utility bills on a per month basis.</span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<h4 style="line-height: normal;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">Project objectives</span></h4>
<span style="background-color: transparent; color: black; font-family: "arial"; font-variant: normal; vertical-align: baseline; white-space: pre-wrap;">The goal of my project</span><span style="background-color: transparent; color: black; font-family: "arial"; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> </span><span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">is to implement distributed system to automatic measure the flow of water used by household needs.</span><br />
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span>
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">The resulting raw measurement data will be published periodically into the Cloud infrastructure, through IoT gateway using MQTT protocol. The Cloud infrastructure includes MQTT message broker, stream processing engine, NoSQL datastore, UI component for data visualization and HTTP bot for monthly automatic data sending to the utilities website on behalf of the user (apartments owner).</span></div>
<b style="font-weight: normal;"><br /></b>
<br />
<h4 style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: "arial" , "helvetica" , sans-serif;">Component view of the system</span></h4>
<div style="text-align: center;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGslQMZyDvlaoYIgc1mVFKwhltjT0Zs7Jza6xe_YsZnhjswbeN1J8auwasbALLDLHCu5AVJsjfLfL8y17Hl2g9Y2qkCEd8GK6c6w5FqPEFqHrmW19iVsBUCF-w8z_oD6OXRo3WsIB-j0U/s1600/EIotC_component_view.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="435" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGslQMZyDvlaoYIgc1mVFKwhltjT0Zs7Jza6xe_YsZnhjswbeN1J8auwasbALLDLHCu5AVJsjfLfL8y17Hl2g9Y2qkCEd8GK6c6w5FqPEFqHrmW19iVsBUCF-w8z_oD6OXRo3WsIB-j0U/s1600/EIotC_component_view.png" width="640" /></a></div>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<ol style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><i>Standalone battery powered component (remote sensor)</i></span><span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, includes <a href="http://www.atmel.com/devices/ATMEGA168A.aspx" target="_blank">microcontroller</a> and wireless serial Bluetooth RF Transceiver Module. Impulse transmitting outputs of both water meters are connected to the component, which counts the number of impulses and stores its current values in EEPROM of the microcontroller. The component will utilize USART of the microcontroller to communicate with Transceiver Module.</span></div>
</li>
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><i>Raspberry Pi component</i></span><span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, running Raspbian OS. RPI has two wireless USB dongles connected: WiFi dongle and Bluetooth dongle. <a href="https://eclipse.org/kura/" target="_blank">Eclipse Kura</a> is installed on the device and will be used as IoT gateway. OSGi bundles will be developed:</span></div>
</li>
</ol>
<ul style="margin-bottom: 0pt; margin-top: 0pt;">
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">for wireless serial communication via RFCOMM protocol with remote sensor in polling mode for data requests, since the sensor’s Bluetooth RF Transceiver Module runs in slave mode;</span></div>
</li>
<li dir="ltr" style="background-color: transparent; color: black; font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"><div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">for data preprocessing (adds timestamps to received data, water meter uid, etc.) and message publishing via MQTT protocol into the Cloud infrastructure.</span></div>
</li>
</ul>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> Bundles will be implemented as configurable components.</span><br />
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<span style="color: black; font-family: "arial"; line-height: 1.15; vertical-align: baseline; white-space: pre-wrap;">The following components will be deployed on two <a href="https://aws.amazon.com/marketplace/pp/B00KWBZVK6" target="_blank">RHEL-7.0 t2.micro type Amazon EC2</a> instances: </span><span style="font-family: "arial"; line-height: 1.15; white-space: pre-wrap;">first instance will run components 3, 4 and second instance - components 5, 6.</span><br />
<span style="font-family: "arial"; line-height: 1.15; white-space: pre-wrap;"><br /></span>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">3. </span><span style="background-color: transparent; color: black; font-family: "arial"; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><i>Broker component</i></span><span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, based on <a href="http://mosquitto.org/" target="_blank">Mosquitto MQTT Broker</a>. This component has at least two preconfigured topics for data messages from both water meters.</span><br />
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">4. </span><span style="background-color: transparent; color: black; font-family: "arial"; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><i>Stream processing component</i></span><span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, based on <a href="https://storm.apache.org/" target="_blank">Apache Storm</a> framework. The component will run topology, which subscribes to the Broker component topics, consumes data messages from the broker, processes and sends measurement data to the Datastore component using exactly-once delivery semantics.</span><br />
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">In addition, the Stream processing component will provide </span><span style="background-color: transparent; color: black; font-family: "arial"; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><i>real time data analysis</i></span><span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">. Concretely, and Outlier detection functionality will be implemented (most likely based on Extreme Value Analysis). This functionality will be used as an </span><span style="background-color: transparent; color: black; font-family: "arial"; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><i>water leakage detection and alerting system</i></span><span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">. IM alerts will be sent to the user using XMPP protocol and stored in the Datastore component.</span><br />
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span></div>
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">5. </span><span style="background-color: transparent; color: black; font-family: "arial"; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><i>Datastore component</i></span><span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">, based on <a href="http://www.mongodb.org/" target="_blank">MongoDB</a> database. The component persists time series measurement data, notifications and alerts event data and current state of the Stream processing component if necessary.</span></div>
<br />
<div dir="ltr" style="line-height: 1.15; margin-bottom: 0pt; margin-top: 0pt;">
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">6. </span><span style="background-color: transparent; color: black; font-family: "arial"; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><i>UI & Scheduling component</i></span><span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">. Will be implemented as <a href="http://projects.spring.io/spring-boot/" target="_blank">Spring Boot</a> standalone application. The component will deliver real-time and historical data to the user, providing online visualization, reporting and notification functionality through the Server Sent Events, HTML5 and d3.js framework. Additionally, the component will contain HTTP bot. A task will be executed on a monthly basis to run the HTTP bot for automatic submitting of total flow rate values for both meters to the utilities web portal on behalf of the user.</span><br />
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"><br /></span>
<span style="background-color: transparent; color: black; font-family: "arial"; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">I'll try to set up a kind of incremental development process while working on the project. So the first iteration objective: install hardware parts and start to receive meter data in Kura.</span></div>
Anonymoushttp://www.blogger.com/profile/04094315302192887515noreply@blogger.com0