From cd4940ce6d1d9570e2b5b94e0c9fcf4721d7d8a5 Mon Sep 17 00:00:00 2001 From: volodymyr-babak Date: Mon, 15 May 2017 15:52:17 +0300 Subject: [PATCH 1/3] Added MQTT plugin --- application/pom.xml | 7 +- .../extensions/kafka/plugin/KafkaPlugin.java | 1 + extensions/extension-mqtt/pom.xml | 98 ++++++++++++++ .../extension-mqtt/src/assembly/extension.xml | 34 +++++ .../extensions/mqtt/action/MqttActionMsg.java | 28 ++++ .../mqtt/action/MqttActionPayload.java | 34 +++++ .../mqtt/action/MqttPluginAction.java | 43 ++++++ .../action/MqttPluginActionConfiguration.java | 26 ++++ .../mqtt/plugin/MqttMsgHandler.java | 70 ++++++++++ .../extensions/mqtt/plugin/MqttPlugin.java | 128 ++++++++++++++++++ .../mqtt/plugin/MqttPluginConfiguration.java | 28 ++++ .../main/resources/MqttActionDescriptor.json | 32 +++++ .../main/resources/MqttPluginDescriptor.json | 48 +++++++ extensions/pom.xml | 1 + pom.xml | 6 + 15 files changed, 582 insertions(+), 2 deletions(-) create mode 100644 extensions/extension-mqtt/pom.xml create mode 100644 extensions/extension-mqtt/src/assembly/extension.xml create mode 100644 extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttActionMsg.java create mode 100644 extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttActionPayload.java create mode 100644 extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttPluginAction.java create mode 100644 extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttPluginActionConfiguration.java create mode 100644 extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/plugin/MqttMsgHandler.java create mode 100644 extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/plugin/MqttPlugin.java create mode 100644 extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/plugin/MqttPluginConfiguration.java create mode 100644 extensions/extension-mqtt/src/main/resources/MqttActionDescriptor.json create mode 100644 extensions/extension-mqtt/src/main/resources/MqttPluginDescriptor.json diff --git a/application/pom.xml b/application/pom.xml index f3fd1d04e4..47ffac3d65 100644 --- a/application/pom.xml +++ b/application/pom.xml @@ -91,8 +91,6 @@ org.eclipse.paho org.eclipse.paho.client.mqttv3 - 1.1.0 - test org.cassandraunit @@ -422,6 +420,11 @@ extension-kafka extension + + org.thingsboard.extensions + extension-mqtt + extension + diff --git a/extensions/extension-kafka/src/main/java/org/thingsboard/server/extensions/kafka/plugin/KafkaPlugin.java b/extensions/extension-kafka/src/main/java/org/thingsboard/server/extensions/kafka/plugin/KafkaPlugin.java index 784f30b44d..1eca470904 100644 --- a/extensions/extension-kafka/src/main/java/org/thingsboard/server/extensions/kafka/plugin/KafkaPlugin.java +++ b/extensions/extension-kafka/src/main/java/org/thingsboard/server/extensions/kafka/plugin/KafkaPlugin.java @@ -68,6 +68,7 @@ public class KafkaPlugin extends AbstractPlugin { this.producer.close(); } catch (Exception e) { log.error("Failed to close producer during destroy()", e); + throw new RuntimeException(e); } } diff --git a/extensions/extension-mqtt/pom.xml b/extensions/extension-mqtt/pom.xml new file mode 100644 index 0000000000..bd428b6ca9 --- /dev/null +++ b/extensions/extension-mqtt/pom.xml @@ -0,0 +1,98 @@ + + + + 4.0.0 + + org.thingsboard + 1.2.3-SNAPSHOT + extensions + + org.thingsboard.extensions + extension-mqtt + jar + + Thingsboard Server MQTT Extension + http://thingsboard.org + + + UTF-8 + ${basedir}/../.. + + + + + org.eclipse.paho + org.eclipse.paho.client.mqttv3 + provided + + + ch.qos.logback + logback-core + provided + + + ch.qos.logback + logback-classic + provided + + + org.thingsboard + extensions-api + provided + + + org.thingsboard + extensions-core + provided + + + org.apache.velocity + velocity + provided + + + org.apache.velocity + velocity-tools + provided + + + + + + maven-assembly-plugin + + + src/assembly/extension.xml + + + + + make-assembly + package + + single + + + + + + + \ No newline at end of file diff --git a/extensions/extension-mqtt/src/assembly/extension.xml b/extensions/extension-mqtt/src/assembly/extension.xml new file mode 100644 index 0000000000..1229956fa0 --- /dev/null +++ b/extensions/extension-mqtt/src/assembly/extension.xml @@ -0,0 +1,34 @@ + + + extension + + jar + + false + + + / + true + true + runtime + + + diff --git a/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttActionMsg.java b/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttActionMsg.java new file mode 100644 index 0000000000..087696c687 --- /dev/null +++ b/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttActionMsg.java @@ -0,0 +1,28 @@ +/** + * Copyright © 2016-2017 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.extensions.mqtt.action; + +import org.thingsboard.server.common.data.id.CustomerId; +import org.thingsboard.server.common.data.id.DeviceId; +import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.extensions.api.plugins.msg.AbstractRuleToPluginMsg; + +public class MqttActionMsg extends AbstractRuleToPluginMsg { + + public MqttActionMsg(TenantId tenantId, CustomerId customerId, DeviceId deviceId, MqttActionPayload payload) { + super(tenantId, customerId, deviceId, payload); + } +} diff --git a/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttActionPayload.java b/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttActionPayload.java new file mode 100644 index 0000000000..dcdfdc13e4 --- /dev/null +++ b/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttActionPayload.java @@ -0,0 +1,34 @@ +/** + * Copyright © 2016-2017 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.extensions.mqtt.action; + +import lombok.Builder; +import lombok.Data; +import org.thingsboard.server.common.msg.session.MsgType; + +import java.io.Serializable; + +@Data +@Builder +public class MqttActionPayload implements Serializable { + + private final boolean sync; + private final String topic; + private final String msgBody; + + private final Integer requestId; + private final MsgType msgType; +} diff --git a/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttPluginAction.java b/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttPluginAction.java new file mode 100644 index 0000000000..5d3ae487cb --- /dev/null +++ b/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttPluginAction.java @@ -0,0 +1,43 @@ +/** + * Copyright © 2016-2017 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.extensions.mqtt.action; + +import org.thingsboard.server.common.msg.device.ToDeviceActorMsg; +import org.thingsboard.server.common.msg.session.FromDeviceRequestMsg; +import org.thingsboard.server.extensions.api.component.Action; +import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; +import org.thingsboard.server.extensions.api.rules.RuleContext; +import org.thingsboard.server.extensions.core.action.template.AbstractTemplatePluginAction; + +import java.util.Optional; + +@Action(name = "Mqtt Plugin Action", descriptor = "MqttActionDescriptor.json", configuration = MqttPluginActionConfiguration.class) +public class MqttPluginAction extends AbstractTemplatePluginAction { + + @Override + protected Optional> buildRuleToPluginMsg(RuleContext ctx, ToDeviceActorMsg msg, FromDeviceRequestMsg payload) { + MqttActionPayload.MqttActionPayloadBuilder builder = MqttActionPayload.builder(); + builder.sync(configuration.isSync()); + builder.msgType(payload.getMsgType()); + builder.requestId(payload.getRequestId()); + builder.topic(configuration.getTopic()); + builder.msgBody(getMsgBody(ctx, msg)); + return Optional.of(new MqttActionMsg(msg.getTenantId(), + msg.getCustomerId(), + msg.getDeviceId(), + builder.build())); + } +} diff --git a/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttPluginActionConfiguration.java b/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttPluginActionConfiguration.java new file mode 100644 index 0000000000..94deb511a0 --- /dev/null +++ b/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/action/MqttPluginActionConfiguration.java @@ -0,0 +1,26 @@ +/** + * Copyright © 2016-2017 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.extensions.mqtt.action; + +import lombok.Data; +import org.thingsboard.server.extensions.core.action.template.TemplateActionConfiguration; + +@Data +public class MqttPluginActionConfiguration implements TemplateActionConfiguration { + private boolean sync; + private String topic; + private String template; +} diff --git a/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/plugin/MqttMsgHandler.java b/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/plugin/MqttMsgHandler.java new file mode 100644 index 0000000000..08e50598ba --- /dev/null +++ b/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/plugin/MqttMsgHandler.java @@ -0,0 +1,70 @@ +/** + * Copyright © 2016-2017 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.extensions.mqtt.plugin; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.paho.client.mqttv3.*; +import org.thingsboard.server.common.data.id.RuleId; +import org.thingsboard.server.common.data.id.TenantId; +import org.thingsboard.server.common.msg.core.BasicStatusCodeResponse; +import org.thingsboard.server.extensions.api.plugins.PluginContext; +import org.thingsboard.server.extensions.api.plugins.handlers.RuleMsgHandler; +import org.thingsboard.server.extensions.api.plugins.msg.ResponsePluginToRuleMsg; +import org.thingsboard.server.extensions.api.plugins.msg.RuleToPluginMsg; +import org.thingsboard.server.extensions.api.rules.RuleException; +import org.thingsboard.server.extensions.mqtt.action.MqttActionMsg; +import org.thingsboard.server.extensions.mqtt.action.MqttActionPayload; + +import java.nio.charset.StandardCharsets; + +@RequiredArgsConstructor +@Slf4j +public class MqttMsgHandler implements RuleMsgHandler { + + private final MqttAsyncClient mqttClient; + + @Override + public void process(PluginContext ctx, TenantId tenantId, RuleId ruleId, RuleToPluginMsg msg) throws RuleException { + if (!(msg instanceof MqttActionMsg)) { + throw new RuleException("Unsupported message type " + msg.getClass().getName() + "!"); + } + MqttActionPayload payload = ((MqttActionMsg) msg).getPayload(); + MqttMessage mqttMsg = new MqttMessage(payload.getMsgBody().getBytes(StandardCharsets.UTF_8)); + try { + mqttClient.publish(payload.getTopic(), mqttMsg, null, new IMqttActionListener() { + @Override + public void onSuccess(IMqttToken asyncActionToken) { + log.debug("Message [{}] was successfully delivered to topic [{}]!", msg.toString(), payload.getTopic()); + if (payload.isSync()) { + ctx.reply(new ResponsePluginToRuleMsg(msg.getUid(), tenantId, ruleId, + BasicStatusCodeResponse.onSuccess(payload.getMsgType(), payload.getRequestId()))); + } + } + @Override + public void onFailure(IMqttToken asyncActionToken, Throwable e) { + log.warn("Failed to deliver message [{}] to topic [{}]!", msg.toString(), payload.getTopic()); + if (payload.isSync()) { + ctx.reply(new ResponsePluginToRuleMsg(msg.getUid(), tenantId, ruleId, + BasicStatusCodeResponse.onError(payload.getMsgType(), payload.getRequestId(), new Exception(e)))); + } + } + }); + } catch (MqttException e) { + throw new RuntimeException(e.getMessage(), e); + } + } +} diff --git a/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/plugin/MqttPlugin.java b/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/plugin/MqttPlugin.java new file mode 100644 index 0000000000..3ff4dd0a59 --- /dev/null +++ b/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/plugin/MqttPlugin.java @@ -0,0 +1,128 @@ +/** + * Copyright © 2016-2017 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.extensions.mqtt.plugin; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.eclipse.paho.client.mqttv3.*; +import org.thingsboard.server.extensions.api.component.Plugin; +import org.thingsboard.server.extensions.api.plugins.AbstractPlugin; +import org.thingsboard.server.extensions.api.plugins.PluginContext; +import org.thingsboard.server.extensions.api.plugins.handlers.RuleMsgHandler; +import org.thingsboard.server.extensions.mqtt.action.MqttPluginAction; + +import java.util.UUID; + +@Plugin(name = "Mqtt Plugin", actions = {MqttPluginAction.class}, + descriptor = "MqttPluginDescriptor.json", configuration = MqttPluginConfiguration.class) +@Slf4j +public class MqttPlugin extends AbstractPlugin { + + private MqttMsgHandler handler; + + private MqttAsyncClient mqttClient; + private MqttConnectOptions mqttClientOptions; + + private int retryInterval; + + private final Object connectLock = new Object(); + + @Override + public void init(MqttPluginConfiguration configuration) { + retryInterval = configuration.getRetryInterval(); + + mqttClientOptions = new MqttConnectOptions(); + mqttClientOptions.setCleanSession(false); + mqttClientOptions.setMaxInflight(configuration.getMaxInFlight()); + mqttClientOptions.setAutomaticReconnect(true); + String clientId = configuration.getClientId(); + if (StringUtils.isEmpty(clientId)) { + clientId = UUID.randomUUID().toString(); + } + if (!StringUtils.isEmpty(configuration.getAccessToken())) { + mqttClientOptions.setUserName(configuration.getAccessToken()); + } + try { + mqttClient = new MqttAsyncClient("tcp://" + configuration.getHost() + ":" + configuration.getPort(), clientId); + } catch (Exception e) { + log.error("Failed to create mqtt client", e); + throw new RuntimeException(e); + } + connect(); + } + + private void connect() { + if (!mqttClient.isConnected()) { + synchronized (connectLock) { + while (!mqttClient.isConnected()) { + log.debug("Attempt to connect to requested mqtt host [{}]!", mqttClient.getServerURI()); + try { + mqttClient.connect(mqttClientOptions, null, new IMqttActionListener() { + @Override + public void onSuccess(IMqttToken iMqttToken) { + log.info("Connected to requested mqtt host [{}]!", mqttClient.getServerURI()); + } + + @Override + public void onFailure(IMqttToken iMqttToken, Throwable e) { + } + }).waitForCompletion(); + } catch (MqttException e) { + log.warn("Failed to connect to requested mqtt host [{}]!", mqttClient.getServerURI(), e); + if (!mqttClient.isConnected()) { + try { + Thread.sleep(retryInterval); + } catch (InterruptedException e1) { + log.trace("Failed to wait for retry interval!", e); + } + } + } + } + } + } + this.handler = new MqttMsgHandler(mqttClient); + } + + private void destroy() { + try { + this.handler = null; + this.mqttClient.disconnect(); + } catch (MqttException e) { + log.error("Failed to close mqtt client connection during destroy()", e); + throw new RuntimeException(e); + } + } + + @Override + protected RuleMsgHandler getRuleMsgHandler() { + return handler; + } + + @Override + public void resume(PluginContext ctx) { + connect(); + } + + @Override + public void suspend(PluginContext ctx) { + destroy(); + } + + @Override + public void stop(PluginContext ctx) { + destroy(); + } +} diff --git a/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/plugin/MqttPluginConfiguration.java b/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/plugin/MqttPluginConfiguration.java new file mode 100644 index 0000000000..4d50877482 --- /dev/null +++ b/extensions/extension-mqtt/src/main/java/org/thingsboard/server/extensions/mqtt/plugin/MqttPluginConfiguration.java @@ -0,0 +1,28 @@ +/** + * Copyright © 2016-2017 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.extensions.mqtt.plugin; + +import lombok.Data; + +@Data +public class MqttPluginConfiguration { + private String host; + private int port; + private int maxInFlight; + private int retryInterval; + private String clientId; + private String accessToken; +} \ No newline at end of file diff --git a/extensions/extension-mqtt/src/main/resources/MqttActionDescriptor.json b/extensions/extension-mqtt/src/main/resources/MqttActionDescriptor.json new file mode 100644 index 0000000000..05b9b3ac37 --- /dev/null +++ b/extensions/extension-mqtt/src/main/resources/MqttActionDescriptor.json @@ -0,0 +1,32 @@ +{ + "schema": { + "title": "Mqtt Action Configuration", + "type": "object", + "properties": { + "sync": { + "title": "Requires delivery confirmation", + "type": "boolean" + }, + "topic": { + "title": "Topic Name", + "type": "string" + }, + "template": { + "title": "Body Template", + "type": "string" + } + }, + "required": [ + "topic", + "template" + ] + }, + "form": [ + "topic", + { + "key": "template", + "type": "textarea", + "rows": 5 + } + ] +} \ No newline at end of file diff --git a/extensions/extension-mqtt/src/main/resources/MqttPluginDescriptor.json b/extensions/extension-mqtt/src/main/resources/MqttPluginDescriptor.json new file mode 100644 index 0000000000..acfb629260 --- /dev/null +++ b/extensions/extension-mqtt/src/main/resources/MqttPluginDescriptor.json @@ -0,0 +1,48 @@ +{ + "schema": { + "title": "Mqtt Plugin Configuration", + "type": "object", + "properties": { + "host": { + "title": "Specify the host to connect to", + "type": "string", + "default": "localhost" + }, + "port": { + "title": "Connect to the port specified", + "type": "integer", + "default": 1883 + }, + "accessToken": { + "title": "Provide a username (accessToken) to be used for authenticating with the broker.", + "type": "string" + }, + "clientId": { + "title": "The id to use for this client.", + "type": "string" + }, + "maxInFlight": { + "title": "The max inflight limits to how many messages we can send without receiving acknowledgments.", + "type": "integer", + "default": 1000 + }, + "retryInterval": { + "title": "Interval to wait between connect attempts to host.", + "type": "integer", + "default": 3000 + } + }, + "required": [ + "host", + "port" + ] + }, + "form": [ + "host", + "port", + "accessToken", + "clientId", + "maxInFlight", + "retryInterval" + ] +} \ No newline at end of file diff --git a/extensions/pom.xml b/extensions/pom.xml index 63b34cf7eb..8679603577 100644 --- a/extensions/pom.xml +++ b/extensions/pom.xml @@ -38,6 +38,7 @@ extension-rabbitmq extension-rest-api-call extension-kafka + extension-mqtt diff --git a/pom.xml b/pom.xml index 6324712dfd..aad88a4110 100755 --- a/pom.xml +++ b/pom.xml @@ -337,6 +337,12 @@ extension ${project.version} + + org.thingsboard.extensions + extension-mqtt + extension + ${project.version} + org.thingsboard.common data From 1623c21021a09b041166e5937fff50e6fb493930 Mon Sep 17 00:00:00 2001 From: volodymyr-babak Date: Mon, 15 May 2017 16:33:10 +0300 Subject: [PATCH 2/3] text fixed --- .../src/main/resources/MqttPluginDescriptor.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/extension-mqtt/src/main/resources/MqttPluginDescriptor.json b/extensions/extension-mqtt/src/main/resources/MqttPluginDescriptor.json index acfb629260..dfd781afff 100644 --- a/extensions/extension-mqtt/src/main/resources/MqttPluginDescriptor.json +++ b/extensions/extension-mqtt/src/main/resources/MqttPluginDescriptor.json @@ -14,7 +14,7 @@ "default": 1883 }, "accessToken": { - "title": "Provide a username (accessToken) to be used for authenticating with the broker.", + "title": "Username (Access Token) to be used for authenticating.", "type": "string" }, "clientId": { @@ -22,7 +22,7 @@ "type": "string" }, "maxInFlight": { - "title": "The max inflight limits to how many messages we can send without receiving acknowledgments.", + "title": "How many messages can be send without acknowledgments.", "type": "integer", "default": 1000 }, From 24d02763fbd2a45d8f88d892258664e7e3342071 Mon Sep 17 00:00:00 2001 From: volodymyr-babak Date: Mon, 29 May 2017 12:08:17 +0300 Subject: [PATCH 3/3] Updated parent version --- extensions/extension-mqtt/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/extension-mqtt/pom.xml b/extensions/extension-mqtt/pom.xml index bd428b6ca9..1d12eeb287 100644 --- a/extensions/extension-mqtt/pom.xml +++ b/extensions/extension-mqtt/pom.xml @@ -22,7 +22,7 @@ 4.0.0 org.thingsboard - 1.2.3-SNAPSHOT + 1.3.0-SNAPSHOT extensions org.thingsboard.extensions