| <!DOCTYPE html> | 
 | <html> | 
 | <head> | 
 |     <meta charset="utf-8"> | 
 | <meta http-equiv="X-UA-Compatible" content="IE=edge"> | 
 | <meta name="viewport" content="width=device-width, initial-scale=1"> | 
 | <meta name="description" content=""> | 
 | <meta name="keywords" content="blogconnectivity,  "> | 
 | <title>  Connecting Eclipse Ditto to Eclipse Hono </title> | 
 |  | 
 | <link rel="stylesheet" href="css/syntax.css"> | 
 | <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" crossorigin="anonymous"> | 
 | <link rel="stylesheet" href="css/modern-business.css"> | 
 | <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" crossorigin="anonymous"> | 
 | <link rel="stylesheet" href="css/customstyles.css"> | 
 | <link rel="stylesheet" href="css/boxshadowproperties.css"> | 
 | <link rel="stylesheet" href="css/theme-ditto.css"> | 
 | <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700"> | 
 |  | 
 | <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js" crossorigin="anonymous"></script> | 
 | <script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js" crossorigin="anonymous"></script> | 
 | <script src="//cdnjs.cloudflare.com/ajax/libs/anchor-js/2.0.0/anchor.min.js" crossorigin="anonymous"></script> | 
 | <script src="js/toc.js"></script> | 
 | <script src="js/customscripts.js"></script> | 
 |  | 
 | <script type="application/ld+json"> | 
 | { | 
 |   "@context": "http://schema.org", | 
 |   "@type": "Organization", | 
 |   "url": "https://eclipse.org/ditto/", | 
 |   "logo": "https://eclipse.org/ditto/images/ditto.svg" | 
 | } | 
 | </script> | 
 |  | 
 | <link rel="icon" type="image/png" href="images/favicon-16x16.png" sizes="16x16"> | 
 | <link rel="icon" type="image/png" href="images/favicon-32x32.png" sizes="32x32"> | 
 | <link rel="icon" type="image/png" href="images/favicon-96x96.png" sizes="96x96"> | 
 |  | 
 | <link rel="alternate" type="application/rss+xml" title="Eclipse Ditto Blog" href="https://www.eclipse.org/ditto/feed.xml"> | 
 |  | 
 | <!-- Eclipse Foundation cookie consent: --> | 
 | <link rel="stylesheet" type="text/css" href="//www.eclipse.org/eclipse.org-common/themes/solstice/public/stylesheets/vendor/cookieconsent/cookieconsent.min.css" /> | 
 | <script src="//www.eclipse.org/eclipse.org-common/themes/solstice/public/javascript/vendor/cookieconsent/default.min.js"></script> | 
 |  | 
 |     <script> | 
 |         $(document).ready(function() { | 
 |             $("#tg-sb-link").click(function() { | 
 |                 $("#tg-sb-sidebar").toggle(); | 
 |                 $("#tg-sb-content").toggleClass('col-md-9'); | 
 |                 $("#tg-sb-content").toggleClass('col-md-12'); | 
 |                 $("#tg-sb-icon").toggleClass('fa-toggle-on'); | 
 |                 $("#tg-sb-icon").toggleClass('fa-toggle-off'); | 
 |             }); | 
 |         }); | 
 |     </script> | 
 | </head> | 
 |  | 
 |  | 
 | <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> | 
 |  | 
 |  | 
 |  | 
 | <body> | 
 | <!-- Navigation --> | 
 | <nav class="navbar navbar-inverse navbar-fixed-top"> | 
 |     <div class="container topnavlinks"> | 
 |         <div class="navbar-header"> | 
 |             <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> | 
 |                 <span class="sr-only">Toggle navigation</span> | 
 |                 <span class="icon-bar"></span> | 
 |                 <span class="icon-bar"></span> | 
 |                 <span class="icon-bar"></span> | 
 |             </button> | 
 |             <a class="navbar-ditto-home" href="index.html"> <img src="images/ditto_allwhite_symbolonly.svg" class="ditto-navbar-symbol" alt="Home"> <img src="images/ditto_allwhite_textonly.svg" class="ditto-navbar-symbol-text" alt="Ditto"></a> | 
 |         </div> | 
 |         <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> | 
 |             <ul class="nav navbar-nav navbar-right"> | 
 |                 <!-- toggle sidebar button --> | 
 |                 <!--<li><a id="tg-sb-link" href="#"><i id="tg-sb-icon" class="fa fa-toggle-on"></i> Nav</a></li>--> | 
 |                 <!-- entries without drop-downs appear here --> | 
 |  | 
 |  | 
 |  | 
 |  | 
 |                  | 
 |                  | 
 |                  | 
 |                 <li><a href="blog.html">Blog</a></li> | 
 |                  | 
 |                  | 
 |                  | 
 |                 <li><a href="intro-overview.html">Documentation</a></li> | 
 |                  | 
 |                  | 
 |                  | 
 |                 <li><a href="http-api-doc.html">HTTP API</a></li> | 
 |                  | 
 |                  | 
 |                  | 
 |                 <li><a href="sandbox.html">Sandbox</a></li> | 
 |                  | 
 |                  | 
 |                  | 
 |                 <li><a href="https://github.com/eclipse/ditto" target="_blank">GitHub</a></li> | 
 |                  | 
 |                  | 
 |                  | 
 |                 <li><a href="https://github.com/eclipse/ditto-examples" target="_blank">GitHub examples</a></li> | 
 |                  | 
 |                  | 
 |                  | 
 |                 <!-- entries with drop-downs appear here --> | 
 |                 <!-- conditional logic to control which topnav appears for the audience defined in the configuration file.--> | 
 |                  | 
 |                  | 
 |                 <li class="dropdown"> | 
 |                     <a href="#" class="dropdown-toggle" data-toggle="dropdown">Links<b class="caret"></b></a> | 
 |                     <ul class="dropdown-menu"> | 
 |                          | 
 |                          | 
 |                         <li><a href="https://projects.eclipse.org/projects/iot.ditto" target="_blank">Eclipse Ditto Project</a></li> | 
 |                          | 
 |                          | 
 |                          | 
 |                         <li><a href="https://www.eclipse.org/forums/index.php/f/364/" target="_blank">Forum</a></li> | 
 |                          | 
 |                          | 
 |                          | 
 |                         <li><a href="https://ci.eclipse.org/ditto/" target="_blank">Jenkins</a></li> | 
 |                          | 
 |                          | 
 |                          | 
 |                         <li><a href="https://dev.eclipse.org/mhonarc/lists/ditto-dev/" target="_blank">Mailing list archives</a></li> | 
 |                          | 
 |                          | 
 |                          | 
 |                         <li><a href="https://gitter.im/eclipse/ditto" target="_blank">Gitter.im chat</a></li> | 
 |                          | 
 |                          | 
 |                     </ul> | 
 |                 </li> | 
 |                  | 
 |                  | 
 |                  | 
 |                 <!--comment out this block if you want to hide search--> | 
 |                 <li> | 
 |                     <!--start search--> | 
 |                     <div id="search-demo-container"> | 
 |                         <input type="text" id="search-input" placeholder="search..."> | 
 |                         <ul id="results-container"></ul> | 
 |                     </div> | 
 |                     <script src="//cdnjs.cloudflare.com/ajax/libs/simple-jekyll-search/0.0.9/jekyll-search.js" type="text/javascript"></script> | 
 |                     <script type="text/javascript"> | 
 |                             SimpleJekyllSearch.init({ | 
 |                                 searchInput: document.getElementById('search-input'), | 
 |                                 resultsContainer: document.getElementById('results-container'), | 
 |                                 dataSource: 'search.json', | 
 |                                 searchResultTemplate: '<li><a href="{url}" title="Connecting Eclipse Ditto to Eclipse Hono">{title}</a></li>', | 
 |                                 noResultsText: 'No results found.', | 
 |                                 limit: 10, | 
 |                                 fuzzy: true, | 
 |                     }) | 
 |                     </script> | 
 |                     <!--end search--> | 
 |                 </li> | 
 |             </ul> | 
 |         </div> | 
 |     </div> | 
 |     <!-- /.container --> | 
 | </nav> | 
 |  | 
 | <!-- Page Content --> | 
 | <div class="container"> | 
 |   <div id="main"> | 
 |     <!-- Content Row --> | 
 |     <div class="row"> | 
 |          | 
 |          | 
 |  | 
 |         <!-- Content Column --> | 
 |         <div class="col-md-12" id="tg-sb-content"> | 
 |             <!-- Look the author details up from the site config. --> | 
 |  | 
 |  | 
 | <!-- Output author details if some exist. --> | 
 | <!-- Output author details if some exist. --> | 
 | <!----> | 
 | <!--<span>--> | 
 |     <!--<!– Mugshot. –>--> | 
 |     <!--<img src="https://www.gravatar.com/avatar/19a9fd49b6778aef898249fb4f11bd24?s=135" alt="A photo of Thomas Jäckle" />--> | 
 |  | 
 | <!--<!– Personal Info. –>--> | 
 |     <!--Written by <a href="https://github.com/thjaeckle" target="_blank">Thomas Jäckle</a>--> | 
 | <!--</span>--> | 
 | <!----> | 
 |  | 
 | <article class="post" itemscope itemtype="http://schema.org/BlogPosting"> | 
 |  | 
 |     <header class="post-header"> | 
 |         <h1 class="post-title" itemprop="name headline">Connecting Eclipse Ditto to Eclipse Hono</h1> | 
 |         <p class="post-meta">Published by <img src="https://www.gravatar.com/avatar/19a9fd49b6778aef898249fb4f11bd24?s=135" alt="A photo of Thomas Jäckle" style="width:50px;border-radius:50%;display:inline-block;margin-right:5px;" /><span itemprop="author" itemscope itemtype="http://schema.org/Person"><span itemprop="name"><a href="https://github.com/thjaeckle" target="_blank">Thomas Jäckle</a> </span></span> on <time datetime="2018-05-02T00:00:00+00:00" itemprop="datePublished">May 2, 2018</time> - Tags: | 
 |              | 
 |              | 
 |              | 
 |             <a href="tag_blog.html">blog</a>,  | 
 |              | 
 |              | 
 |              | 
 |             <a href="tag_connectivity.html">connectivity</a> | 
 |              | 
 |              | 
 |              | 
 |  | 
 |         </p> | 
 |  | 
 |  | 
 |     </header> | 
 |  | 
 |     <div class="post-content" itemprop="articleBody"> | 
 |  | 
 |          | 
 |  | 
 |          | 
 |          | 
 | <!-- this handles the automatic toc. use ## for subheads to auto-generate the on-page minitoc. if you use html tags, you must supply an ID for the heading element in order for it to appear in the minitoc. --> | 
 | <script> | 
 | $( document ).ready(function() { | 
 |   // Handler for .ready() called. | 
 |  | 
 | $('#toc').toc({ minimumHeaders: 0, listType: 'ul', showSpeed: 0, headers: 'h2,h3,h4' }); | 
 |  | 
 | /* this offset helps account for the space taken up by the floating toolbar. */ | 
 | $('#toc').on('click', 'a', function() { | 
 |   var target = $(this.getAttribute('href')) | 
 |     , scroll_target = target.offset().top | 
 |  | 
 |   $(window).scrollTop(scroll_target - 10); | 
 |   return false | 
 | }) | 
 |    | 
 | }); | 
 | </script> | 
 |  | 
 | <div id="toc"></div> | 
 |  | 
 |          | 
 |  | 
 |         <div class="alert alert-danger" role="alert"><i class="fa fa-exclamation-circle"></i> <b>Warning:</b> This guide does no longer work with the latest (1.x) versions of Ditto + Hono. Please take a look and make use of the <a href="https://www.eclipse.org/packages/packages/cloud2edge/">Eclipse IoT Packages “cloud2edge” package</a> in order to setup and automatically connect Ditto + Hono.</div> | 
 |  | 
 | <p>With the recently released Ditto milestone <a href="2018-04-26-milestone-announcement-030-M1.html">0.3.0-M1</a> the <code class="highlighter-rouge">connectivity</code> | 
 | to AMQP 1.0 endpoints can now be established in a durable and stable way (including failovers, etc.).</p> | 
 |  | 
 | <p>That means Ditto now is ready to be connected to <a href="https://www.eclipse.org/hono/">Eclipse Hono’s</a> “northbound” API which | 
 | is provided via AMQP 1.0.<br /> | 
 | By doing so it is for example possible to receive Hono telemetry  | 
 | messages (see heading “Northbound Operations”) which a device <code class="highlighter-rouge">demo-device</code> connected to the “southbound” of Hono sends  | 
 | via HTTP or MQTT (the currently available protocol adapters of Hono) in Ditto.<br /> | 
 | When received, the payload can be translated into a format Ditto understands in order to update the  | 
 | <a href="intro-digitaltwins.html">digital twin</a> of the <code class="highlighter-rouge">demo-device</code> device and provide API access to the twin, e.g. via <code class="highlighter-rouge">HTTP</code> | 
 | or <code class="highlighter-rouge">WebSocket</code>.</p> | 
 |  | 
 | <p>This blog post walks through the steps required to connect Ditto and Hono by adding a connection between the Hono and  | 
 | Ditto sandboxes at</p> | 
 |  | 
 | <ul> | 
 |   <li><a href="http://hono.eclipse.org">hono.eclipse.org</a></li> | 
 |   <li><a href="https://ditto.eclipseprojects.io">ditto.eclipseprojects.io</a></li> | 
 | </ul> | 
 |  | 
 | <h2 id="scenario">Scenario</h2> | 
 |  | 
 | <p>The following graphic illustrates the scenario:</p> | 
 |  | 
 | <figure><img class="docimage" src="images/blog/2018-05-02-ditto-hono-digital-twin.png" alt="Ditto-Hono digital twin" style="max-width: 469px" /><figcaption>Scenario for providing a digital twin in Ditto of a device connected via Hono</figcaption></figure> | 
 |  | 
 | <p>Let’s assume for this tutorial that we have a device (e.g. containing a sensor) <code class="highlighter-rouge">demo-device</code> which is capable of  | 
 | measuring temperature and humidity.</p> | 
 |  | 
 | <p>This device sends the sensor telemetry data every 5 minutes via MQTT into the cloud in either of the following formats:</p> | 
 |  | 
 | <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w"> | 
 |   </span><span class="s2">"temp"</span><span class="p">:</span><span class="w"> </span><span class="mf">23.42</span><span class="p">,</span><span class="w"> | 
 |   </span><span class="s2">"hum"</span><span class="p">:</span><span class="w"> </span><span class="mf">44.42</span><span class="w"> | 
 | </span><span class="p">}</span><span class="w"> | 
 | </span></code></pre></div></div> | 
 |  | 
 | <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w"> | 
 |   </span><span class="s2">"temp"</span><span class="p">:</span><span class="w"> </span><span class="mf">23.42</span><span class="w"> | 
 | </span><span class="p">}</span><span class="w"> | 
 | </span></code></pre></div></div> | 
 |  | 
 | <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w"> | 
 |   </span><span class="s2">"hum"</span><span class="p">:</span><span class="w"> </span><span class="mf">44.42</span><span class="w"> | 
 | </span><span class="p">}</span><span class="w"> | 
 | </span></code></pre></div></div> | 
 |  | 
 | <p>We want to create a digital twin for this device in order to access the device’s sensor data as API via Eclipse Ditto.</p> | 
 |  | 
 | <h2 id="steps-in-hono">Steps in Hono</h2> | 
 |  | 
 | <p>The steps in order to get started with Eclipse Hono are documented in the  | 
 | <a href="https://www.eclipse.org/hono/getting-started/">Hono getting started</a> and in a new  | 
 | <a href="https://blog.bosch-si.com/developer/using-multi-tenancy-in-eclipse-hono/">Blog post about using multi-tenancy in Eclipse Hono</a>.  | 
 | We show them very briefly here as well but in order to comprehend what and why we are doing what we do please consult  | 
 | the Hono documentation.</p> | 
 |  | 
 | <h3 id="create-a-tenant">Create a tenant</h3> | 
 |  | 
 | <p>First of all, create a new Hono tenant (we chose the tenant name <code class="highlighter-rouge">org.eclipse.ditto</code>):</p> | 
 |  | 
 | <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>curl <span class="nt">-X</span> POST <span class="nt">-i</span> <span class="nt">-H</span> <span class="s1">'Content-Type: application/json'</span> <span class="nt">-d</span> <span class="s1">'{"tenant-id": "org.eclipse.ditto"}'</span> http://hono.eclipse.org:28080/tenant | 
 | </code></pre></div></div> | 
 |  | 
 | <h3 id="register-a-device">Register a device</h3> | 
 |  | 
 | <p>Register a new device in Hono (we chose the device-id <code class="highlighter-rouge">demo-device</code>):</p> | 
 |  | 
 | <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>curl <span class="nt">-X</span> POST <span class="nt">-i</span> <span class="nt">-H</span> <span class="s1">'Content-Type: application/json'</span> <span class="nt">-d</span> <span class="s1">'{"device-id": "demo-device"}'</span> http://hono.eclipse.org:28080/registration/org.eclipse.ditto | 
 | </code></pre></div></div> | 
 |  | 
 | <h3 id="add-a-device-credential">Add a device credential</h3> | 
 |  | 
 | <p>In order for the device being able to send telemetry it needs to authenticate. For that we will need to add a credential | 
 | for that device in Hono.</p> | 
 |  | 
 | <p>We choose the <code class="highlighter-rouge">hashed-password</code> type:</p> | 
 |  | 
 | <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ PWD_HASH</span><span class="o">=</span><span class="k">$(</span><span class="nb">echo</span> <span class="nt">-n</span> <span class="s1">'demo-device-password'</span> | openssl dgst <span class="nt">-binary</span> <span class="nt">-sha512</span> | base64 <span class="nt">-w</span> 0<span class="k">)</span> | 
 | <span class="nv">$ </span>curl <span class="nt">-X</span> POST <span class="nt">-i</span> <span class="nt">-H</span> <span class="s1">'Content-Type: application/json'</span> <span class="nt">-d</span> <span class="s1">'{ | 
 |   "device-id": "demo-device", | 
 |   "type": "hashed-password", | 
 |   "auth-id": "demo-device-auth", | 
 |   "secrets": [{ | 
 |       "hash-function" : "sha-512", | 
 |       "pwd-hash": "'</span><span class="nv">$PWD_HASH</span><span class="s1">'" | 
 |   }] | 
 | }'</span> http://hono.eclipse.org:28080/credentials/org.eclipse.ditto | 
 | </code></pre></div></div> | 
 |  | 
 | <h3 id="publish-data">Publish data</h3> | 
 |  | 
 | <p>You are now able to publish <code class="highlighter-rouge">telemetry</code> (or also <code class="highlighter-rouge">event</code>) data via the Hono HTTP adapter:</p> | 
 |  | 
 | <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>curl <span class="nt">-X</span> POST <span class="nt">-i</span> <span class="nt">-u</span> demo-device-auth@org.eclipse.ditto:demo-device-password <span class="nt">-H</span> <span class="s1">'Content-Type: application/json'</span> <span class="nt">-d</span> <span class="s1">'{"temp": 23.07}'</span> http://hono.eclipse.org:8080/telemetry | 
 | <span class="nv">$ </span>curl <span class="nt">-X</span> POST <span class="nt">-i</span> <span class="nt">-u</span> demo-device-auth@org.eclipse.ditto:demo-device-password <span class="nt">-H</span> <span class="s1">'Content-Type: application/json'</span> <span class="nt">-d</span> <span class="s1">'{"hum": 45.85}'</span>  http://hono.eclipse.org:8080/telemetry | 
 | </code></pre></div></div> | 
 |  | 
 | <p>However as there is not yet a <code class="highlighter-rouge">consumer</code> listening for the messages, the Hono HTTP adapter will for example return an | 
 | error code <code class="highlighter-rouge">503 - Service unavailable</code> when publishing a <code class="highlighter-rouge">telemetry</code> message.</p> | 
 |  | 
 | <p>Alternatively you can also publish telemetry data via MQTT:</p> | 
 |  | 
 | <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>mosquitto_pub <span class="nt">-u</span> <span class="s1">'demo-device-auth@org.eclipse.ditto'</span> <span class="nt">-P</span> demo-device-password <span class="nt">-t</span> telemetry <span class="nt">-m</span> <span class="s1">'{"temp": 23.07}'</span> | 
 | <span class="nv">$ </span>mosquitto_pub <span class="nt">-u</span> <span class="s1">'demo-device-auth@org.eclipse.ditto'</span> <span class="nt">-P</span> demo-device-password <span class="nt">-t</span> telemetry <span class="nt">-m</span> <span class="s1">'{"hum": 45.85}'</span> | 
 | </code></pre></div></div> | 
 |  | 
 | <p>In the following steps we will register the missing <code class="highlighter-rouge">consumer</code> in Ditto by creating a connection to the Hono tenant  | 
 | in Ditto’s connectivity.</p> | 
 |  | 
 | <h2 id="steps-in-ditto">Steps in Ditto</h2> | 
 |  | 
 | <p>We want to create a digital twin of the device connected to Eclipse Hono in order to access its latest reported state  | 
 | via the Ditto <a href="httpapi-overview.html">HTTP API</a>, in order to be able to find it in a population of digital twins or | 
 | in order to be notified about changed via an API optimized for the web.</p> | 
 |  | 
 | <h3 id="create-a-digital-twin">Create a digital twin</h3> | 
 |  | 
 | <p>The first step is to create a skeleton for the digital twin by creating a Ditto <code class="highlighter-rouge">Thing</code>.<br /> | 
 | Notice that we authenticate with the sandbox user <code class="highlighter-rouge">demo5</code> - a default <a href="basic-policy.html">Policy</a> is implicitly  | 
 | created so that only that user may read+write the created <code class="highlighter-rouge">Thing</code>.</p> | 
 |  | 
 | <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>curl <span class="nt">-X</span> PUT <span class="nt">-i</span> <span class="nt">-u</span> demo5:demo <span class="nt">-H</span> <span class="s1">'Content-Type: application/json'</span> <span class="nt">-d</span> <span class="s1">'{ | 
 |     "attributes": { | 
 |         "location": "Germany" | 
 |     }, | 
 |     "features": { | 
 |         "temperature": { | 
 |             "properties": { | 
 |                 "value": null | 
 |             } | 
 |         }, | 
 |         "humidity": { | 
 |             "properties": { | 
 |                 "value": null | 
 |             } | 
 |         } | 
 |     } | 
 | }'</span> https://ditto.eclipseprojects.io/api/2/things/org.eclipse.ditto:demo-device | 
 | </code></pre></div></div> | 
 |  | 
 | <p>Make sure the digital twin was created:</p> | 
 |  | 
 | <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>curl <span class="nt">-i</span> <span class="nt">-u</span> demo5:demo https://ditto.eclipseprojects.io/api/2/things/org.eclipse.ditto:demo-device | 
 | </code></pre></div></div> | 
 |  | 
 | <h3 id="create-a-connection-to-hono">Create a connection to Hono</h3> | 
 |  | 
 | <p>Ditto recently added support for <a href="connectivity-manage-connections.html">managing connections</a> to foreign endpoints  | 
 | (currently to AMQP 1.0 or to AMQP 0.9.1). As Hono provides an AMQP 1.0 endpoint, a connection can be added in Ditto  | 
 | which connects to Hono and acts as a “northbound” <code class="highlighter-rouge">consumer</code>.</p> | 
 |  | 
 | <p>The following configuration for the connection has to be applied:</p> | 
 |  | 
 | <ul> | 
 |   <li>AMQP 1.0 hostname: <code class="highlighter-rouge">hono.eclipse.org</code></li> | 
 |   <li>AMQP 1.0 port: <code class="highlighter-rouge">15672</code></li> | 
 |   <li>username: <code class="highlighter-rouge">consumer@HONO</code></li> | 
 |   <li>password: <code class="highlighter-rouge">verysecret</code></li> | 
 |   <li>sources: | 
 |     <ul> | 
 |       <li><code class="highlighter-rouge">telemetry/org.eclipse.ditto</code></li> | 
 |       <li><code class="highlighter-rouge">event/org.eclipse.ditto</code></li> | 
 |     </ul> | 
 |   </li> | 
 | </ul> | 
 |  | 
 | <h4 id="test-the-connection">Test the connection</h4> | 
 |  | 
 | <p>Send the following “test connection” command via HTTP in order to test if the Ditto sandbox can connect to the Hono one.</p> | 
 |  | 
 | <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>curl <span class="nt">-X</span> POST <span class="nt">-i</span> <span class="nt">-u</span> devops:devopsPw1! <span class="nt">-H</span> <span class="s1">'Content-Type: application/json'</span> <span class="nt">-d</span> <span class="s1">'{ | 
 |     "targetActorSelection": "/system/sharding/connection", | 
 |     "headers": { | 
 |         "aggregate": false | 
 |     }, | 
 |     "piggybackCommand": { | 
 |         "type": "connectivity.commands:testConnection", | 
 |         "connection": { | 
 |             "id": "hono-sandbox-connection-1", | 
 |             "connectionType": "amqp-10", | 
 |             "connectionStatus": "open", | 
 |             "uri": "amqp://consumer%40HONO:verysecret@hono.eclipse.org:15672", | 
 |             "failoverEnabled": true, | 
 |             "sources": [{ | 
 |                 "addresses": [ | 
 |                     "telemetry/org.eclipse.ditto", | 
 |                     "event/org.eclipse.ditto" | 
 |                 ], | 
 |                 "authorizationContext": ["nginx:demo5"] | 
 |             }] | 
 |         } | 
 |     } | 
 | }'</span> https://ditto.eclipseprojects.io/devops/piggyback/connectivity?timeout<span class="o">=</span>8s | 
 | </code></pre></div></div> | 
 |  | 
 | <p>The result should be:</p> | 
 |  | 
 | <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w"> | 
 |     </span><span class="s2">"?"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |         </span><span class="s2">"-1"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |             </span><span class="s2">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"connectivity.responses:testConnection"</span><span class="p">,</span><span class="w"> | 
 |             </span><span class="s2">"status"</span><span class="p">:</span><span class="w"> </span><span class="mi">200</span><span class="p">,</span><span class="w"> | 
 |             </span><span class="s2">"connectionId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hono-sandbox-connection-1"</span><span class="p">,</span><span class="w"> | 
 |             </span><span class="s2">"testResult"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ditto-cluster=Success(successfully connected + initialized mapper)"</span><span class="w"> | 
 |         </span><span class="p">}</span><span class="w"> | 
 |     </span><span class="p">}</span><span class="w"> | 
 | </span><span class="p">}</span><span class="w"> | 
 | </span></code></pre></div></div> | 
 |  | 
 | <p>Great, it looks like with the provided credentials we can connect to the Hono sandbox.</p> | 
 |  | 
 | <h4 id="define-a-payload-mapping">Define a payload mapping</h4> | 
 |  | 
 | <p>In the <a href="#scenario">scenario</a> we described the payloads our device sends via MQTT. As those JSON payloads are missing | 
 | some information required for Ditto to map it to a <a href="protocol-overview.html">Ditto Protocol</a> message Ditto uses for  | 
 | updating the digital twin, we have to configure a <a href="connectivity-mapping.html">payload mapping</a> in order to add the  | 
 | missing information.</p> | 
 |  | 
 | <p>Whenever one of the 3 following messages arrives at Ditto’s <code class="highlighter-rouge">consumer</code>, a payload mapping should be performed:</p> | 
 |  | 
 | <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w"> | 
 |   </span><span class="s2">"temp"</span><span class="p">:</span><span class="w"> </span><span class="mf">23.42</span><span class="p">,</span><span class="w"> | 
 |   </span><span class="s2">"hum"</span><span class="p">:</span><span class="w"> </span><span class="mf">44.42</span><span class="w"> | 
 | </span><span class="p">}</span><span class="w"> | 
 | </span></code></pre></div></div> | 
 |  | 
 | <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w"> | 
 |   </span><span class="s2">"temp"</span><span class="p">:</span><span class="w"> </span><span class="mf">23.42</span><span class="w"> | 
 | </span><span class="p">}</span><span class="w"> | 
 | </span></code></pre></div></div> | 
 |  | 
 | <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w"> | 
 |   </span><span class="s2">"hum"</span><span class="p">:</span><span class="w"> </span><span class="mf">44.42</span><span class="w"> | 
 | </span><span class="p">}</span><span class="w"> | 
 | </span></code></pre></div></div> | 
 |  | 
 | <p>A JavaScript based mapping which exactly does this could look like this:</p> | 
 |  | 
 | <div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nx">mapToDittoProtocolMsg</span><span class="p">(</span> | 
 |     <span class="nx">headers</span><span class="p">,</span> | 
 |     <span class="nx">textPayload</span><span class="p">,</span> | 
 |     <span class="nx">bytePayload</span><span class="p">,</span> | 
 |     <span class="nx">contentType</span> | 
 | <span class="p">)</span> <span class="p">{</span> | 
 |  | 
 |     <span class="k">if</span> <span class="p">(</span><span class="nx">contentType</span> <span class="o">!==</span> <span class="s2">"application/json"</span><span class="p">)</span> <span class="p">{</span> | 
 |         <span class="k">return</span> <span class="kc">null</span><span class="p">;</span> <span class="c1">// only handle messages with content-type application/json</span> | 
 |     <span class="p">}</span> | 
 |  | 
 |     <span class="kd">var</span> <span class="nx">jsonData</span> <span class="o">=</span> <span class="nx">JSON</span><span class="p">.</span><span class="nx">parse</span><span class="p">(</span><span class="nx">textPayload</span><span class="p">);</span> | 
 |     <span class="kd">var</span> <span class="nx">temperature</span> <span class="o">=</span> <span class="nx">jsonData</span><span class="p">.</span><span class="nx">temp</span><span class="p">;</span> | 
 |     <span class="kd">var</span> <span class="nx">humidity</span> <span class="o">=</span> <span class="nx">jsonData</span><span class="p">.</span><span class="nx">hum</span><span class="p">;</span> | 
 |      | 
 |     <span class="kd">var</span> <span class="nx">path</span><span class="p">;</span> | 
 |     <span class="kd">var</span> <span class="nx">value</span><span class="p">;</span> | 
 |     <span class="k">if</span> <span class="p">(</span><span class="nx">temperature</span> <span class="o">!=</span> <span class="kc">null</span> <span class="o">&&</span> <span class="nx">humidity</span> <span class="o">!=</span> <span class="kc">null</span><span class="p">)</span> <span class="p">{</span> | 
 |         <span class="nx">path</span> <span class="o">=</span> <span class="s2">"/features"</span><span class="p">;</span> | 
 |         <span class="nx">value</span> <span class="o">=</span> <span class="p">{</span> | 
 |             <span class="na">temperature</span><span class="p">:</span> <span class="p">{</span> | 
 |                 <span class="na">properties</span><span class="p">:</span> <span class="p">{</span> | 
 |                     <span class="na">value</span><span class="p">:</span> <span class="nx">temperature</span> | 
 |                 <span class="p">}</span> | 
 |             <span class="p">},</span> | 
 |             <span class="na">humidity</span><span class="p">:</span> <span class="p">{</span> | 
 |                 <span class="na">properties</span><span class="p">:</span> <span class="p">{</span> | 
 |                     <span class="na">value</span><span class="p">:</span> <span class="nx">humidity</span> | 
 |                 <span class="p">}</span> | 
 |             <span class="p">}</span> | 
 |         <span class="p">};</span> | 
 |     <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">temperature</span> <span class="o">!=</span> <span class="kc">null</span><span class="p">)</span> <span class="p">{</span> | 
 |         <span class="nx">path</span> <span class="o">=</span> <span class="s2">"/features/temperature/properties/value"</span><span class="p">;</span> | 
 |         <span class="nx">value</span> <span class="o">=</span> <span class="nx">temperature</span><span class="p">;</span> | 
 |     <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">humidity</span> <span class="o">!=</span> <span class="kc">null</span><span class="p">)</span> <span class="p">{</span> | 
 |         <span class="nx">path</span> <span class="o">=</span> <span class="s2">"/features/humidity/properties/value"</span><span class="p">;</span> | 
 |         <span class="nx">value</span> <span class="o">=</span> <span class="nx">humidity</span><span class="p">;</span> | 
 |     <span class="p">}</span> | 
 |      | 
 |     <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">path</span> <span class="o">||</span> <span class="o">!</span><span class="nx">value</span><span class="p">)</span> <span class="p">{</span> | 
 |         <span class="k">return</span> <span class="kc">null</span><span class="p">;</span> | 
 |     <span class="p">}</span> | 
 |  | 
 |     <span class="k">return</span> <span class="nx">Ditto</span><span class="p">.</span><span class="nx">buildDittoProtocolMsg</span><span class="p">(</span> | 
 |         <span class="s2">"org.eclipse.ditto"</span><span class="p">,</span>     <span class="c1">// the namespace we use</span> | 
 |         <span class="nx">headers</span><span class="p">[</span><span class="s2">"device_id"</span><span class="p">],</span>    <span class="c1">// Hono sets the authenticated device-id in this header</span> | 
 |         <span class="s2">"things"</span><span class="p">,</span>                <span class="c1">// it is a Thing entity we want to update</span> | 
 |         <span class="s2">"twin"</span><span class="p">,</span>                  <span class="c1">// we want to update the twin</span> | 
 |         <span class="s2">"commands"</span><span class="p">,</span> | 
 |         <span class="s2">"modify"</span><span class="p">,</span>                <span class="c1">// command = modify</span> | 
 |         <span class="nx">path</span><span class="p">,</span> | 
 |         <span class="nx">headers</span><span class="p">,</span>                 <span class="c1">// copy all headers as Ditto headers</span> | 
 |         <span class="nx">value</span> | 
 |     <span class="p">);</span> | 
 | <span class="p">}</span> | 
 | </code></pre></div></div> | 
 |  | 
 | <p>In order to add this script to the connection we want to create, the newlines have to be replaced by <code class="highlighter-rouge">\n</code> so that | 
 | the script fits in a single line JSON string and the <code class="highlighter-rouge">"</code> characters have to be replaced with <code class="highlighter-rouge">\"</code>:</p> | 
 |  | 
 | <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="s2">"function mapToDittoProtocolMsg(</span><span class="se">\n</span><span class="s2">    headers,</span><span class="se">\n</span><span class="s2">    textPayload,</span><span class="se">\n</span><span class="s2">    bytePayload,</span><span class="se">\n</span><span class="s2">    contentType</span><span class="se">\n</span><span class="s2">) {</span><span class="se">\n\n</span><span class="s2">    if (contentType !== </span><span class="se">\"</span><span class="s2">application/json</span><span class="se">\"</span><span class="s2">) {</span><span class="se">\n</span><span class="s2">        return null;</span><span class="se">\n</span><span class="s2">    }</span><span class="se">\n\n</span><span class="s2">    var jsonData = JSON.parse(textPayload);</span><span class="se">\n</span><span class="s2">    var temperature = jsonData.temp;</span><span class="se">\n</span><span class="s2">    var humidity = jsonData.hum;</span><span class="se">\n</span><span class="s2">    </span><span class="se">\n</span><span class="s2">    var path;</span><span class="se">\n</span><span class="s2">    var value;</span><span class="se">\n</span><span class="s2">    if (temperature != null && humidity != null) {</span><span class="se">\n</span><span class="s2">        path = </span><span class="se">\"</span><span class="s2">/features</span><span class="se">\"</span><span class="s2">;</span><span class="se">\n</span><span class="s2">        value = {</span><span class="se">\n</span><span class="s2">                temperature: {</span><span class="se">\n</span><span class="s2">                    properties: {</span><span class="se">\n</span><span class="s2">                        value: temperature</span><span class="se">\n</span><span class="s2">                    }</span><span class="se">\n</span><span class="s2">                },</span><span class="se">\n</span><span class="s2">                humidity: {</span><span class="se">\n</span><span class="s2">                    properties: {</span><span class="se">\n</span><span class="s2">                        value: humidity</span><span class="se">\n</span><span class="s2">                    }</span><span class="se">\n</span><span class="s2">                }</span><span class="se">\n</span><span class="s2">            };</span><span class="se">\n</span><span class="s2">    } else if (temperature != null) {</span><span class="se">\n</span><span class="s2">        path = </span><span class="se">\"</span><span class="s2">/features/temperature/properties/value</span><span class="se">\"</span><span class="s2">;</span><span class="se">\n</span><span class="s2">        value = temperature;</span><span class="se">\n</span><span class="s2">    } else if (humidity != null) {</span><span class="se">\n</span><span class="s2">        path = </span><span class="se">\"</span><span class="s2">/features/humidity/properties/value</span><span class="se">\"</span><span class="s2">;</span><span class="se">\n</span><span class="s2">        value = humidity;</span><span class="se">\n</span><span class="s2">    }</span><span class="se">\n</span><span class="s2">    </span><span class="se">\n</span><span class="s2">    if (!path || !value) {</span><span class="se">\n</span><span class="s2">        return null;</span><span class="se">\n</span><span class="s2">    }</span><span class="se">\n\n</span><span class="s2">    return Ditto.buildDittoProtocolMsg(</span><span class="se">\n</span><span class="s2">        </span><span class="se">\"</span><span class="s2">org.eclipse.ditto</span><span class="se">\"</span><span class="s2">,</span><span class="se">\n</span><span class="s2">        headers[</span><span class="se">\"</span><span class="s2">device_id</span><span class="se">\"</span><span class="s2">],</span><span class="se">\n</span><span class="s2">        </span><span class="se">\"</span><span class="s2">things</span><span class="se">\"</span><span class="s2">,</span><span class="se">\n</span><span class="s2">        </span><span class="se">\"</span><span class="s2">twin</span><span class="se">\"</span><span class="s2">,</span><span class="se">\n</span><span class="s2">        </span><span class="se">\"</span><span class="s2">commands</span><span class="se">\"</span><span class="s2">,</span><span class="se">\n</span><span class="s2">        </span><span class="se">\"</span><span class="s2">modify</span><span class="se">\"</span><span class="s2">,</span><span class="se">\n</span><span class="s2">        path,</span><span class="se">\n</span><span class="s2">        headers,</span><span class="se">\n</span><span class="s2">        value</span><span class="se">\n</span><span class="s2">    );</span><span class="se">\n</span><span class="s2">}"</span><span class="w"> | 
 | </span></code></pre></div></div> | 
 |  | 
 | <h4 id="create-the-connection">Create the connection</h4> | 
 |  | 
 | <p>We use the payload of the previous “test connection” command and add the JavaScript mapping script from above in order | 
 | to specify the “create connection” command, which we will use to create the connection between Eclipse Hono and Ditto:</p> | 
 |  | 
 | <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>curl <span class="nt">-X</span> POST <span class="nt">-i</span> <span class="nt">-u</span> devops:devopsPw1! <span class="nt">-H</span> <span class="s1">'Content-Type: application/json'</span> <span class="nt">-d</span> <span class="s1">'{ | 
 |     "targetActorSelection": "/system/sharding/connection", | 
 |     "headers": { | 
 |         "aggregate": false | 
 |     }, | 
 |     "piggybackCommand": { | 
 |         "type": "connectivity.commands:createConnection", | 
 |         "connection": { | 
 |             "id": "hono-sandbox-connection-1", | 
 |             "connectionType": "amqp-10", | 
 |             "connectionStatus": "open", | 
 |             "uri": "amqp://consumer%40HONO:verysecret@hono.eclipse.org:15672", | 
 |             "failoverEnabled": true, | 
 |             "sources": [{ | 
 |                 "addresses": [ | 
 |                     "telemetry/org.eclipse.ditto", | 
 |                     "event/org.eclipse.ditto" | 
 |                 ], | 
 |                 "authorizationContext": ["nginx:demo5"] | 
 |             }], | 
 |             "mappingContext": { | 
 |                 "mappingEngine": "JavaScript", | 
 |                 "options": { | 
 |                     "incomingScript": "function mapToDittoProtocolMsg(\n    headers,\n    textPayload,\n    bytePayload,\n    contentType\n) {\n\n    if (contentType !== \"application/json\") {\n        return null;\n    }\n\n    var jsonData = JSON.parse(textPayload);\n    var temperature = jsonData.temp;\n    var humidity = jsonData.hum;\n    \n    var path;\n    var value;\n    if (temperature != null && humidity != null) {\n        path = \"/features\";\n        value = {\n                temperature: {\n                    properties: {\n                        value: temperature\n                    }\n                },\n                humidity: {\n                    properties: {\n                        value: humidity\n                    }\n                }\n            };\n    } else if (temperature != null) {\n        path = \"/features/temperature/properties/value\";\n        value = temperature;\n    } else if (humidity != null) {\n        path = \"/features/humidity/properties/value\";\n        value = humidity;\n    }\n    \n    if (!path || !value) {\n        return null;\n    }\n\n    return Ditto.buildDittoProtocolMsg(\n        \"org.eclipse.ditto\",\n        headers[\"device_id\"],\n        \"things\",\n        \"twin\",\n        \"commands\",\n        \"modify\",\n        path,\n        headers,\n        value\n    );\n}" | 
 |                 } | 
 |             } | 
 |         } | 
 |     } | 
 | }'</span> https://ditto.eclipseprojects.io/devops/piggyback/connectivity?timeout<span class="o">=</span>8s | 
 | </code></pre></div></div> | 
 |  | 
 | <p>When establishing the connection + parsing the JavaScript worked, we get a success result as HTTP response again,  | 
 | otherwise an error message would be returned.</p> | 
 |  | 
 | <h4 id="retrieve-connection-metrics">Retrieve connection metrics</h4> | 
 |  | 
 | <p>After the connection was created, we can use the following command in order to retrieve the current connection status | 
 | and some metrics about how many messages were consumed:</p> | 
 |  | 
 | <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>curl <span class="nt">-X</span> POST <span class="nt">-i</span> <span class="nt">-u</span> devops:devopsPw1! <span class="nt">-H</span> <span class="s1">'Content-Type: application/json'</span> <span class="nt">-d</span> <span class="s1">'{ | 
 |     "targetActorSelection": "/system/sharding/connection", | 
 |     "headers": { | 
 |         "aggregate": false | 
 |     }, | 
 |     "piggybackCommand": { | 
 |         "type": "connectivity.commands:retrieveConnectionMetrics", | 
 |         "connectionId": "hono-sandbox-connection-1" | 
 |     } | 
 | }'</span> https://ditto.eclipseprojects.io/devops/piggyback/connectivity?timeout<span class="o">=</span>8s | 
 | </code></pre></div></div> | 
 |  | 
 | <p>The result looks like this:</p> | 
 |  | 
 | <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w"> | 
 |   </span><span class="s2">"?"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |     </span><span class="s2">"?"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |       </span><span class="s2">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"connectivity.responses:retrieveConnectionMetrics"</span><span class="p">,</span><span class="w"> | 
 |       </span><span class="s2">"status"</span><span class="p">:</span><span class="w"> </span><span class="mi">200</span><span class="p">,</span><span class="w"> | 
 |       </span><span class="s2">"connectionId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hono-sandbox-connection-1"</span><span class="p">,</span><span class="w"> | 
 |       </span><span class="s2">"containsFailures"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"> | 
 |       </span><span class="s2">"connectionMetrics"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |         </span><span class="s2">"inbound"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |           </span><span class="s2">"consumed"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |             </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2019-02-06T09:37:28.416Z"</span><span class="w"> | 
 |             </span><span class="p">},</span><span class="w"> | 
 |             </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |             </span><span class="p">}</span><span class="w"> | 
 |           </span><span class="p">},</span><span class="w"> | 
 |           </span><span class="s2">"mapped"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |             </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2019-02-06T09:37:28.422Z"</span><span class="w"> | 
 |             </span><span class="p">},</span><span class="w"> | 
 |             </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |             </span><span class="p">}</span><span class="w"> | 
 |           </span><span class="p">},</span><span class="w"> | 
 |           </span><span class="s2">"dropped"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |             </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |             </span><span class="p">},</span><span class="w"> | 
 |             </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |             </span><span class="p">}</span><span class="w"> | 
 |           </span><span class="p">},</span><span class="w"> | 
 |           </span><span class="s2">"enforced"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |             </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2019-02-06T09:37:28.422Z"</span><span class="w"> | 
 |             </span><span class="p">},</span><span class="w"> | 
 |             </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |             </span><span class="p">}</span><span class="w"> | 
 |           </span><span class="p">}</span><span class="w"> | 
 |         </span><span class="p">},</span><span class="w"> | 
 |         </span><span class="s2">"outbound"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |           </span><span class="s2">"dispatched"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |             </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |             </span><span class="p">},</span><span class="w"> | 
 |             </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2019-02-06T09:37:28.439Z"</span><span class="w"> | 
 |             </span><span class="p">}</span><span class="w"> | 
 |           </span><span class="p">},</span><span class="w"> | 
 |           </span><span class="s2">"filtered"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |             </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |             </span><span class="p">},</span><span class="w"> | 
 |             </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |             </span><span class="p">}</span><span class="w"> | 
 |           </span><span class="p">},</span><span class="w"> | 
 |           </span><span class="s2">"mapped"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |             </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2019-02-06T09:37:28.443Z"</span><span class="w"> | 
 |             </span><span class="p">},</span><span class="w"> | 
 |             </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |             </span><span class="p">}</span><span class="w"> | 
 |           </span><span class="p">},</span><span class="w"> | 
 |           </span><span class="s2">"dropped"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |             </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |             </span><span class="p">},</span><span class="w"> | 
 |             </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |             </span><span class="p">}</span><span class="w"> | 
 |           </span><span class="p">},</span><span class="w"> | 
 |           </span><span class="s2">"published"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |             </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |             </span><span class="p">},</span><span class="w"> | 
 |             </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |               </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |             </span><span class="p">}</span><span class="w"> | 
 |           </span><span class="p">}</span><span class="w"> | 
 |         </span><span class="p">}</span><span class="w"> | 
 |       </span><span class="p">},</span><span class="w"> | 
 |       </span><span class="s2">"sourceMetrics"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |         </span><span class="s2">"addressMetrics"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |           </span><span class="s2">"event/org.eclipse.ditto"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |             </span><span class="s2">"consumed"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">},</span><span class="w"> | 
 |               </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">}</span><span class="w"> | 
 |             </span><span class="p">},</span><span class="w"> | 
 |             </span><span class="s2">"mapped"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">},</span><span class="w"> | 
 |               </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">}</span><span class="w"> | 
 |             </span><span class="p">},</span><span class="w"> | 
 |             </span><span class="s2">"dropped"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">},</span><span class="w"> | 
 |               </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">}</span><span class="w"> | 
 |             </span><span class="p">},</span><span class="w"> | 
 |             </span><span class="s2">"enforced"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">},</span><span class="w"> | 
 |               </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">}</span><span class="w"> | 
 |             </span><span class="p">}</span><span class="w"> | 
 |           </span><span class="p">},</span><span class="w"> | 
 |           </span><span class="s2">"telemetry/org.eclipse.ditto"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |             </span><span class="s2">"consumed"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2019-02-06T09:37:28.416Z"</span><span class="w"> | 
 |               </span><span class="p">},</span><span class="w"> | 
 |               </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">}</span><span class="w"> | 
 |             </span><span class="p">},</span><span class="w"> | 
 |             </span><span class="s2">"mapped"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2019-02-06T09:37:28.422Z"</span><span class="w"> | 
 |               </span><span class="p">},</span><span class="w"> | 
 |               </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">}</span><span class="w"> | 
 |             </span><span class="p">},</span><span class="w"> | 
 |             </span><span class="s2">"dropped"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">},</span><span class="w"> | 
 |               </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">}</span><span class="w"> | 
 |             </span><span class="p">},</span><span class="w"> | 
 |             </span><span class="s2">"enforced"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2019-02-06T09:37:28.422Z"</span><span class="w"> | 
 |               </span><span class="p">},</span><span class="w"> | 
 |               </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">}</span><span class="w"> | 
 |             </span><span class="p">}</span><span class="w"> | 
 |           </span><span class="p">}</span><span class="w"> | 
 |         </span><span class="p">}</span><span class="w"> | 
 |       </span><span class="p">},</span><span class="w"> | 
 |       </span><span class="s2">"targetMetrics"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |         </span><span class="s2">"addressMetrics"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |           </span><span class="s2">"_responses"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |             </span><span class="s2">"dispatched"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">},</span><span class="w"> | 
 |               </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2019-02-06T09:37:28.439Z"</span><span class="w"> | 
 |               </span><span class="p">}</span><span class="w"> | 
 |             </span><span class="p">},</span><span class="w"> | 
 |             </span><span class="s2">"filtered"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">},</span><span class="w"> | 
 |               </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">}</span><span class="w"> | 
 |             </span><span class="p">},</span><span class="w"> | 
 |             </span><span class="s2">"mapped"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2019-02-06T09:37:28.443Z"</span><span class="w"> | 
 |               </span><span class="p">},</span><span class="w"> | 
 |               </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">}</span><span class="w"> | 
 |             </span><span class="p">},</span><span class="w"> | 
 |             </span><span class="s2">"dropped"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">},</span><span class="w"> | 
 |               </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">}</span><span class="w"> | 
 |             </span><span class="p">},</span><span class="w"> | 
 |             </span><span class="s2">"published"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |               </span><span class="s2">"success"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">},</span><span class="w"> | 
 |               </span><span class="s2">"failure"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> | 
 |                 </span><span class="s2">"PT1M"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT1H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"PT24H"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> | 
 |                 </span><span class="s2">"lastMessageAt"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="w"> | 
 |               </span><span class="p">}</span><span class="w"> | 
 |             </span><span class="p">}</span><span class="w"> | 
 |           </span><span class="p">}</span><span class="w"> | 
 |         </span><span class="p">}</span><span class="w"> | 
 |       </span><span class="p">}</span><span class="w"> | 
 |     </span><span class="p">}</span><span class="w"> | 
 |   </span><span class="p">}</span><span class="w"> | 
 | </span><span class="p">}</span><span class="w"> | 
 | </span></code></pre></div></div> | 
 |  | 
 | <h2 id="test-the-integration">Test the integration</h2> | 
 |  | 
 | <p>Whenever the device now sends telemetry in its own JSON format</p> | 
 |  | 
 | <ul> | 
 |   <li>the message count of the <a href="#retrieve-connection-metrics">connection metrics in Ditto</a> should be increased by one</li> | 
 |   <li>the digital twin with the <code class="highlighter-rouge">Thing</code> ID <code class="highlighter-rouge">org.eclipse.ditto:demo-device</code> should receive the updated value which is also | 
 | reflected at the twin’s HTTP endpoint  | 
 | <a href="https://demo5:demo@ditto.eclipseprojects.io/api/2/things/org.eclipse.ditto:demo-device">https://ditto.eclipseprojects.io/api/2/things/org.eclipse.ditto:demo-device</a></li> | 
 | </ul> | 
 |  | 
 | <p>Verify that by simulate sending telemetry using the Hono HTTP adapter:</p> | 
 |  | 
 | <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>curl <span class="nt">-X</span> POST <span class="nt">-i</span> <span class="nt">-u</span> demo-device-auth@org.eclipse.ditto:demo-device-password <span class="nt">-H</span> <span class="s1">'Content-Type: application/json'</span> <span class="nt">-d</span> <span class="s1">'{"temp": 14.51}'</span> http://hono.eclipse.org:8080/telemetry | 
 | <span class="nv">$ </span>curl <span class="nt">-X</span> POST <span class="nt">-i</span> <span class="nt">-u</span> demo-device-auth@org.eclipse.ditto:demo-device-password <span class="nt">-H</span> <span class="s1">'Content-Type: application/json'</span> <span class="nt">-d</span> <span class="s1">'{"hum": 52.17}'</span>  http://hono.eclipse.org:8080/telemetry | 
 |  | 
 | <span class="nv">$ </span>curl <span class="nt">-X</span> POST <span class="nt">-i</span> <span class="nt">-u</span> demo-device-auth@org.eclipse.ditto:demo-device-password <span class="nt">-H</span> <span class="s1">'Content-Type: application/json'</span> <span class="nt">-d</span> <span class="s1">'{"temp": 23.07, "hum": 45.85}'</span>  http://hono.eclipse.org:8080/telemetry | 
 | </code></pre></div></div> | 
 |  | 
 | <p><br /> | 
 | <br /></p> | 
 |  | 
 | <p>Try it out for yourself and give us (the Ditto and the Hono teams) feedback what you like or what could be improved.</p> | 
 |  | 
 | <p><br /> | 
 | <br /></p> | 
 | <figure><img class="docimage" src="images/ditto.svg" alt="Ditto" style="max-width: 500px" /></figure> | 
 |  | 
 | <p>–<br /> | 
 | The Eclipse Ditto team</p> | 
 |  | 
 |     </div> | 
 |  | 
 |  | 
 |  | 
 | </article> | 
 |  | 
 | <hr class="shaded"/> | 
 |  | 
 | <footer> | 
 |             <div class="row"> | 
 |                 <div class="col-lg-12 footer"> | 
 |                     <div class="logo"> | 
 |                         <a href="https://eclipse.org"><img src="images/eclipse_foundation_logo.svg" alt="Eclipse logo"/></a> | 
 |                     </div> | 
 |                     <p class="notice"> | 
 |                         ©2021 Eclipse Ditto. | 
 |                          Site last generated: Apr 14, 2021 <br /> | 
 |                     </p> | 
 |                     <div class="quickLinks"> | 
 |                         <a href="https://www.eclipse.org/legal/privacy.php" target="_blank"> | 
 |                             > Privacy Policy | 
 |                         </a> | 
 |                         <a href="https://www.eclipse.org/legal/termsofuse.php" target="_blank"> | 
 |                             > Terms of Use | 
 |                         </a> | 
 |                         <a href="https://www.eclipse.org/legal/copyright.php" target="_blank"> | 
 |                             > Copyright Agent | 
 |                         </a> | 
 |                         <a href="https://www.eclipse.org/legal" target="_blank"> | 
 |                             > Legal | 
 |                         </a> | 
 |                         <a href="https://www.eclipse.org/legal/epl-2.0/" target="_blank"> | 
 |                             > License | 
 |                         </a> | 
 |                         <a href="https://eclipse.org/security" target="_blank"> | 
 |                             > Report a Vulnerability | 
 |                         </a> | 
 |                     </div> | 
 |                 </div> | 
 |             </div> | 
 | </footer> | 
 |  | 
 |  | 
 |         </div> | 
 |     <!-- /.row --> | 
 | </div> | 
 | <!-- /.container --> | 
 | </div> | 
 | <!-- /#main --> | 
 |     </div> | 
 |  | 
 | </body> | 
 | </html> |