blob: c5cd786b97c5a0be81fe9ffe1172656307cefe49 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>iot.eclipse.org &mdash; Protocols</title>
<meta name="description" content="iot.eclipse.org is also a window on the protocols of choice for IoT and M2M solutions development: MQTT, CoAP, Lightweight M2M, ETSI M2M ...">
<meta name="author" content="Eclipse.org">
<link rel="author" href="humans.txt" />
<!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<!-- Custom Fonts -->
<link href='http://fonts.googleapis.com/css?family=Lato:300,400' rel='stylesheet' type='text/css'>
<link href='http://fonts.googleapis.com/css?family=Lekton:400,700' rel='stylesheet' type='text/css'>
<!-- Le styles -->
<link href="/css/bootstrap/bootstrap.min.css" rel="stylesheet">
<link href="/css/theme.css" rel="stylesheet">
<link href="/css/bootstrap/bootstrap-responsive.min.css" rel="stylesheet">
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-594061-11']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script');
ga.type = 'text/javascript';
ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body>
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span>
</a> <a class="brand" href="/index.html">iot.eclipse.org</a>
<div class="nav-collapse">
<ul class="nav">
<li><a href="/frameworks.html">Services &amp; Frameworks</a>
</li>
<li><a href="/protocols.html">Protocols</a>
</li>
<li><a href="/tools.html">Tools</a>
</li>
<li><a href="/community.html">Community</a>
</li>
<li><a href="/ecosystem.html">Ecosystem</a>
</li>
<li><a href="/demo">Live demo</a>
</li>
<li class="divider-vertical"></li>
</ul>
<ul class="nav pull-right">
<li>
<div style="padding-top: 20px;">
<div class="g-plusone" data-href="http://iot.eclipse.org/"></div>
</div>
</li>
</ul>
</div>
<!--/.nav-collapse -->
</div>
</div>
</div>
<!-- Place this tag after the last +1 button tag. -->
<script type="text/javascript">
(function() {
var po = document.createElement('script');
po.type = 'text/javascript';
po.async = true;
po.src = 'https://apis.google.com/js/plusone.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(po, s);
})();
</script>
<div class="container">
<div class="well">
<div class="page-header">
<h1>
MQTT Interop Test Day Report
<small>March 17, 2014<br/>Burlingame, California</small>
</h1> Hosted by: Eclipse IoT Working Group, <a href="http://iot.eclipse.org/">iot.eclipse.org</a>
<br/> Report prepared by: Ian Skerrett, Eclipse Foundation
</div>
<div class="lead">
<p>The first MQTT Interop Test Day was held March 17, 2014 in Burlingame, CA. A total of 15 different products and organizations participated in the event, resulting in 65 different test pairing between the different products.</p>
<p>The purpose of the first test day was to provide feedback and validation on the proposed OASIS MQTT specification and to provide initial feedback to the participants on their implementation of the MQTT 3.1.1 specification. Overall, the participants declared the event to be a success.</p>
</div>
</div>
<h2>Introduction to MQTT</h2>
<p>MQTT is a messaging protocol that has been developed specifically for the Internet of Things. It was designed as an extremely lightweight publish/subscribe messaging transport. It is useful for connections with remote locations where a small code footprint is required and/or network bandwidth is at a premium. For example, it has been used in sensors communicating to a broker via satellite link, over occasional dial-up connections with healthcare providers, and in a range of home automation and small device scenarios.</p>
<p>MQTT was initially developed by IBM and Eurotech. In November 2012, IBM announced it would contribute the client implementation of MQTT to the Eclipse Paho open source project. In March 2013, IBM, Eurotech and others began the standardization process of MQTT within the OASIS standards group. The OASIS Technical Committee has released a <a href="https://www.oasis-open.org/committees/documents.php">draft specification</a> of MQTT 3.1.1. The completion of the standardization process is expected in the Fall 2014, resulting in the MQTT 3.1.1 specification being published. </p>
<h2>Participants in the Test Day</h2>
<p>The following companies and products participated in the testing day:</p>
<ul>
<li>Eurotech</li>
<li>2lemetry Platform</li>
<li>Sierra Wireless AirVantage</li>
<li>ClearBlade</li>
<li>HiveMQ</li>
<li>WSO2 ESB and WSO2 Message Broker</li>
<li>JBoss A-MQ, Apache ActiveMQ, Apache Camel</li>
<li>Litmus Automation Loop</li>
<li>Xively</li>
<li>IBM Node-RED</li>
<li>Software AG Universal Messaging</li>
<li>Eclipse Kura</li>
<li>Eclipse Paho</li>
<li>IBM MessageSight</li>
<li>RabbitMQ</li>
<li>OpenPicus</li>
</ul>
<h2>Testing Approach</h2>
<p>Each product was identified as being a MQTT client or MQTT broker. A schedule was developed to allow for testing between the different MQTT clients and brokers. Each testing pair were allocated approximately 30 minutes to complete the test. Most products participated in at least 5-6 test pairings.</p>
<p>Each participating product were provided advanced access to test clients and test brokers. The code for this test clients and brokers is available at <a href="https://wiki.eclipse.org/Interop_Testing_Plan">https://wiki.eclipse.org/Interop_Testing_Plan</a>
</p>
<h2>Test Plan</h2>
<p>Each test pairing were asked to complete the following tests:</p>
<ol>
<li>Connect to an MQTT server using the MQTT 3.1.1 standard (connect packet has protocol name MQTT and version 4)</li>
<li>Send and receive messages with all three QoS levels (0, 1 and 2).</li>
<li>Receive messages queued up for a non-cleansession client on reconnect. Each QoS should be sent and received. Queueing up QoS 0 messages is optional.</li>
<li>Set and receive retained messages at each QoS. Retained messages are set by publishing with the retained flag set. They are received by subscribing to a matching topic filter.</li>
<li>Unsetting retained messages. Sending publish with zero length payload and retained flag should remove any existing retained message for that topic.</li>
<li>Setting and receiving will messages. Ending the session (for example by closing the socket) without sending a disconnect should cause a will message to be sent by the server.</li>
<li>More than one subscription matching a publication topic. A server may send one message per matching subscription each at the QoS corresponding to the subscription, or one message for the publication at the highest QoS.</li>
<li>Keepalive processing. When no other messages are being sent/received, PINGs should be. For example, set the keepalive interval to 10 seconds, connect and send no messages. The session should be kept alive by PINGs from the client.</li>
</ol>
<p>Optional Tests</p>
<ol>
<li>0-length clientid. The server may accept 0-length clientids. If so, the connect must be with cleansession True. Connecting with cleansession=False should be rejected.</li>
<li>$topics. Subscribing to a wildcard such as # should not return any topics starting with $. This is to enable $ topics to be used for server specific purposes.</li>
<li>Subscribe failure. Subscribe may now return 0x80 if it has failed for any reason. That reason would be server specific.</li>
</ol>
<h2>Test Results</h2>
<p>Overall, 65 test pairings were reported. A total of 55% of these test pairings were considered successful. This is considered a good result considering the maturity of the specification, the variety of implementations of the 3.1.1 specification and the fact this was the first time for doing the interoperability testing.</p>
<p>Detailed test results will not be reported since the purpose of the session was to not certify an implementation. The findings of each test pairing will be used by each participant to ensure future conformance to the OASIS MQTT specification. Overall, the results will be used to validate the MQTT specification and standardization.</p>
<h2>Quotes from Participants</h2>
<h3><i class="icon-arrow-right"></i> 2lemetry</h3>
<p>&quot;As a company that relies on interoperability with MQTT, the Eclipse Interop Test Day provided a great way to validate our services with other clients,&quot; said Chris Chiappone, CTO of 2lemetry. &quot;Eclipse also did a great job creating a conformance test suite prior to the event, which helped us successfully pre-test client and server compliance.”</p>
<h3><i class="icon-arrow-right"></i> Xively</h3>
<p>“We believe that standardization and interoperability are critical to accelerating innovation in today’s early-stage Internet of Things market,” said Mario Finocchiaro, Director of Xively Business Development for LogMeIn. “The inaugural MQTT interoperability event proved to be a great opportunity for collaboration between emerging IoT leaders, while showing promise for encouraging and empowering broader commercial IoT adoption. Congratulations to Eclipse for bringing it all together.”</p>
<h3><i class="icon-arrow-right"></i> ClearBlade</h3>
<p>“The MQTT Interop Day was extremely valuable in bringing together both specification and implementation leaders, and reconfirming our objectives as a unified community. The ClearBlade enterprise platform was built on the foundation and belief that strong open standards and interoperation create enterprise value, and that is achieved with this level of industry collaboration.” </p>
<h3><i class="icon-arrow-right"></i> Red Hat</h3>
<p>&quot;The Internet-of-Things (IoT) will require open standards to make it a reality. That is why Red Hat JBoss A-MQ, an open source enterprise message broker, supports open protocol standards such as AMQP 1.0 and MQTT. Red Hat has demonstrated its commitment to the MQTT standard by successfully taking part in the MQTT Interoperability Test Day at EclipseCon this year. JBoss A-MQ supports MQTT across TCP/TLS and WebSockets, and allows for an MQTT client to interoperate with other clients connected to JBoss A-MQ, regardless of the protocol that client is using.” - Rob Davies, director of software engineering, Red Hat</p>
<h3><i class="icon-arrow-right"></i> Eurotech</h3>
<p>“It has been really exciting to see so many companies investing in high quality MQTT implementations. The interoperability test has been a huge success and is a testament to how quickly the community is growing around this IoT protocol. We’re looking forward to completing the MQTT standardization process within the OASIS standards body and continuing the comprehensive activities within the IoT Working Group of the Eclipse Foundation. With Eurotech there at the very beginning of the protocol definition, it’s gratifying to see acceptance building so quickly now as MQTT helps to enable the Internet of Things.”</p>
<h3><i class="icon-arrow-right"></i> IBM</h3>
<p>"The mix of MQTT technologies represented, ranging from open source to commercial, and the successes achieved at the event demonstrate the vibrancy of the MQTT ecosystem and means we will be well positioned as we move toward a ratified standard. Interoperability of technology in this space is vital for the Internet of Things ecosystem." - Dave Locke, IBM senior inventor and co-lead of the Eclipse Paho project.</p>
<h2>Conclusion</h2>
<p>The MQTT Interop Test Day was considered an overall success in achieving the goals and purpose. The consensus of the group was to run a future Test Day later in 2014 to validate the final MQTT 3.1.1 specification.</p>
<hr>
<footer>
<div class="container">
<div class="row">
<div class="col-md-6">
<nav>
<ul class="list-inline menu dropdown">
<li><a href="/getting-started">Getting Started</a>
</li>
<li><a href="#" class="dropdown-toggle" data-toggle="dropdown">Technology</a>
<ul class="dropdown-menu" role="menu">
<li><a href="/standards">Standards</a>
</li>
<li><a href="/frameworks">Services &amp; Frameworks</a>
</li>
<li><a href="/projects">All the projects</a>
</li>
<li role="separator" class="divider"></li>
<li><a href="/case-studies">Case Studies</a>
</ul>
</li>
<li><a href="#" class="dropdown-toggle" data-toggle="dropdown">Community</a>
<ul class="dropdown-menu" role="menu">
<li><a href="/resources">Resources</a>
</li>
<li><a href="/news">News</a>
</li>
<li><a href="/events">Events</a>
</li>
</ul>
</li>
<li><a href="/working-group">Working Group</a>
</li>
</ul>
</nav>
<div class="socials">
<!-- <a href="#" class="social-facebook">&nbsp;</a> -->
<a href="https://twitter.com/EclipseIoT" class="social-twitter">&nbsp;</a>
<a href="https://www.youtube.com/playlist?list=PLy7t4z5SYNaRorMpk1txiehpkyeI0JLn-" class="social-youtube">&nbsp;</a>
<!-- <a href="#" class="social-share">&nbsp;</a> -->
</div>
</div>
<div class="col-md-6">
<p class="copyright">Copyright © 2016 The Eclipse Foundation. All Rights Reserved.</p>
</div>
</div>
</div>
</footer>
<div id="contact-modal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="contact-label" aria-hidden="true" style="display: none;"></div>
</div>
<!-- /container -->
<!-- JS is at the end of the document so the pages load faster -->
<script src="js/jquery.js"></script>
<script src="js/bootstrap/bootstrap.min.js"></script>
<script src="js/index.js"></script>
</body>
</html>