From e09aef8d224781d5ab1267c1d2909a76c1721724 Mon Sep 17 00:00:00 2001 From: thingsboard Date: Wed, 20 Jul 2022 17:43:46 +0300 Subject: [PATCH 1/7] added ability to create custom attrs subscribe topic --- .../mqtt/AbstractMqttIntegrationTest.java | 2 +- .../MqttDeviceProfileTransportConfiguration.java | 5 ++++- .../transport/mqtt/MqttTransportHandler.java | 5 +++++ .../transport/mqtt/session/DeviceSessionCtx.java | 14 ++++++++++---- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/application/src/test/java/org/thingsboard/server/transport/mqtt/AbstractMqttIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/mqtt/AbstractMqttIntegrationTest.java index 9fbdff3fa5..ec64ce4af3 100644 --- a/application/src/test/java/org/thingsboard/server/transport/mqtt/AbstractMqttIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/mqtt/AbstractMqttIntegrationTest.java @@ -106,7 +106,7 @@ public abstract class AbstractMqttIntegrationTest extends AbstractTransportInteg mqttDeviceProfileTransportConfiguration.setDeviceTelemetryTopic(config.getTelemetryTopicFilter()); } if (StringUtils.hasLength(config.getAttributesTopicFilter())) { - mqttDeviceProfileTransportConfiguration.setDeviceAttributesTopic(config.getAttributesTopicFilter()); + mqttDeviceProfileTransportConfiguration.setDeviceAttributesPublishTopic(config.getAttributesTopicFilter()); } mqttDeviceProfileTransportConfiguration.setSendAckOnValidationException(config.isSendAckOnValidationException()); TransportPayloadTypeConfiguration transportPayloadTypeConfiguration; diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/device/profile/MqttDeviceProfileTransportConfiguration.java b/common/data/src/main/java/org/thingsboard/server/common/data/device/profile/MqttDeviceProfileTransportConfiguration.java index 1a4d2c72ad..8c1493bce7 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/device/profile/MqttDeviceProfileTransportConfiguration.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/device/profile/MqttDeviceProfileTransportConfiguration.java @@ -25,7 +25,10 @@ public class MqttDeviceProfileTransportConfiguration implements DeviceProfileTra @NoXss private String deviceTelemetryTopic = MqttTopics.DEVICE_TELEMETRY_TOPIC; @NoXss - private String deviceAttributesTopic = MqttTopics.DEVICE_ATTRIBUTES_TOPIC; + private String deviceAttributesPublishTopic = MqttTopics.DEVICE_ATTRIBUTES_TOPIC; + @NoXss + private String deviceAttributesSubscribeTopic = MqttTopics.DEVICE_ATTRIBUTES_TOPIC;//todo + private TransportPayloadTypeConfiguration transportPayloadTypeConfiguration; private boolean sendAckOnValidationException; diff --git a/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/MqttTransportHandler.java b/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/MqttTransportHandler.java index f37715efc8..288f32ec4e 100644 --- a/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/MqttTransportHandler.java +++ b/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/MqttTransportHandler.java @@ -622,6 +622,11 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement for (MqttTopicSubscription subscription : mqttMsg.payload().topicSubscriptions()) { String topic = subscription.topicName(); MqttQoS reqQoS = subscription.qualityOfService(); + if (deviceSessionCtx.isDeviceSubscriptionAttributesTopic(topic)){ + processAttributesSubscribe(grantedQoSList, topic, reqQoS, TopicType.V1); + activityReported = true; + continue; + } try { switch (topic) { case MqttTopics.DEVICE_ATTRIBUTES_TOPIC: { diff --git a/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/session/DeviceSessionCtx.java b/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/session/DeviceSessionCtx.java index 2163610b38..4b69f75f06 100644 --- a/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/session/DeviceSessionCtx.java +++ b/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/session/DeviceSessionCtx.java @@ -75,7 +75,8 @@ public class DeviceSessionCtx extends MqttDeviceAwareSessionContext { private boolean provisionOnly = false; private volatile MqttTopicFilter telemetryTopicFilter = MqttTopicFilterFactory.getDefaultTelemetryFilter(); - private volatile MqttTopicFilter attributesTopicFilter = MqttTopicFilterFactory.getDefaultAttributesFilter(); + private volatile MqttTopicFilter attributesPublishTopicFilter = MqttTopicFilterFactory.getDefaultAttributesFilter(); + private volatile MqttTopicFilter attributesSubscribeTopicFilter = MqttTopicFilterFactory.getDefaultAttributesFilter(); private volatile TransportPayloadType payloadType = TransportPayloadType.JSON; private volatile Descriptors.Descriptor attributesDynamicMessageDescriptor; private volatile Descriptors.Descriptor telemetryDynamicMessageDescriptor; @@ -105,7 +106,11 @@ public class DeviceSessionCtx extends MqttDeviceAwareSessionContext { } public boolean isDeviceAttributesTopic(String topicName) { - return attributesTopicFilter.filter(topicName); + return attributesPublishTopicFilter.filter(topicName); + } + + public boolean isDeviceSubscriptionAttributesTopic(String topicName) { + return attributesSubscribeTopicFilter.filter(topicName); } public MqttTransportAdaptor getPayloadAdaptor() { @@ -156,7 +161,8 @@ public class DeviceSessionCtx extends MqttDeviceAwareSessionContext { TransportPayloadTypeConfiguration transportPayloadTypeConfiguration = mqttConfig.getTransportPayloadTypeConfiguration(); payloadType = transportPayloadTypeConfiguration.getTransportPayloadType(); telemetryTopicFilter = MqttTopicFilterFactory.toFilter(mqttConfig.getDeviceTelemetryTopic()); - attributesTopicFilter = MqttTopicFilterFactory.toFilter(mqttConfig.getDeviceAttributesTopic()); + attributesPublishTopicFilter = MqttTopicFilterFactory.toFilter(mqttConfig.getDeviceAttributesPublishTopic()); + attributesSubscribeTopicFilter = MqttTopicFilterFactory.toFilter(mqttConfig.getDeviceAttributesSubscribeTopic()); sendAckOnValidationException = mqttConfig.isSendAckOnValidationException(); if (TransportPayloadType.PROTOBUF.equals(payloadType)) { ProtoTransportPayloadConfiguration protoTransportPayloadConfig = (ProtoTransportPayloadConfiguration) transportPayloadTypeConfiguration; @@ -166,7 +172,7 @@ public class DeviceSessionCtx extends MqttDeviceAwareSessionContext { } } else { telemetryTopicFilter = MqttTopicFilterFactory.getDefaultTelemetryFilter(); - attributesTopicFilter = MqttTopicFilterFactory.getDefaultAttributesFilter(); + attributesPublishTopicFilter = MqttTopicFilterFactory.getDefaultAttributesFilter(); payloadType = TransportPayloadType.JSON; sendAckOnValidationException = false; } From 7cb65c5e159adc2bb3887cbdaf53d200a4ca0c24 Mon Sep 17 00:00:00 2001 From: thingsboard Date: Fri, 22 Jul 2022 16:45:26 +0300 Subject: [PATCH 2/7] added tests --- .../server/controller/AbstractWebTest.java | 13 +++++++++- .../BaseDeviceProfileControllerTest.java | 24 ++++++++++++++++++- .../MqttAttributesUpdatesIntegrationTest.java | 16 +++++++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java b/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java index 677303cc15..91ff2df22f 100644 --- a/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java @@ -452,7 +452,18 @@ public abstract class AbstractWebTest extends AbstractInMemoryStorageTest { protected MqttDeviceProfileTransportConfiguration createMqttDeviceProfileTransportConfiguration(TransportPayloadTypeConfiguration transportPayloadTypeConfiguration, boolean sendAckOnValidationException) { MqttDeviceProfileTransportConfiguration mqttDeviceProfileTransportConfiguration = new MqttDeviceProfileTransportConfiguration(); mqttDeviceProfileTransportConfiguration.setDeviceTelemetryTopic(MqttTopics.DEVICE_TELEMETRY_TOPIC); - mqttDeviceProfileTransportConfiguration.setDeviceTelemetryTopic(MqttTopics.DEVICE_ATTRIBUTES_TOPIC); + mqttDeviceProfileTransportConfiguration.setDeviceAttributesPublishTopic(MqttTopics.DEVICE_ATTRIBUTES_TOPIC); //todo + mqttDeviceProfileTransportConfiguration.setSendAckOnValidationException(sendAckOnValidationException); + mqttDeviceProfileTransportConfiguration.setTransportPayloadTypeConfiguration(transportPayloadTypeConfiguration); + return mqttDeviceProfileTransportConfiguration; + } + + protected MqttDeviceProfileTransportConfiguration createMqttDeviceProfileTransportConfiguration(TransportPayloadTypeConfiguration transportPayloadTypeConfiguration, boolean sendAckOnValidationException, + String telemetryTopic, String attributesPublishTopic, String attributesSubscribeTopic) { + MqttDeviceProfileTransportConfiguration mqttDeviceProfileTransportConfiguration = new MqttDeviceProfileTransportConfiguration(); + mqttDeviceProfileTransportConfiguration.setDeviceTelemetryTopic(telemetryTopic); + mqttDeviceProfileTransportConfiguration.setDeviceAttributesPublishTopic(attributesPublishTopic); + mqttDeviceProfileTransportConfiguration.setDeviceAttributesSubscribeTopic(attributesSubscribeTopic); mqttDeviceProfileTransportConfiguration.setSendAckOnValidationException(sendAckOnValidationException); mqttDeviceProfileTransportConfiguration.setTransportPayloadTypeConfiguration(transportPayloadTypeConfiguration); return mqttDeviceProfileTransportConfiguration; diff --git a/application/src/test/java/org/thingsboard/server/controller/BaseDeviceProfileControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/BaseDeviceProfileControllerTest.java index d0c4a1d7ce..578a410a88 100644 --- a/application/src/test/java/org/thingsboard/server/controller/BaseDeviceProfileControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/BaseDeviceProfileControllerTest.java @@ -74,7 +74,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import static org.thingsboard.server.common.data.ota.OtaPackageType.FIRMWARE; import static org.thingsboard.server.common.data.ota.OtaPackageType.SOFTWARE; -public abstract class BaseDeviceProfileControllerTest extends AbstractControllerTest { +public abstract class BaseDeviceProfileControllerTest extends AbstractControllerTest { private IdComparator idComparator = new IdComparator<>(); private IdComparator deviceProfileInfoIdComparator = new IdComparator<>(); @@ -1124,6 +1124,28 @@ public abstract class BaseDeviceProfileControllerTest extends AbstractController Assert.assertEquals(savedDeviceProfile, foundDeviceProfile); } + @Test + public void testSaveDeviceProfileWorks() throws Exception { //todo + JsonTransportPayloadConfiguration jsonTransportPayloadConfiguration = new JsonTransportPayloadConfiguration(); + MqttDeviceProfileTransportConfiguration mqttDeviceProfileTransportConfiguration = + this.createMqttDeviceProfileTransportConfiguration(jsonTransportPayloadConfiguration, true, + "v1/devices/me/telemetry", "v1/devices/me/attributes", "v1/devices/me/subscribeattributes"); + DeviceProfile deviceProfile = this.createDeviceProfile("Device Profile", + mqttDeviceProfileTransportConfiguration); + DeviceProfile savedDeviceProfile = doPost("/api/deviceProfile", deviceProfile, DeviceProfile.class); + Assert.assertNotNull(savedDeviceProfile); + Assert.assertEquals(savedDeviceProfile.getTransportType(), DeviceTransportType.MQTT); + Assert.assertTrue(savedDeviceProfile.getProfileData().getTransportConfiguration() instanceof MqttDeviceProfileTransportConfiguration); + MqttDeviceProfileTransportConfiguration transportConfiguration = + (MqttDeviceProfileTransportConfiguration) savedDeviceProfile.getProfileData().getTransportConfiguration(); + Assert.assertTrue(transportConfiguration.isSendAckOnValidationException()); + DeviceProfile foundDeviceProfile = + doGet("/api/deviceProfile/" + savedDeviceProfile.getId().getId().toString(), DeviceProfile.class); + Assert.assertEquals(savedDeviceProfile.getProfileData().getTransportConfiguration(), + foundDeviceProfile.getProfileData().getTransportConfiguration()); + Assert.assertEquals(savedDeviceProfile, foundDeviceProfile); + } + private DeviceProfile testSaveDeviceProfileWithProtoPayloadType(String schema) throws Exception { ProtoTransportPayloadConfiguration protoTransportPayloadConfiguration = this.createProtoTransportPayloadConfiguration(schema, schema, null, null); MqttDeviceProfileTransportConfiguration mqttDeviceProfileTransportConfiguration = this.createMqttDeviceProfileTransportConfiguration(protoTransportPayloadConfiguration, false); diff --git a/application/src/test/java/org/thingsboard/server/transport/mqtt/attributes/updates/MqttAttributesUpdatesIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/mqtt/attributes/updates/MqttAttributesUpdatesIntegrationTest.java index 01a33c5b5c..0de72a1aa5 100644 --- a/application/src/test/java/org/thingsboard/server/transport/mqtt/attributes/updates/MqttAttributesUpdatesIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/mqtt/attributes/updates/MqttAttributesUpdatesIntegrationTest.java @@ -18,7 +18,10 @@ package org.thingsboard.server.transport.mqtt.attributes.updates; import lombok.extern.slf4j.Slf4j; import org.junit.Before; import org.junit.Test; +import org.thingsboard.server.common.data.DeviceProfile; import org.thingsboard.server.common.data.TransportPayloadType; +import org.thingsboard.server.common.data.device.profile.JsonTransportPayloadConfiguration; +import org.thingsboard.server.common.data.device.profile.MqttDeviceProfileTransportConfiguration; import org.thingsboard.server.dao.service.DaoSqlTest; import org.thingsboard.server.transport.mqtt.MqttTestConfigProperties; import org.thingsboard.server.transport.mqtt.attributes.AbstractMqttAttributesIntegrationTest; @@ -46,6 +49,19 @@ public class MqttAttributesUpdatesIntegrationTest extends AbstractMqttAttributes processJsonTestSubscribeToAttributesUpdates(DEVICE_ATTRIBUTES_TOPIC); } + @Test + public void testJsonSubscribeToAttributesUpdatesFromTheServerOnCustomTopic() throws Exception { + String customTopic = "v1/devices/me/subscribeattributes"; + JsonTransportPayloadConfiguration jsonTransportPayloadConfiguration = new JsonTransportPayloadConfiguration(); + MqttDeviceProfileTransportConfiguration mqttDeviceProfileTransportConfiguration = + this.createMqttDeviceProfileTransportConfiguration(jsonTransportPayloadConfiguration, true, + "v1/devices/me/telemetry", "v1/devices/me/attributes", customTopic); + DeviceProfile deviceProfile = this.createDeviceProfile("Device Profile", + mqttDeviceProfileTransportConfiguration); + doPost("/api/deviceProfile", deviceProfile, DeviceProfile.class); + processJsonTestSubscribeToAttributesUpdates(customTopic); + } + @Test public void testJsonSubscribeToAttributesUpdatesFromTheServerOnShortTopic() throws Exception { processJsonTestSubscribeToAttributesUpdates(DEVICE_ATTRIBUTES_SHORT_TOPIC); From 62eb43cf0ae5ccafc8a2b8a566f57b990ceff147 Mon Sep 17 00:00:00 2001 From: AndriiD Date: Mon, 25 Jul 2022 13:15:24 +0300 Subject: [PATCH 3/7] small test fix --- .../org/thingsboard/server/controller/AbstractWebTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java b/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java index 31e3df10bb..24f1d647af 100644 --- a/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java @@ -445,7 +445,8 @@ public abstract class AbstractWebTest extends AbstractInMemoryStorageTest { protected MqttDeviceProfileTransportConfiguration createMqttDeviceProfileTransportConfiguration(TransportPayloadTypeConfiguration transportPayloadTypeConfiguration, boolean sendAckOnValidationException) { MqttDeviceProfileTransportConfiguration mqttDeviceProfileTransportConfiguration = new MqttDeviceProfileTransportConfiguration(); mqttDeviceProfileTransportConfiguration.setDeviceTelemetryTopic(MqttTopics.DEVICE_TELEMETRY_TOPIC); - mqttDeviceProfileTransportConfiguration.setDeviceAttributesPublishTopic(MqttTopics.DEVICE_ATTRIBUTES_TOPIC); //todo + mqttDeviceProfileTransportConfiguration.setDeviceAttributesPublishTopic(MqttTopics.DEVICE_ATTRIBUTES_TOPIC); + mqttDeviceProfileTransportConfiguration.setDeviceAttributesSubscribeTopic(MqttTopics.DEVICE_ATTRIBUTES_TOPIC); mqttDeviceProfileTransportConfiguration.setSendAckOnValidationException(sendAckOnValidationException); mqttDeviceProfileTransportConfiguration.setTransportPayloadTypeConfiguration(transportPayloadTypeConfiguration); return mqttDeviceProfileTransportConfiguration; From e64d76a997c8d7935604eab0f0c5397e5ed2023d Mon Sep 17 00:00:00 2001 From: AndriiD Date: Tue, 26 Jul 2022 09:01:38 +0300 Subject: [PATCH 4/7] small test fix --- .../updates/MqttAttributesUpdatesIntegrationTest.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/application/src/test/java/org/thingsboard/server/transport/mqtt/attributes/updates/MqttAttributesUpdatesIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/mqtt/attributes/updates/MqttAttributesUpdatesIntegrationTest.java index 0de72a1aa5..7f736be109 100644 --- a/application/src/test/java/org/thingsboard/server/transport/mqtt/attributes/updates/MqttAttributesUpdatesIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/mqtt/attributes/updates/MqttAttributesUpdatesIntegrationTest.java @@ -18,6 +18,7 @@ package org.thingsboard.server.transport.mqtt.attributes.updates; import lombok.extern.slf4j.Slf4j; import org.junit.Before; import org.junit.Test; +import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.DeviceProfile; import org.thingsboard.server.common.data.TransportPayloadType; import org.thingsboard.server.common.data.device.profile.JsonTransportPayloadConfiguration; @@ -51,15 +52,19 @@ public class MqttAttributesUpdatesIntegrationTest extends AbstractMqttAttributes @Test public void testJsonSubscribeToAttributesUpdatesFromTheServerOnCustomTopic() throws Exception { + Device tmp = savedDevice; String customTopic = "v1/devices/me/subscribeattributes"; JsonTransportPayloadConfiguration jsonTransportPayloadConfiguration = new JsonTransportPayloadConfiguration(); MqttDeviceProfileTransportConfiguration mqttDeviceProfileTransportConfiguration = this.createMqttDeviceProfileTransportConfiguration(jsonTransportPayloadConfiguration, true, "v1/devices/me/telemetry", "v1/devices/me/attributes", customTopic); - DeviceProfile deviceProfile = this.createDeviceProfile("Device Profile", + DeviceProfile deviceProfile = this.createDeviceProfile("New device Profile", mqttDeviceProfileTransportConfiguration); - doPost("/api/deviceProfile", deviceProfile, DeviceProfile.class); + DeviceProfile savedProfile = doPost("/api/deviceProfile", deviceProfile, DeviceProfile.class); + savedDevice.setDeviceProfileId(savedProfile.getId()); + doPost("/api/device", savedDevice); processJsonTestSubscribeToAttributesUpdates(customTopic); + savedDevice = tmp; } @Test From 98d18f0f85482e1ac02e4b01fede74965d7cf3fa Mon Sep 17 00:00:00 2001 From: AndriiD Date: Thu, 28 Jul 2022 10:42:16 +0300 Subject: [PATCH 5/7] pr fixes --- .../org/thingsboard/server/controller/AbstractWebTest.java | 5 ++--- .../server/controller/BaseDeviceProfileControllerTest.java | 2 +- .../server/transport/mqtt/AbstractMqttIntegrationTest.java | 7 +------ .../profile/MqttDeviceProfileTransportConfiguration.java | 4 ++-- .../server/transport/mqtt/session/DeviceSessionCtx.java | 2 +- 5 files changed, 7 insertions(+), 13 deletions(-) diff --git a/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java b/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java index 24f1d647af..b32633f536 100644 --- a/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java @@ -69,7 +69,6 @@ import org.thingsboard.server.common.data.device.profile.TransportPayloadTypeCon import org.thingsboard.server.common.data.edge.Edge; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.HasId; -import org.thingsboard.server.common.data.id.QueueId; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.UUIDBased; import org.thingsboard.server.common.data.id.UserId; @@ -445,7 +444,7 @@ public abstract class AbstractWebTest extends AbstractInMemoryStorageTest { protected MqttDeviceProfileTransportConfiguration createMqttDeviceProfileTransportConfiguration(TransportPayloadTypeConfiguration transportPayloadTypeConfiguration, boolean sendAckOnValidationException) { MqttDeviceProfileTransportConfiguration mqttDeviceProfileTransportConfiguration = new MqttDeviceProfileTransportConfiguration(); mqttDeviceProfileTransportConfiguration.setDeviceTelemetryTopic(MqttTopics.DEVICE_TELEMETRY_TOPIC); - mqttDeviceProfileTransportConfiguration.setDeviceAttributesPublishTopic(MqttTopics.DEVICE_ATTRIBUTES_TOPIC); + mqttDeviceProfileTransportConfiguration.setDeviceAttributesTopic(MqttTopics.DEVICE_ATTRIBUTES_TOPIC); mqttDeviceProfileTransportConfiguration.setDeviceAttributesSubscribeTopic(MqttTopics.DEVICE_ATTRIBUTES_TOPIC); mqttDeviceProfileTransportConfiguration.setSendAckOnValidationException(sendAckOnValidationException); mqttDeviceProfileTransportConfiguration.setTransportPayloadTypeConfiguration(transportPayloadTypeConfiguration); @@ -456,7 +455,7 @@ public abstract class AbstractWebTest extends AbstractInMemoryStorageTest { String telemetryTopic, String attributesPublishTopic, String attributesSubscribeTopic) { MqttDeviceProfileTransportConfiguration mqttDeviceProfileTransportConfiguration = new MqttDeviceProfileTransportConfiguration(); mqttDeviceProfileTransportConfiguration.setDeviceTelemetryTopic(telemetryTopic); - mqttDeviceProfileTransportConfiguration.setDeviceAttributesPublishTopic(attributesPublishTopic); + mqttDeviceProfileTransportConfiguration.setDeviceAttributesTopic(attributesPublishTopic); mqttDeviceProfileTransportConfiguration.setDeviceAttributesSubscribeTopic(attributesSubscribeTopic); mqttDeviceProfileTransportConfiguration.setSendAckOnValidationException(sendAckOnValidationException); mqttDeviceProfileTransportConfiguration.setTransportPayloadTypeConfiguration(transportPayloadTypeConfiguration); diff --git a/application/src/test/java/org/thingsboard/server/controller/BaseDeviceProfileControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/BaseDeviceProfileControllerTest.java index 189ba4693f..64f2963f05 100644 --- a/application/src/test/java/org/thingsboard/server/controller/BaseDeviceProfileControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/BaseDeviceProfileControllerTest.java @@ -1068,7 +1068,7 @@ public abstract class BaseDeviceProfileControllerTest extends AbstractControlle } @Test - public void testSaveDeviceProfileWorks() throws Exception { //todo + public void testSaveDeviceProfileWorks() throws Exception { JsonTransportPayloadConfiguration jsonTransportPayloadConfiguration = new JsonTransportPayloadConfiguration(); MqttDeviceProfileTransportConfiguration mqttDeviceProfileTransportConfiguration = this.createMqttDeviceProfileTransportConfiguration(jsonTransportPayloadConfiguration, true, diff --git a/application/src/test/java/org/thingsboard/server/transport/mqtt/AbstractMqttIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/mqtt/AbstractMqttIntegrationTest.java index ec64ce4af3..c1812c4728 100644 --- a/application/src/test/java/org/thingsboard/server/transport/mqtt/AbstractMqttIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/mqtt/AbstractMqttIntegrationTest.java @@ -17,11 +17,6 @@ package org.thingsboard.server.transport.mqtt; import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.extern.slf4j.Slf4j; -import org.eclipse.paho.client.mqttv3.MqttAsyncClient; -import org.eclipse.paho.client.mqttv3.MqttConnectOptions; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; import org.springframework.test.context.TestPropertySource; import org.springframework.util.StringUtils; import org.thingsboard.server.common.data.Device; @@ -106,7 +101,7 @@ public abstract class AbstractMqttIntegrationTest extends AbstractTransportInteg mqttDeviceProfileTransportConfiguration.setDeviceTelemetryTopic(config.getTelemetryTopicFilter()); } if (StringUtils.hasLength(config.getAttributesTopicFilter())) { - mqttDeviceProfileTransportConfiguration.setDeviceAttributesPublishTopic(config.getAttributesTopicFilter()); + mqttDeviceProfileTransportConfiguration.setDeviceAttributesTopic(config.getAttributesTopicFilter()); } mqttDeviceProfileTransportConfiguration.setSendAckOnValidationException(config.isSendAckOnValidationException()); TransportPayloadTypeConfiguration transportPayloadTypeConfiguration; diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/device/profile/MqttDeviceProfileTransportConfiguration.java b/common/data/src/main/java/org/thingsboard/server/common/data/device/profile/MqttDeviceProfileTransportConfiguration.java index 8c1493bce7..5bb97a8f23 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/device/profile/MqttDeviceProfileTransportConfiguration.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/device/profile/MqttDeviceProfileTransportConfiguration.java @@ -25,9 +25,9 @@ public class MqttDeviceProfileTransportConfiguration implements DeviceProfileTra @NoXss private String deviceTelemetryTopic = MqttTopics.DEVICE_TELEMETRY_TOPIC; @NoXss - private String deviceAttributesPublishTopic = MqttTopics.DEVICE_ATTRIBUTES_TOPIC; + private String deviceAttributesTopic = MqttTopics.DEVICE_ATTRIBUTES_TOPIC; @NoXss - private String deviceAttributesSubscribeTopic = MqttTopics.DEVICE_ATTRIBUTES_TOPIC;//todo + private String deviceAttributesSubscribeTopic = MqttTopics.DEVICE_ATTRIBUTES_TOPIC; private TransportPayloadTypeConfiguration transportPayloadTypeConfiguration; private boolean sendAckOnValidationException; diff --git a/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/session/DeviceSessionCtx.java b/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/session/DeviceSessionCtx.java index 4b69f75f06..f686b6d777 100644 --- a/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/session/DeviceSessionCtx.java +++ b/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/session/DeviceSessionCtx.java @@ -161,7 +161,7 @@ public class DeviceSessionCtx extends MqttDeviceAwareSessionContext { TransportPayloadTypeConfiguration transportPayloadTypeConfiguration = mqttConfig.getTransportPayloadTypeConfiguration(); payloadType = transportPayloadTypeConfiguration.getTransportPayloadType(); telemetryTopicFilter = MqttTopicFilterFactory.toFilter(mqttConfig.getDeviceTelemetryTopic()); - attributesPublishTopicFilter = MqttTopicFilterFactory.toFilter(mqttConfig.getDeviceAttributesPublishTopic()); + attributesPublishTopicFilter = MqttTopicFilterFactory.toFilter(mqttConfig.getDeviceAttributesTopic()); attributesSubscribeTopicFilter = MqttTopicFilterFactory.toFilter(mqttConfig.getDeviceAttributesSubscribeTopic()); sendAckOnValidationException = mqttConfig.isSendAckOnValidationException(); if (TransportPayloadType.PROTOBUF.equals(payloadType)) { From d805a07d41b3803c3dd0536456cd0cb380c36630 Mon Sep 17 00:00:00 2001 From: AndriiD Date: Wed, 3 Aug 2022 13:05:49 +0300 Subject: [PATCH 6/7] added new input --- ...profile-transport-configuration.component.html | 15 +++++++++++++++ ...e-profile-transport-configuration.component.ts | 1 + .../src/assets/locale/locale.constant-cs_CZ.json | 2 ++ .../src/assets/locale/locale.constant-en_US.json | 2 ++ .../src/assets/locale/locale.constant-es_ES.json | 2 ++ .../src/assets/locale/locale.constant-fr_FR.json | 2 ++ .../src/assets/locale/locale.constant-ko_KR.json | 2 ++ .../src/assets/locale/locale.constant-sl_SI.json | 2 ++ .../src/assets/locale/locale.constant-tr_TR.json | 2 ++ .../src/assets/locale/locale.constant-zh_CN.json | 2 ++ 10 files changed, 32 insertions(+) diff --git a/ui-ngx/src/app/modules/home/components/profile/device/mqtt-device-profile-transport-configuration.component.html b/ui-ngx/src/app/modules/home/components/profile/device/mqtt-device-profile-transport-configuration.component.html index 00ecd46582..2d0a91c10d 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/mqtt-device-profile-transport-configuration.component.html +++ b/ui-ngx/src/app/modules/home/components/profile/device/mqtt-device-profile-transport-configuration.component.html @@ -50,6 +50,21 @@ {{ 'device-profile.not-valid-multi-character' | translate}} + + device-profile.attributes-subscribe-topic-filter + + + {{ 'device-profile.attributes-subscribe-topic-filter-required' | translate}} + + + {{ 'device-profile.not-valid-single-character' | translate}} + + + {{ 'device-profile.not-valid-multi-character' | translate}} + + {{ 'device-profile.mqtt-device-topic-filters-unique' | translate }} diff --git a/ui-ngx/src/app/modules/home/components/profile/device/mqtt-device-profile-transport-configuration.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/mqtt-device-profile-transport-configuration.component.ts index b51b42f1d2..8ec2e633a4 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/mqtt-device-profile-transport-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/mqtt-device-profile-transport-configuration.component.ts @@ -91,6 +91,7 @@ export class MqttDeviceProfileTransportConfigurationComponent implements Control ngOnInit() { this.mqttDeviceProfileTransportConfigurationFormGroup = this.fb.group({ deviceAttributesTopic: [null, [Validators.required, this.validationMQTTTopic()]], + deviceAttributesSubscribeTopic: [null, [Validators.required, this.validationMQTTTopic()]], deviceTelemetryTopic: [null, [Validators.required, this.validationMQTTTopic()]], sendAckOnValidationException: [false, Validators.required], transportPayloadTypeConfiguration: this.fb.group({ diff --git a/ui-ngx/src/assets/locale/locale.constant-cs_CZ.json b/ui-ngx/src/assets/locale/locale.constant-cs_CZ.json index a194bf3a7b..a2e148a4d1 100644 --- a/ui-ngx/src/assets/locale/locale.constant-cs_CZ.json +++ b/ui-ngx/src/assets/locale/locale.constant-cs_CZ.json @@ -1105,7 +1105,9 @@ "telemetry-topic-filter": "Filtr fronty telemetrie", "telemetry-topic-filter-required": "Filtr fronty telemetrie je povinný.", "attributes-topic-filter": "Filtr atributů fronty", + "attributes-subscribe-topic-filter": "Attributes subscribe topic filter", "attributes-topic-filter-required": "Filtr atributů fronty je povinný.", + "attributes-subscribe-topic-filter-required": "Attributes subscribe topic is required", "telemetry-proto-schema": "Proto schéma telemetrie", "telemetry-proto-schema-required": "Proto schéma telemetrie je povinné.", "attributes-proto-schema": "Atributy proto schémata", diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index fd1bc2d688..a723347e7a 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -1299,7 +1299,9 @@ "telemetry-topic-filter": "Telemetry topic filter", "telemetry-topic-filter-required": "Telemetry topic filter is required.", "attributes-topic-filter": "Attributes topic filter", + "attributes-subscribe-topic-filter": "Attributes subscribe topic filter", "attributes-topic-filter-required": "Attributes topic filter is required.", + "attributes-subscribe-topic-filter-required": "Attributes subscribe topic is required", "telemetry-proto-schema": "Telemetry proto schema", "telemetry-proto-schema-required": "Telemetry proto schema is required.", "attributes-proto-schema": "Attributes proto schema", diff --git a/ui-ngx/src/assets/locale/locale.constant-es_ES.json b/ui-ngx/src/assets/locale/locale.constant-es_ES.json index 68305d1352..fc4cc34d6c 100644 --- a/ui-ngx/src/assets/locale/locale.constant-es_ES.json +++ b/ui-ngx/src/assets/locale/locale.constant-es_ES.json @@ -1299,7 +1299,9 @@ "telemetry-topic-filter": "Filtro de topic en telemetría", "telemetry-topic-filter-required": "Se requiere filtro de topic (telemetría).", "attributes-topic-filter": "Filtro de topic en atributos", + "attributes-subscribe-topic-filter": "Attributes subscribe topic filter", "attributes-topic-filter-required": "Se requiere filtro de topic (atributos).", + "attributes-subscribe-topic-filter-required": "Attributes subscribe topic is required", "telemetry-proto-schema": "Proto esquema de telemetría", "telemetry-proto-schema-required": "Se requiere proto esquema de telemetría.", "attributes-proto-schema": "Proto esquema de atributos", diff --git a/ui-ngx/src/assets/locale/locale.constant-fr_FR.json b/ui-ngx/src/assets/locale/locale.constant-fr_FR.json index ce66154f10..a7c7e9c132 100644 --- a/ui-ngx/src/assets/locale/locale.constant-fr_FR.json +++ b/ui-ngx/src/assets/locale/locale.constant-fr_FR.json @@ -1130,7 +1130,9 @@ "telemetry-topic-filter": "Filtre de sujets de télémétrie", "telemetry-topic-filter-required": "Filtre de sujets de télémétrie est requis.", "attributes-topic-filter": "Filtre de sujets d'attributs", + "attributes-subscribe-topic-filter": "Attributes subscribe topic filter", "attributes-topic-filter-required": "Filtre de sujets d'attributs est requis.", + "attributes-subscribe-topic-filter-required": "Attributes subscribe topic is required", "telemetry-proto-schema": "Schéma proto de télémétrie", "telemetry-proto-schema-required": "Schéma proto de télémétrie est requis.", "attributes-proto-schema": "Schéma proto d'attributs", diff --git a/ui-ngx/src/assets/locale/locale.constant-ko_KR.json b/ui-ngx/src/assets/locale/locale.constant-ko_KR.json index 1d05b49950..50a79fbb53 100644 --- a/ui-ngx/src/assets/locale/locale.constant-ko_KR.json +++ b/ui-ngx/src/assets/locale/locale.constant-ko_KR.json @@ -977,7 +977,9 @@ "telemetry-topic-filter": "Telemetry topic filter", "telemetry-topic-filter-required": "Telemetry topic filter is required.", "attributes-topic-filter": "Attributes topic filter", + "attributes-subscribe-topic-filter": "Attributes subscribe topic filter", "attributes-topic-filter-required": "Attributes topic filter is required.", + "attributes-subscribe-topic-filter-required": "Attributes subscribe topic is required", "telemetry-proto-schema": "Telemetry proto schema", "telemetry-proto-schema-required": "Telemetry proto schema is required.", "attributes-proto-schema": "Attributes proto schema", diff --git a/ui-ngx/src/assets/locale/locale.constant-sl_SI.json b/ui-ngx/src/assets/locale/locale.constant-sl_SI.json index 04d7bcd25f..c9ab61160c 100644 --- a/ui-ngx/src/assets/locale/locale.constant-sl_SI.json +++ b/ui-ngx/src/assets/locale/locale.constant-sl_SI.json @@ -977,7 +977,9 @@ "telemetry-topic-filter": "Telemetry topic filter", "telemetry-topic-filter-required": "Telemetry topic filter is required.", "attributes-topic-filter": "Attributes topic filter", + "attributes-subscribe-topic-filter": "Attributes subscribe topic filter", "attributes-topic-filter-required": "Attributes topic filter is required.", + "attributes-subscribe-topic-filter-required": "Attributes subscribe topic is required", "telemetry-proto-schema": "Telemetry proto schema", "telemetry-proto-schema-required": "Telemetry proto schema is required.", "attributes-proto-schema": "Attributes proto schema", diff --git a/ui-ngx/src/assets/locale/locale.constant-tr_TR.json b/ui-ngx/src/assets/locale/locale.constant-tr_TR.json index 174c648e7a..fcf7c7c07c 100644 --- a/ui-ngx/src/assets/locale/locale.constant-tr_TR.json +++ b/ui-ngx/src/assets/locale/locale.constant-tr_TR.json @@ -1108,7 +1108,9 @@ "telemetry-topic-filter": "Telemetri konu filtresi", "telemetry-topic-filter-required": "Telemetri konu filtresi gerekli.", "attributes-topic-filter": "Öznitelikler konu filtresi", + "attributes-subscribe-topic-filter": "Attributes subscribe topic filter", "attributes-topic-filter-required": "Öznitelikler konu filtresi gerekli.", + "attributes-subscribe-topic-filter-required": "Attributes subscribe topic is required", "telemetry-proto-schema": "Telemetri proto şeması", "telemetry-proto-schema-required": "Telemetri proto şeması gerekli.", "attributes-proto-schema": "Öznitelikler proto şeması", diff --git a/ui-ngx/src/assets/locale/locale.constant-zh_CN.json b/ui-ngx/src/assets/locale/locale.constant-zh_CN.json index 0a8f8d4c84..170098f76b 100644 --- a/ui-ngx/src/assets/locale/locale.constant-zh_CN.json +++ b/ui-ngx/src/assets/locale/locale.constant-zh_CN.json @@ -885,7 +885,9 @@ "attributes-proto-schema": "Attributes proto schema", "attributes-proto-schema-required": "Attributes proto schema 必填。", "attributes-topic-filter": "Attributes topic filter", + "attributes-subscribe-topic-filter": "Attributes subscribe topic filter", "attributes-topic-filter-required": "Attributes topic 筛选器必填。", + "attributes-subscribe-topic-filter-required": "Attributes subscribe topic is required", "clear-alarm-rule": "清除报警规则", "coap-device-payload-type": "CoAP 设备消息 Payload", "coap-device-type": "CoAP 设备类型", From b21f2cb38bd075623f7850357b8224ecfce905c5 Mon Sep 17 00:00:00 2001 From: AndriiD Date: Thu, 11 Aug 2022 12:45:16 +0300 Subject: [PATCH 7/7] updated labels for topic names input fields --- ui-ngx/src/assets/locale/locale.constant-cs_CZ.json | 4 ++-- ui-ngx/src/assets/locale/locale.constant-en_US.json | 4 ++-- ui-ngx/src/assets/locale/locale.constant-es_ES.json | 4 ++-- ui-ngx/src/assets/locale/locale.constant-fr_FR.json | 4 ++-- ui-ngx/src/assets/locale/locale.constant-ko_KR.json | 4 ++-- ui-ngx/src/assets/locale/locale.constant-sl_SI.json | 4 ++-- ui-ngx/src/assets/locale/locale.constant-tr_TR.json | 4 ++-- ui-ngx/src/assets/locale/locale.constant-zh_CN.json | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/ui-ngx/src/assets/locale/locale.constant-cs_CZ.json b/ui-ngx/src/assets/locale/locale.constant-cs_CZ.json index a2e148a4d1..f8e0265b56 100644 --- a/ui-ngx/src/assets/locale/locale.constant-cs_CZ.json +++ b/ui-ngx/src/assets/locale/locale.constant-cs_CZ.json @@ -1104,9 +1104,9 @@ "support-level-wildcards": "Jsou podporovány jednoúrovňové [+] a víceúrovňové [#] zástupné znaky.", "telemetry-topic-filter": "Filtr fronty telemetrie", "telemetry-topic-filter-required": "Filtr fronty telemetrie je povinný.", - "attributes-topic-filter": "Filtr atributů fronty", + "attributes-topic-filter": "Attributes publish topic filter", "attributes-subscribe-topic-filter": "Attributes subscribe topic filter", - "attributes-topic-filter-required": "Filtr atributů fronty je povinný.", + "attributes-topic-filter-required": "Attributes publish topic filter is required.", "attributes-subscribe-topic-filter-required": "Attributes subscribe topic is required", "telemetry-proto-schema": "Proto schéma telemetrie", "telemetry-proto-schema-required": "Proto schéma telemetrie je povinné.", diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index a723347e7a..3e696c1d7d 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -1298,9 +1298,9 @@ "support-level-wildcards": "Single [+] and multi-level [#] wildcards supported.", "telemetry-topic-filter": "Telemetry topic filter", "telemetry-topic-filter-required": "Telemetry topic filter is required.", - "attributes-topic-filter": "Attributes topic filter", + "attributes-topic-filter": "Attributes publish topic filter", "attributes-subscribe-topic-filter": "Attributes subscribe topic filter", - "attributes-topic-filter-required": "Attributes topic filter is required.", + "attributes-topic-filter-required": "Attributes publish topic filter is required.", "attributes-subscribe-topic-filter-required": "Attributes subscribe topic is required", "telemetry-proto-schema": "Telemetry proto schema", "telemetry-proto-schema-required": "Telemetry proto schema is required.", diff --git a/ui-ngx/src/assets/locale/locale.constant-es_ES.json b/ui-ngx/src/assets/locale/locale.constant-es_ES.json index fc4cc34d6c..07d2e84f16 100644 --- a/ui-ngx/src/assets/locale/locale.constant-es_ES.json +++ b/ui-ngx/src/assets/locale/locale.constant-es_ES.json @@ -1298,9 +1298,9 @@ "support-level-wildcards": "Se soportan los wilcards únicos [+] y multi-nivel [#].", "telemetry-topic-filter": "Filtro de topic en telemetría", "telemetry-topic-filter-required": "Se requiere filtro de topic (telemetría).", - "attributes-topic-filter": "Filtro de topic en atributos", + "attributes-topic-filter": "Attributes publish topic filter", "attributes-subscribe-topic-filter": "Attributes subscribe topic filter", - "attributes-topic-filter-required": "Se requiere filtro de topic (atributos).", + "attributes-topic-filter-required": "Attributes publish topic filter is required.", "attributes-subscribe-topic-filter-required": "Attributes subscribe topic is required", "telemetry-proto-schema": "Proto esquema de telemetría", "telemetry-proto-schema-required": "Se requiere proto esquema de telemetría.", diff --git a/ui-ngx/src/assets/locale/locale.constant-fr_FR.json b/ui-ngx/src/assets/locale/locale.constant-fr_FR.json index a7c7e9c132..11570609d4 100644 --- a/ui-ngx/src/assets/locale/locale.constant-fr_FR.json +++ b/ui-ngx/src/assets/locale/locale.constant-fr_FR.json @@ -1129,9 +1129,9 @@ "support-level-wildcards": "[+] unique et wildcards de [#] multi-niveaux supportés.", "telemetry-topic-filter": "Filtre de sujets de télémétrie", "telemetry-topic-filter-required": "Filtre de sujets de télémétrie est requis.", - "attributes-topic-filter": "Filtre de sujets d'attributs", + "attributes-topic-filter": "Attributes publish topic filter", "attributes-subscribe-topic-filter": "Attributes subscribe topic filter", - "attributes-topic-filter-required": "Filtre de sujets d'attributs est requis.", + "attributes-topic-filter-required": "Attributes publish topic filter is required.", "attributes-subscribe-topic-filter-required": "Attributes subscribe topic is required", "telemetry-proto-schema": "Schéma proto de télémétrie", "telemetry-proto-schema-required": "Schéma proto de télémétrie est requis.", diff --git a/ui-ngx/src/assets/locale/locale.constant-ko_KR.json b/ui-ngx/src/assets/locale/locale.constant-ko_KR.json index 50a79fbb53..734c3bbb1f 100644 --- a/ui-ngx/src/assets/locale/locale.constant-ko_KR.json +++ b/ui-ngx/src/assets/locale/locale.constant-ko_KR.json @@ -976,9 +976,9 @@ "support-level-wildcards": "Single [+] and multi-level [#] wildcards supported.", "telemetry-topic-filter": "Telemetry topic filter", "telemetry-topic-filter-required": "Telemetry topic filter is required.", - "attributes-topic-filter": "Attributes topic filter", + "attributes-topic-filter": "Attributes publish topic filter", "attributes-subscribe-topic-filter": "Attributes subscribe topic filter", - "attributes-topic-filter-required": "Attributes topic filter is required.", + "attributes-topic-filter-required": "Attributes publish topic filter is required.", "attributes-subscribe-topic-filter-required": "Attributes subscribe topic is required", "telemetry-proto-schema": "Telemetry proto schema", "telemetry-proto-schema-required": "Telemetry proto schema is required.", diff --git a/ui-ngx/src/assets/locale/locale.constant-sl_SI.json b/ui-ngx/src/assets/locale/locale.constant-sl_SI.json index c9ab61160c..e199935337 100644 --- a/ui-ngx/src/assets/locale/locale.constant-sl_SI.json +++ b/ui-ngx/src/assets/locale/locale.constant-sl_SI.json @@ -976,9 +976,9 @@ "support-level-wildcards": "Single [+] and multi-level [#] wildcards supported.", "telemetry-topic-filter": "Telemetry topic filter", "telemetry-topic-filter-required": "Telemetry topic filter is required.", - "attributes-topic-filter": "Attributes topic filter", + "attributes-topic-filter": "Attributes publish topic filter", "attributes-subscribe-topic-filter": "Attributes subscribe topic filter", - "attributes-topic-filter-required": "Attributes topic filter is required.", + "attributes-topic-filter-required": "Attributes publish topic filter is required.", "attributes-subscribe-topic-filter-required": "Attributes subscribe topic is required", "telemetry-proto-schema": "Telemetry proto schema", "telemetry-proto-schema-required": "Telemetry proto schema is required.", diff --git a/ui-ngx/src/assets/locale/locale.constant-tr_TR.json b/ui-ngx/src/assets/locale/locale.constant-tr_TR.json index fcf7c7c07c..110e5583d8 100644 --- a/ui-ngx/src/assets/locale/locale.constant-tr_TR.json +++ b/ui-ngx/src/assets/locale/locale.constant-tr_TR.json @@ -1107,9 +1107,9 @@ "support-level-wildcards": "Tekli [+] ve çoklu [#] joker karakter destekler.", "telemetry-topic-filter": "Telemetri konu filtresi", "telemetry-topic-filter-required": "Telemetri konu filtresi gerekli.", - "attributes-topic-filter": "Öznitelikler konu filtresi", + "attributes-topic-filter": "Attributes publish topic filter", "attributes-subscribe-topic-filter": "Attributes subscribe topic filter", - "attributes-topic-filter-required": "Öznitelikler konu filtresi gerekli.", + "attributes-topic-filter-required": "Attributes publish topic filter is required.", "attributes-subscribe-topic-filter-required": "Attributes subscribe topic is required", "telemetry-proto-schema": "Telemetri proto şeması", "telemetry-proto-schema-required": "Telemetri proto şeması gerekli.", diff --git a/ui-ngx/src/assets/locale/locale.constant-zh_CN.json b/ui-ngx/src/assets/locale/locale.constant-zh_CN.json index 170098f76b..a7549ffc7e 100644 --- a/ui-ngx/src/assets/locale/locale.constant-zh_CN.json +++ b/ui-ngx/src/assets/locale/locale.constant-zh_CN.json @@ -884,9 +884,9 @@ "all-device-profiles": "全部", "attributes-proto-schema": "Attributes proto schema", "attributes-proto-schema-required": "Attributes proto schema 必填。", - "attributes-topic-filter": "Attributes topic filter", + "attributes-topic-filter": "Attributes publish topic filter", "attributes-subscribe-topic-filter": "Attributes subscribe topic filter", - "attributes-topic-filter-required": "Attributes topic 筛选器必填。", + "attributes-topic-filter-required": "Attributes publish topic filter is required.", "attributes-subscribe-topic-filter-required": "Attributes subscribe topic is required", "clear-alarm-rule": "清除报警规则", "coap-device-payload-type": "CoAP 设备消息 Payload",