blob: 85ce3784c1c76a040fcc66b05497f38f0cd94e18 [file] [log] [blame]
<!DOCTYPE html>
<html lang="1.6" class="js csstransforms3d">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Hugo 0.81.0" />
<meta name="description" content="A set of micro-services for connecting millions of devices.">
<meta name="author" content="The Eclipse Hono Project">
<link rel="apple-touch-icon" sizes="180x180" href="/hono/docs/favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="48x48" href="/hono/docs/favicon/favicon-48x48.png">
<link rel="icon" type="image/png" sizes="32x32" href="/hono/docs/favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/hono/docs/favicon/favicon-16x16.png">
<link rel="manifest" href="/hono/docs/favicon/site.webmanifest">
<link rel="mask-icon" href="/hono/docs/favicon/safari-pinned-tab.svg" color="#5bbad5">
<link rel="shortcut icon" href="/hono/docs/favicon/favicon.ico">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="msapplication-config" content="/hono/docs/favicon/browserconfig.xml">
<meta name="theme-color" content="#ffffff">
<title>Command & Control API for Kafka Specification :: Eclipse Hono&trade; Vers.: 1.6</title>
<link href="/hono/docs/css/nucleus.css?1626138721" rel="stylesheet">
<link href="/hono/docs/css/fontawesome-all.min.css?1626138721" rel="stylesheet">
<link href="/hono/docs/css/hybrid.css?1626138721" rel="stylesheet">
<link href="/hono/docs/css/featherlight.min.css?1626138721" rel="stylesheet">
<link href="/hono/docs/css/perfect-scrollbar.min.css?1626138721" rel="stylesheet">
<link href="/hono/docs/css/auto-complete.css?1626138721" rel="stylesheet">
<link href="/hono/docs/css/atom-one-dark-reasonable.css?1626138721" rel="stylesheet">
<link href="/hono/docs/css/theme.css?1626138721" rel="stylesheet">
<link href="/hono/docs/css/hugo-theme.css?1626138721" rel="stylesheet">
<link href="/hono/docs/css/theme-hono.css?1626138721" rel="stylesheet">
<link href="/hono/docs/css/hono.css?1626138721" rel="stylesheet">
<script src="/hono/docs/js/jquery-3.3.1.min.js?1626138721"></script>
<style>
:root #header + #content > #left > #rlblock_left{
display:none !important;
}
:not(pre) > code + span.copy-to-clipboard {
display: none;
}
</style>
<link rel="stylesheet" href="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/stylesheets/vendor/cookieconsent/cookieconsent.min.css">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@EclipseHono">
<meta name="twitter:title" content="Command &amp; Control API for Kafka Specification :: Eclipse Hono&amp;trade; Vers.: 1.6">
<meta name="twitter:image" content="https://www.eclipse.org/hono/docs/images/twitter_image.png">
<meta name="twitter:description" content="A set of micro-services for connecting millions of devices.">
<meta property="og:title" content="Command &amp; Control API for Kafka Specification :: Eclipse Hono&amp;trade; Vers.: 1.6" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.eclipse.org/hono/docs/1.6/api/command-and-control-kafka//" />
<meta property="og:image" content="https://www.eclipse.org/hono/docs/images/twitter_image.png" />
</head>
<body class="" data-url="/hono/docs/1.6/api/command-and-control-kafka/">
<nav id="sidebar" class="">
<div id="header-wrapper">
<div id="header">
<a href="https://www.eclipse.org/hono/">
<img src="/hono/docs/images/HONO-Logo_Bild-Wort_quer-w-310x120px.svg" alt="Hono logo" class="logo-img">
</a>
</div>
<div class="searchbox">
<label for="search-by"><i class="fas fa-search"></i></label>
<input data-search-input id="search-by" type="search" placeholder="Search...">
<span data-search-clear=""><i class="fas fa-times"></i></span>
</div>
<script type="text/javascript" src="/hono/docs/js/lunr.min.js?1626138721"></script>
<script type="text/javascript" src="/hono/docs/js/auto-complete.js?1626138721"></script>
<script type="text/javascript">
var baseurl = "https:\/\/www.eclipse.org\/hono\/docs\/\/1.6";
</script>
<script type="text/javascript" src="/hono/docs/js/search.js?1626138721"></script>
</div>
<div class="highlightable">
<ul class="topics">
<li data-nav-id="/hono/docs/1.6/concepts/" title="Concepts" class="dd-item
">
<a href="/hono/docs/1.6/concepts/">
<i class="far fa-lightbulb"></i> Concepts
</a>
<ul>
<li data-nav-id="/hono/docs/1.6/concepts/device-identity/" title="Device Identity" class="dd-item ">
<a href="/hono/docs/1.6/concepts/device-identity/">
Device Identity
</a>
</li>
<li data-nav-id="/hono/docs/1.6/concepts/tenancy/" title="Multi-Tenancy" class="dd-item ">
<a href="/hono/docs/1.6/concepts/tenancy/">
Multi-Tenancy
</a>
</li>
<li data-nav-id="/hono/docs/1.6/concepts/device-provisioning/" title="Device Provisioning" class="dd-item ">
<a href="/hono/docs/1.6/concepts/device-provisioning/">
Device Provisioning
</a>
</li>
<li data-nav-id="/hono/docs/1.6/concepts/connecting-devices/" title="Connecting Devices" class="dd-item ">
<a href="/hono/docs/1.6/concepts/connecting-devices/">
Connecting Devices
</a>
</li>
<li data-nav-id="/hono/docs/1.6/concepts/device-notifications/" title="Device Notifications" class="dd-item ">
<a href="/hono/docs/1.6/concepts/device-notifications/">
Device Notifications
</a>
</li>
<li data-nav-id="/hono/docs/1.6/concepts/command-and-control/" title="Command &amp; Control" class="dd-item ">
<a href="/hono/docs/1.6/concepts/command-and-control/">
Command &amp; Control
</a>
</li>
<li data-nav-id="/hono/docs/1.6/concepts/resource-limits/" title="Resource limits" class="dd-item ">
<a href="/hono/docs/1.6/concepts/resource-limits/">
Resource limits
</a>
</li>
<li data-nav-id="/hono/docs/1.6/concepts/connection-events/" title="Connection Events" class="dd-item ">
<a href="/hono/docs/1.6/concepts/connection-events/">
Connection Events
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.6/user-guide/" title="User Guide" class="dd-item
">
<a href="/hono/docs/1.6/user-guide/">
<i class="fas fa-book-reader"></i> User Guide
</a>
<ul>
<li data-nav-id="/hono/docs/1.6/user-guide/mongodb-based-device-registry/" title="MongoDB Based Device Registry" class="dd-item ">
<a href="/hono/docs/1.6/user-guide/mongodb-based-device-registry/">
MongoDB Based Device Registry
</a>
</li>
<li data-nav-id="/hono/docs/1.6/user-guide/jdbc-based-device-registry/" title="JDBC Based Device Registry" class="dd-item ">
<a href="/hono/docs/1.6/user-guide/jdbc-based-device-registry/">
JDBC Based Device Registry
</a>
</li>
<li data-nav-id="/hono/docs/1.6/user-guide/file-based-device-registry/" title="File Based Device Registry" class="dd-item ">
<a href="/hono/docs/1.6/user-guide/file-based-device-registry/">
File Based Device Registry
</a>
</li>
<li data-nav-id="/hono/docs/1.6/user-guide/http-adapter/" title="HTTP Adapter" class="dd-item ">
<a href="/hono/docs/1.6/user-guide/http-adapter/">
HTTP Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.6/user-guide/mqtt-adapter/" title="MQTT Adapter" class="dd-item ">
<a href="/hono/docs/1.6/user-guide/mqtt-adapter/">
MQTT Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.6/user-guide/amqp-adapter/" title="AMQP Adapter" class="dd-item ">
<a href="/hono/docs/1.6/user-guide/amqp-adapter/">
AMQP Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.6/user-guide/coap-adapter/" title="CoAP Adapter" class="dd-item ">
<a href="/hono/docs/1.6/user-guide/coap-adapter/">
CoAP Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.6/user-guide/kura-adapter/" title="Kura Adapter" class="dd-item ">
<a href="/hono/docs/1.6/user-guide/kura-adapter/">
Kura Adapter
</a>
</li>
<li data-nav-id="/hono/docs/1.6/user-guide/sigfox-adapter/" title="Sigfox Adapter" class="dd-item ">
<a href="/hono/docs/1.6/user-guide/sigfox-adapter/">
Sigfox Adapter
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.6/admin-guide/" title="Admin Guide" class="dd-item
">
<a href="/hono/docs/1.6/admin-guide/">
<i class="fas fa-sliders-h"></i> Admin Guide
</a>
<ul>
<li data-nav-id="/hono/docs/1.6/admin-guide/common-config/" title="Common Configuration" class="dd-item ">
<a href="/hono/docs/1.6/admin-guide/common-config/">
Common Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.6/admin-guide/auth-server-config/" title="Auth Server Configuration" class="dd-item ">
<a href="/hono/docs/1.6/admin-guide/auth-server-config/">
Auth Server Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.6/admin-guide/mongodb-device-registry-config/" title="MongoDB Based Device Registry Configuration" class="dd-item ">
<a href="/hono/docs/1.6/admin-guide/mongodb-device-registry-config/">
MongoDB Based Device Registry Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.6/admin-guide/jdbc-device-registry-config/" title="JDBC Based Device Registry Configuration" class="dd-item ">
<a href="/hono/docs/1.6/admin-guide/jdbc-device-registry-config/">
JDBC Based Device Registry Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.6/admin-guide/file-based-device-registry-config/" title="File Based Device Registry Configuration" class="dd-item ">
<a href="/hono/docs/1.6/admin-guide/file-based-device-registry-config/">
File Based Device Registry Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.6/admin-guide/command-router-config/" title="Configuring the Command Router Service" class="dd-item ">
<a href="/hono/docs/1.6/admin-guide/command-router-config/">
Command Router Service Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.6/admin-guide/device-connection-config/" title="Configuring the Device Connection Service" class="dd-item ">
<a href="/hono/docs/1.6/admin-guide/device-connection-config/">
Device Connection Service Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.6/admin-guide/http-adapter-config/" title="HTTP Adapter Configuration" class="dd-item ">
<a href="/hono/docs/1.6/admin-guide/http-adapter-config/">
HTTP Adapter Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.6/admin-guide/mqtt-adapter-config/" title="MQTT Adapter Configuration" class="dd-item ">
<a href="/hono/docs/1.6/admin-guide/mqtt-adapter-config/">
MQTT Adapter Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.6/admin-guide/amqp-adapter-config/" title="AMQP Adapter Configuration" class="dd-item ">
<a href="/hono/docs/1.6/admin-guide/amqp-adapter-config/">
AMQP Adapter Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.6/admin-guide/coap-adapter-config/" title="CoAP Adapter Configuration" class="dd-item ">
<a href="/hono/docs/1.6/admin-guide/coap-adapter-config/">
CoAP Adapter Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.6/admin-guide/kura-adapter-config/" title="Kura Adapter Configuration" class="dd-item ">
<a href="/hono/docs/1.6/admin-guide/kura-adapter-config/">
Kura Adapter Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.6/admin-guide/hono-client-configuration/" title="Hono Client Configuration" class="dd-item ">
<a href="/hono/docs/1.6/admin-guide/hono-client-configuration/">
Hono Client Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.6/admin-guide/hono-kafka-client-configuration/" title="Hono Kafka Client Configuration" class="dd-item ">
<a href="/hono/docs/1.6/admin-guide/hono-kafka-client-configuration/">
Hono Kafka Client Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.6/admin-guide/amqp-network-config/" title="AMQP 1.0 Messaging Network Configuration" class="dd-item ">
<a href="/hono/docs/1.6/admin-guide/amqp-network-config/">
AMQP 1.0 Messaging Network Configuration
</a>
</li>
<li data-nav-id="/hono/docs/1.6/admin-guide/secure_communication/" title="Secure Communication" class="dd-item ">
<a href="/hono/docs/1.6/admin-guide/secure_communication/">
Secure Communication
</a>
</li>
<li data-nav-id="/hono/docs/1.6/admin-guide/monitoring-tracing-config/" title="Monitoring &amp; Tracing" class="dd-item ">
<a href="/hono/docs/1.6/admin-guide/monitoring-tracing-config/">
Monitoring &amp; Tracing
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.6/dev-guide/" title="Developer Guide" class="dd-item
">
<a href="/hono/docs/1.6/dev-guide/">
<i class="fas fa-tools"></i> Developer Guide
</a>
<ul>
<li data-nav-id="/hono/docs/1.6/dev-guide/building_hono/" title="Building from Source" class="dd-item ">
<a href="/hono/docs/1.6/dev-guide/building_hono/">
Building from Source
</a>
</li>
<li data-nav-id="/hono/docs/1.6/dev-guide/amqp_adapter_client/" title="AMQP Adapter Client for Java" class="dd-item ">
<a href="/hono/docs/1.6/dev-guide/amqp_adapter_client/">
AMQP Adapter Client for Java
</a>
</li>
<li data-nav-id="/hono/docs/1.6/dev-guide/java_client_consumer/" title="Consuming Messages from Java" class="dd-item ">
<a href="/hono/docs/1.6/dev-guide/java_client_consumer/">
Consuming Messages from Java
</a>
</li>
<li data-nav-id="/hono/docs/1.6/dev-guide/custom_http_adapter/" title="Implement a Custom Hono HTTP Protocol Adapter" class="dd-item ">
<a href="/hono/docs/1.6/dev-guide/custom_http_adapter/">
Implement a Custom Hono HTTP Protocol Adapter
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.6/api/" title="API" class="dd-item
parent
">
<a href="/hono/docs/1.6/api/">
&nbsp;<i class='fas fa-plug'></i>&nbsp;API
</a>
<ul>
<li data-nav-id="/hono/docs/1.6/api/telemetry/" title="Telemetry API Specification" class="dd-item ">
<a href="/hono/docs/1.6/api/telemetry/">
Telemetry API
</a>
</li>
<li data-nav-id="/hono/docs/1.6/api/event/" title="Event API Specification" class="dd-item ">
<a href="/hono/docs/1.6/api/event/">
Event API
</a>
</li>
<li data-nav-id="/hono/docs/1.6/api/command-and-control/" title="Command &amp; Control API Specification" class="dd-item ">
<a href="/hono/docs/1.6/api/command-and-control/">
Command &amp; Control API
</a>
</li>
<li data-nav-id="/hono/docs/1.6/api/kafka-api/" title="Kafka-based APIs" class="dd-item ">
<a href="/hono/docs/1.6/api/kafka-api/">
Kafka-based APIs
</a>
</li>
<li data-nav-id="/hono/docs/1.6/api/telemetry-kafka/" title="Telemetry API for Kafka Specification" class="dd-item ">
<a href="/hono/docs/1.6/api/telemetry-kafka/">
Telemetry API for Kafka
</a>
</li>
<li data-nav-id="/hono/docs/1.6/api/event-kafka/" title="Event API for Kafka Specification" class="dd-item ">
<a href="/hono/docs/1.6/api/event-kafka/">
Event API for Kafka
</a>
</li>
<li data-nav-id="/hono/docs/1.6/api/tenant/" title="Tenant API Specification" class="dd-item ">
<a href="/hono/docs/1.6/api/tenant/">
Tenant API
</a>
</li>
<li data-nav-id="/hono/docs/1.6/api/command-router/" title="Command Router API Specification" class="dd-item ">
<a href="/hono/docs/1.6/api/command-router/">
Command Router API
</a>
</li>
<li data-nav-id="/hono/docs/1.6/api/device-connection/" title="Device Connection API Specification" class="dd-item ">
<a href="/hono/docs/1.6/api/device-connection/">
Device Connection API
</a>
</li>
<li data-nav-id="/hono/docs/1.6/api/device-registration/" title="Device Registration API Specification" class="dd-item ">
<a href="/hono/docs/1.6/api/device-registration/">
Device Registration API
</a>
</li>
<li data-nav-id="/hono/docs/1.6/api/credentials/" title="Credentials API Specification" class="dd-item ">
<a href="/hono/docs/1.6/api/credentials/">
Credentials API
</a>
</li>
<li data-nav-id="/hono/docs/1.6/api/authentication/" title="Authentication API Specification" class="dd-item ">
<a href="/hono/docs/1.6/api/authentication/">
Authentication API
</a>
</li>
<li data-nav-id="/hono/docs/1.6/api/management/" title="Device Registry Management API Specification" class="dd-item ">
<a href="/hono/docs/1.6/api/management/">
Device Registry Management API
</a>
</li>
<li data-nav-id="/hono/docs/1.6/api/metrics/" title="Metrics" class="dd-item ">
<a href="/hono/docs/1.6/api/metrics/">
Metrics
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.6/deployment/" title="Deployment" class="dd-item
">
<a href="/hono/docs/1.6/deployment/">
<i class="fas fa-shipping-fast"></i> Deployment
</a>
<ul>
<li data-nav-id="/hono/docs/1.6/deployment/helm-based-deployment/" title="Helm based Deployment" class="dd-item ">
<a href="/hono/docs/1.6/deployment/helm-based-deployment/">
Helm based Deployment
</a>
</li>
<li data-nav-id="/hono/docs/1.6/deployment/openshift/" title="OpenShift / OKD" class="dd-item ">
<a href="/hono/docs/1.6/deployment/openshift/">
OpenShift / OKD
</a>
</li>
<li data-nav-id="/hono/docs/1.6/deployment/create-kubernetes-cluster/" title="Setting up a Kubernetes Cluster" class="dd-item ">
<a href="/hono/docs/1.6/deployment/create-kubernetes-cluster/">
Setting up a Kubernetes Cluster
</a>
</li>
<li data-nav-id="/hono/docs/1.6/deployment/resource-limitation/" title="Limiting Resource Usage" class="dd-item ">
<a href="/hono/docs/1.6/deployment/resource-limitation/">
Limiting Resource Usage
</a>
</li>
</ul>
</li>
<li data-nav-id="/hono/docs/1.6/architecture/" title="Architecture" class="dd-item
">
<a href="/hono/docs/1.6/architecture/">
<i class="fas fa-landmark"></i> Architecture
</a>
<ul>
<li data-nav-id="/hono/docs/1.6/architecture/component-view/" title="Component View" class="dd-item ">
<a href="/hono/docs/1.6/architecture/component-view/">
Component View
</a>
</li>
<li data-nav-id="/hono/docs/1.6/architecture/auth/" title="Authentication/Authorization" class="dd-item ">
<a href="/hono/docs/1.6/architecture/auth/">
Authentication/Authorization
</a>
</li>
</ul>
</li>
</ul>
<section id="shortcuts">
<h3></h3>
<ul>
<li>
<a class="padding" href="https://www.eclipse.org/hono/" title="Hono&#39;s Homepage"><i class='fas fa-home'></i> Hono Home</a>
</li>
<li>
<a class="padding" href="https://www.eclipse.org/hono/getting-started/" title="Getting started with Eclipse Hono"><i class='fas fa-plane-departure'></i> Getting Started</a>
</li>
</ul>
</section>
<section id="prefooter">
<hr/>
<ul>
<li>
<div id="select-box-wrapper">
<div id="select-box">
<a class="padding">
Version:&nbsp;
<div class="select-style">
<select id="select-language" onchange="location = this.value;">
<option id="stable" value="https://www.eclipse.org/hono/docs/api/command-and-control-kafka/">stable (1.8)</option>
<option id="1.8" value="https://www.eclipse.org/hono/docs/1.8/api/command-and-control-kafka/">1.8</option>
<option id="1.7" value="https://www.eclipse.org/hono/docs/1.7/api/command-and-control-kafka/">1.7</option>
<option id="1.6" value="https://www.eclipse.org/hono/docs/1.6/api/command-and-control-kafka/" selected>1.6</option>
<option id="dev" value="https://www.eclipse.org/hono/docs/dev/api/command-and-control-kafka/">dev</option>
</select>
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="255px" height="255px" viewBox="0 0 255 255" style="enable-background:new 0 0 255 255;" xml:space="preserve">
<g>
<g id="arrow-drop-down">
<polygon points="0,63.75 127.5,191.25 255,63.75 " />
</g>
</g>
</svg>
</div>
</a>
</div>
</div>
</li>
</ul>
</section>
<section id="footer">
<p>&copy; 2021 <a href="https://www.eclipse.org/hono/">The Eclipse Hono Project</a></p>
<p>
Documentation built with
<a href="https://gohugo.io/" target="_blank">Hugo</a>
using the
<a href="https://github.com/matcornic/hugo-theme-learn" target="_blank">Learn</a> theme.
</p>
<div class="eclipse-logo">
<a href="https://www.eclipse.org" target="_blank">
<img src="https://www.eclipse.org/hono/docs/images/eclipse_foundation_logo.svg"/>
</a>
</div>
</section>
</div>
</nav>
<section id="body">
<div id="overlay"></div>
<div class="old-version-hint">
<p>This page refers to version <em>1.6</em>.
You might want to use the <a href="https://www.eclipse.org/hono/docs/">current stable</a> version.
</p>
</div>
<div class="padding highlightable">
<div>
<div id="top-bar">
<div id="top-github-link">
<a class="github-link" title='Edit this page' href="https://github.com/eclipse/hono/edit/master/site/documentation/content/api/command-and-control-kafka/index.md" target="blank">
<i class="fas fa-code-branch"></i>
<span id="top-github-link-text">Edit this page</span>
</a>
</div>
<div id="breadcrumbs" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb">
<span id="sidebar-toggle-span">
<a href="#" id="sidebar-toggle" data-sidebar-toggle="">
<i class="fas fa-bars"></i>
</a>
</span>
<span id="toc-menu"><i class="fas fa-list-alt"></i></span>
<span class="links">
<a href='/hono/docs/1.6/'>Documentation</a> > <a href='/hono/docs/1.6/api/'>API</a> > Command & Control API for Kafka Specification
</span>
</div>
<div class="progress">
<div class="wrapper">
<nav id="TableOfContents">
<ul>
<li><a href="#send-a-one-way-command">Send a One-Way Command</a></li>
<li><a href="#send-a-requestresponse-command">Send a (Request/Response) Command</a></li>
</ul>
</nav>
</div>
</div>
</div>
</div>
<div id="head-tags">
</div>
<div id="body-inner">
<h1>
Command &amp; Control API for Kafka Specification
</h1>
<p>The <em>Command &amp; Control</em> API of Eclipse Honoâ„¢ is used by <em>Business Applications</em> to send commands to connected devices.</p>
<p>Commands can be used to trigger actions on devices. Examples include updating a configuration property, installing a software component or switching the state of an actuator.</p>
<p>Hono distinguishes two types of commands. The first type is <em>one-way</em> only. In this case the sender of the command does not expect the device to send back a message in response to the command. This type of command is referred to as a <em>one-way command</em> in the remainder of this page. One-way commands may be used to e.g. <em>notify</em> a device about a change of state.</p>
<p>The second type of commands expects a <em>response</em> to be sent back from the device as a result of processing the command. In this case the response contains a <em>status</em> code which indicates whether the command could be processed successfully. If so, the response may also include data representing the result of processing the command. This type of command is plainly referred to as a <em>command</em> because it represents the default case.</p>
<p>The Command &amp; Control API for Kafka is an alternative to the <a href="/hono/docs/1.6/api/command-and-control/">Command &amp; Control API for AMQP</a>.
With this API, clients send command messages to an Apache Kafka® cluster instead of an AMQP Messaging Network.</p>
<p>See <a href="/hono/docs/1.6/api/kafka-api/">Kafka-based APIs</a> for fundamental information about Hono&rsquo;s Kafka-based APIs.
The statements there apply to this specification.</p>
<div class="alert alert-notice">
<h4 class="alert-heading"><i class="fas fa-info-circle"></i> Tech preview</h4>
<div>The support of Kafka as a messaging system is currently a preview and not yet ready for production. The APIs are subject to change without prior notice.</div>
</div>
<h2 id="send-a-one-way-command">Send a One-Way Command</h2>
<p>Business Applications use this operation to send a command to a device for which they do not expect to receive a response from the device.
For that, the Business Application connects to the <em>Kafka Cluster</em> and writes a message to the tenant-specific topic <code>hono.command.${tenant_id}</code> where <code>${tenant_id}</code> is the ID of the tenant that the client wants to send the command for.</p>
<p><strong>Preconditions</strong></p>
<ol>
<li>Either the topic <code>hono.command.${tenant_id}</code> exists, or the broker is configured to automatically create topics on demand.</li>
<li>The <em>Business Application</em> is authorized to write to the topic.</li>
</ol>
<p><strong>Message Flow</strong></p>
<ol>
<li>The <em>Business Application</em> writes a command message to the topic <code>hono.command.${tenant_id}</code> on the <em>Kafka Cluster</em>.</li>
<li>Hono consumes the message from the <em>Kafka Cluster</em> and forwards it to the device, provided that the target device is connected and is accepting commands.</li>
</ol>
<p><strong>Message Format</strong></p>
<p>The key of the message MUST be the ID of the device that the command is targeted at.</p>
<p>Metadata MUST be set as Kafka headers on a message.
The following table provides an overview of the headers the <em>Business Application</em> needs to set on a one-way command message.</p>
<table>
<thead>
<tr>
<th style="text-align:left">Name</th>
<th style="text-align:center">Mandatory</th>
<th style="text-align:left">Type</th>
<th style="text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><em>device_id</em></td>
<td style="text-align:center">yes</td>
<td style="text-align:left"><em>string</em></td>
<td style="text-align:left">The identifier of the device that the command is targeted at.</td>
</tr>
<tr>
<td style="text-align:left"><em>subject</em></td>
<td style="text-align:center">yes</td>
<td style="text-align:left"><em>string</em></td>
<td style="text-align:left">The name of the command to be executed by the device.</td>
</tr>
<tr>
<td style="text-align:left"><em>content-type</em></td>
<td style="text-align:center">no</td>
<td style="text-align:left"><em>string</em></td>
<td style="text-align:left">If present, MUST contain a <em>Media Type</em> as defined by <a href="https://tools.ietf.org/html/rfc2046">RFC 2046</a> which describes the semantics and format of the command&rsquo;s input data contained in the message payload. However, not all protocol adapters will support this property as not all transport protocols provide means to convey this information, e.g. MQTT 3.1.1 has no notion of message headers.</td>
</tr>
</tbody>
</table>
<p>The command message MAY contain arbitrary payload, set as message value, to be sent to the device. The value of the message&rsquo;s <em>subject</em> header may provide a hint to the device regarding the format, encoding and semantics of the payload data.</p>
<h2 id="send-a-requestresponse-command">Send a (Request/Response) Command</h2>
<p><em>Business Applications</em> use this operation to send a command to a device for which they expect the device to send back a response.
For that, the Business Application connects to the <em>Kafka Cluster</em> and writes a message to the tenant-specific topic <code>hono.command.${tenant_id}</code> where <code>${tenant_id}</code> is the ID of the tenant that the client wants to send the command for.
The Business Application can consume the corresponding command response from the <code>hono.command_response.${tenant_id}</code> topic.</p>
<p>In contrast to a one-way command, a request/response command contains a <em>response-expected</em> header with value <code>true</code> and a <em>correlation-id</em> header, providing the identifier that is used to correlate a response message to the original request.</p>
<p><strong>Preconditions</strong></p>
<ol>
<li>Either the topics <code>hono.command.${tenant_id}</code> and <code>hono.command_response.${tenant_id}</code> exist, or the broker is configured to automatically create topics on demand.</li>
<li>The <em>Business Application</em> is authorized to write to the <code>hono.command.${tenant_id}</code> topic and read from the <code>hono.command_response.${tenant_id}</code> topic.</li>
<li>The <em>Business Application</em> is subscribed to the <code>hono.command_response.${tenant_id}</code> topic with a Kafka consumer.</li>
</ol>
<p><strong>Message Flow</strong></p>
<ol>
<li>The <em>Business Application</em> writes a command message to the topic <code>hono.command.${tenant_id}</code> on the <em>Kafka Cluster</em>.</li>
<li>Hono consumes the message from the <em>Kafka Cluster</em> and forwards it to the device, provided that the target device is connected and is accepting commands.</li>
<li>The device sends a command response message. Hono writes that message to the <code>hono.command_response.${tenant_id}</code> topic on the <em>Kafka Cluster</em>.</li>
<li>The <em>Business Application</em> consumes the command response message from the <code>hono.command_response.${tenant_id}</code> topic.</li>
</ol>
<p><strong>Command Message Format</strong></p>
<p>The key of the message MUST be the ID of the device that the command is targeted at.</p>
<p>Metadata MUST be set as Kafka headers on a message.
The following table provides an overview of the headers the <em>Business Application</em> needs to set on a request/response command message.</p>
<table>
<thead>
<tr>
<th style="text-align:left">Name</th>
<th style="text-align:center">Mandatory</th>
<th style="text-align:left">Type</th>
<th style="text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><em>correlation-id</em></td>
<td style="text-align:center">yes</td>
<td style="text-align:left"><em>string</em></td>
<td style="text-align:left">The identifier used to correlate a response message to the original request. It is used as the <em>correlation-id</em> header in the response.</td>
</tr>
<tr>
<td style="text-align:left"><em>device_id</em></td>
<td style="text-align:center">yes</td>
<td style="text-align:left"><em>string</em></td>
<td style="text-align:left">The identifier of the device that the command is targeted at.</td>
</tr>
<tr>
<td style="text-align:left"><em>response-expected</em></td>
<td style="text-align:center">yes</td>
<td style="text-align:left"><em>boolean</em></td>
<td style="text-align:left">MUST be set with a value of <code>true</code>, meaning that a response from the device is expected for the command.</td>
</tr>
<tr>
<td style="text-align:left"><em>subject</em></td>
<td style="text-align:center">yes</td>
<td style="text-align:left"><em>string</em></td>
<td style="text-align:left">The name of the command to be executed by the device.</td>
</tr>
<tr>
<td style="text-align:left"><em>content-type</em></td>
<td style="text-align:center">no</td>
<td style="text-align:left"><em>string</em></td>
<td style="text-align:left">If present, MUST contain a <em>Media Type</em> as defined by <a href="https://tools.ietf.org/html/rfc2046">RFC 2046</a> which describes the semantics and format of the command&rsquo;s input data contained in the message payload. However, not all protocol adapters will support this property as not all transport protocols provide means to convey this information, e.g. MQTT 3.1.1 has no notion of message headers.</td>
</tr>
</tbody>
</table>
<p>The command message MAY contain arbitrary payload, set as message value, to be sent to the device. The value of the message&rsquo;s <em>subject</em> header may provide a hint to the device regarding the format, encoding and semantics of the payload data.</p>
<p>An application can determine the overall outcome of the operation by means of the response to the command that is sent back by the device. An application should consider execution of a command to have failed, if it does not receive a response within a reasonable amount of time.</p>
<p><strong>Response Message Format</strong></p>
<p>The key of the message MUST be the ID of the device that the command response is from.</p>
<p>Metadata MUST be set as Kafka headers on a message.
The following table provides an overview of the headers set on a message sent in response to a command.</p>
<table>
<thead>
<tr>
<th style="text-align:left">Name</th>
<th style="text-align:center">Mandatory</th>
<th style="text-align:left">Type</th>
<th style="text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><em>correlation-id</em></td>
<td style="text-align:center">yes</td>
<td style="text-align:left"><em>string</em></td>
<td style="text-align:left">MUST contain the value of the <em>correlation-id</em> header of the request message that this is the response for.</td>
</tr>
<tr>
<td style="text-align:left"><em>device_id</em></td>
<td style="text-align:center">yes</td>
<td style="text-align:left"><em>string</em></td>
<td style="text-align:left">The identifier of the device that sent the response.</td>
</tr>
<tr>
<td style="text-align:left"><em>status</em></td>
<td style="text-align:center">yes</td>
<td style="text-align:left"><em>integer</em></td>
<td style="text-align:left">MUST indicate the status of the execution. See table below for possible values.</td>
</tr>
<tr>
<td style="text-align:left"><em>content-type</em></td>
<td style="text-align:center">no</td>
<td style="text-align:left"><em>string</em></td>
<td style="text-align:left">If present, MUST contain a <em>Media Type</em> as defined by <a href="https://tools.ietf.org/html/rfc2046">RFC 2046</a> which describes the semantics and format of the command&rsquo;s input data contained in the message payload. However, not all protocol adapters will support this property as not all transport protocols provide means to convey this information, e.g. MQTT 3.1.1 has no notion of message headers.</td>
</tr>
</tbody>
</table>
<p>The <em>status</em> header must contain an <a href="https://tools.ietf.org/html/rfc7231#section-6">HTTP 1.1 response status code</a>:</p>
<table>
<thead>
<tr>
<th style="text-align:left">Code</th>
<th style="text-align:left">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><em>2xx</em></td>
<td style="text-align:left">The command has been processed successfully.</td>
</tr>
<tr>
<td style="text-align:left"><em>4xx</em></td>
<td style="text-align:left">The command could not be processed due to a client error, e.g. malformed message payload.</td>
</tr>
<tr>
<td style="text-align:left"><em>5xx</em></td>
<td style="text-align:left">The command could not be processed due to an internal problem at the device side.</td>
</tr>
</tbody>
</table>
<p>The semantics of the individual codes are specific to the device and command. For status codes indicating an error (codes in the <code>400 - 599</code> range) the message body MAY contain a detailed description of the error that occurred.</p>
<p>The command response message MAY contain arbitrary payload, set as message value, to be sent to the business application.</p>
<footer class="footline">
</footer>
</div>
</div>
<div id="navigation">
</div>
</section>
<div style="left: -1000px; overflow: scroll; position: absolute; top: -1000px; border: none; box-sizing: content-box; height: 200px; margin: 0px; padding: 0px; width: 200px;">
<div style="border: none; box-sizing: content-box; height: 200px; margin: 0px; padding: 0px; width: 200px;"></div>
</div>
<script src="/hono/docs/js/clipboard.min.js?1626138722"></script>
<script src="/hono/docs/js/perfect-scrollbar.min.js?1626138722"></script>
<script src="/hono/docs/js/perfect-scrollbar.jquery.min.js?1626138722"></script>
<script src="/hono/docs/js/jquery.sticky.js?1626138722"></script>
<script src="/hono/docs/js/featherlight.min.js?1626138722"></script>
<script src="/hono/docs/js/highlight.pack.js?1626138722"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script src="/hono/docs/js/modernizr.custom-3.6.0.js?1626138722"></script>
<script src="/hono/docs/js/learn.js?1626138722"></script>
<script src="/hono/docs/js/hugo-learn.js?1626138722"></script>
<link href="/hono/docs/mermaid/mermaid.css?1626138722" rel="stylesheet" />
<script src="/hono/docs/mermaid/mermaid.js?1626138722"></script>
<script>
mermaid.initialize({ startOnLoad: true });
</script>
<script>
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-5WLCZXC');
</script>
<script src="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/javascript/vendor/cookieconsent/default.min.js"></script>
</body>
</html>