|  | <!DOCTYPE html> | 
|  | <html lang="en-us"> | 
|  |  | 
|  | <head> | 
|  | <meta charset="utf-8"> | 
|  | <meta name="robots" content="all,follow"> | 
|  | <meta name="googlebot" content="index,follow,snippet,archive"> | 
|  | <meta name="viewport" content="width=device-width, initial-scale=1"> | 
|  |  | 
|  | <title>What is new & noteworthy in Hono? :: Eclipse Hono™</title> | 
|  | <meta name="author" content="The Eclipse Hono Project" /> | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | <meta name="description" content="Information about changes in recent Hono releases. Includes new features, fixes, enhancements and API changes."> | 
|  |  | 
|  | <meta name="generator" content="Hugo 0.81.0" /> | 
|  |  | 
|  |  | 
|  | <link href='//fonts.googleapis.com/css?family=Roboto:400,100,100italic,300,300italic,500,700,800' rel='stylesheet' type='text/css'> | 
|  |  | 
|  |  | 
|  | <link rel="stylesheet" href="//use.fontawesome.com/releases/v5.11.2/css/all.css"> | 
|  | <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> | 
|  |  | 
|  |  | 
|  | <link href="/hono/css/animate.css" rel="stylesheet"> | 
|  |  | 
|  |  | 
|  |  | 
|  | <link href="/hono/css/style.hono.css" rel="stylesheet" id="theme-stylesheet"> | 
|  |  | 
|  |  | 
|  |  | 
|  | <link href="/hono/css/custom.css" rel="stylesheet"> | 
|  |  | 
|  |  | 
|  |  | 
|  | <!--[if lt IE 9]> | 
|  | <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> | 
|  | <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> | 
|  | <![endif]--> | 
|  |  | 
|  |  | 
|  |  | 
|  | <link rel="apple-touch-icon" sizes="180x180" href="/hono/favicon/apple-touch-icon.png"> | 
|  | <link rel="icon" type="image/png" sizes="48x48" href="/hono/favicon/favicon-48x48.png"> | 
|  | <link rel="icon" type="image/png" sizes="32x32" href="/hono/favicon/favicon-32x32.png"> | 
|  | <link rel="icon" type="image/png" sizes="16x16" href="/hono/favicon/favicon-16x16.png"> | 
|  | <link rel="manifest" href="/hono/favicon/site.webmanifest"> | 
|  | <link rel="mask-icon" href="/hono/favicon/safari-pinned-tab.svg" color="#5bbad5"> | 
|  | <link rel="shortcut icon" href="/hono/favicon/favicon.ico"> | 
|  | <meta name="msapplication-TileColor" content="#da532c"> | 
|  | <meta name="msapplication-config" content="/hono/favicon/browserconfig.xml"> | 
|  | <meta name="theme-color" content="#ffffff"> | 
|  |  | 
|  |  | 
|  | <link href="/hono/css/owl.carousel.css" rel="stylesheet"> | 
|  | <link href="/hono/css/owl.theme.css" rel="stylesheet"> | 
|  |  | 
|  |  | 
|  | <link rel="alternate" href="/hono/index.xml" type="application/rss+xml" title="Eclipse Hono&trade;"> | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | <meta property="og:locale" content="en_us"> | 
|  | <meta property="og:site_name" content="Eclipse Hono&trade;"> | 
|  | <meta property="og:title" content="What is new & noteworthy in Hono?"> | 
|  | <meta property="og:type" content="website"> | 
|  | <meta property="og:url" content="https://www.eclipse.org/hono/release-notes/" /> | 
|  | <meta property="og:description" content="Information about changes in recent Hono releases. Includes new features, fixes, enhancements and API changes."> | 
|  | <meta property="og:image" content="https://www.eclipse.org/hono/img/sharing-default.png"> | 
|  | <meta property="og:image:type" content="image/png"> | 
|  |  | 
|  |  | 
|  |  | 
|  | <meta property="og:image:width" content="1655"> | 
|  | <meta property="og:image:height" content="827"> | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | <meta name="twitter:card" content="summary"> | 
|  | <meta name="twitter:site" content="@EclipseHono"> | 
|  | <meta name="twitter:title" content="What is new & noteworthy in Hono?"> | 
|  |  | 
|  | <meta name="twitter:image" content="https://www.eclipse.org/hono/img/sharing-default.png"> | 
|  |  | 
|  | <meta name="twitter:description" content="Information about changes in recent Hono releases. Includes new features, fixes, enhancements and API changes."> | 
|  |  | 
|  |  | 
|  | </head> | 
|  |  | 
|  |  | 
|  | <body> | 
|  |  | 
|  | <div id="all"> | 
|  |  | 
|  | <header> | 
|  |  | 
|  | <div class="navbar-affixed-top" data-spy="affix" data-offset-top="200"> | 
|  |  | 
|  | <div class="navbar navbar-default yamm" role="navigation" id="navbar"> | 
|  |  | 
|  | <div class="container"> | 
|  | <div class="navbar-header"> | 
|  | <a class="navbar-brand home" href="/hono/"> | 
|  | <img src="https://www.eclipse.org/hono/img/HONO-Logo_Bild-Wort_quer-s-310x120px.svg" alt="What is new & noteworthy in Hono? logo" class="logo"> | 
|  | <span class="sr-only">What is new & noteworthy in Hono? - go to homepage</span> | 
|  | </a> | 
|  | <div class="navbar-buttons"> | 
|  | <button type="button" class="navbar-toggle btn-template-main" data-toggle="collapse" data-target="#navigation"> | 
|  | <span class="sr-only">Toggle Navigation</span> | 
|  | <i class="fas fa-align-justify"></i> | 
|  | </button> | 
|  | </div> | 
|  | </div> | 
|  |  | 
|  |  | 
|  | <div class="navbar-collapse collapse" id="navigation"> | 
|  | <ul class="nav navbar-nav navbar-right"> | 
|  |  | 
|  |  | 
|  |  | 
|  | <li class="dropdown"> | 
|  |  | 
|  | <a href="/hono/getting-started/">Getting started</a> | 
|  |  | 
|  | </li> | 
|  |  | 
|  |  | 
|  | <li class="dropdown"> | 
|  |  | 
|  | <a href="/hono/docs/">Documentation</a> | 
|  |  | 
|  | </li> | 
|  |  | 
|  |  | 
|  | <li class="dropdown"> | 
|  |  | 
|  | <a href="/hono/downloads/">Download</a> | 
|  |  | 
|  | </li> | 
|  |  | 
|  |  | 
|  | <li class="dropdown"> | 
|  |  | 
|  | <a href="/hono/sandbox/">Sandbox</a> | 
|  |  | 
|  | </li> | 
|  |  | 
|  |  | 
|  | <li class="dropdown"> | 
|  |  | 
|  | <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Community <span class="caret"></span></a> | 
|  | <ul class="dropdown-menu"> | 
|  |  | 
|  | <li><a href="/hono/community/contributing/">Contributing</a></li> | 
|  |  | 
|  | <li><a href="/hono/community/presentations/">Resources</a></li> | 
|  |  | 
|  | <li><a href="/hono/community/get-in-touch/">Get in Touch</a></li> | 
|  |  | 
|  | <li><a href="/hono/community/road-map/">Road Map</a></li> | 
|  |  | 
|  | <li><a href="/hono/community/thankyou/">Thank you</a></li> | 
|  |  | 
|  | </ul> | 
|  |  | 
|  | </li> | 
|  |  | 
|  | </ul> | 
|  | </div> | 
|  |  | 
|  |  | 
|  | <div class="collapse clearfix" id="search"> | 
|  |  | 
|  | <form class="navbar-form" role="search"> | 
|  | <div class="input-group"> | 
|  | <input type="text" class="form-control" placeholder="Search"> | 
|  | <span class="input-group-btn"> | 
|  |  | 
|  | <button type="submit" class="btn btn-template-main"><i class="fas fa-search"></i></button> | 
|  |  | 
|  | </span> | 
|  | </div> | 
|  | </form> | 
|  |  | 
|  | </div> | 
|  |  | 
|  |  | 
|  | </div> | 
|  | </div> | 
|  |  | 
|  |  | 
|  | </div> | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | </header> | 
|  |  | 
|  | <div id="heading-breadcrumbs"> | 
|  | <div class="container"> | 
|  | <div class="row"> | 
|  | <div class="col-md-12"> | 
|  | <h1>What is new & noteworthy in Hono?</h1> | 
|  | </div> | 
|  | </div> | 
|  | </div> | 
|  | </div> | 
|  |  | 
|  |  | 
|  | <div id="content"> | 
|  |  | 
|  |  | 
|  | <div class="container"> | 
|  |  | 
|  | <div class="row"> | 
|  |  | 
|  | <div class="col-md-12"> | 
|  |  | 
|  | <div> | 
|  | <h2 id="180-not-released-yet">1.8.0 (not released yet)</h2> | 
|  | <h3 id="new-features">New Features</h3> | 
|  | <ul> | 
|  | <li>The CoAP adapter now supports authentication of client certificates using ECDSA based cipher suites.</li> | 
|  | <li>The JDBC-based device registry implementation now supports the automatic creation of the database schema, both for | 
|  | device registration and tenant data. This is especially useful for experimental setups where an embedded database, | 
|  | such <a href="http://www.h2database.com/html/features.html#embedded_databases">as H2 provides</a>, is sufficient. To enable | 
|  | automatic schema creation, activate the application profile <code>create-schema</code>.</li> | 
|  | <li>Hono’s components now support configuration of supported TLS cipher suites. The cipher suites can be configured | 
|  | separately for both the endpoints exposed by the components as well as the clients used for accessing service | 
|  | endpoints exposed by other components. Please refer to the corresponding admin guides for details regarding the | 
|  | corresponding configuration variables.</li> | 
|  | <li>Hono now supports <em>auto-provisioning</em> of gateways. For more information please refer to the | 
|  | <a href="https://www.eclipse.org/hono/docs/concepts/device-provisioning/#automatic-gateway-provisioning">Gateway Provisioning</a> | 
|  | concept and to the <a href="https://www.eclipse.org/hono/docs/api/management#/tenants/createTenant">Device Registry Management API</a> | 
|  | on how to configure a tenant’s trusted CA authority for that.</li> | 
|  | </ul> | 
|  | <h3 id="fixes--enhancements">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The CoAP adapter did not correctly track the time it took to forward a command message to a device. This has been fixed.</li> | 
|  | <li>Sending requests using the Hono AMQP request-response client erroneously increased the <code>hono.downstream.timeout</code> metric. | 
|  | This has been fixed.</li> | 
|  | <li>Support for uplink messages from the Embedded LNS on MultiTech gateways.</li> | 
|  | <li>The <em>hono.connections.attempts</em> metric has been extended with a <code>cipher-suite</code> tag which contains the name of the | 
|  | cipher suite that is used in a device’s attempt to establish a TLS based connection to an adapter.</li> | 
|  | <li>The Quarkus based Command Router native image failed to start an embedded cache that was configured to persist data | 
|  | to the local file system. This has been fixed.</li> | 
|  | <li>The delivery of a command message sent to an AMQP device potentially didn’t get settled if the connection to the | 
|  | AMQP device got disconnected. This has been fixed.</li> | 
|  | <li>The Prometheus based resource limit checks' performance has been improved. This should result in considerably less | 
|  | load on the Prometheus server when failing over all of a crashed/stopped adapter instance’s device connections.</li> | 
|  | <li>The Hono component container images now contain the <em>Gson</em> library which is required by the Jaeger client for | 
|  | processing sampling strategy configuration retrieved from the Jaeger Collector.</li> | 
|  | </ul> | 
|  | <h3 id="deprecations">Deprecations</h3> | 
|  | <ul> | 
|  | <li>The <code>org.eclipse.hono.client.ApplicationClientFactory</code>, <code>org.eclipse.hono.client.AsyncCommandClient</code> and | 
|  | <code>org.eclipse.hono.client.CommandClient</code> classes have been deprecated. Client code should use | 
|  | <code>org.eclipse.hono.application.client.ApplicationClient</code> instead.</li> | 
|  | </ul> | 
|  | <h2 id="173">1.7.3</h2> | 
|  | <h3 id="fixes--enhancements-1">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The Hono component container images now contain the <em>Gson</em> library which is required by the Jaeger client for | 
|  | processing sampling strategy configuration retrieved from the Jaeger Collector.</li> | 
|  | </ul> | 
|  | <h2 id="172">1.7.2</h2> | 
|  | <h3 id="fixes--enhancements-2">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The Quarkus based Command Router native image failed to start an embedded cache that was configured to persist data | 
|  | to the local file system. This has been fixed.</li> | 
|  | <li>The delivery of a command message sent to an AMQP device potentially didn’t get settled if the connection to the | 
|  | AMQP device got disconnected. This has been fixed.</li> | 
|  | </ul> | 
|  | <h2 id="171">1.7.1</h2> | 
|  | <h3 id="fixes--enhancements-3">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The CoAP adapter did not correctly track the time it took to forward a command message to a device. This has been fixed.</li> | 
|  | <li>The downstream mapping endpoint was not correctly serialized which resulted in not being able to send commands using the downstream mapping endpoint. This has been fixed.</li> | 
|  | <li>When using Kafka as messaging system, the Command Router now creates the internal Command & Control topic with the | 
|  | replication factor defined in the broker <code>default.replication.factor</code> setting.</li> | 
|  | <li>Sending requests using the Hono AMQP request-response client erroneously increased the <code>hono.downstream.timeout</code> metric. | 
|  | This has been fixed.</li> | 
|  | </ul> | 
|  | <h2 id="170">1.7.0</h2> | 
|  | <h3 id="new-features-1">New Features</h3> | 
|  | <ul> | 
|  | <li>Apache Kafka is now supported as a messaging system for command messages. | 
|  | This can be enabled by configuring protocol adapters to use Hono’s new Kafka-based | 
|  | client. Please refer to <a href="https://www.eclipse.org/hono/docs/admin-guide/hono-kafka-client-configuration/">Hono Kafka Client Configuration</a> | 
|  | for details. The new <a href="https://www.eclipse.org/hono/docs/api/command-and-control-kafka/">Command & Control API for Kafka</a> defines | 
|  | how applications can use Apache Kafka to send command messages to devices. | 
|  | Note that support for Kafka based messaging is still considered an <strong>experimental</strong> feature.</li> | 
|  | <li>The Device Registry Management API has been extended now to support an optional unique identifier | 
|  | for trust anchors belonging to a tenant. The file, JDBC and MongoDB based device registries | 
|  | support this feature. Please refer to the | 
|  | <a href="https://www.eclipse.org/hono/docs/api/management#/tenants/">Device registry management API</a> for details.</li> | 
|  | <li>The LoraWAN protocol adapter has been extended with support for <em>The Things Stack</em> provider.</li> | 
|  | <li>The LoraWAN protocol adapter now supports command and control for providers <em>Chirpstack</em>, <em>Firefly</em> and <em>Loriot</em>.</li> | 
|  | <li>Added (experimental) Quarkus based variant of the Authentication service.</li> | 
|  | <li>Added (experimental) Quarkus based variant of the CoAP protocol adapter.</li> | 
|  | <li>Added (experimental) Quarkus based variant of the Command Router component.</li> | 
|  | <li>The container images for the (experimental) Quarkus based variant of Hono components are now being published on | 
|  | Docker Hub as well. The JVM based image names contain a <code>-quarkus</code> suffix whereas the native image names contain a | 
|  | <code>-quarkus-native</code> suffix. Note that the Quarkus based protocol adapter images do <strong>not</strong> support using the Device | 
|  | Connection service but require a connection to the Command Router service being configured instead.</li> | 
|  | <li>The MQTT adapter now lets devices subscribe on a new error topic to get informed about errors during the processing | 
|  | of telemetry, event or command response message. With such an error subscription in place, the default behaviour | 
|  | on such errors is now to keep the MQTT connection open. Please refer to the | 
|  | <a href="https://www.eclipse.org/hono/docs/user-guide/mqtt-adapter/#error-reporting-via-error-topic">MQTT Adapter User Guide</a> for details.</li> | 
|  | <li>The MQTT adapter now supports mapping the command payload through an external http service.</li> | 
|  | <li>The Command Router component has been promoted from <em>tech preview</em> to <em>fully supported</em>.</li> | 
|  | <li>The AMQP adapter now closes the network connection to the device if any terminal errors happen. Please refer to the | 
|  | <a href="https://www.eclipse.org/hono/docs/user-guide/amqp-adapter/#error-handling">AMQP Adapter User Guide</a> for details.</li> | 
|  | </ul> | 
|  | <h3 id="fixes--enhancements-4">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The common configuration property for setting the vert.x instance’s max-event-loop-execute-time had erroneously | 
|  | been documented as <code>HONO_VERTX_MAX_EVENT_LOOP_EXECUTE_TIME_MILLIS</code>, accepting an integer representing the duration as | 
|  | number of milliseconds. However, the correct property is named <code>HONO_VERTX_MAX_EVENT_LOOP_EXECUTE_TIME</code> and accepts an | 
|  | ISO-8601 Duration string instead of an integer.</li> | 
|  | <li>The MQTT adapter failed to handle a command response message if the corresponding tenant object wasn’t available | 
|  | in the cache. This has been fixed.</li> | 
|  | <li>A failed connection attempt in the default <code>org.eclipse.hono.connection.ConnectionFactory</code> implementation could | 
|  | have led to the AMQP connection not getting closed, occupying connection resources. This has been fixed.</li> | 
|  | <li>Validation of MQTT topics containing property bags has been improved, preventing unhandled exceptions.</li> | 
|  | <li>The hugo themes for the Hono website and the documentation have been updated to the latest versions respectively. | 
|  | In order for the site module build to succeed with the <code>hugo</code> binary installed locally, the | 
|  | <code>site/homepage/themes/hugo-universal-theme</code> and <code>site/documentation/themes/hugo-theme-learn</code> folders need to be deleted. | 
|  | They will automatically be (re-)created as part of the build.</li> | 
|  | <li>The Infinispan client used by the protocol adapters, the Device Connection and Command Router services has been | 
|  | updated to version 11.0.9. The syntax of configuration file used for defining an embedded cache in the Device | 
|  | Connection and/or Command Router service has changed as documented | 
|  | <a href="https://infinispan.org/docs/stable/titles/upgrading/upgrading.html#upgrading_from_10_1_to_11_0">in the Infinispan version details</a>.</li> | 
|  | <li>The Command Router no longer uses the <code>embedded-cache</code> <em>Spring profile</em> in order to configure an embedded cache. | 
|  | Instead, the Command Router determines the type of cache (embedded or remote) by means of the | 
|  | <code>HONO_COMMANDROUTER_CACHE_REMOTE_SERVERLIST</code> configuration variable. Please refer to the | 
|  | <a href="https://www.eclipse.org/hono/docs/admin-guide/command-router-config/#data-grid-connection-configuration">Command Router Admin Guide</a> | 
|  | for details.</li> | 
|  | <li>The Prometheus based resource limit checks can now be configured with a time out for establishing the TCP connection | 
|  | to the Prometheus server. This is useful to limit the time it takes to invoke the Prometheus Query API. | 
|  | Please refer to the | 
|  | <a href="https://www.eclipse.org/hono/docs/admin-guide/common-config/#resource-limits-checker-configuration">Protocol Adapter Common Configuration guide</a> | 
|  | for details.</li> | 
|  | </ul> | 
|  | <h3 id="api-changes">API Changes</h3> | 
|  | <ul> | 
|  | <li>The already deprecated classes <code>org.eclipse.hono.service.cache.SpringBasedExpiringValueCache</code> and | 
|  | <code>org.eclipse.hono.service.cache.SpringCacheProvider</code> have been removed.</li> | 
|  | <li>The <code>org.eclipse.hono.service.AbstractApplication</code> and <code>org.eclipse.hono.service.AbstractBaseApplication</code> classes | 
|  | have been moved to <code>org.eclipse.hono.service.spring.AbstractApplication</code> and <code>org.eclipse.hono.service.spring.AbstractApplication</code> | 
|  | in the newly added <code>service-base-spring</code> module respectively.</li> | 
|  | <li>The existing <code>mapper</code> configuration has been renamed to <code>downstream-message-mapper</code>.</li> | 
|  | <li>The Command Router component now requires the configuration of a tenant service client. Please refer to | 
|  | <a href="https://www.eclipse.org/hono/docs/admin-guide/command-router-config/#tenant-service-connection-configuration">Tenant Service Connection Configuration</a> | 
|  | for details.</li> | 
|  | </ul> | 
|  | <h3 id="end-of-life">End of Life</h3> | 
|  | <ul> | 
|  | <li> | 
|  | <p>The <code>build-docker-image</code> build profile is no longer activated automatically if the <em>docker.host</em> Maven property | 
|  | is set. This has been changed in order to prevent the <code>build-docker-image</code> and <code>build-native-image</code> profiles being | 
|  | activated at the same time when running something like</p> | 
|  | <div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-sh" data-lang="sh">mvn clean install -Ddocker.host<span style="color:#f92672">=</span>tcp//host:port -Pbuild-native-image | 
|  | </code></pre></div><p>Activating the <code>build-docker-image</code> profile by default can easily be achieved by adding <code>-Pbuild-docker-image</code> to | 
|  | the <em>MAVEN_OPTS</em> environment variable instead.</p> | 
|  | </li> | 
|  | </ul> | 
|  | <h2 id="162">1.6.2</h2> | 
|  | <h3 id="fixes--enhancements-5">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The CoAP adapter did not correctly track the time it took to forward a command message to a device. This has been fixed.</li> | 
|  | <li>Sending requests using the Hono AMQP request-response client erroneously increased the <code>hono.downstream.timeout</code> metric. | 
|  | This has been fixed.</li> | 
|  | </ul> | 
|  | <h2 id="161">1.6.1</h2> | 
|  | <h3 id="fixes--enhancements-6">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The common configuration property for setting the vert.x instance’s max-event-loop-execute-time had erroneously | 
|  | been documented as <code>HONO_VERTX_MAX_EVENT_LOOP_EXECUTE_TIME_MILLIS</code>, accepting an integer representing the duration as | 
|  | number of milliseconds. However, the correct property is named <code>HONO_VERTX_MAX_EVENT_LOOP_EXECUTE_TIME</code> and accepts an | 
|  | ISO-8601 Duration string instead of an integer.</li> | 
|  | <li>The MQTT adapter failed to handle a command response message if the corresponding tenant object wasn’t available | 
|  | in the cache. This has been fixed.</li> | 
|  | <li>A failed connection attempt in the default <code>org.eclipse.hono.connection.ConnectionFactory</code> implementation could | 
|  | have led to the AMQP connection not getting closed, occupying connection resources. This has been fixed.</li> | 
|  | <li>Validation of MQTT topics containing property bags has been improved, preventing unhandled exceptions.</li> | 
|  | <li>The protocol adapters might have run into a situation where devices connected to adapters did no longer receive | 
|  | commands when using the Command Router service. The problem occurred when a Command Router service instance had been | 
|  | restarted while one or more protocol adapters where connected to it. This has been fixed.</li> | 
|  | </ul> | 
|  | <h2 id="160">1.6.0</h2> | 
|  | <h3 id="new-features-2">New Features</h3> | 
|  | <ul> | 
|  | <li>Apache Kafka is now supported as a messaging system for events and telemetry messages. | 
|  | This can be enabled by configuring protocol adapters to use Hono’s new Kafka-based | 
|  | client. Please refer to <a href="https://www.eclipse.org/hono/docs/admin-guide/hono-kafka-client-configuration/">Hono Kafka Client Configuration</a> | 
|  | for details.</li> | 
|  | <li>New APIs have been added for the Kafka-based messaging. Please refer to | 
|  | <a href="https://www.eclipse.org/hono/docs/api/telemetry-kafka/">Telemetry API for Kafka</a> and | 
|  | <a href="https://www.eclipse.org/hono/docs/api/event-kafka/">Event API for Kafka</a> for the specifications.</li> | 
|  | <li>The MQTT adapter now allows clients to indicate whether they want the target device’s tenant and/or device IDs | 
|  | to be included in the topic used when publishing commands.</li> | 
|  | <li>The caching behavior of the protocol adapters' AMQP based registry clients has been changed. All adapter | 
|  | Verticle instances now share a single cache instance <em>per service</em>. In particular, there is a single cache for | 
|  | all responses returned by the Tenant, Device Registration and Credentials service respectively. | 
|  | In addition, each cache is now being used for all responses to requests regardless of the tenant. Consequently, the | 
|  | service client configurations' <em>responseCacheMinSize</em> and <em>responseCacheMaxSize</em> properties now determine | 
|  | the overall number of responses that can be cached <em>per service</em>. In previous versions the properties determined | 
|  | the number of entries <em>per client instance and tenant</em>. The new approach allows for better control over the maximum | 
|  | amount of memory being used by the cache and should also increase cache hits when deploying multiple adapter | 
|  | Verticle instances. | 
|  | The <code>org.eclipse.hono.adapter.client.registry.amqp.ProtonBasedTenantClient</code> now makes sure that only a single | 
|  | request to the Tenant service is issued when multiple (parallel) <em>get</em> method invocations run into a cache miss. | 
|  | This should reduce the load on the Tenant service significantly in scenarios where devices of the same | 
|  | tenant connect to an adapter at a high rate, e.g. in when re-connecting after one or more adapter pods have | 
|  | crashed.</li> | 
|  | <li>The Device Registry Management API’s <em>update credentials</em> operation has been extended to allow specifying the | 
|  | <em>auth-id</em> and validity period implicitly by means of including a (Base64 encoded) client certificate in the new | 
|  | <em>cert</em> property. This can be used instead of specifying the client certificate’s subject DN and public key’s | 
|  | validity period explicitly in the <em>auth-id</em> and <em>secrets</em> properties. This should make setting the correct <em>auth-id</em> | 
|  | value much less error prone.</li> | 
|  | <li>Hono now supports <em>auto-provisioning</em> of devices that connect via gateway. For more information please refer to the | 
|  | <a href="https://www.eclipse.org/hono/docs/concepts/provisioning/#gateway-based-auto-provisioning">Device Provisioning</a> concept and to the | 
|  | <a href="https://www.eclipse.org/hono/docs/api/management#/devices/createDeviceRegistration">Device registry management API</a> on how to | 
|  | create a device registration for a gateway which is enabled for auto-provisioning.</li> | 
|  | <li>The Device Registry Management API has been extended now to support searching tenants with optional filters, | 
|  | paging and sorting options. Please refer to the | 
|  | <a href="https://www.eclipse.org/hono/docs/api/management#/tenants/searchTenants">Device registry management API</a> for details.</li> | 
|  | <li>The MongoDB based device registry now supports searching tenants with optional filters, paging and sorting options.</li> | 
|  | </ul> | 
|  | <h3 id="fixes--enhancements-7">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The Mongo DB based Credentials service implementation failed to return the credentials matching the given | 
|  | <em>type</em> and <em>auth-id</em> if multiple credentials of the same <em>type</em> but with different <em>auth-id</em> values were | 
|  | registered for a device. This has been fixed.</li> | 
|  | <li>The Mongo DB based registry container would have failed to start if the connection to the Mongo DB could not | 
|  | be established quickly enough. This has been fixed by decoupling the creation of indices from the start up process.</li> | 
|  | <li>The protocol adapters erroneously indicated a client related error to devices if the downstream AMQP container | 
|  | rejected a message with an <code>amqp:resource-limit-exceeded</code> error condition. This has been fixed so that the adapters | 
|  | now correctly indicate a server related problem instead.</li> | 
|  | <li>The containers for the Device Registry implementations, the Authentication server, the Device Connection and | 
|  | Command Router services did not shut down gracefully upon receiving a SIGTERM signal. This has been fixed.</li> | 
|  | <li>The LoRA protocol adapter failed to start due to a missing bean declaration. This has been fixed.</li> | 
|  | </ul> | 
|  | <h3 id="deprecations-1">Deprecations</h3> | 
|  | <ul> | 
|  | <li>The <code>org.eclipse.hono.service.cache.SpringCacheProvider</code> and <code>org.eclipse.hono.service.cache.SpringBasedExpiringValueCache</code> | 
|  | classes have been deprecated to further reduce the dependency on Spring Boot. Clients should use | 
|  | <code>org.eclipse.hono.service.cache.CaffeineCacheProvider</code> and <code>org.eclipse.hono.service.cache.CaffeineBasedExpiringValueCache</code> | 
|  | instead.</li> | 
|  | <li>Most of the public interfaces of the legacy <code>client</code> module have been deprecated. Client code should be | 
|  | adapted to use the corresponding interfaces and implementations from the <code>clients/adapter</code>, <code>clients/adapter-amqp</code> | 
|  | and <code>clients/application-amqp</code> modules instead.</li> | 
|  | <li>The Authentication server’s <code>HONO_AUTH_SVC_PERMISSIONS_PATH</code> configuration property has been changed to no | 
|  | longer accept generic Spring resource URIs. The value is now required to be a file system path. The path | 
|  | may still contain a <code>file://</code> prefix in order to not break existing configurations. However, users are encouraged | 
|  | to remove the prefix as it will no longer be supported in versions starting with 2.0.0. | 
|  | The default permissions file has been removed from the Authentication server code base. Consequently, | 
|  | permissions can no longer be loaded from the class path using a <code>classpath://</code> URI. In practice this should | 
|  | have no impact because the Hono chart comes with a default permissions file which the Authentication | 
|  | server is pre-configured to load from the file system.</li> | 
|  | </ul> | 
|  | <h2 id="152">1.5.2</h2> | 
|  | <h3 id="fixes--enhancements-8">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The protocol adapters erroneously indicated a client related error to devices if the downstream AMQP container | 
|  | rejected a message with an <code>amqp:resource-limit-exceeded</code> error condition. This has been fixed so that the adapters | 
|  | now correctly indicate a server related problem instead.</li> | 
|  | <li>The containers for the Device Registry implementations, the Authentication server, the Device Connection and | 
|  | Command Router services did not shut down gracefully upon receiving a SIGTERM signal. This has been fixed.</li> | 
|  | <li>The LoRA protocol adapter failed to start due to a missing bean declaration. This has been fixed.</li> | 
|  | </ul> | 
|  | <h2 id="151">1.5.1</h2> | 
|  | <h3 id="fixes--enhancements-9">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The Mongo DB based Credentials service implementation failed to return the credentials matching the given | 
|  | <em>type</em> and <em>auth-id</em> if multiple credentials of the same <em>type</em> but with different <em>auth-id</em> values were | 
|  | registered for a device. This has been fixed.</li> | 
|  | <li>When using the Command Router or Device Connection service component with an embedded cache, a cache | 
|  | configuration file was required. Now, a default configuration will be used if no configuration file is | 
|  | given.</li> | 
|  | <li>The Mongo DB based registry container would have failed to start if the connection to the Mongo DB could not | 
|  | be established quickly enough. This has been fixed by decoupling the creation of indices from the start up process.</li> | 
|  | <li>The AMQP and MQTT adapters would erroneously forward commands to unauthorized gateway devices under certain | 
|  | conditions. This has been fixed.</li> | 
|  | </ul> | 
|  | <h2 id="150">1.5.0</h2> | 
|  | <h3 id="new-features-3">New Features</h3> | 
|  | <ul> | 
|  | <li>The CoAP adapter has been promoted from <em>experimental</em> to <em>fully supported</em>.</li> | 
|  | <li>The Hono Client now supports several configuration properties that can be used | 
|  | to limit its resource usage. In particular the AMQP connection’s <em>max-frame-size</em>, | 
|  | the AMQP session’s incoming window size and the <em>max-message-size</em> of receiver | 
|  | links can be configured (and thus limited).</li> | 
|  | <li>A new way of routing Command & Control messages from the AMQP messaging network | 
|  | to the target protocol adapters has been introduced. For that, a new | 
|  | <a href="https://www.eclipse.org/hono/docs/admin-guide/command-router-config">Command Router service</a> | 
|  | component is used, receiving command messages and routing them to the appropriate | 
|  | protocol adapters. Protocol adapters supply routing information to the component | 
|  | by means of a new <a href="https://www.eclipse.org/hono/docs/api/command-router/">Command Router API</a>. | 
|  | Protocol adapters can be configured to either use that new API or they can continue | 
|  | using the now deprecated <a href="https://www.eclipse.org/hono/docs/api/device-connection/">Device Connection API</a> | 
|  | instead, meaning command routing will be done without using the Command Router.</li> | 
|  | <li>The pre-built Hono Docker images available from Docker Hub now include the Jaeger | 
|  | OpenTracing client.</li> | 
|  | </ul> | 
|  | <h3 id="fixes--enhancements-10">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The file based as well as the MongoDB based registry implementations now remove the shared-key from | 
|  | PSK credentials returned in the response of the Management API’s <em>get credentials</em> operation.</li> | 
|  | <li>The Device Registry Management API erroneously declared the <em>plaintext password</em> conveyed in the | 
|  | <em>update credentials</em> operation’s request payload as a Base64 encoded byte array instead of a | 
|  | plain string. This has been fixed.</li> | 
|  | <li>The file based as well as the Mongo DB based registry implementations had failed to do both | 
|  | updating an existing secret (referred to by ID) and adding a new secret to the same credentials | 
|  | in a single request. This has been fixed.</li> | 
|  | <li>The property names for specifying the patterns for validating Tenant and Device IDs have been fixed | 
|  | in the admin guides for the file based and the Mongo DB based registry implementations.</li> | 
|  | <li>The registry implementations did not accept X.509 credentials in an update Credentials request. | 
|  | They also failed to remove existing credentials of a device if they were not included in an | 
|  | update Credentials request. This has been fixed.</li> | 
|  | <li>The file based device registry also now supports searching devices for a tenant with optional filters, | 
|  | paging and sorting options. | 
|  | Please refer to the <a href="https://www.eclipse.org/hono/docs/api/management#/devices/searchDevicesForTenant">Device registry management API</a> | 
|  | for details.</li> | 
|  | <li>The wildcards <code>?</code> and <code>*</code> are now supported by the search devices operation in the MongoDB based device registry. | 
|  | Please refer to the <a href="https://www.eclipse.org/hono/docs/api/management#/devices/searchDevicesForTenant">Device registry management API</a> | 
|  | for details.</li> | 
|  | <li>Command messages that have their payload in an AMQP body section whose type isn’t supported in Hono | 
|  | now get rejected, instead of getting forwarded to the device with an empty payload.</li> | 
|  | <li>The authentication providers in Hono use <code>CredentialsObject.getCandidateSecrets</code> to retrieve valid secrets. | 
|  | The secrets are currently filtered based on their validity period regardless of whether the status is enabled | 
|  | or not. This has been fixed now, so that the disabled secrets are filtered out.</li> | 
|  | <li>The MQTT adapter now supports specifying the content-type of a telemetry/event message via a MQTT property bag.</li> | 
|  | <li>The MQTT adapter now sets the MQTT client identifier as <em>client-id</em> in the payload of a Credentials API <em>get</em> | 
|  | operation request also when authenticating a device using the username/password mechanism. Previously that was | 
|  | only done for the client certificate authentication mechanism.</li> | 
|  | <li>The HTTP adapter did not properly forward the QoS level for events when the <em>qos-level</em> header is not set | 
|  | or set to AT_MOST_ONCE. This has been fixed.</li> | 
|  | <li>An HTTP device sending a command response request with no <code>Content-Type</code> header meant that the northbound | 
|  | application received a message with an empty content type. Now, the <code>application/octet-stream</code> | 
|  | content type is set, as it is also done for telemetry/event HTTP requests with no <code>Content-Type</code> header.</li> | 
|  | <li>There were errors sending Connection Events via the Events API if the corresponding tenant didn’t | 
|  | have a non-default <code>max-ttl</code> resource limit configuration. This has been fixed.</li> | 
|  | </ul> | 
|  | <h3 id="api-changes-1">API Changes</h3> | 
|  | <ul> | 
|  | <li>The deprecated configuration property <code>singleTenant</code> of the protocol adapters and the device registry has been removed.</li> | 
|  | <li>The default pattern for valid device identifiers used for the file based and the MongoDB based registry | 
|  | implementations now also contains a colon for compatibility with Eclipse Ditto.</li> | 
|  | </ul> | 
|  | <h3 id="end-of-life-1">End of Life</h3> | 
|  | <ul> | 
|  | <li>The <em>hono-jmeter</em> Maven module along with the JMeter plugin that is contained in it hasn’t been updated for | 
|  | over a year and is also not used in any automated test runs. | 
|  | JMeter has turned out not to be the best choice for conducting load tests of Hono because it is difficult to | 
|  | generate the needed AMQP message load with its (blocking) thread based execution model. | 
|  | The JMeter plugin therefore has been removed.</li> | 
|  | </ul> | 
|  | <h2 id="145">1.4.5</h2> | 
|  | <h3 id="fixes--enhancements-11">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The tenant timeout mechanism doesn’t close command consumer resources anymore if there are still active | 
|  | command subscriptions from AMQP or MQTT devices of the corresponding tenant.</li> | 
|  | <li>The Mongo DB based Credentials service implementation failed to return the credentials matching the given | 
|  | <em>type</em> and <em>auth-id</em> if multiple credentials of the same <em>type</em> but with different <em>auth-id</em> values were | 
|  | registered for a device. This has been fixed.</li> | 
|  | <li>The Mongo DB based registry container would have failed to start if the connection to the Mongo DB could not | 
|  | be established quickly enough. This has been fixed by decoupling the creation of indices from the start up process.</li> | 
|  | <li>The AMQP and MQTT adapters would erroneously forward commands to unauthorized gateway devices under certain | 
|  | conditions. This has been fixed.</li> | 
|  | </ul> | 
|  | <h2 id="144">1.4.4</h2> | 
|  | <h3 id="fixes--enhancements-12">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The HTTP adapter did not properly forward the QoS level for events when the <em>qos-level</em> header is not set | 
|  | or set to AT_MOST_ONCE. This has been fixed.</li> | 
|  | <li>An HTTP device sending a command response request with no <code>Content-Type</code> header meant that the north bound | 
|  | application received a message with the content type set to an empty string. Now, the content type property | 
|  | isn’t set in this case.</li> | 
|  | <li>There were errors sending Connection Events via the Events API if the corresponding tenant didn’t | 
|  | have a non-default <code>max-ttl</code> resource limit configuration. This has been fixed.</li> | 
|  | </ul> | 
|  | <h2 id="143">1.4.3</h2> | 
|  | <h3 id="fixes--enhancements-13">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The file based as well as the Mongo DB based registry implementations now remove the shared-key from | 
|  | PSK credentials returned in the response of the Management API’s <em>get credentials</em> operation.</li> | 
|  | <li>The Device Registry Management API erroneously declared the <em>plain text password</em> conveyed in the | 
|  | <em>update credentials</em> operation’s request payload as a Base64 encoded byte array instead of a | 
|  | plain string. This has been fixed.</li> | 
|  | <li>The file based as well as the Mongo DB based registry implementations had failed to do both | 
|  | updating an existing secret (referred to by ID) and adding a new secret to the same credentials | 
|  | in a single request. This has been fixed.</li> | 
|  | <li>The property names for specifying the patterns for validating Tenant and Device IDs have been fixed | 
|  | in the admin guides for the file based and the Mongo DB based registry implementations.</li> | 
|  | <li>The registry implementations did not accept X.509 credentials in an update Credentials request. | 
|  | They also failed to remove existing credentials of a device if they were not included in an | 
|  | update Credentials request. This has been fixed.</li> | 
|  | <li>The AMQP protocol adapter did accept messages from clients (devices) exceeding the adapter’s configured | 
|  | max-message-size. This has been fixed and the adapter now closes the link to the device in this case.</li> | 
|  | </ul> | 
|  | <h3 id="api-changes-2">API Changes</h3> | 
|  | <ul> | 
|  | <li>The default pattern for valid device identifiers used for the file based and the MongoDB based registry | 
|  | implementations now also contains a colon (<code>:</code>) for compatibility with Eclipse Ditto.</li> | 
|  | </ul> | 
|  | <h2 id="140">1.4.0</h2> | 
|  | <h3 id="new-features-4">New Features</h3> | 
|  | <ul> | 
|  | <li>The protocol adapters now report connection attempts made by devices | 
|  | in a new metric. In particular, the metric includes a tag reflecting the outcome | 
|  | of the attempt to establish a connection and the reason for failure. | 
|  | Please refer to the <a href="https://www.eclipse.org/hono/docs/api/metrics">Metrics API</a> for details.</li> | 
|  | <li>A new Quarkus based HTTP protocol adapter is now available. This adapter version provides better memory consumption and | 
|  | startup times comparing to the existing one.</li> | 
|  | <li>The LoraWAN protocol adapter has been extended with support for the <em>Actility Enterprise</em> provider.</li> | 
|  | <li>The LoraWAN protocol adapter has been extended with support for the <em>Orbiwise</em> provider.</li> | 
|  | <li>Added metrics for tracking the RTT between sending an AMQP message to receiving the disposition.</li> | 
|  | <li>The CoAP adapter now supports configuration of the <em>timeoutToAck</em> parameter at the tenant level | 
|  | in addition to the adapter level. If set, the tenant specific value is used for all devices of the | 
|  | particular tenant. If not set, the value defined at the adapter level is used.</li> | 
|  | <li>The Device Registry Management API has been extended now to support searching devices for a tenant | 
|  | with optional filters, paging and sorting options. | 
|  | Please refer to the <a href="https://www.eclipse.org/hono/docs/api/management#/devices/searchDevicesForTenant">Device registry management API</a> | 
|  | for details.</li> | 
|  | <li>The MongoDB based device registry now supports searching devices for a tenant with optional filters, | 
|  | paging and sorting options.</li> | 
|  | </ul> | 
|  | <h3 id="fixes--enhancements-14">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The MongoDB based device registry now checks for tenant existence during device registration and credentials management operations.</li> | 
|  | </ul> | 
|  | <h3 id="deprecations-2">Deprecations</h3> | 
|  | <ul> | 
|  | <li>The configuration property <code>singleTenant</code> of the protocol adapters and the device registry is now deprecated | 
|  | and planned to be removed in a future release. The use case of a system with just a single tenant should be | 
|  | realized by configuring just one tenant in the device registry.</li> | 
|  | <li>The <code>HONO_REGISTRY_REST_*</code> configuration properties of the file based device registry have been deprecated | 
|  | in favor of corresponding properties with the <code>HONO_REGISTRY_HTTP_</code> prefix.</li> | 
|  | </ul> | 
|  | <h2 id="132">1.3.2</h2> | 
|  | <h3 id="fixes--enhancements-15">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The HTTP adapter did not properly forward the QoS level for events when the <em>qos-level</em> header is not set | 
|  | or set to AT_MOST_ONCE. This has been fixed.</li> | 
|  | <li>An HTTP device sending a command response request with no <code>Content-Type</code> header meant that the northbound | 
|  | application received a message with the content type set to an empty string. Now, the content type property | 
|  | isn’t set in this case.</li> | 
|  | <li>There were errors sending Connection Events via the Events API if the corresponding tenant didn’t | 
|  | have a non-default <code>max-ttl</code> resource limit configuration. This has been fixed.</li> | 
|  | </ul> | 
|  | <h2 id="131">1.3.1</h2> | 
|  | <h3 id="fixes--enhancements-16">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The file based as well as the Mongo DB based registry implementations now remove the shared-key from | 
|  | PSK credentials returned in the response of the Management API’s <em>get credentials</em> operation.</li> | 
|  | <li>The Device Registry Management API erroneously declared the <em>plain text password</em> conveyed in the | 
|  | <em>update credentials</em> operation’s request payload as a Base64 encoded byte array instead of a | 
|  | plain string. This has been fixed.</li> | 
|  | <li>The file based as well as the Mongo DB based registry implementations had failed to do both | 
|  | updating an existing secret (referred to by ID) and adding a new secret to the same credentials | 
|  | in a single request. This has been fixed.</li> | 
|  | <li>The property names for specifying the patterns for validating Tenant and Device IDs have been fixed | 
|  | in the admin guides for the file based and the Mongo DB based registry implementations.</li> | 
|  | <li>The registry implementations did not accept X.509 credentials in an update Credentials request. | 
|  | They also failed to remove existing credentials of a device if they were not included in an | 
|  | update Credentials request. This has been fixed.</li> | 
|  | <li>The AMQP protocol adapter did accept messages from clients (devices) exceeding the adapter’s configured | 
|  | max-message-size. This has been fixed and the adapter now closes the link to the device in this case.</li> | 
|  | </ul> | 
|  | <h3 id="api-changes-3">API Changes</h3> | 
|  | <ul> | 
|  | <li>The default pattern for valid device identifiers used for the file based and the MongoDB based registry | 
|  | implementations now also contains a colon (<code>:</code>) for compatibility with Eclipse Ditto.</li> | 
|  | </ul> | 
|  | <h2 id="130">1.3.0</h2> | 
|  | <h3 id="new-features-5">New Features</h3> | 
|  | <ul> | 
|  | <li>The LoraWAN protocol adapter has been extended with support for the <em>ChirpStack</em> provider.</li> | 
|  | <li>Hono’s integration tests can now be run with a Jaeger back end in order to collect tracing | 
|  | information.</li> | 
|  | <li>The AMQP 1.0 event message based Connection Event producer now sets a TTL on the event messages | 
|  | it produces. The TTL is the <em>max TTL</em> configured at the tenant level.</li> | 
|  | <li>A new Device Registry implementation based on MongoDB database is now available in Hono. | 
|  | Please refer to the <a href="https://www.eclipse.org/hono/docs/user-guide/mongodb-based-device-registry">MongoDB Device Registry User Guide</a> | 
|  | for additional information.</li> | 
|  | <li>Hono protocol adapters can now be configured to use address rewriting when opening AMQP 1.0 links to the messaging network. | 
|  | This allows an easier deployment in multi-tenant messaging environments. | 
|  | Please refer to the <a href="https://www.eclipse.org/hono/docs/admin-guide/hono-client-configuration/#address-rewriting">Hono Client Configuration Guide</a> | 
|  | for additional information.</li> | 
|  | </ul> | 
|  | <h3 id="fixes--enhancements-17">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>An admin guide for the CoAP adapter has been added.</li> | 
|  | <li>The Prometheus based resource limits checker now supports configuring a query timeout. | 
|  | Please refer to <a href="https://www.eclipse.org/hono/docs/admin-guide/common-config/#resource-limits-checker-configuration">Resource Limits Checker Configuration</a> | 
|  | for additional information.</li> | 
|  | <li>When sending a command message to a device, the AMQP adapter now waits for a | 
|  | configurable period of time (default is 1 second) for the acknowledgement from the device. | 
|  | If none is received, the downstream command sender gets back a <code>released</code> outcome. | 
|  | Please refer to the <code>sendMessageToDeviceTimeout</code> property description in the | 
|  | AMQP Adapter admin guide for additional information.</li> | 
|  | <li>The client for storing device connection information to a data grid now supports configuring | 
|  | the name of the cache to store the data in.</li> | 
|  | <li>When the connection to a device is closed or lost, a protocol adapter instance will now | 
|  | stop listening for commands targeted at the device.</li> | 
|  | <li>The AMQP adapter before accepting any connections checks if the connection limit is exceeded | 
|  | or not and if the adapter is enabled or not. These checks are currently done inside the | 
|  | <code>AmqpAdapterSaslAuthenticatorFactory</code>. Thereby, if any of these checks failed, the AMQP adapter | 
|  | reported authentication failure instead of the actual reason. This has been fixed now.</li> | 
|  | <li>The AMQP adapter did not consider the <code>HONO_CONNECTIONEVENTS_PRODUCER</code> configuration variable | 
|  | to set a Connection Event producer. This has been fixed.</li> | 
|  | <li>The <em>logging</em> Connection Event producer now supports configuring the level | 
|  | at which information should be logged. The producer type <em>none</em> has been added to explicitly | 
|  | turn off connection event reporting altogether. | 
|  | Please refer to the <em>Common Configuration</em> admin guide for details.</li> | 
|  | <li>The packages <code>org.eclipse.hono.service.credentials</code>, <code>org.eclipse.hono.service.management</code>, | 
|  | <code>org.eclipse.hono.service.management.credentials</code>, <code>org.eclipse.hono.service.management.device</code>, | 
|  | <code>org.eclipse.hono.service.management.tenant</code>, <code>org.eclipse.hono.service.registration</code> and | 
|  | <code>org.eclipse.hono.service.tenant</code> have been moved from the <em>service-base</em> to the | 
|  | <em>device-registry-base</em> module.</li> | 
|  | <li>The Device Connection service did return a 500 error code if no <em>last known gateway</em> could | 
|  | be found for a device ID. This has been fixed so that the service now returns a 404 in that | 
|  | case as specified by the Device Connection API.</li> | 
|  | <li>The cache based Device Connection service implementation now applies a lifespan of 28 days | 
|  | when setting/updating cache entries containing <em>last known gateway</em> information. This means | 
|  | no global expiration configuration is needed anymore for the cache.</li> | 
|  | <li>Protocol adapters failed to re-establish receiver links for commands to be routed after loss | 
|  | of connection to the AMQP Messaging Network. This has been fixed.</li> | 
|  | <li>The AMQP adapter reported an incorrect number of connections if resource limits had been | 
|  | defined and exceeded. This has been fixed.</li> | 
|  | <li>The device registry management HTTP endpoints now reject requests to register or update objects | 
|  | containing unknown properties. In the past such properties had been simply ignored.</li> | 
|  | <li>The Device Registry Management API has been amended with example messages and more thorough | 
|  | description of operations.</li> | 
|  | <li>The CoAP adapter has been enhanced to asynchronously look up a device’s PSK during the | 
|  | DTLS handshake. This will allow the adapter to handle a lot more handshakes concurrently. | 
|  | The adapter also employs a more efficient message de-duplicator which reduces the adapter’s | 
|  | memory footprint.</li> | 
|  | </ul> | 
|  | <h3 id="api-changes-4">API Changes</h3> | 
|  | <ul> | 
|  | <li>The <code>getRemoteContainer</code> method in <code>org.eclipse.hono.client.HonoConnection</code> has been | 
|  | renamed to <code>getRemoteContainerId</code>.</li> | 
|  | <li>The <code>getName</code> method in <code>org.eclipse.hono.connection.ConnectionFactory</code> has been removed | 
|  | and an additional <code>connect</code> method has been added.</li> | 
|  | <li>The <em>set command-handling protocol adapter instance</em> operation of the <em>Device Connection</em> API | 
|  | has been extended to support an additional parameter which can be used to indicate the | 
|  | maximum amount of time that the given information is to be considered valid.</li> | 
|  | <li>The <code>hono-core</code> module no longer embeds any external classes by default. | 
|  | This includes the <em>OpenTracing API</em> and <em>Spring Crypto</em> classes. You can still | 
|  | embed the classes, as in Hono versions 1.2.x and before, by enabling the | 
|  | Maven profile <code>embed-dependencies</code> (e.g. using the command line switch | 
|  | <code>-Pembed-dependencies</code>). By default this profile is not active.</li> | 
|  | <li>The <code>org.eclipse.hono.client.DeviceRegistration</code> interface’s <em>get</em> methods have been removed | 
|  | because the Device Registration API does not define a corresponding operation. | 
|  | Consequently, the C&C functionality of the Kerlink Lora provider which relied on the <em>get</em> | 
|  | method has been removed.</li> | 
|  | <li>Protocol adapters implementing the <code>org.eclipse.hono.service.AbstractAdapterConfig</code> class | 
|  | now need to implement the <code>getAdapterName</code> method. The <code>customizeDownstreamSenderFactoryConfig</code> | 
|  | method has been renamed to <code>getDownstreamSenderFactoryConfigDefaults</code>, while now returning | 
|  | properties instead of working on given ones. The new method name now more accurately conveys | 
|  | what the method is used for. The same change has been applied to the other <code>customize[*]Config</code> | 
|  | methods in the <code>AbstractAdapterConfig</code> class.</li> | 
|  | <li>The file based as well as the MongoDB based device registry implementations now disallow certain | 
|  | special characters in device and tenant identifiers. The configuration properties | 
|  | <code>HONO_REGISTRY_HTTP_TENANT_ID_PATTERN</code> and <code>HONO_REGISTRY_HTTP_DEVICE_ID_PATTERN</code> (and corresponding ones with | 
|  | prefix <code>HONO_REGISTRY_REST</code> for the file based registry) can be used to override the patterns for matching | 
|  | valid identifiers. Please refer to the | 
|  | <a href="https://www.eclipse.org/hono/docs/admin-guide/file-based-device-registry-config/#service-configuration">file based registry</a> or | 
|  | <a href="https://www.eclipse.org/hono/docs/admin-guide/mongodb-device-registry-config/#service-configuration">MongoDB based registry</a> | 
|  | configuration guide for details.</li> | 
|  | </ul> | 
|  | <h3 id="deprecations-3">Deprecations</h3> | 
|  | <ul> | 
|  | <li>The configuration property <code>HONO_MQTT_COMMAND_ACK_TIMEOUT</code> of the MQTT adapter is now deprecated | 
|  | and planned to be removed in a future release. Use <code>HONO_MQTT_SEND_MESSAGE_TO_DEVICE_TIMEOUT</code> instead.</li> | 
|  | </ul> | 
|  | <h2 id="124">1.2.4</h2> | 
|  | <h3 id="fixes--enhancements-18">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The <code>HonoConnection</code> implementation didn’t use a delay before a reconnect attempt after | 
|  | a certain number of reconnect attempts (58 with the default configuration) had already | 
|  | failed. This has been fixed.</li> | 
|  | <li>An error when freeing Command & Control related resources of an idle tenant has been fixed.</li> | 
|  | <li>The Hotrod based DeviceConnectionClientFactory has been improved to prevent locking of | 
|  | objects in a clustered cache.</li> | 
|  | <li>The AMQP adapter reported an incorrect number of connections if resource limits had been | 
|  | defined and exceeded. This has been fixed.</li> | 
|  | </ul> | 
|  | <h2 id="123">1.2.3</h2> | 
|  | <h3 id="fixes--enhancements-19">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The Device Connection service did return a 500 error code if no <em>last known gateway</em> could | 
|  | be found for a device ID. This has been fixed so that the service now returns a 404 | 
|  | in that case as specified by the Device Connection API.</li> | 
|  | <li>The cache based Device Connection service implementation now applies a lifespan of 28 days | 
|  | when setting/updating cache entries containing <em>last known gateway</em> information. This means | 
|  | no global expiration configuration is needed anymore for the cache.</li> | 
|  | <li>Protocol adapters failed to re-establish receiver links for commands to be routed after loss | 
|  | of connection to the AMQP Messaging Network. This has been fixed.</li> | 
|  | </ul> | 
|  | <h3 id="api-changes-5">API Changes</h3> | 
|  | <ul> | 
|  | <li>The <code>org.eclipse.hono.client.DeviceRegistration</code> interface’s <em>get</em> methods have been removed | 
|  | because the Device Registration API does not define a corresponding operation. | 
|  | Consequently, the C&C functionality of the Kerlink Lora provider which relied on the <em>get</em> | 
|  | method has been removed.</li> | 
|  | </ul> | 
|  | <h2 id="122">1.2.2</h2> | 
|  | <h3 id="fixes--enhancements-20">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>Commands might not have been routed to the target device or gateway if multiple | 
|  | Verticle instances were deployed in a protocol adapter instance. This has been fixed.</li> | 
|  | <li>The example registry’s admin guide has been amended with some missing configuration | 
|  | variables.</li> | 
|  | <li>The documentation of the underlying concepts of Hono’s Command & Control functionality | 
|  | has been updated to reflect recent changes.</li> | 
|  | <li>Some dependencies have been updated to more recent versions fixing potential | 
|  | vulnerabilities.</li> | 
|  | </ul> | 
|  | <h2 id="121">1.2.1</h2> | 
|  | <h3 id="fixes--enhancements-21">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The AMQP adapter didn’t report any metrics anymore. This has been fixed.</li> | 
|  | <li>The CoAP and HTTP adapters' user guide now correctly documents the 413 status code returned | 
|  | in response to a request that contains a payload exceeding the configured maximum size.</li> | 
|  | </ul> | 
|  | <h2 id="120">1.2.0</h2> | 
|  | <h3 id="new-features-6">New Features</h3> | 
|  | <ul> | 
|  | <li>The protocol adapters can now be configured with a direct connection to a data grid | 
|  | for storing device connection information. | 
|  | This has the advantage of saving the network hop to the Device Connection service. | 
|  | Please refer to the protocol adapter Admin Guides for details.</li> | 
|  | <li>The Prometheus based resource limits check can now be configured with a trust store, key material | 
|  | and/or a username and password in order to be able to connect to a Prometheus server | 
|  | that requires TLS and/or client authentication.</li> | 
|  | <li>A Java client for the communication with the AMQP protocol adapter has been added. | 
|  | It can be used to implement devices, (protocol) gateways and for testing purposes. | 
|  | For more information refer to <a href="https://www.eclipse.org/hono/docs/dev-guide/amqp_adapter_client/">AMQP Adapter Client for Java</a>.</li> | 
|  | <li>Devices can now be configured with <em>groups</em> of gateways that are allowed to act on behalf of the | 
|  | device. This makes it easier to support scenarios in which a device may <em>roam</em> between multiple | 
|  | gateways. The HTTP based management API has been adapted accordingly.</li> | 
|  | <li>The CoAP adapter now supports forwarding commands to devices in the response body of requests for | 
|  | uploading telemetry data and/or events, analogous to the HTTP adapter. | 
|  | Please note that the CoAP adapter is still considered <em>experimental</em> and its device facing API | 
|  | is therefore still subject to change.</li> | 
|  | </ul> | 
|  | <h3 id="fixes--enhancements-22">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>When a message arrived, the <em>message limit</em> checks failed to calculate the payload size | 
|  | of the incoming message based on the configured <em>minimum message size</em>. Instead, it used the | 
|  | actual payload size to verify if the <em>message limit</em> has been exceeded or not. This has been | 
|  | fixed now.</li> | 
|  | <li>The Command & Control implementation in the protocol adapters has been optimized to use | 
|  | far fewer consumer links to the AMQP Messaging Network, saving up on resources. | 
|  | Before this change, the protocol adapters created a separate receiver link for each device that wanted | 
|  | to receive commands. Now each protocol adapter instance creates only a single receiver link over | 
|  | which all commands for all devices connected to the adapter instance are transmitted.</li> | 
|  | <li>The base classes for implementing a device registry have been moved into their own <code>device-registry-based</code> | 
|  | module.</li> | 
|  | <li>The example device registry’s AMQP and HTTP endpoints do no longer exchange incoming request messages and outgoing | 
|  | response messages with the service implementation verticles over the Vert.x EventBus. This reduces complexity | 
|  | and should improve throughput as messages no longer need to be serialized anymore.</li> | 
|  | <li>A first version of the CoAP User Guide has been added.</li> | 
|  | <li>A concept page explaining the different ways devices can be connected to Hono’s protocol adapters has been | 
|  | added. There is also example code illustrating how a protocol gateway which connects to the AMQP adapter can | 
|  | be implemented.</li> | 
|  | </ul> | 
|  | <h3 id="api-changes-6">API Changes</h3> | 
|  | <ul> | 
|  | <li>The device registry credentials endpoint will no longer hand out sensitive details for hashed-password secrets. | 
|  | <code>pwd-hash</code>, <code>salt</code> and <code>hash-function</code> are stored by the device registry but not returned to the user. | 
|  | Each secret is given an ID which is now returned, along with the other metadata (time validity and optional fields).</li> | 
|  | <li>The <code>tenant</code> and <code>devices</code> endpoints of the management HTTP API now accept creation requests without a body. | 
|  | As there is no mandatory field, having a mandatory body was confusing.</li> | 
|  | <li>The methods of the service base classes <code>CredentialsManagementService</code>, <code>CredentialsService</code>, | 
|  | <code>DeviceConnectionService</code>, <code>DeviceManagementService</code>, <code>RegistrationService</code>, <code>TenantManagementService</code> and | 
|  | <code>TenantService</code> have been refactored to now return a Vert.x Future instead of taking a Handler as an argument.</li> | 
|  | <li>The <code>CommandConsumerFactory</code> interface has been renamed to <code>ProtocolAdapterCommandConsumerFactory</code> and method | 
|  | signatures have been changed slightly. Also, a new <code>initialize</code> method has been added to be called on protocol | 
|  | adapter startup.</li> | 
|  | <li>The AMQP Messaging Network now has to be configured in such a way that protocol adapters can send and | 
|  | receive messages on the <code>command_internal/*</code> instead of the <code>control/*</code> address pattern.</li> | 
|  | <li>The Device Registry Management API has been extended to support the definition of <em>Gateway Groups</em> which | 
|  | can be referenced in a device’s <em>viaGroups</em> property in order to authorize all gateways that are a member | 
|  | of any of the groups to act on behalf of the device.</li> | 
|  | </ul> | 
|  | <h2 id="112">1.1.2</h2> | 
|  | <h3 id="api-changes-7">API Changes</h3> | 
|  | <ul> | 
|  | <li>The <code>org.eclipse.hono.client.DeviceRegistration</code> interface’s <em>get</em> methods have been removed | 
|  | because the Device Registration API does not define a corresponding operation. | 
|  | Consequently, the C&C functionality of the Kerlink Lora provider which relied on the <em>get</em> | 
|  | method has been removed.</li> | 
|  | </ul> | 
|  | <h2 id="111">1.1.1</h2> | 
|  | <h3 id="fixes--enhancements-23">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The <em>FireFly</em> LoRa adapter now supports mapping of the <em>mic</em> property.</li> | 
|  | <li>A bug preventing the lora and SigFox adapters to start up correctly has been fixed.</li> | 
|  | <li>The MQTT adapter failed to accept command response messages from authenticated gateways that had | 
|  | been published to the <code>command//${device-id}/res/${req-id}/${status}</code> topic. This has been fixed | 
|  | and the adapter now correctly uses the gateway’s tenant in this case.</li> | 
|  | <li>When a north bound application sent a command to a device that is connected via a gateway, the | 
|  | AMQP adapter set the gateway’s ID instead of the device’s ID in the command response forwarded | 
|  | to the application. This has been fixed.</li> | 
|  | </ul> | 
|  | <h2 id="110">1.1.0</h2> | 
|  | <h3 id="new-features-7">New Features</h3> | 
|  | <ul> | 
|  | <li>The Sigfox and LoRaWAN adapters now report metrics analogously to the other protocol | 
|  | adapters.</li> | 
|  | <li>With the release of <a href="https://www.eclipse.org/californium">Eclipse Californium</a> 2.0.0, | 
|  | the CoAP adapter became an official part of the Hono release. The adapter also supports | 
|  | tracking of request processing using OpenTracing but is still considered <em>experimental</em>.</li> | 
|  | <li>A lorawan provider has been added for the <em>loriot</em> network provider.</li> | 
|  | <li>Hono’s protocol adapters now support Server Name Indication in order | 
|  | to allow devices to establish a TLS connection with adapters using a tenant specific | 
|  | server certificate and host name. Please refer to the <em>Secure Communication</em> admin | 
|  | guide for details.</li> | 
|  | <li>Hono now supports <em>auto-provisioning</em> of devices that authenticate with X.509 client certificates. | 
|  | For more information please refer to the <a href="https://www.eclipse.org/hono/docs/concepts/provisioning/">Device Provisioning</a> | 
|  | concept and for details to the <a href="https://www.eclipse.org/hono/docs/api/tenant/#trusted-ca-format">Tenant API</a> | 
|  | and the <a href="https://www.eclipse.org/hono/docs/api/credentials/#get-credentials">Credentials API</a>.</li> | 
|  | <li>The Hono Auth Server and Device Registry components now support configuring the SASL | 
|  | mechanisms advertised to a client connecting to these components. This can be used to | 
|  | restrict the support to only one of the SASL PLAIN and EXTERNAL mechanisms instead of both.</li> | 
|  | <li>A new metric namely <em>hono.connections.authenticated.duration</em> has been introduced to track the | 
|  | connection duration of the authenticated devices. Please refer to the | 
|  | <a href="https://www.eclipse.org/hono/docs/api/metrics/">Metrics API</a> for more details.</li> | 
|  | <li>The protocol adapters that maintain <em>connection state</em> can now be configured to verify the <em>connection | 
|  | duration limit</em> for each tenant before accepting any new connection request from the devices. Please | 
|  | refer to the <a href="https://www.eclipse.org/hono/docs/concepts/resource-limits/#connection-duration-limit">resource-limits</a> | 
|  | section for more details.</li> | 
|  | <li>Hono’s example device registry now supports configuring a time out for processing requests from clients. | 
|  | This is configured using the property <code>sendTimeOutInMs</code> in <code>org.eclipse.hono.config.ServiceConfigProperties</code>.</li> | 
|  | <li>Hono’s Helm chart is now available from the | 
|  | <a href="https://www.eclipse.org/packages/repository/">Eclipse IoT Packages chart repository</a>. | 
|  | All future development of the chart will be done in the IoT Packages project only. | 
|  | The deployment guide has been adapted accordingly.</li> | 
|  | </ul> | 
|  | <h3 id="fixes--enhancements-24">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>Hono’s Helm chart now supports configuring resource requests and limits of the container images.</li> | 
|  | <li>The MQTT adapter now includes a device’s MQTT client ID in its request to retrieve the device’s | 
|  | credentials. This additional information can be used by device registry implementations when determining | 
|  | the device identity.</li> | 
|  | <li>The domain name of the <a href="/hono/sandbox/">Hono Sandbox</a> has been changed to | 
|  | <code>hono.eclipseprojects.io</code>. | 
|  | It will still be available at the old domain name for some time as well, though.</li> | 
|  | <li>Hono’s OpenTracing instrumentation has been upgraded to Opentracing 0.33.0. | 
|  | The example deployment now uses the Jaeger Java client in version 0.35.2 and the | 
|  | Jaeger 1.16 agent and back end components.</li> | 
|  | <li>Some of the environment variable names documented in the user guides which can be used for configuring | 
|  | Hono components had not been recognized during start up of the components. | 
|  | In particular, the names for configuring the connection to the Device Connection service | 
|  | and for configuring a heath check server have been fixed.</li> | 
|  | <li>The AMQP adapter now correctly accepts command response messages from devices that do not | 
|  | contain any payload. Such responses are useful to only convey a status code in reply to | 
|  | a command.</li> | 
|  | </ul> | 
|  | <h3 id="api-changes-8">API Changes</h3> | 
|  | <ul> | 
|  | <li>The already deprecated endpoints with the <code>control</code> prefix have been removed. The northbound and southbound | 
|  | Command & Control endpoints can now only be used with the <code>command</code> and <code>command_response</code> prefixes | 
|  | (or the respective shorthand version). Note that the AMQP Messaging Network still needs to be | 
|  | configured in such a way that protocol adapters can send and receive messages on the <code>control/*</code> | 
|  | address pattern. This is now used for internal communication between protocol adapters only.</li> | 
|  | <li>The <code>create</code> method in <code>org.eclipse.hono.client.HonoConnection</code> now requires its Vertx parameter to be not null.</li> | 
|  | </ul> | 
|  | <h2 id="104">1.0.4</h2> | 
|  | <h3 id="api-changes-9">API Changes</h3> | 
|  | <ul> | 
|  | <li>The <code>org.eclipse.hono.client.DeviceRegistration</code> interface’s <em>get</em> methods have been removed | 
|  | because the Device Registration API does not define a corresponding operation. | 
|  | Consequently, the C&C functionality of the Kerlink Lora provider which relied on the <em>get</em> | 
|  | method has been removed.</li> | 
|  | </ul> | 
|  | <h2 id="103">1.0.3</h2> | 
|  | <h3 id="fixes--enhancements-25">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>Hono’s Helm Chart now correctly configures Prometheus based resource limit checks if | 
|  | a Prometheus server is being used for collecting metrics.</li> | 
|  | <li>Some OpenTracing spans used for tracking processing of messages haven’t properly been finished. | 
|  | This has been fixed.</li> | 
|  | <li>Protocol adapters are now able to process messages while still trying to re-establish connections | 
|  | to other services after a connection loss. This might result in fewer messages being rejected | 
|  | in such situations.</li> | 
|  | </ul> | 
|  | <h2 id="102">1.0.2</h2> | 
|  | <h3 id="fixes--enhancements-26">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The example deployment now also works with Kubernetes 1.16 using Helm 2.15 and later.</li> | 
|  | <li>The Hono chart can now also be deployed using the recently released Helm 3. In fact, | 
|  | Helm 3 is now the recommended way for deploying Hono as it doesn’t require installation | 
|  | of any Helm specific components to the Kubernetes cluster.</li> | 
|  | <li>The example data grid which can be deployed using the Hono Helm chart can now be scaled | 
|  | out to more than one node.</li> | 
|  | <li>Under rare circumstances an HTTP adapter instance might have gotten into a state where | 
|  | a device’s requests to receive commands could no longer be processed successfully | 
|  | anymore until the adapter instance had been restarted. This has been fixed.</li> | 
|  | <li>A potential issue has been identified where some command messages might not get sent to | 
|  | the corresponding gateway. The scenario here involves the gateway sending event/telemetry | 
|  | messages via HTTP with a <code>hono-ttd</code> header in order to receive commands, and doing so | 
|  | with multiple concurrent requests for <em>different</em> devices. To resolve this issue, the | 
|  | corresponding tenant can be configured with a <code>support-concurrent-gateway-device-command-requests</code> | 
|  | option set to <code>true</code> in the <code>ext</code> field of an <code>adapters</code> entry of type <code>hono-http</code>. | 
|  | Note that with this option it is not supported for the authenticated gateway to send | 
|  | <em>one</em> message with a <code>hono-ttd</code> header and no device id to receive commands for <em>any</em> | 
|  | device that has last sent a telemetry or event message via this gateway.</li> | 
|  | </ul> | 
|  | <h2 id="101">1.0.1</h2> | 
|  | <h3 id="fixes--enhancements-27">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The AMQP protocol adapter now requests devices to send traffic periodically in order | 
|  | to prevent a time out of the connection. This way the adapter is able to detect and | 
|  | close stale connections which is important to reliably close the device’s corresponding | 
|  | command consumer. The time period after which the adapter should consider a connection stale | 
|  | can be configured using an environment variable. Please refer to the AMQP adapter’s | 
|  | admin guide for details.</li> | 
|  | <li>The example deployment using the Helm chart correctly creates the <code>DEFAULT_TENANT</code> again.</li> | 
|  | </ul> | 
|  | <h2 id="100">1.0.0</h2> | 
|  | <h3 id="new-features-8">New Features</h3> | 
|  | <ul> | 
|  | <li>A tenant can now be configured with a <em>max-ttl</em> which is used as an upper boundary for default | 
|  | TTL values configured for devices/tenants. Please refer to the <a href="https://www.eclipse.org/hono/docs/api/tenant#resource-limits-configuration-format">Tenant API</a> | 
|  | for details. | 
|  | The AMQP, HTTP, MQTT and Kura protocol adapters consider this property when setting a TTL on | 
|  | downstream event messages.</li> | 
|  | <li>A protocol adapter can now be configured with a timeout for idle tenants. When there has been no | 
|  | communication between a protocol adapter instance and the devices of a tenant, the former one releases | 
|  | allocated resources of the tenant. Currently this means that it closes AMQP links and stops reporting | 
|  | metrics for this tenant. The timeout is configured with the property <code>tenantIdleTimeout</code> for a protocol | 
|  | adapter. Please refer to the protocol adapter <a href="https://www.eclipse.org/hono/docs/admin-guide/">configuration guides</a> | 
|  | for details.</li> | 
|  | <li>The accounting period for the <em>message limit</em> checks can now be configured as <code>monthly</code>. | 
|  | In this case the data usage for a tenant is calculated from the beginning till the end of the | 
|  | (Gregorian) calendar month. Refer <a href="https://www.eclipse.org/hono/docs/concepts/resource-limits/">resource limits</a> | 
|  | for more information.</li> | 
|  | <li>The devices can now indicate a <em>time-to-live</em> duration for event messages published using | 
|  | the HTTP and MQTT adapters by setting the <em>hono-ttl</em> property in requests explicitly. Please refer to the | 
|  | <a href="https://www.eclipse.org/hono/docs/user-guide/http-adapter/#publish-an-event-authenticated-device">HTTP Adapter</a> | 
|  | and <a href="https://www.eclipse.org/hono/docs/user-guide/mqtt-adapter/#publishing-events">MQTT Adapter</a> for details.</li> | 
|  | <li>The device registry HTTP management API now properly implements <em>cross-origin resource sharing (CORS)</em> support, | 
|  | by allowing the service to be exposed to configured domains (by default, it’s exposed to all domains).</li> | 
|  | <li>The <code>org.eclipse.hono.util.MessageHelper</code> now provides convenience factory methods for creating | 
|  | new downstream messages from basic properties. | 
|  | <code>org.eclipse.hono.service.AbstractProtocolAdapterBase</code> has been adapted to delegate to these | 
|  | new factory methods.</li> | 
|  | <li>Hono’s protocol adapters can now use multiple trusted certificate authorities per tenant to authenticate | 
|  | devices based on client certificates. The list of trusted certificate authorities can be managed at the | 
|  | tenant level using the Device Registry Management API.</li> | 
|  | <li>Authenticated gateway devices can now subscribe to commands for specific devices. Before, gateways | 
|  | could only subscribe to commands directed at any of the devices that the gateway has acted on behalf of. | 
|  | With the new feature of also being able to subscribe to commands for specific devices, northbound | 
|  | applications will get notified of such a subscription along with the specific device id.</li> | 
|  | <li>Now a <em>max-ttd</em> value, which is used as an upper boundary for the <em>hono-ttd</em> value specified by the devices, | 
|  | can be set as an <em>extension</em> property in the adapters section of the tenant configuration.</li> | 
|  | </ul> | 
|  | <h3 id="api-changes-10">API Changes</h3> | 
|  | <ul> | 
|  | <li>The already deprecated <em>legacy metrics</em> support has been removed.</li> | 
|  | <li>The already deprecated <em>legacy device registry</em> and the corresponding base classes, which had been deprecated | 
|  | as well, have been removed.</li> | 
|  | <li>The topic filters used by MQTT devices to subscribe to commands has been changed slightly | 
|  | to better fit the addressing scheme used by the other protocol adapters. | 
|  | The existing topic filters have been deprecated but are still supported. | 
|  | Please refer to the <a href="https://www.eclipse.org/hono/docs/user-guide/mqtt-adapter/#command-control">MQTT adapter user guide</a> | 
|  | for details.</li> | 
|  | <li>The interface <code>ResourceLimitChecks</code> and its implementation classes have been moved to | 
|  | package <code>org.eclipse.hono.service.resourcelimits</code> from <code>org.eclipse.hono.service.plan</code>. | 
|  | Also the configuration parameters for the resource limits were renamed from <code>hono.plan</code> | 
|  | to <code>hono.resourceLimits</code>. Please refer to the protocol adapter <a href="https://www.eclipse.org/hono/docs/admin-guide/">configuration guides</a> | 
|  | for more information.</li> | 
|  | <li>The response payload of the <em>get Tenant</em> operation of the Tenant API has been changed to contain | 
|  | a list of trusted certificate authorities instead of just a single one. This way, protocol | 
|  | adapters can now authenticate devices based on client certificates signed by one of multiple | 
|  | different trusted root authorities defined for a tenant. | 
|  | All standard protocol adapters have been adapted to this change. | 
|  | The <em>Tenant</em> JSON schema object used in the tenant related resources of the Device Registry Management API | 
|  | has also been adapted to contain a list of trusted authorities instead of a single one.</li> | 
|  | </ul> | 
|  | <h3 id="deprecations-4">Deprecations</h3> | 
|  | <ul> | 
|  | <li>The OpenShift specific source-to-image deployment model has been removed in | 
|  | favor of the Helm charts and the Eclipse IoT Packages project. You can still | 
|  | deploy Hono on OpenShift using the Helm charts.</li> | 
|  | <li>Defining password secrets with user provided password hash, function and salt is deprecated in the device registry management | 
|  | API and will be removed in the upcoming versions. You should use <code>pwd-plain</code> property only going forward.</li> | 
|  | </ul> | 
|  | <h2 id="10-m7">1.0-M7</h2> | 
|  | <h3 id="new-features-9">New Features</h3> | 
|  | <ul> | 
|  | <li>The Hono Helm chart now supports to choose if the example Device Registry, example AMQP Messaging Network | 
|  | and/or the example Jaeger back end should be deployed and used with the Hono components or not. | 
|  | In the latter case, the chart now also supports setting configuration properties for using an already | 
|  | existing AMQP Messaging Network, Device Registry and/or Jaeger back end.</li> | 
|  | <li>A data grid based implementation of the Device Connection API has been added to Hono. This implementation | 
|  | can be used in production environments using a highly scalable data grid for storing device connection | 
|  | information. The service can be used instead of the simple implementation provided by the example Device | 
|  | Registry by means of setting a configuration property when <a href="https://www.eclipse.org/hono/docs/deployment/helm-based-deployment/#using-the-device-connection-service">deploying using the Helm chart</a>.</li> | 
|  | <li>A tenant can now be configured so that <em>all</em> OpenTracing spans created when processing messages for that | 
|  | specific tenant will be recorded in the tracing backend (overriding the default sampling strategy that | 
|  | might only record a certain percentage of traces). See | 
|  | <a href="https://www.eclipse.org/hono/docs/admin-guide/monitoring-tracing-config/#enforcing-the-recording-of-traces-for-a-tenant">Monitoring & Tracing</a> | 
|  | for more details.</li> | 
|  | </ul> | 
|  | <h3 id="api-changes-11">API Changes</h3> | 
|  | <ul> | 
|  | <li>The obsolete method variants of <code>reportTelemetry</code> in <code>org.eclipse.hono.service.metric.Metrics</code> | 
|  | have been removed. The new variants of this method accept an additional parameter of type <code>TenantObject</code>.</li> | 
|  | <li>The already deprecated <code>org.eclipse.hono.service.AbstractProtocolAdapterBase.getRegistrationAssertion</code> | 
|  | method has been removed. The alternate variant of the <code>getRegistrationAssertion</code> method which accepts an | 
|  | additional OpenTracing span parameter should be used.</li> | 
|  | <li>The already deprecated <code>getRegistrationAssertion</code>, <code>getTenantConfiguration</code>, <code>sendConnectedTtdEvent</code>, | 
|  | <code>sendDisconnectedTtdEvent</code> and <code>sendTtdEvent</code> methods in <code>org.eclipse.hono.service.AbstractProtocolAdapterBase</code> | 
|  | have been removed. The alternate variant of these methods which accepts an additional OpenTracing span parameter | 
|  | should be used.</li> | 
|  | </ul> | 
|  | <h3 id="deprecations-5">Deprecations</h3> | 
|  | <ul> | 
|  | <li>The deprecated Kura adapter is no longer deployed by default by the Helm chart. | 
|  | However, it can still be deployed by means of <a href="https://www.eclipse.org/hono/docs/deployment/helm-based-deployment/#deploying-optional-adapters">setting a configuration property</a>.</li> | 
|  | </ul> | 
|  | <h2 id="10-m6">1.0-M6</h2> | 
|  | <h3 id="new-features-10">New Features</h3> | 
|  | <ul> | 
|  | <li>Implementation of the new HTTP management API for tenants, devices and | 
|  | credentials.</li> | 
|  | <li>The health check endpoints of services can now be called securely via TLS. | 
|  | Please refer to the protocol adapter <a href="https://www.eclipse.org/hono/docs/admin-guide/">configuration guides</a> | 
|  | for the new parameters available.</li> | 
|  | <li>The <a href="https://www.eclipse.org/hono/docs/api/tenant/#resource-limits-configuration-format">Tenant API</a> now optionally allows | 
|  | specifying <em>minimum message size</em>. If it is specified, then the payload size of the incoming telemetry, event | 
|  | and command messages are calculated in accordance with the <em>minimum message size</em> by the AMQP, HTTP and MQTT | 
|  | protocol adapters and then recorded in the metrics system. | 
|  | See <a href="https://www.eclipse.org/hono/docs/api/metrics/#minimum-message-size">Metrics</a> for more details.</li> | 
|  | </ul> | 
|  | <h3 id="fixes--enhancements-28">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The automatic reconnect handling of the <code>HonoConnection</code> implementation has been | 
|  | improved and now applies an exponential back-off algorithm. The behavior can be | 
|  | configured using the <code>${PREFIX}_RECONNECT_*</code> configuration variables. Please | 
|  | refer to the <a href="https://www.eclipse.org/hono/docs/admin-guide/hono-client-configuration/">Hono Client Configuration guide</a> | 
|  | for details regarding these new variables.</li> | 
|  | <li>The <em>message limit</em> checks is now extended to include command and control messages. | 
|  | Please refer to the <a href="https://www.eclipse.org/hono/docs/concepts/resource-limits/">resource limits</a> for details.</li> | 
|  | <li>The health check server endpoint will now bind to a default port value of 8088 if no values | 
|  | are set explicitly in the configuration. It is also possible to start both a secure and an insecure | 
|  | server (using different ports) | 
|  | Refer to the <a href="https://www.eclipse.org/hono/docs/admin-guide/monitoring-tracing-config">Monitoring configuration guide</a> | 
|  | for details.</li> | 
|  | </ul> | 
|  | <h3 id="api-changes-12">API Changes</h3> | 
|  | <ul> | 
|  | <li>With the implementation of the new HTTP management API for the device registry, | 
|  | the class hierarchy for implementing device registry was significantly | 
|  | refactored. This also includes the deprecation of a list of classes and tests. | 
|  | Also see <a href="#device-registry-changes">Device registry changes</a> for more information.</li> | 
|  | <li>The <em>complete</em> interfaces, and the <em>base</em> and <em>complete</em> implementation | 
|  | classes for services got deprecated, and are planned to be removed in a future | 
|  | release. Also see <a href="#device-registry-changes">Device registry changes</a> for | 
|  | more information.</li> | 
|  | <li>The example Device Registry that comes with Hono now implements the new | 
|  | HTTP management API. Consequently, the URI endpoints for managing the content | 
|  | of the registry have changed accordingly.</li> | 
|  | <li>The configuration parameters for the health check endpoint were moved from | 
|  | <code>hono.app</code> to <code>hono.healthCheck</code> and renamed. <code>hono.app.healthCheckPort</code> is now | 
|  | <code>hono.healthCheck.insecurePort</code> and <code>hono.app.healthCheckBindAddress</code> is now | 
|  | <code>hono.healthCheck.insecurePortBindAdress</code>. Please refer to the protocol adapter | 
|  | <a href="https://www.eclipse.org/hono/docs/admin-guide/">configuration guides</a> for additional | 
|  | information on the new naming.</li> | 
|  | </ul> | 
|  | <h3 id="device-registry-changes">Device registry changes</h3> | 
|  | <p>The section summarizes changes made for 1.0-M5 in the device registry.</p> | 
|  | <p>During the development of Hono 1.0, we defined a new HTTP API for managing | 
|  | information stored in the device registry. This API replaces the current, | 
|  | provisional API, which was originally intended for tests to manipulate the file | 
|  | based device registry during system tests. The new HTTP based API is intended | 
|  | to replace the existing HTTP API, as well as the management part of the AMQP | 
|  | based API.</p> | 
|  | <p>The first major change is, that all the <em>complete</em> classes got deprecated. As | 
|  | they are based on the services for the protocol adapters. And those services | 
|  | are no longer considered to be used for managing information. The replacement | 
|  | for those classes are the new management APIs.</p> | 
|  | <p>Each of the three APIs got a companion API for <em>management</em>, which are located | 
|  | in the <code>org.eclipse.hono.service.management</code> base package.</p> | 
|  | <p>The class hierarchy was decoupled in order to make it easier to implement those | 
|  | services. The new design only requires to implement a service, which is not | 
|  | based on any other interface. And while your concrete implement still can | 
|  | implement the <code>Verticle</code> interface, this is no longer a requirement.</p> | 
|  | <p>Also the <em>base</em> classes got deprecated. Instead of inheriting the common | 
|  | functionality, to bind to the <em>event bus</em>, that functionality got moved into new | 
|  | <em>event bus adapter</em> classes, which take the reference of a service, and bind | 
|  | this service to the <em>event bus</em> instead of using inheritance. Those change | 
|  | make it possible to  re-use much of the functionality, but do not impose the | 
|  | requirement to inherit from either the <em>complete</em> or <em>base</em> classes. And | 
|  | this finally allows your service implementation to be extend your specific | 
|  | base class, and re-use common Hono functionality at the same time. This allows | 
|  | service implementations to implement both the standard API, as well as the | 
|  | management API in the same class. As Java does not allow inheritance | 
|  | from multiple classes, this was not possible before.</p> | 
|  | <p>The new default file based device registry, was modified to use the new class | 
|  | hierarchy and support the new management model.</p> | 
|  | <p>The device registry, which was provided in 1.0-M4 and before, is still part of | 
|  | the source tree, but was moved to <code>services/device-registry-legacy</code>. It is | 
|  | there to show the compatibility with the older class hierarchy, using the, | 
|  | now deprecated, <em>base</em> and <em>complete</em> classes. Newer implementations should not | 
|  | be build on this model.</p> | 
|  | <p>Clients of the <em>base</em> variants of the services, like the protocol adapters, | 
|  | do not need to make any changes.</p> | 
|  | <p>Implementations of the device registry services, using the existing <em>base</em> and | 
|  | <em>complete</em> can re-use that model, but are encouraged to migrate to the new model | 
|  | as soon as possible, as the legacy model is planned to be removed. The only | 
|  | impacting change is that the service interfaces no longer extend from | 
|  | <code>Verticle</code> directly, but that has been moved to the <em>base</em> implementation.</p> | 
|  | <p>Implementations of the services for protocol adapters (the non-management API), | 
|  | can switch to the new class hierarchy by dropping inheritance to the <em>base</em> | 
|  | class, and starting up a new instance of the corresponding <em>event bus adapter</em>, | 
|  | providing a reference to the service. For the <code>RegistrationService</code> it is also | 
|  | possible to inherit common functionality from <code>AbstractRegistrationService</code>.</p> | 
|  | <p>Implementations of the services for management need to simply inherit from the | 
|  | new management interfaces, and set up the <em>event bus adapters</em> the same way.</p> | 
|  | <p>The module <code>device-registry-legacy</code> as well as all classes and interfaces, | 
|  | which got deprecated, are planned to be dropped in 1.1.</p> | 
|  | <h2 id="10-m5">1.0-M5</h2> | 
|  | <h3 id="new-features-11">New Features</h3> | 
|  | <ul> | 
|  | <li>Hono’s protocol adapters and the other components now support using ECC based server certificates. | 
|  | The protocol adapters also support authenticating devices which present an ECC based client certificate. | 
|  | The example configuration now uses ECC based certificates by default.</li> | 
|  | <li>Hono now specifies a <a href="https://www.eclipse.org/hono/docs/api/device-connection/">Device Connection API</a> and | 
|  | contains an exemplary implementation of this API included in the device registry component. The purpose of the API is | 
|  | to be able to set and retrieve information about the connections from devices or gateways to the protocol adapters.</li> | 
|  | <li>This version implements the new HTTP management API for tenants, devices, and credentials.</li> | 
|  | </ul> | 
|  | <h3 id="fixes--enhancements-29">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The Hono Sandbox’s protocol adapters support using the gateway mode again.</li> | 
|  | <li>The <a href="/hono/getting-started/">Getting Started</a> guide has been rewritten | 
|  | to use the <a href="/hono/sandbox/">Hono Sandbox</a> or a local Minikube cluster | 
|  | instead of Docker Swarm.</li> | 
|  | <li>The MQTT adapter now closes the network connection to device on publish failures.</li> | 
|  | </ul> | 
|  | <h3 id="api-changes-13">API Changes</h3> | 
|  | <ul> | 
|  | <li>The optional methods of the <a href="https://www.eclipse.org/hono/docs/api/tenant/">Tenant API</a> have been | 
|  | removed. Implementations of the Tenant API are encouraged to expose the <em>tenants</em> endpoint defined by | 
|  | <a href="https://www.eclipse.org/hono/docs/api/management">Hono’s HTTP based management API</a> instead. | 
|  | Several of the formerly mandatory to include properties of the request and response messages have | 
|  | been made optional or removed altogether. Existing clients should not be affected by these changes, though.</li> | 
|  | <li>The optional methods of the | 
|  | <a href="https://www.eclipse.org/hono/docs/api/device-registration/">Device Registration API</a> have been | 
|  | removed. Implementations of the Device Registration API are encouraged to expose the <em>devices</em> endpoint defined by | 
|  | <a href="https://www.eclipse.org/hono/docs/api/management">Hono’s HTTP based management API</a> instead. | 
|  | Several of the formerly mandatory to include properties of the request and response messages have | 
|  | been made optional or removed altogether. Existing clients should not be affected by these changes, though.</li> | 
|  | <li>The response message format of the <em>assert Device Registration</em> operation of the Device Registration API | 
|  | has been changed, replacing the optional <code>gw-supported</code> boolean field with an optional <code>via</code> field. | 
|  | The value of this field contains the list of gateway that may act on behalf of the device on which | 
|  | the operation is invoked.</li> | 
|  | <li>The methods for invoking the optional operations of the Device Registration API have been removed | 
|  | from <code>org.eclipse.hono.client.RegistrationClient</code> and <code>org.eclipse.hono.client.impl.RegistrationClientImpl</code>.</li> | 
|  | <li>The optional methods of the <a href="https://www.eclipse.org/hono/docs/api/credentials/">Credentials API</a> | 
|  | have been removed. Implementations of the Credentials API are encouraged to expose the <em>credentials</em> endpoint defined | 
|  | by <a href="https://www.eclipse.org/hono/docs/api/management">Hono’s HTTP based management API</a> instead. | 
|  | Several of the formerly mandatory to include properties of the request and response messages have | 
|  | been made optional or removed altogether. Existing clients should not be affected by these changes, though.</li> | 
|  | <li>The <code>control</code> prefix in the northbound and southbound Command & Control endpoints has been renamed to <code>command</code>. | 
|  | The endpoint names with the <code>control</code> prefix are still supported but deprecated. The northbound endpoint for | 
|  | <em>business applications</em> to receive command responses has the <code>command_response</code> prefix now. The old <code>control</code> prefix | 
|  | for the receiver address is also still supported but deprecated.</li> | 
|  | <li>The <code>deviceId</code> parameter of the <code>getOrCreateCommandClient</code> and <code>getOrCreateAsyncCommandClient</code> methods of the | 
|  | <code>org.eclipse.hono.client.ApplicationClientFactory</code> interface has been removed. | 
|  | This means that a <code>CommandClient</code> or <code>AsyncCommandClient</code> instance can be used to send commands to arbitrary | 
|  | devices of a tenant now. Accordingly, the <code>CommandClient.sendCommand</code> and <code>AsyncCommandClient.sendAsyncCommand</code> | 
|  | methods now require an additional <code>deviceId</code> parameter.</li> | 
|  | <li>The deprecated methods of <code>org.eclipse.hono.client.HonoConnection</code> have been removed.</li> | 
|  | </ul> | 
|  | <h2 id="10-m4">1.0-M4</h2> | 
|  | <h3 id="new-features-12">New Features</h3> | 
|  | <ul> | 
|  | <li>Default properties can now also be set at the tenant level, affecting all devices | 
|  | belonging to the tenant. Please refer to the | 
|  | <a href="https://www.eclipse.org/hono/docs/user-guide/">protocol adapter user guides</a> for details.</li> | 
|  | <li><code>CredentialsClientImpl</code> now supports caching of response data received from a Credentials service based on | 
|  | <em>cache directives</em>. The protocol adapters are now equipped to cache the response from the Credentials Service. | 
|  | The protocol adapters support configuration variables to set the default cache timeout, the minimum | 
|  | and maximum cache sizes for this service.</li> | 
|  | <li>The example device registry’s Credentials service implementation now includes a <em>cache directive</em> | 
|  | in its response to the <em>get Credentials</em> operation which allows clients to cache credentials of | 
|  | type <em>hashed-password</em> and <em>x509-cert</em> for a configurable amount of time. Please refer to the | 
|  | <a href="https://www.eclipse.org/hono/docs/admin-guide/device-registry-config/">Device Registry Admin Guide</a> | 
|  | for details regarding the configuration properties to use.</li> | 
|  | <li>There is now an official specification of an HTTP API for managing the content of a device registry. | 
|  | The <a href="https://www.eclipse.org/hono/docs/api/management">HTTP Management API</a> is defined using by | 
|  | means of OpenAPI v3. Note, that the API is not yet implemented by the example device registry that comes with Hono.</li> | 
|  | <li>The Command & Control feature now supports gateway agnostic addressing of devices. This means that applications are | 
|  | able to send commands to devices without knowing the particular gateway they may be connected to.</li> | 
|  | <li>The concept and implementation of <em>message limit</em> have been added. The protocol adapters can be now | 
|  | enabled to verify this <em>message limit</em> for each tenant before accepting any telemetry/event messages. | 
|  | Please refer to the <a href="https://www.eclipse.org/hono/docs/concepts/resource-limits/">resource limits</a> for details.</li> | 
|  | <li>A basic Sigfox protocol adapter, for use with the Sigfox backend. Please read | 
|  | the <a href="https://www.eclipse.org/hono/docs/user-guide/sigfox-adapter/">Sigfox protocol adapter</a> | 
|  | documentation to learn more about pre-requisites and limitations.</li> | 
|  | </ul> | 
|  | <h3 id="fixes--enhancements-30">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>vert.x has been updated to version 3.7.0.</li> | 
|  | </ul> | 
|  | <h3 id="api-changes-14">API Changes</h3> | 
|  | <ul> | 
|  | <li>The <code>org.eclipse.hono.util.RegistrationConstants.FIELD_DEFAULTS</code> constant | 
|  | has been renamed to <code>org.eclipse.hono.util.RegistrationConstants.FIELD_PAYLOAD_DEFAULTS</code>.</li> | 
|  | <li>The <code>org.eclipse.hono.service.AbstractProtocolAdapterBase.newMessage</code> and | 
|  | <code>org.eclipse.hono.service.AbstractProtocolAdapterBase.addProperties</code> methods have | 
|  | been changed to accept an additional parameter of type <code>TenantObject</code> which may contain default | 
|  | properties defined for the tenant to be included in downstream messages.</li> | 
|  | <li>The <em>get Registration Information</em> operation of the Device Registration API is not optional anymore, | 
|  | it is now mandatory to implement. For device registry implementations based on the | 
|  | <code>CompleteRegistrationService</code> interface, there is no change needed as the operation is already | 
|  | defined there.</li> | 
|  | <li>The response message of the <em>assert Device Registration</em> operation does not contain an assertion | 
|  | token anymore. The <code>org.eclipse.hono.service.registration.BaseRegistrationService</code> class | 
|  | has been adapted accordingly.</li> | 
|  | <li>The already deprecated <code>org.eclipse.hono.client.CommandConsumerFactory.closeCommandConsumer</code> | 
|  | method has been removed.</li> | 
|  | <li>The response message format of the <em>assert Device Registration</em> operation of the Device Registration API | 
|  | has been changed to include an optional <code>gw-supported</code> boolean field. The value of this field refers to | 
|  | whether the device on which the operation is invoked allows one or more gateways to act on its behalf.</li> | 
|  | <li>The AMQP sender link address to be used by <em>business applications</em> to send commands to devices has been | 
|  | changed from <code>control/${tenant_id}/${device_id}</code> to <code>control/${tenant_id}</code> with command messages requiring | 
|  | the <code>to</code> property to be set to <code>control/${tenant_id}/${device_id}</code>. Using <code>control/${tenant_id}/${device_id}</code> | 
|  | as sender link address is still possible but gateway agnostic addressing of devices is not supported for | 
|  | such command messages.</li> | 
|  | </ul> | 
|  | <h3 id="deprecations-6">Deprecations</h3> | 
|  | <ul> | 
|  | <li>Instructions for script based deployment to Kubernetes have been removed from the deployment guide. | 
|  | Using Helm is now the only supported way of deploying Hono to Kubernetes.</li> | 
|  | </ul> | 
|  | <h2 id="10-m3">1.0-M3</h2> | 
|  | <h3 id="fixes--enhancements-31">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The protocol adapters add tracing information about invocations of the Device Registry | 
|  | services again.</li> | 
|  | <li>The example deployment now uses Qpid Dispatch Router 1.6.0.</li> | 
|  | </ul> | 
|  | <h2 id="10-m2">1.0-M2</h2> | 
|  | <h3 id="new-features-13">New Features</h3> | 
|  | <ul> | 
|  | <li>A new <em>experimental</em> LoRa protocol adapter has been added which (so far) supports the reception | 
|  | of telemetry data and events from devices connected to LoRa network providers and/or | 
|  | LoRa gateways. Note that this adapter is <em>not</em> considered production ready yet. | 
|  | Any help in improving and enhancing the adapter is more than welcome.</li> | 
|  | <li>The concept and implementation of <em>resource limits</em> have been added. Now a connection limit to define | 
|  | the maximum number of device connections to be allowed per tenant can be configured. The MQTT and AMQP | 
|  | adapters can be enabled to verify this connection limit before accepting any new connections. Please | 
|  | refer to the <a href="https://www.eclipse.org/hono/docs/concepts/resource-limits/">resource limits</a> for details.</li> | 
|  | </ul> | 
|  | <h3 id="fixes--enhancements-32">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The base classes for implementing the AMQP and HTTP endpoints for the Credentials, Tenant | 
|  | and Device Registration APIs now create an OpenTracing Span for tracking the | 
|  | processing of requests at a high level.</li> | 
|  | <li>The <code>hono-client</code> and <code>hono-core</code> artifacts use Java 8 level again so that they | 
|  | can be used in applications using Java 8.</li> | 
|  | <li>The protocol adapters now always specify values for the <em>ttd</em> and <em>qos</em> tags when | 
|  | reporting telemetry messages using meter name <em>hono.messages.received</em>. This fixes | 
|  | an issue when using the Prometheus back end where the HTTP adapter failed to report | 
|  | messages that contained a TTD value and others that didn’t.</li> | 
|  | <li>The Helm based deployment of the device registry has been fixed by adding the secret | 
|  | and deployment entries for the <code>device-identities.json</code>.</li> | 
|  | <li>Before uploading command responses, the MQTT and AMQP adapters now check whether the device is | 
|  | registered and also the adapter is enabled for the tenant.</li> | 
|  | </ul> | 
|  | <h3 id="api-changes-15">API Changes</h3> | 
|  | <ul> | 
|  | <li>The <code>hono-client</code> module has undergone several major and incompatible changes. The most | 
|  | important change affects the <code>HonoClient</code> interface which no longer serves as a factory | 
|  | for the arbitrary clients to the Hono service endpoints. | 
|  | It has been renamed to <code>HonoConnection</code> and now only represents the underlying | 
|  | AMQP connection to a peer and provides methods for managing the connection state | 
|  | and registering listeners for arbitrary life-cycle events of the connection. | 
|  | In addition to this, several factory interfaces have been added which can be used | 
|  | to create specific clients to Hono’s arbitrary services. All of the former <code>HonoClient</code> | 
|  | interface’s factory methods have been distributed accordingly to: | 
|  | <ul> | 
|  | <li><code>org.eclipse.hono.client.ApplicationClientFactory</code> for creating clients to | 
|  | Hono’s north bound Telemetry, Event and Command & Control API.</li> | 
|  | <li><code>org.eclipse.hono.client.DownstreamSenderFactory</code> for creating clients to | 
|  | Hono’s south bound Telemetry and Event APIs.</li> | 
|  | <li><code>org.eclipse.hono.client.CommandConsumerFactory</code> for creating clients to | 
|  | Hono’s south bound Command & Control API.</li> | 
|  | <li><code>org.eclipse.hono.client.TenantClientFactory</code> for creating clients to | 
|  | Hono’s Tenant API.</li> | 
|  | <li><code>org.eclipse.hono.client.RegistrationClientFactory</code> for creating clients to | 
|  | Hono’s Device Registration API.</li> | 
|  | <li><code>org.eclipse.hono.client.CredentialsClientFactory</code> for creating clients to | 
|  | Hono’s Credentials API.</li> | 
|  | </ul> | 
|  | </li> | 
|  | <li>In this context the <code>org.eclipse.hono.client.MessageSender</code> interface has been changed as follows: | 
|  | <ul> | 
|  | <li>The <em>send</em> methods have been changed to no longer accept a <em>registration assertion token</em> | 
|  | which became obsolete with the removal of the <em>Hono Messaging</em> component.</li> | 
|  | <li>The <em>isRegistrationAssertionRequired</em> method has been removed from the interface.</li> | 
|  | <li>All <em>send</em> method variants which accept specific message parameters have been moved into | 
|  | the new <code>org.eclipse.hono.client.DownstreamSender</code> interface which extends the existing | 
|  | <code>MessageSender</code>.</li> | 
|  | </ul> | 
|  | </li> | 
|  | <li>Several changes have been made to the <code>org.eclipse.hono.service.AbstractProtocolAdapterBase</code> | 
|  | class: | 
|  | <ul> | 
|  | <li>The <em>newMessage</em> and <em>addProperties</em> methods no longer require a boolean parameter indicating | 
|  | whether to include the assertion token in the message being created/amended. | 
|  | Custom protocol adapters should simply omit the corresponding parameter.</li> | 
|  | <li>The base class now uses <code>org.eclipse.hono.client.CommandConsumerFactory</code> instead of | 
|  | <code>org.eclipse.hono.client.CommandConnection</code> for creating | 
|  | <code>org.eclipse.hono.client.CommandConsumer</code> instances. | 
|  | The <em>setCommandConnection</em> and <em>getCommandConnection</em> methods have been | 
|  | renamed to <em>setCommandConsumerFactory</em> and <em>getCommandConsumerFactory</em> | 
|  | correspondingly.</li> | 
|  | <li>The base class now uses <code>org.eclipse.hono.client.TenantClientFactory</code> instead of | 
|  | <code>org.eclipse.hono.client.HonoClient</code> for creating <code>org.eclipse.hono.client.TenantClient</code> | 
|  | instances. | 
|  | The <em>setTenantServiceClient</em> and <em>getTenantServiceClient</em> methods have been | 
|  | renamed to <em>setTenantClientFactory</em> and <em>getTenantClientFactory</em> correspondingly.</li> | 
|  | <li>The base class now uses <code>org.eclipse.hono.client.RegistrationClientFactory</code> instead of | 
|  | <code>org.eclipse.hono.client.HonoClient</code> for creating | 
|  | <code>org.eclipse.hono.client.RegistrationClient</code> instances. | 
|  | The <em>setRegistrationServiceClient</em> and <em>getRegistrationServiceClient</em> methods have been | 
|  | renamed to <em>setRegistrationClientFactory</em> and <em>getRegistrationClientFactory</em> correspondingly.</li> | 
|  | <li>The base class now uses <code>org.eclipse.hono.client.CredentialsClientFactory</code> instead of | 
|  | <code>org.eclipse.hono.client.HonoClient</code> for creating | 
|  | <code>org.eclipse.hono.client.CredentialsClient</code> instances. | 
|  | The <em>setCredentialsServiceClient</em> and <em>getCredentialsServiceClient</em> methods have been | 
|  | renamed to <em>setCredentialsClientFactory</em> and <em>getCredentialsClientFactory</em> correspondingly.</li> | 
|  | <li>The base class now uses <code>org.eclipse.hono.client.DownstreamSendertFactory</code> instead of | 
|  | <code>org.eclipse.hono.client.HonoClient</code> for creating | 
|  | <code>org.eclipse.hono.client.DownstreamSender</code> instances. | 
|  | The <em>setHonoMessagingClient</em> and <em>getHonoMessagingClient</em> methods have been | 
|  | renamed to <em>setDownstreamSenderFactory</em> and <em>getDownstreamSenderFactory</em> correspondingly.</li> | 
|  | </ul> | 
|  | </li> | 
|  | <li>The <code>org.eclipse.hono.service.auth.device.UsernamePasswordAuthProvider</code> and the | 
|  | <code>org.eclipse.hono.service.auth.device.X509AuthProvider</code> now accept a | 
|  | <code>org.eclipse.hono.client.CredentialsClientFactory</code> instead of a | 
|  | <code>org.eclipse.hono.client.HonoClient</code> in their constructors.</li> | 
|  | <li>The <code>org.eclipse.hono.adapter.http.HonoBasicAuthHandler</code> and | 
|  | <code>org.eclipse.hono.adapter.http.X509AuthHandler</code> classes have been moved to | 
|  | package <code>org.eclipse.hono.service.http</code> in the <em>service-base</em> module for | 
|  | consistency reasons as all other reusable classes for implementing HTTP services/ | 
|  | adapters are located in that package already.</li> | 
|  | <li>The <code>org.eclipse.hono.client.HonoClient</code> class has been renamed to | 
|  | <code>org.eclipse.hono.client.HonoConnection</code> to better reflect its sole responsibility | 
|  | for establishing (and maintaining) the connection to a Hono service endpoint.</li> | 
|  | </ul> | 
|  | <h3 id="deprecations-7">Deprecations</h3> | 
|  | <ul> | 
|  | <li>The optional operations defined by the Tenant, Device Registration and Credentials API | 
|  | have been deprecated. They will be removed from Hono 1.0 altogether. | 
|  | A new HTTP based API will be defined instead which can then be used to <em>manage</em> the content | 
|  | of a device registry.</li> | 
|  | <li><code>org.eclipse.hono.client.HonoConnection</code>’s <em>connect</em> method variants accepting | 
|  | a disconnect handler have been deprecated and will be removed in Hono 1.0. | 
|  | Client code should use one of the other <em>connect</em> methods instead and register a | 
|  | <code>org.eclipse.hono.client.DisconnectListener</code> and/or a | 
|  | <code>org.eclipse.hono.client.ReconnectListener</code> to get notified about life-cycle | 
|  | events of the underlying AMQP connection.</li> | 
|  | </ul> | 
|  | <h2 id="10-m1">1.0-M1</h2> | 
|  | <h3 id="new-features-14">New Features</h3> | 
|  | <ul> | 
|  | <li>The AMQP adapter now supports limiting the number of concurrent connections in order | 
|  | to prevent Out of Memory errors. Please refer to | 
|  | <a href="https://www.eclipse.org/hono/docs/admin-guide/amqp-adapter-config/">AMQP Adapter Configuration</a> for details.</li> | 
|  | <li>The <code>org.eclipse.hono.client.AsyncCommandClient</code> has been added to support the sending of | 
|  | commands to devices and the receiving of responses in an asynchronous way. This can be used | 
|  | to decouple the sender and receiver from each other.</li> | 
|  | <li>The <code>org.eclipse.hono.service.tenant.CompleteBaseTenantService</code> class now rejects malformed | 
|  | encodings of public keys/certificates included in a request to add a trust anchor to a tenant.</li> | 
|  | </ul> | 
|  | <h3 id="deprecations-8">Deprecations</h3> | 
|  | <ul> | 
|  | <li>The <code>HonoClient.closeCommandConsumer()</code> method will be removed in Hono 1.0. | 
|  | The <code>CommandConsumer.close()</code> method should be used instead.</li> | 
|  | </ul> | 
|  | <h2 id="09">0.9</h2> | 
|  | <h3 id="new-features-15">New Features</h3> | 
|  | <ul> | 
|  | <li>The MQTT adapter now supports commands to be published using QoS 1. Please refer to | 
|  | <a href="https://www.eclipse.org/hono/docs/user-guide/mqtt-adapter/">MQTT adapter User Guide</a> for details.</li> | 
|  | <li>The MQTT adapter now supports limiting the number of concurrent connections in order | 
|  | to prevent running out of resources. Please refer to | 
|  | <a href="https://www.eclipse.org/hono/docs/admin-guide/mqtt-adapter-config/">MQTT Adapter Configuration</a> for details.</li> | 
|  | <li>The new <em>Helm deployment</em> for Kubernetes has been added. Please refer to | 
|  | <a href="https://www.eclipse.org/hono/docs/deployment/helm-based-deployment/">Helm based deployment guide</a> for details.</li> | 
|  | </ul> | 
|  | <h3 id="fixes--enhancements-33">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li><code>org.eclipse.hono.util.RequestResponseResult</code> now provides access to AMQP application-properties conveyed in the | 
|  | response message.</li> | 
|  | <li>The <code>org.eclipse.hono.service.registration.BaseRegistrationService</code> class now supports authorization of gateways | 
|  | (acting on behalf of a device) against a list of gateway identifiers instead of a single identifier only. For that purpose | 
|  | the <code>via</code> property of the device’s registration information may contain either a single string or a JSON array containing | 
|  | multiple strings. Based on this, a device can now be configured to connect via arbitrary gateways instead of just a single | 
|  | one.</li> | 
|  | </ul> | 
|  | <h3 id="api-changes-16">API Changes</h3> | 
|  | <ul> | 
|  | <li>The layout and structure of the metrics reported by Hono have been changed substantially. Many of the existing meters and tags | 
|  | have been changed or replaced in order to provide a more consistent set of metrics and increase the value of the information | 
|  | being reported. The legacy metrics still remain unchanged, though. | 
|  | Please refer to the <a href="https://www.eclipse.org/hono/docs/api/metrics/">Metrics definition</a> for details.</li> | 
|  | <li>In case of a failed connection attempt, <code>HonoClientImpl</code> will now determine based on the error whether it will re-try | 
|  | to connect to the peer. Before, reconnect attempts were done unconditionally, by default infinitely or up to the | 
|  | number of times defined in the <em>reconnectAttempts</em> property in the <code>ClientConfigProperties</code>. Now, when the outcome | 
|  | of the SASL handshake received from the peer during connection establishment indicates that invalid credentials were | 
|  | provided or that the server encountered a permanent error when handling the request, no further reconnect attempts | 
|  | will be done.</li> | 
|  | <li>The deprecated methods have been removed from <code>org.eclipse.hono.client.MessageSender</code> and | 
|  | its implementations.</li> | 
|  | <li>The Command & Control API’s <em>send a request/response command</em> operation has been changed. The response | 
|  | message to a command now must include the device and tenant identifiers of the device. Including | 
|  | these two properties should make it much easier to implement competing command response consumers | 
|  | in business applications. | 
|  | As a consequence, the <code>org.eclipse.hono.client.CommandResponse</code>’s factory methods have been changed to | 
|  | accept the tenant and device IDs as parameters.</li> | 
|  | <li>The <em>connectTimeout</em> configuration variable for the <code>HonoClient</code> now defines the time to wait not only for the TCP/TLS | 
|  | connection establishment but also for the SASL handshake and the exchange of the AMQP <em>open</em> frame.</li> | 
|  | <li>The (already deprecated) Hono Messaging component has been removed from Hono.</li> | 
|  | </ul> | 
|  | <h3 id="deprecations-9">Deprecations</h3> | 
|  | <ul> | 
|  | <li>The script based deployment to Kubernetes has been deprecated and will be removed in the next version. | 
|  | The Helm based deployment should be used instead.</li> | 
|  | <li>The <em>sendCommandResponse(String, String, Buffer, Map, int, SpanContext)</em> of the | 
|  | <code>org.eclipse.hono.client.CommandResponseSender</code> interface has been deprecated and | 
|  | will be removed in the next version. Custom protocol adapters should use | 
|  | <em>sendCommandResponse(CommandResponse, SpanContext)</em> instead.</li> | 
|  | </ul> | 
|  | <h2 id="09-m2">0.9-M2</h2> | 
|  | <h3 id="new-features-16">New Features</h3> | 
|  | <ul> | 
|  | <li>The MQTT protocol adapter now supports authentication of devices using X.509 client certificates. Please refer to | 
|  | the <a href="https://www.eclipse.org/hono/docs/user-guide/mqtt-adapter/">MQTT adapter user guide</a> for details regarding configuration.</li> | 
|  | </ul> | 
|  | <h3 id="fixes--enhancements-34">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li> | 
|  | <p>The OpenShift <em>source-to-image</em> (S2I) deployment is now the default | 
|  | OpenShift / OKD deployment. The plain OpenShift deployment, which had been deprecated | 
|  | in Hono 0.8, has been removed.</p> | 
|  | </li> | 
|  | <li> | 
|  | <p>The protocol adapters can now be configured with a custom <em>DNS timeout</em> value, limiting the time that the adapter | 
|  | will wait for the response to a DNS query. By default, a DNS query will time out after 5 seconds. | 
|  | Please refer to the protocol adapter admin guides for details regarding the new configuration variable.</p> | 
|  | </li> | 
|  | <li> | 
|  | <p>The following configuration variables have been added to <code>HonoClient</code>:</p> | 
|  | <ul> | 
|  | <li> | 
|  | <p><em>connectTimeout</em>: Sets a limit on the time that the client will wait for a TCP/TLS connection with the peer | 
|  | to be established. By default, a connection attempt will time out after 5 seconds.</p> | 
|  | </li> | 
|  | <li> | 
|  | <p><em>idleTimeout</em>: The idle timeout defines the amount of time after which a connection will be closed when no frames | 
|  | have been received from the remote peer. The default value is 16 seconds.</p> | 
|  | </li> | 
|  | <li> | 
|  | <p><em>sendMessageTimeout</em>: Limits the time to wait for a downstream consumer’s acknowledgement of | 
|  | an event or command response message received from a device. The default value is 1 second.</p> | 
|  | <p>Please refer to the <a href="https://www.eclipse.org/hono/docs/admin-guide/hono-client-configuration/">Hono Client Configuration guide</a> | 
|  | for details regarding the new configuration variables.</p> | 
|  | </li> | 
|  | </ul> | 
|  | </li> | 
|  | </ul> | 
|  | <h3 id="api-changes-17">API Changes</h3> | 
|  | <ul> | 
|  | <li>Some of the <em>tags</em> used by Hono’s components when reporting metrics have been changed. The common tag <em>component</em> | 
|  | has been renamed to <em>component-type</em>. The <em>protocol</em> tag formerly used by adapters to indicate the transport protocol | 
|  | that a message has been received over, has been replaced by the generic <em>component-name</em> tag which indicates the name | 
|  | of the component that a metric has been reported by. Please refer to the <a href="https://www.eclipse.org/hono/docs/api/metrics/">Metrics API</a> | 
|  | for details. Note that these changes do not affect the legacy Graphite based metrics back end.</li> | 
|  | </ul> | 
|  | <h3 id="deprecations-10">Deprecations</h3> | 
|  | <ul> | 
|  | <li>The Hono Messaging component is now  deprecated and will be removed from Hono in version 0.9 altogether. | 
|  | The example deployment has not been using Hono Messaging since 0.6 and there is no practical reason for | 
|  | using it anymore.</li> | 
|  | </ul> | 
|  | <h2 id="09-m1">0.9-M1</h2> | 
|  | <h3 id="new-features-17">New Features</h3> | 
|  | <ul> | 
|  | <li>The default Micrometer back end is now Prometheus, the Grafana dash boards have been updated | 
|  | to retrieve data from Prometheus instead of the old InfluxDB. | 
|  | The Graphite based legacy metrics format can still be used but requires building Hono from source and activating | 
|  | the <code>metrics-graphite</code> Maven build profile. | 
|  | Please refer to the <a href="https://www.eclipse.org/hono/docs/admin-guide/monitoring-tracing-config/">Monitoring admin guide</a> for details.</li> | 
|  | <li>The <code>org.eclipse.hono.service.credentials.CompleteBaseCredentialsService</code> class now supports the transparent | 
|  | <em>on-the-fly</em> hashing of clear text passwords contained in <em>hashed-password</em> credentials. Please refer to the | 
|  | <a href="https://www.eclipse.org/hono/docs/user-guide/device-registry/#managing-credentials">Device Registry user guide</a> for details.</li> | 
|  | </ul> | 
|  | <h3 id="fixes--enhancements-35">Fixes & Enhancements</h3> | 
|  | <ul> | 
|  | <li>The base classes for implementing the Device Registration and Tenant APIs have been instrumented | 
|  | with OpenTracing. New variants of the <code>RegistrationService.assertRegistration</code>, <code>TenantService.get</code> and <code>CredentialsService.get</code> | 
|  | methods have been added which also accept an OpenTracing span as a parameter. | 
|  | The default implementations of these methods still default to the previously existing methods. | 
|  | In <code>RegistrationService</code> implementations based on <code>BaseRegistrationService</code> an OpenTracing span will be created, | 
|  | passed on to the <code>assertRegistration</code> method and finished eventually. The same applies to <code>TenantService</code> implementations | 
|  | based on <code>BaseTenantService</code> concerning the <code>get</code> method and to <code>CredentialsService</code> implementations based on | 
|  | <code>BaseCredentialsService</code> concerning the <code>get</code> method.</li> | 
|  | </ul> | 
|  | <h3 id="api-changes-18">API Changes</h3> | 
|  | <ul> | 
|  | <li>The <code>org.eclipse.hono.service.credentials.CompleteBaseCredentialsService</code> class now requires an | 
|  | <code>org.eclipse.hono.auth.HonoPasswordEncoder</code> to be passed into its constructor. | 
|  | The <code>org.eclipse.hono.auth.SpringBasedHonoPasswordEncoder</code> has been added as a default implementation for | 
|  | this purpose.</li> | 
|  | <li>The <a href="https://www.eclipse.org/hono/docs/api/tenant/#trusted-ca-format">Tenant API</a> now optionally allows specifying an | 
|  | X.509 certificate instead of a public key when defining a trusted CA.</li> | 
|  | </ul> | 
|  |  | 
|  | </div> | 
|  |  | 
|  | </div> | 
|  |  | 
|  | </div> | 
|  |  | 
|  |  | 
|  | </div> | 
|  |  | 
|  |  | 
|  |  | 
|  | </div> | 
|  |  | 
|  |  | 
|  | <footer id="footer"> | 
|  | <div class="container"> | 
|  |  | 
|  | <div class="col-md-4 col-sm-6"> | 
|  | <h4>More</h4> | 
|  |  | 
|  | <ul> | 
|  | <li><a href="https://github.com/eclipse/hono" title="View Source Code on GitHub"><i class='fab fa-github'></i> GitHub Repository</a></li> | 
|  | <li><a href="https://twitter.com/EclipseHono" title="Follow us on Twitter"><i class='fab fa-twitter'></i> Twitter</a></li> | 
|  | <li><a href="https://gitter.im/eclipse/hono" title="Chat with us on Gitter"><i class='fab fa-gitter'></i> Chat with us</a></li> | 
|  | <li><a href='/hono/community/thankyou/'>Thank you</a></li> | 
|  | </ul> | 
|  |  | 
|  | <hr class="hidden-md hidden-lg hidden-sm"> | 
|  |  | 
|  | </div> | 
|  |  | 
|  |  | 
|  | <div class="col-md-4 col-sm-6"> | 
|  |  | 
|  | <h4>Eclipse Legal</h4> | 
|  |  | 
|  | <ul> | 
|  | <li><a href="http://www.eclipse.org/legal/privacy.php" target="_blank">Privacy Policy</a></li> | 
|  | <li><a href="http://www.eclipse.org/legal/termsofuse.php" target="_blank">Terms of Use</a></li> | 
|  | <li><a href="http://www.eclipse.org/legal/copyright.php" target="_blank">Copyright Agent</a></li> | 
|  | <li><a href="http://www.eclipse.org/legal/" target="_blank">Legal</a></li> | 
|  | <li><a href="https://www.eclipse.org/legal/epl-2.0/" target="_blank">License</a></li> | 
|  | <li><a href="https://eclipse.org/security/" target="_blank">Report a Vulnerability</a></li> | 
|  | </ul> | 
|  |  | 
|  | <hr class="hidden-md hidden-lg"> | 
|  |  | 
|  | </div> | 
|  |  | 
|  |  | 
|  | <div class="col-md-4 col-sm-6"> | 
|  |  | 
|  | <div class="eclipse-logos"> | 
|  | <div class="pull-left"> | 
|  | <a href="https://www.eclipse.org" target="_blank"> | 
|  | <img src="https://www.eclipse.org/hono/img/eclipse_foundation_logo_wo.svg" id="logo-eclipse-foundation"/> | 
|  | </a> | 
|  | </div> | 
|  | <div class="pull-right"> | 
|  | <a href="https://iot.eclipse.org" target="_blank"> | 
|  | <img src="https://www.eclipse.org/hono/img/iot-logo.png"/> | 
|  | </a> | 
|  | </div> | 
|  | </div> | 
|  |  | 
|  | </div> | 
|  |  | 
|  |  | 
|  | </div> | 
|  |  | 
|  | </footer> | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | <div id="copyright"> | 
|  | <div class="container"> | 
|  | <div class="col-md-12"> | 
|  |  | 
|  | <p class="pull-left">© 2019-2021 The Eclipse Hono Project</p> | 
|  |  | 
|  | <p class="pull-right"> | 
|  | Template by <a href="https://bootstrapious.com/p/universal-business-e-commerce-template">Bootstrapious</a>. | 
|  |  | 
|  |  | 
|  | Ported to Hugo by <a href="https://github.com/devcows/hugo-universal-theme">DevCows</a>. | 
|  | </p> | 
|  | </div> | 
|  | </div> | 
|  | </div> | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  |  | 
|  | </div> | 
|  |  | 
|  |  | 
|  |  | 
|  | <script src="//code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script> | 
|  | <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> | 
|  |  | 
|  | <script src="//cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script> | 
|  | <script src="//cdnjs.cloudflare.com/ajax/libs/waypoints/4.0.1/jquery.waypoints.min.js"></script> | 
|  | <script src="//cdnjs.cloudflare.com/ajax/libs/Counter-Up/1.0/jquery.counterup.min.js"></script> | 
|  | <script src="//cdnjs.cloudflare.com/ajax/libs/jquery-parallax/1.1.3/jquery-parallax.js"></script> | 
|  |  | 
|  | <script src="/hono/js/front.js"></script> | 
|  |  | 
|  |  | 
|  | <script src="/hono/js/owl.carousel.min.js"></script> | 
|  |  | 
|  |  | 
|  |  | 
|  | <script> | 
|  | (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': | 
|  | new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], | 
|  | j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= | 
|  | 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); | 
|  | })(window,document,'script','dataLayer','GTM-5WLCZXC'); | 
|  | </script> | 
|  |  | 
|  |  | 
|  | <script src="//www.eclipse.org/eclipse.org-common/themes/solstice/public/javascript/vendor/cookieconsent/default.min.js"></script> | 
|  |  | 
|  | <script src="//iot.eclipse.org/assets/js/eclipsefdn.adopters.js"></script> | 
|  | <script> | 
|  | eclipseFdnAdopters.getList({ | 
|  | project_id: "iot.hono", | 
|  | selector: ".eclipsefdn-adopters", | 
|  | logo_white: true | 
|  | }); | 
|  | </script> | 
|  |  | 
|  |  | 
|  | </body> | 
|  | </html> |