diff --git a/_includes/docs/devices-library/blocks/basic/thingsboard-chenge-entity-alias-block.md b/_includes/docs/devices-library/blocks/basic/thingsboard-change-entity-alias-block.md
similarity index 100%
rename from _includes/docs/devices-library/blocks/basic/thingsboard-chenge-entity-alias-block.md
rename to _includes/docs/devices-library/blocks/basic/thingsboard-change-entity-alias-block.md
diff --git a/_includes/docs/devices-library/blocks/ready-to-go-devices/am308-sensor-check-data-block.md b/_includes/docs/devices-library/blocks/ready-to-go-devices/am308-sensor-check-data-block.md
index 1de4d5610e..e6f4baff7d 100644
--- a/_includes/docs/devices-library/blocks/ready-to-go-devices/am308-sensor-check-data-block.md
+++ b/_includes/docs/devices-library/blocks/ready-to-go-devices/am308-sensor-check-data-block.md
@@ -19,7 +19,7 @@ You can download a simple dashboard for this device, it is configured to display
{% include /docs/devices-library/blocks/basic/thingsboard-upload-example-dashboard.md exampleDashboardPath="/docs/devices-library/resources/dashboards/ready-to-go-devices/am308-device-dashboard.json" %}
-{% include /docs/devices-library/blocks/basic/thingsboard-chenge-entity-alias-block.md exampleDashboardPath="/docs/devices-library/resources/dashboards/ready-to-go-devices/am308-device-dashboard.json" %}
+{% include /docs/devices-library/blocks/basic/thingsboard-change-entity-alias-block.md exampleDashboardPath="/docs/devices-library/resources/dashboards/ready-to-go-devices/am308-device-dashboard.json" %}
Example of the dashboard with data:
diff --git a/_includes/docs/devices-library/blocks/ready-to-go-devices/thingsboard-create-device-efento-transport-block.md b/_includes/docs/devices-library/blocks/ready-to-go-devices/thingsboard-create-device-efento-transport-block.md
index 2a7cd9eba1..621287a111 100644
--- a/_includes/docs/devices-library/blocks/ready-to-go-devices/thingsboard-create-device-efento-transport-block.md
+++ b/_includes/docs/devices-library/blocks/ready-to-go-devices/thingsboard-create-device-efento-transport-block.md
@@ -4,21 +4,41 @@ Before you add an Efento sensor to the platform you need to create a new Device
{% assign deviceProfileCreationPE = '
===
- image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile.png,
- title: Log in to your administrator account and navigate to Device profiles section. Click on the + icon in the upper right corner to add a new profile. Select Create new device profile.
+ image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-1-pe.png,
+ title: Log in to your administrator account and navigate to "Device profiles" page. Click on the "+" icon in the top right corner of the table and then select "Create new device profile" from drop-down menu;
===
- image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-profile-name.png,
- title: Fill up the profile name (mandatory) and configure optional settings (Rule chain, Queue Name, Description). Once you are ready press Next: Transport configuration button.
+ image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-2-pe.png,
+ title: Fill up the profile name (mandatory) and configure optional settings (Rule chain, Queue Name, Description). Once you are ready press "Next: Transport configuration" button;
===
- image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/device-profile-select-transport.png,
- title: From the dropdown menu in the Transport type field select CoAP and from the dropdown menu in CoAP device type field select Efento NB-IoT, press Add button to save.
+ image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-3-pe.png,
+ title: From the dropdown menu in the "Transport type" field select "CoAP", and from the dropdown menu in "CoAP device type" field select "Efento NB-IoT", click "Add" button to confirm adding new device profile;
===
- image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-profile-created.png,
- title: Once the profile is ready you will see it on the list in the Device profiles section. If you plan to use your ThingsBoard instance only with Efento sensors you can set the profile as default.
+ image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-4-pe.png,
+ title: Once the profile is ready you will see it on the list in the "Device profiles" section. If you plan to use your ThingsBoard instance only with Efento sensors you can set the profile as default.
'
%}
+{% assign deviceProfileCreationCE = '
+ ===
+ image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-1-ce.png,
+ title: Log in to your administrator account and navigate to "Device profiles" page. Click on the "+" icon in the top right corner of the table and then select "Create new device profile" from drop-down menu;
+ ===
+ image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-2-ce.png,
+ title: Fill up the profile name (mandatory) and configure optional settings (Rule chain, Queue Name, Description). Once you are ready press "Next: Transport configuration" button;
+ ===
+ image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-3-ce.png,
+ title: From the dropdown menu in the "Transport type" field select "CoAP", and from the dropdown menu in "CoAP device type" field select "Efento NB-IoT", click "Add" button to confirm adding new device profile;
+ ===
+ image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-4-ce.png,
+ title: Once the profile is ready you will see it on the list in the "Device profiles" section. If you plan to use your ThingsBoard instance only with Efento sensors you can set the profile as default.
+'
+%}
+
+{% if page.docsPrefix == "pe/" or page.docsPrefix == "paas/" or docsPrefix == "pe/" or docsPrefix == "paas/" %}
{% include images-gallery.liquid showListImageTitles="true" imageCollection=deviceProfileCreationPE %}
+{% else %}
+{% include images-gallery.liquid showListImageTitles="true" imageCollection=deviceProfileCreationCE %}
+{% endif %}
Configuration of the “Alarm rules” and “Device provisioning” tabs is optional.
If you want to learn more about these features please refer to the [documentation](/docs/getting-started-guides/helloworld/){:target="_blank"}.
@@ -27,20 +47,46 @@ If you want to learn more about these features please refer to the [documentatio
In order to save a data from the sensor we should also create a device on ThingsBoard.
-{% assign deviceCreationPE = '
+{% assign deviceAddingPE = '
+ ===
+ image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-1-pe.png,
+ title: Go to the "Devices" page of the "Entities" section. By default, you navigate to the device group "All". Click on the "+" icon in the top right corner of the table and then select "Add new device" from drop-down menu;
+ ===
+ image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-2-pe.png,
+ title: Enter the device name. In the "Device profile" field specify the profile you have recently created for Efento sensors. Then, click "Next: Credentials" button;
+ ===
+ image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-3-pe.png,
+ title: Leave the credential type as "Access token". Set the new access token, which will be used by a sensor to validate in the ThingsBoard platform. Note that the token must be unique for each sensor. Configuration of the token is optional. Click "Add" button to confirm adding new device;
+ ===
+ image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-4-pe.png,
+ title: A window will open where you can check the device's connection to ThingsBoard. This step is optional. Close this window;
+ ===
+ image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-5-pe.png,
+ title: Once added, the device appears in the "All" device group list.
+'
+%}
+
+{% assign deviceAddingCE = '
+ ===
+ image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-1-ce.png,
+ title: Go to the "Devices" page of the "Entities" section. Click on the "+" icon in the top right corner of the table and then select "Add new device" from drop-down menu;
===
- image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device.png,
- title: Go to the Device groups section of ThingsBoard. You can either create a new device group or use the default one (All). Click on the + icon in the upper right corner to add a new device.
+ image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-2-ce.png,
+ title: Enter the device name. In the "Device profile" field specify the profile you have recently created for Efento sensors. Then, click "Next: Credentials" button;
===
- image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-with-transport.png,
- title: Name the device, in the Transport type field select CoAP. Choose Select existing profile option and add the profile you have recently created for Efento sensors. Press Next: Credentials button.
+ image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-3-ce.png,
+ title: Leave the credential type as "Access token". Set the new access token, which will be used by a sensor to validate in the ThingsBoard platform. Note that the token must be unique for each sensor. Configuration of the token is optional. Click "Add" button to confirm adding new device;
===
- image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-create-credentials.png,
- title: Select Add credential and in the Access token field set the new access token, which will be used by a sensor to validate in the platform. Note that the token must be unique for each sensor. Configuration of the token is optional. Press Add button to save.
+ image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-4-ce.png,
+ title: A window will open where you can check the device's connection to ThingsBoard. This step is optional. Close this window;
===
- image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-created.png,
- title: Once the device is added, it appears within group All list in Device groups section.
+ image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-5-ce.png,
+ title: Once added, the device appears in the device list.
'
%}
-{% include images-gallery.liquid showListImageTitles="true" imageCollection=deviceCreationPE %}
+{% if page.docsPrefix == "pe/" or page.docsPrefix == "paas/" or docsPrefix == "pe/" or docsPrefix == "paas/" %}
+{% include images-gallery.liquid showListImageTitles="true" imageCollection=deviceAddingPE %}
+{% else %}
+{% include images-gallery.liquid showListImageTitles="true" imageCollection=deviceAddingCE %}
+{% endif %}
\ No newline at end of file
diff --git a/_includes/docs/devices-library/blocks/ready-to-go-devices/vs-121-check-data-block.md b/_includes/docs/devices-library/blocks/ready-to-go-devices/vs-121-check-data-block.md
index 027d5f24c0..c902545511 100644
--- a/_includes/docs/devices-library/blocks/ready-to-go-devices/vs-121-check-data-block.md
+++ b/_includes/docs/devices-library/blocks/ready-to-go-devices/vs-121-check-data-block.md
@@ -19,7 +19,26 @@ Download a simple dashboard for this device. It is configured to display a data
{% include /docs/devices-library/blocks/basic/thingsboard-upload-example-dashboard.md exampleDashboardPath="/docs/devices-library/resources/dashboards/ready-to-go-devices/vs-121-sensor-dashboard.json" %}
-{% include /docs/devices-library/blocks/basic/thingsboard-chenge-entity-alias-block.md exampleDashboardPath="/docs/devices-library/resources/dashboards/ready-to-go-devices/vs-121-sensor-dashboard.json" %}
+To open the imported dashboard, click on it. Then you should specify your device in entity alias of the dashboard.
+
+To do this, follow these steps:
+
+{% assign editAlias = '
+ ===
+ image: https://img.thingsboard.io/user-guide/dashboards/alias/edit-alias-for-vs-121-sensor-1-pe.png,
+ title: Open the dashboard and enter edit mode. Click the "Entity aliases" icon, then in the pop-up window click the "Edit alias" icon next to the alias.
+ ===
+ image: https://img.thingsboard.io/user-guide/dashboards/alias/edit-alias-for-vs-121-sensor-2-pe.png,
+ title: In edit alias window select your device from dropdown list and save entity alias.
+ ===
+ image: https://img.thingsboard.io/user-guide/dashboards/alias/edit-alias-for-vs-121-sensor-3-pe.png,
+ title: Apply all changes.
+'
+%}
+
+{% include images-gallery.liquid showListImageTitles="true" imageCollection=editAlias %}
+
+Now you should be able to see the data from the device.
Example of the dashboard with data:
diff --git a/_includes/docs/devices-library/blocks/ready-to-go-devices/wireless-open-close-logger-check-data-block.md b/_includes/docs/devices-library/blocks/ready-to-go-devices/wireless-open-close-logger-check-data-block.md
index b405c2b00a..ab8f30bbef 100644
--- a/_includes/docs/devices-library/blocks/ready-to-go-devices/wireless-open-close-logger-check-data-block.md
+++ b/_includes/docs/devices-library/blocks/ready-to-go-devices/wireless-open-close-logger-check-data-block.md
@@ -1,15 +1,26 @@
Trigger the transmission in order to check if the device sends the data to your ThingsBoard instance.
Click on the menu (three dots in the upper right corner -> Trigger transmission.
-If everything is set correctly, you should see the data in ThingsBoard, to do this:
+If everything is set correctly, you should see the data in ThingsBoard. To do this click on the device and the most recent data from the device will be visible in the "Latest telemetry" tab.
-{% assign checkEfentoSensorData = '
+{% assign checkEfentoSensorDataPE = '
===
- image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data.png,
- title: Click on the device and the most recent data from the device will be visible in the “Latest telemetry” tab.
+ image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data-1-pe.png,
+ title: Click on the device and the most recent data from the device will be visible in the "Latest telemetry" tab.
'
%}
-{% include images-gallery.liquid showListImageTitles="false" imageCollection=checkEfentoSensorData %}
+{% assign checkEfentoSensorDataCE = '
+ ===
+ image: https://img.thingsboard.io/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data-1-ce.png,
+ title: Click on the device and the most recent data from the device will be visible in the "Latest telemetry" tab.
+'
+%}
+
+{% if page.docsPrefix == "pe/" or page.docsPrefix == "paas/" or docsPrefix == "pe/" or docsPrefix == "paas/" %}
+{% include images-gallery.liquid showListImageTitles="false" imageCollection=checkEfentoSensorDataPE %}
+{% else %}
+{% include images-gallery.liquid showListImageTitles="false" imageCollection=checkEfentoSensorDataCE %}
+{% endif %}
{% capture effento-offer %}
diff --git a/_includes/docs/devices-library/blocks/ready-to-go-devices/ws101-smart-button-check-data-block.md b/_includes/docs/devices-library/blocks/ready-to-go-devices/ws101-smart-button-check-data-block.md
index d45fc2690a..e1c32b753c 100644
--- a/_includes/docs/devices-library/blocks/ready-to-go-devices/ws101-smart-button-check-data-block.md
+++ b/_includes/docs/devices-library/blocks/ready-to-go-devices/ws101-smart-button-check-data-block.md
@@ -12,7 +12,7 @@ You can download a simple dashboard for this device, it is configured to display
{% include /docs/devices-library/blocks/basic/thingsboard-upload-example-dashboard.md exampleDashboardPath="/docs/devices-library/resources/dashboards/ready-to-go-devices/ws_101_smart_button.json" %}
-{% include /docs/devices-library/blocks/basic/thingsboard-chenge-entity-alias-block.md exampleDashboardPath="/docs/devices-library/resources/dashboards/ready-to-go-devices/ws_101_smart_button.json" %}
+{% include /docs/devices-library/blocks/basic/thingsboard-change-entity-alias-block.md exampleDashboardPath="/docs/devices-library/resources/dashboards/ready-to-go-devices/ws_101_smart_button.json" %}
Example of the dashboard with data:
diff --git a/_includes/docs/devices-library/blocks/ready-to-go-devices/ws202-pir-and-light-sensor-check-data-block.md b/_includes/docs/devices-library/blocks/ready-to-go-devices/ws202-pir-and-light-sensor-check-data-block.md
index 786dedb7ab..886d1e71f1 100644
--- a/_includes/docs/devices-library/blocks/ready-to-go-devices/ws202-pir-and-light-sensor-check-data-block.md
+++ b/_includes/docs/devices-library/blocks/ready-to-go-devices/ws202-pir-and-light-sensor-check-data-block.md
@@ -12,7 +12,7 @@ You can download a simple dashboard for this device, it is configured to display
{% include /docs/devices-library/blocks/basic/thingsboard-upload-example-dashboard.md exampleDashboardPath="/docs/devices-library/resources/dashboards/ready-to-go-devices/ws202_pir_and_light_sensor.json" %}
-{% include /docs/devices-library/blocks/basic/thingsboard-chenge-entity-alias-block.md exampleDashboardPath="/docs/devices-library/resources/dashboards/ready-to-go-devices/ws202_pir_and_light_sensor.json" %}
+{% include /docs/devices-library/blocks/basic/thingsboard-change-entity-alias-block.md exampleDashboardPath="/docs/devices-library/resources/dashboards/ready-to-go-devices/ws202_pir_and_light_sensor.json" %}
Example of the dashboard with data:
diff --git a/_includes/docs/mobile/getting-started.md b/_includes/docs/mobile/getting-started.md
index 85d13615be..c7e934d197 100644
--- a/_includes/docs/mobile/getting-started.md
+++ b/_includes/docs/mobile/getting-started.md
@@ -52,10 +52,15 @@ Determine the Flutter {{appPrefix}} Mobile Application version according to the
- 3.6.3+ |
+ 3.8.0 |
1.3.0 |
1.3.0 |
-
+
+
+ 3.6.3+ |
+ 1.1.0 |
+ 1.1.0 |
+
3.6.2+ |
1.0.8 |
@@ -94,10 +99,15 @@ Determine the Flutter {{appPrefix}} Mobile Application version according to the
- 3.6.3PE+ |
+ 3.8.0PE |
1.3.0 |
1.3.0 |
+
+ 3.6.3PE+ |
+ 1.1.0 |
+ 1.1.0 |
+
3.6.2PE+ |
1.0.9 |
diff --git a/_includes/docs/user-guide/tbel.md b/_includes/docs/user-guide/tbel.md
index 8fedaf79ad..6cf5d904d9 100644
--- a/_includes/docs/user-guide/tbel.md
+++ b/_includes/docs/user-guide/tbel.md
@@ -972,10 +972,13 @@ List
**Examples:**
```java
-var listBe = [-40, -1];
-var listLe = [-1, -40];
-return printUnsignedBytes(listBe); // Returns [255, 216]
-return printUnsignedBytes(listBe); // Returns [216, 255]
+var hexStrBe = "D8FF"; // [-40, -1]
+var listBe = hexToBytes(hexStrBe);
+return printUnsignedBytes(listBe); // Returns [216, 255]
+
+var hexStrLe = "FFD8"; // [-1, -40]
+var listLe = hexToBytes(hexStrLe);
+return printUnsignedBytes(listLe); // Returns [255, 216]
```
{: .copy-code}
@@ -1038,13 +1041,15 @@ String
```java
var str = "010011";
-return padEnd(str, 8, '0'); // Returns "01001100"
+padEnd(str, 8, '0'); // Returns "01001100"
+
var str ="1001010011";
-return padEnd(str, 8, '0'); // Returns "1001010011"
-return padEnd(str, 16, '*'); // Returns "1001010011******"
+padEnd(str, 8, '0'); // Returns "1001010011"
+padEnd(str, 16, '*'); // Returns "1001010011******"
+
var fullNumber = "203439900FFCD5581";
var last4Digits = fullNumber.substring(11);
-return padEnd(last4Digits, fullNumber.length(), '*'); // Returns "203439900FF******"
+padEnd(last4Digits, fullNumber.length(), '*'); // Returns "203439900FF******"
```
{: .copy-code}
@@ -1079,21 +1084,21 @@ A string in HexDecimal format.
**Examples:**
```java
-var i = 0xFFD8FFA6 (4 292 411 302);
-intToHex(i, true, true); // Returns "0xFFD8FFA6"
-intToHex(171, true, false)); // Returns "AB"
-intToHex(0xABCDEF, false, true, 4)); // Returns "0xCDAB"
+var i = 0x7FFFFFFF; // (2147483647);
+intToHex(i, true, true); // Returns "0x7FFFFFFF"
+intToHex(171, true, false); // Returns "AB"
+intToHex(0xABCDEF, false, true, 4); // Returns "0xCDAB"
intToHex(0xABCD, false, false, 2); // Returns "AB"
-longToHex(0xFFCEFFA6FFD8FFA6l, false, true)); // Returns "0xA6FFD8FFA6FFCEFF"
-longToHex(0xFFD8FFA6FFD8FFA6l, true, true, 4)) // Returns "0xFFA6"
-longToHex(0xFFD8FFA6FFD8FFA6l, false, false, 4))// Returns "0D8FF"
+longToHex(9223372036854775807, true, true); // Returns "0x7FFFFFFFFFFFFFFF"
+longToHex(0x7A12BCD3, true, true, 4); // Returns "0xBCD3"
+longToHex(0x7A12BCD3, false, false, 4); // Returns "127A"
-floatToHex(123456789.00f) // Returns "0x4CEB79A3"
-floatToHex(123456789.00f, false) // Returns "0xA379EB4C"
+floatToHex(123456789.00); // Returns "0x4CEB79A3"
+floatToHex(123456789.00, false); // Returns "0xA379EB4C"
-doubleToHex(1729.1729d) // Returns "0x409B04B10CB295EA"
-doubleToHex(1729.1729d, false) // Returns "0xEA95B20CB1049B40"
+doubleToHex(1729.1729d); // Returns "0x409B04B10CB295EA"
+doubleToHex(1729.1729d, false); // Returns "0xEA95B20CB1049B40"
```
{: .copy-code}
@@ -1121,13 +1126,15 @@ A string in BinaryString, OctalString, DecimalString, HexDecimalString format.
**Examples:**
```java
-intLongToRadixString(58l, 2); // Returns "00111010"
-intLongToRadixString(13158L, 8); // Returns "31546"
-intLongToRadixString(-13158L, 8); // Returns "1777777777777777746232"
-intLongToRadixString(-13158L, 10); // Returns ":"-13158"
-intLongToRadixString(13158L, 16); // Returns "3366"
-intLongToRadixString(-13158L, 16); // Returns"FFCC9A"
-intLongToRadixString(-13158L, 16, true, true)); // Returns"0xFFCC9A"
+intLongToRadixString(58, 2); // Returns "00111010"
+intLongToRadixString(13158, 8); // Returns "31546"
+intLongToRadixString(-13158, 8); // Returns "1777777777777777746232"
+intLongToRadixString(-13158, 10); // Returns ":"-13158"
+intLongToRadixString(13158, 16); // Returns "3366"
+intLongToRadixString(-13158, 16); // Returns "FFCC9A"
+intLongToRadixString(9223372036854775807, 16); // Returns "7FFFFFFFFFFFFFFF"
+intLongToRadixString(9223372036854775807, 2); // Returns "0111111111111111111111111111111111111111111111111111111111111111"
+intLongToRadixString(-13158, 16, true, true); // Returns "0xFFCC9A"
```
{: .copy-code}
@@ -1154,10 +1161,10 @@ Parsed integer value.
**Examples:**
```java
-return parseHexToInt("BBAA"); // returns 48042
-return parseHexToInt("BBAA", true); // returns 48042
-return parseHexToInt("AABB", false); // returns 48042
-return parseHexToInt("BBAA", false); // returns 43707
+parseHexToInt("BBAA"); // Returns 48042
+parseHexToInt("BBAA", true); // Returns 48042
+parseHexToInt("AABB", false); // Returns 48042
+parseHexToInt("BBAA", false); // Returns 43707
```
{: .copy-code}
@@ -1199,10 +1206,10 @@ Parsed float value.
**Examples:**
```java
-return parseHexToFloat("41EA62CC"); // returns 29.29824f
-return parseHexToFloat("41EA62CC", true); // returns 29.29824f
-return parseHexToFloat("41EA62CC", false); // returns -5.948442E7f
-return parseHexToFloat("CC62EA41", false); // returns 29.29824f
+parseHexToFloat("41EA62CC"); // Returns 29.29824f
+parseHexToFloat("41EA62CC", true); // Returns 29.29824f
+parseHexToFloat("41EA62CC", false); // Returns -5.948442E7f
+parseHexToFloat("CC62EA41", false); // Returns 29.29824f
```
{: .copy-code}
@@ -1252,12 +1259,12 @@ Parsed float value.
**Examples:**
```java
-return parseHexIntLongToFloat("0x0A", true); // returns 10.0f
-return parseHexIntLongToFloat("0x0A", false); // returns 10.0f
-return parseHexIntLongToFloat"0x00000A", true); // returns 10.0f
-return parseHexIntLongToFloat("0x0A0000", false); // returns 10.0f
-return parseHexIntLongToFloat("0x000A0A", true); // returns 12570.0f
-return parseHexIntLongToFloat("0x0A0A00", false); // returns 2570.0f
+return parseHexIntLongToFloat("0x0A", true); // Returns 10.0f
+return parseHexIntLongToFloat("0x0A", false); // Returns 10.0f
+return parseHexIntLongToFloat"0x00000A", true); // Returns 10.0f
+return parseHexIntLongToFloat("0x0A0000", false); // Returns 10.0f
+return parseHexIntLongToFloat("0x000A0A", true); // Returns 12570.0f
+return parseHexIntLongToFloat("0x0A0A00", false); // Returns 2570.0f
```
{: .copy-code}
@@ -1283,10 +1290,10 @@ Parsed double value.
**Examples:**
```java
-return parseHexToDouble("409B04B10CB295EA"); // returns 1729.1729
-return parseHexToDouble("409B04B10CB295EA" false); // returns -2.7208640774822924E205
-return parseHexToDouble("409B04B10CB295EA" true); // returns 1729.1729
-return parseHexToDouble("EA95B20CB1049B40" false); // returns 1729.1729
+return parseHexToDouble("409B04B10CB295EA"); // Returns 1729.1729
+return parseHexToDouble("409B04B10CB295EA" false); // Returns -2.7208640774822924E205
+return parseHexToDouble("409B04B10CB295EA" true); // Returns 1729.1729
+return parseHexToDouble("EA95B20CB1049B40" false); // Returns 1729.1729
```
{: .copy-code}
@@ -1327,7 +1334,7 @@ Parsed list of integer values.
**Examples:**
```java
-return hexToBytes("BBAA"); // returns [-69, -86]
+return hexToBytes("BBAA"); // Returns [-69, -86]
```
{: .copy-code}
@@ -1355,9 +1362,9 @@ Returns a hexadecimal string.
```java
var bytes = [0xBB, 0xAA];
-return bytesToHex( bytes); // returns "BBAA"
+return bytesToHex( bytes); // Returns "BBAA"
var list = [-69, 83];
-return bytesToHex(list); // returns "BB53"
+return bytesToHex(list); // Returns "BB53"
```
{: .copy-code}
@@ -1386,9 +1393,9 @@ integer value.
```java
var bytes = [0xAA, 0xBB, 0xCC, 0xDD];
-return parseBytesToInt(bytes, 0, 3); // returns 11189196 in Decimal or 0xAABBCC
-return parseBytesToInt(bytes, 0, 3, true); // returns 11189196 in Decimal or 0xAABBCC
-return parseBytesToInt(bytes, 0, 3, false); // returns 13417386 in Decimal or 0xCCBBAA
+return parseBytesToInt(bytes, 0, 3); // Returns 11189196 in Decimal or 0xAABBCC
+return parseBytesToInt(bytes, 0, 3, true); // Returns 11189196 in Decimal or 0xAABBCC
+return parseBytesToInt(bytes, 0, 3, false); // Returns 13417386 in Decimal or 0xCCBBAA
```
{: .copy-code}
@@ -1417,8 +1424,8 @@ long value.
```java
var longValByte = [64, -101, 4, -79, 12, -78, -107, -22];
-return parseBytesToLong(longValByte, 0, 8); // returns 4655319798286292458L == 0x409B04B10CB295EAL
-return parseBytesToLong(longValByte, 0, 8, false); // returns -1543131529725306048L == 0xEA95B20CB1049B40L
+return parseBytesToLong(longValByte, 0, 8); // Returns 4655319798286292458L == 0x409B04B10CB295EAL
+return parseBytesToLong(longValByte, 0, 8, false); // Returns -1543131529725306048L == 0xEA95B20CB1049B40L
```
{: .copy-code}
@@ -1456,17 +1463,17 @@ float value.
```java
var bytes = [0x0A];
-return parseBytesToFloat(bytes); // returns 1.4E-44f
+return parseBytesToFloat(bytes); // Returns 1.4E-44f
var floatValByte = [0x41, 0xEA, 0x62, 0xCC];
-return parseBytesToFloat(floatValByte, 0); // returns 29.29824f
-return parseBytesToFloat(floatValByte, 0, 2, false); // returns 8.4034E-41f
-return parseBytesToFloat(floatValByte, 0, 2, true); // returns 2.3646E-41f
-return parseBytesToFloat(floatValByte, 0, 3, false); // returns 9.083913E-39f
-return parseBytesToFloat(floatValByte, 0, 3, true); // returns 6.053388E-39f
-return parseBytesToFloat(floatValByte, 0, 4, false); // returns -5.948442E7f
+return parseBytesToFloat(floatValByte, 0); // Returns 29.29824f
+return parseBytesToFloat(floatValByte, 0, 2, false); // Returns 8.4034E-41f
+return parseBytesToFloat(floatValByte, 0, 2, true); // Returns 2.3646E-41f
+return parseBytesToFloat(floatValByte, 0, 3, false); // Returns 9.083913E-39f
+return parseBytesToFloat(floatValByte, 0, 3, true); // Returns 6.053388E-39f
+return parseBytesToFloat(floatValByte, 0, 4, false); // Returns -5.948442E7f
var floatValList = [65, -22, 98, -52];
-return parseBytesToFloat(floatValList, 0); // returns 29.29824f
-return parseBytesToFloat(floatValList, 0, 4, false); // returns -5.948442E7f
+return parseBytesToFloat(floatValList, 0); // Returns 29.29824f
+return parseBytesToFloat(floatValList, 0, 4, false); // Returns -5.948442E7f
```
{: .copy-code}
@@ -1505,12 +1512,12 @@ float value.
```java
var intValByte = [0x00, 0x00, 0x00, 0x0A];
-return parseBytesIntToFloat(intValByte, 3, 1, true); // returns 10.0f
-return parseBytesIntToFloat(intValByte, 3, 1, false); // returns 10.0f
-return parseBytesIntToFloat(intValByte, 2, 2, true); // returns 10.0f
-return parseBytesIntToFloat(intValByte, 2, 2, false); // returns 2560.0f
-return parseBytesIntToFloat(intValByte, 0, 4, true); // returns 10.0f
-return parseBytesIntToFloat(intValByte, 0, 4, false); // returns 1.6777216E8f
+return parseBytesIntToFloat(intValByte, 3, 1, true); // Returns 10.0f
+return parseBytesIntToFloat(intValByte, 3, 1, false); // Returns 10.0f
+return parseBytesIntToFloat(intValByte, 2, 2, true); // Returns 10.0f
+return parseBytesIntToFloat(intValByte, 2, 2, false); // Returns 2560.0f
+return parseBytesIntToFloat(intValByte, 0, 4, true); // Returns 10.0f
+return parseBytesIntToFloat(intValByte, 0, 4, false); // Returns 1.6777216E8f
```
{: .copy-code}
@@ -1520,8 +1527,8 @@ return parseBytesIntToFloat(intValByte, 0, 4, false); // returns 1.6777216E8f
var dataAT101 = "0x01756403671B01048836BF7701F000090722050000";
var byteAT101 = hexToBytes(dataAT101);
var offset = 9;
-return parseBytesIntToFloat(byteAT101, offset, 4, false) / 1000000; // returns 24.62495f
-return parseBytesIntToFloat(byteAT101, offset + 4, 4, false) / 1000000; // returns 118.030576f
+return parseBytesIntToFloat(byteAT101, offset, 4, false) / 1000000; // Returns 24.62495f
+return parseBytesIntToFloat(byteAT101, offset + 4, 4, false) / 1000000; // Returns 118.030576f
```
{: .copy-code}
@@ -1565,8 +1572,8 @@ var coordinatesAsHex = "0x32D009423F23B300B0106E08D96B6C00";
var coordinatesasBytes = hexToBytes(coordinatesAsHex);
var offset = 0;
var factor = 1e15;
-return parseBytesLongToDouble(coordinatesasBytes, offset, 8, false) / factor; // returns 50.422775429058610d, latitude
-return parseBytesLongToDouble(coordinatesasBytes, offset + 8, 8, false) / factor; // returns 30.517877378257072d, longitude
+return parseBytesLongToDouble(coordinatesasBytes, offset, 8, false) / factor; // Returns 50.422775429058610d, latitude
+return parseBytesLongToDouble(coordinatesasBytes, offset + 8, 8, false) / factor; // Returns 30.517877378257072d, longitude
```
{: .copy-code}
@@ -1593,7 +1600,7 @@ ExecutionArrayList value.
```java
var bytes = [0xAA, 0xBB, 0xCC, 0xDD];
-return bytesToExecutionArrayList(bytes); // returns ExecutionArrayList value with size = 4, includes: [-86, -69, -52, -35]
+return bytesToExecutionArrayList(bytes); // Returns ExecutionArrayList value with size = 4, includes: [-86, -69, -52, -35]
```
{: .copy-code}
@@ -1625,14 +1632,14 @@ byte[] value.
```java
var byteVal = 0x39;
-return parseByteToBinaryArray(byteVal); // returns byte[8] value => [0, 0, 1, 1, 1, 0, 0, 1]
-return parseByteToBinaryArray(byteVal, 3); // returns byte[3] value => [0, 0, 1]
-return parseByteToBinaryArray(byteVal, 8, false); // returns byte[8] value => [1, 0, 0, 1, 1, 1, 0, 0]
-return parseByteToBinaryArray(byteVal, 5, false); // returns byte[5] value => [1, 0, 0, 1, 1]
-return parseByteToBinaryArray(byteVal, 4, false); // returns byte[4] value => [1, 0, 0, 1]
-return parseByteToBinaryArray(byteVal, 3, false); // returns byte[3] value => [1, 0, 0]
-
-var value = parseByteToBinaryArray(byteVal, 6, false); // returns byte[6] value => [1, 0, 0, 1, 1, 1]
+return parseByteToBinaryArray(byteVal); // Returns byte[8] value => [0, 0, 1, 1, 1, 0, 0, 1]
+return parseByteToBinaryArray(byteVal, 3); // Returns byte[3] value => [0, 0, 1]
+return parseByteToBinaryArray(byteVal, 8, false); // Returns byte[8] value => [1, 0, 0, 1, 1, 1, 0, 0]
+return parseByteToBinaryArray(byteVal, 5, false); // Returns byte[5] value => [1, 0, 0, 1, 1]
+return parseByteToBinaryArray(byteVal, 4, false); // Returns byte[4] value => [1, 0, 0, 1]
+return parseByteToBinaryArray(byteVal, 3, false); // Returns byte[3] value => [1, 0, 0]
+
+var value = parseByteToBinaryArray(byteVal, 6, false); // Returns byte[6] value => [1, 0, 0, 1, 1, 1]
var actualLowCurrent1Alarm = value[0];
var actualHighCurrent1Alarm = value[1];
var actualLowCurrent2Alarm = value[2];
@@ -1665,10 +1672,10 @@ byte[] value.
```java
var bytesVal = [0xCE, 0xB2];
-return parseByteToBinaryArray(bytesVal); // returns byte[16] value => [1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0]
-return parseByteToBinaryArray(bytesVal, 15); // returns byte[15] value => [1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0]
-return parseByteToBinaryArray(bytesVal, 14); // returns byte[14] value => [0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0]
-return parseByteToBinaryArray(bytesVal, 2); // returns byte[2] value => [1, 0]
+return parseByteToBinaryArray(bytesVal); // Returns byte[16] value => [1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0]
+return parseByteToBinaryArray(bytesVal, 15); // Returns byte[15] value => [1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0]
+return parseByteToBinaryArray(bytesVal, 14); // Returns byte[14] value => [0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0]
+return parseByteToBinaryArray(bytesVal, 2); // Returns byte[2] value => [1, 0]
```
{: .copy-code}
@@ -1695,8 +1702,8 @@ byte[] value.
```java
var longValue = 52914L;
-return parseByteToBinaryArray(longValue); // returns byte[64] value => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0]
-return parseByteToBinaryArray(longValue, 16); // returns byte[16] value => [1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0]
+return parseByteToBinaryArray(longValue); // Returns byte[64] value => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0]
+return parseByteToBinaryArray(longValue, 16); // Returns byte[16] value => [1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0]
```
{: .copy-code}
@@ -1723,8 +1730,8 @@ int value.
**Examples:**
```java
-return parseByteToBinaryArray([1, 0, 0, 1, 1, 1, 1, 1]); // returns -97
-var actualVolt = parseByteToBinaryArray([1, 0, 0, 1, 1, 1, 1, 1], 1, 7); // returns 31
+return parseByteToBinaryArray([1, 0, 0, 1, 1, 1, 1, 1]); // Returns -97
+var actualVolt = parseByteToBinaryArray([1, 0, 0, 1, 1, 1, 1, 1], 1, 7); // Returns 31
```
{: .copy-code}
@@ -1751,19 +1758,19 @@ An integer value.
**Examples:**
```java
-return parseInt("0"); // returns 0
-return parseInt("473"); // returns 473
-return parseInt("+42"); // returns 42
-return parseInt("-0", 10); // returns 0
-return parseInt("-0xFF"); // returns -255
-return parseInt("-FF", 16); // returns -255
-return parseInt("1100110", 2); // returns 102
-return parseInt("2147483647", 10); // returns 2147483647
-return parseInt("-2147483648", 10); // returns -2147483648
+return parseInt("0"); // Returns 0
+return parseInt("473"); // Returns 473
+return parseInt("+42"); // Returns 42
+return parseInt("-0", 10); // Returns 0
+return parseInt("-0xFF"); // Returns -255
+return parseInt("-FF", 16); // Returns -255
+return parseInt("1100110", 2); // Returns 102
+return parseInt("2147483647", 10); // Returns 2147483647
+return parseInt("-2147483648", 10); // Returns -2147483648
return parseInt("2147483648", 10); // throws a NumberFormatException
return parseInt("99", 8); // throws a NumberFormatException
return parseInt("Kona", 10); // throws a NumberFormatException
-return parseInt("Kona", 27); // returns 411787
+return parseInt("Kona", 27); // Returns 411787
```
{: .copy-code}
@@ -1789,17 +1796,17 @@ A long value.
**Examples:**
```java
-return parseLong("0"); // returns 0L
-return parseLong("473"); // returns 473L
-return parseLong("+42"); // returns 42L
-return parseLong("-0", 10); // returns 0L
-return parseLong("-0xFFFF"); // returns -65535L
-return parseLong("-FFFF", 16); // returns -65535L
-return parseLong("11001101100110", 2); // returns 13158L
-return parseLong("777777777777777777777", 8); // returns 9223372036854775807L
-return parseLong("KonaLong", 27); // returns 218840926543L
-return parseLong("9223372036854775807", 10); // returns 9223372036854775807L
-return parseLong("-9223372036854775808", 10); // returns -9223372036854775808L
+return parseLong("0"); // Returns 0L
+return parseLong("473"); // Returns 473L
+return parseLong("+42"); // Returns 42L
+return parseLong("-0", 10); // Returns 0L
+return parseLong("-0xFFFF"); // Returns -65535L
+return parseLong("-FFFF", 16); // Returns -65535L
+return parseLong("11001101100110", 2); // Returns 13158L
+return parseLong("777777777777777777777", 8); // Returns 9223372036854775807L
+return parseLong("KonaLong", 27); // Returns 218840926543L
+return parseLong("9223372036854775807", 10); // Returns 9223372036854775807L
+return parseLong("-9223372036854775808", 10); // Returns -9223372036854775808L
return parseLong("9223372036854775808", 10); //throws a NumberFormatException
return parseLong("0xFGFFFFFF", 16); // throws a NumberFormatException
return parseLong("FFFFFFFF", 16); // throws a NumberFormatException
@@ -1830,7 +1837,7 @@ A float value.
**Examples:**
```java
-return parseFloat("4.2"); // returns 4.2
+return parseFloat("4.2"); // Returns 4.2
```
{: .copy-code}
@@ -1855,7 +1862,7 @@ A double precision value.
**Examples:**
```java
-return parseDouble("4.2"); // returns 4.2
+return parseDouble("4.2"); // Returns 4.2
```
{: .copy-code}
@@ -1881,7 +1888,7 @@ Hex string
**Examples:**
```java
-return base64ToHex("Kkk="); // returns "2A49"
+return base64ToHex("Kkk="); // Returns "2A49"
```
{: .copy-code}
@@ -1906,7 +1913,7 @@ Base64 string.
**Examples:**
```java
-return bytesToBase64([42, 73]); // returns "Kkk="
+return bytesToBase64([42, 73]); // Returns "Kkk="
```
{: .copy-code}
@@ -1931,7 +1938,7 @@ Byte array.
**Examples:**
```java
-return base64ToBytes("Kkk="); // returns [42, 73]
+return base64ToBytes("Kkk="); // Returns [42, 73]
```
{: .copy-code}
@@ -2398,3 +2405,5 @@ var dLocal3 = d.toLocaleString("de", optionsStr); // return "Sonntag, 6. Aug
```
{: .copy-code}
+
+
diff --git a/_includes/docs/user-guide/ui/microsoft-teams-settings.md b/_includes/docs/user-guide/ui/microsoft-teams-settings.md
index e8f1672c38..983e38e6c1 100644
--- a/_includes/docs/user-guide/ui/microsoft-teams-settings.md
+++ b/_includes/docs/user-guide/ui/microsoft-teams-settings.md
@@ -1,11 +1,30 @@
* TOC
{:toc}
-To integrate [Microsoft Teams](https://www.microsoft.com/en-us/microsoft-teams/group-chat-software/) with the ThingsBoard platform, you first need to configure webhooks (connectors) for channels that you are going to use with ThingsBoard.
+To integrate [Microsoft Teams](https://www.microsoft.com/en-us/microsoft-teams/group-chat-software/){:target="_blank"} with the ThingsBoard platform, you first need to configure workflows for channels that you are going to use with ThingsBoard.
To do this, follow these steps:
-{% include images-gallery.html imageCollection="microsoft-teams-settings" showListImageTitles="true" %}
+{% assign microsoftTeamsSettings = '
+ ===
+ image: https://img.thingsboard.io/user-guide/ui/microsoft-teams/microsoft-teams-settings-1.png,
+ title: Sign in to Microsoft Teams and navigate to the "Teams" tab, then left-click on your channel name. In the drop-down menu click on the "Workflows" item;
+ ===
+ image: https://img.thingsboard.io/user-guide/ui/microsoft-teams/microsoft-teams-settings-2.png,
+ title: Find "Post to a channel when a webhook request is received" workflow and click on it;
+ ===
+ image: https://img.thingsboard.io/user-guide/ui/microsoft-teams/microsoft-teams-settings-3.png,
+ title: Give a name to the workflow and click the "Next" button;
+ ===
+ image: https://img.thingsboard.io/user-guide/ui/microsoft-teams/microsoft-teams-settings-4.png,
+ title: In the "Details" choose the team and the channel and click the "Add workflow" button;
+ ===
+ image: https://img.thingsboard.io/user-guide/ui/microsoft-teams/microsoft-teams-settings-5.png,
+ title: Workflow added successfully. Now, copy the workflow URL which will be used in the configuration for notifications. Finally, click the "Done" button.
+'
+%}
+
+{% include images-gallery.liquid showListImageTitles="true" imageCollection=microsoftTeamsSettings %}
Now you are ready to use Microsoft Teams via [Notification Center](/docs/{{docsPrefix}}user-guide/notifications/#microsoft-teams).
diff --git a/_includes/templates/iot-gateway/mqtt-connector/attribute-request-subsection-advanced.md b/_includes/templates/iot-gateway/mqtt-connector/attribute-request-subsection-advanced.md
index ba634dcdf7..27b6357ac3 100644
--- a/_includes/templates/iot-gateway/mqtt-connector/attribute-request-subsection-advanced.md
+++ b/_includes/templates/iot-gateway/mqtt-connector/attribute-request-subsection-advanced.md
@@ -2,15 +2,20 @@ This section in configuration file looks like:
```json
"attributeRequests": [
{
- "retain": false,
- "topicFilter": "v1/devices/me/attributes/request",
- "deviceNameJsonExpression": "${serialNumber}",
- "attributeNameJsonExpression": "${versionAttribute}",
+ "retain": false,
+ "topicFilter": "v1/devices/me/attributes/request",
+ "deviceInfo": {
+ "deviceNameExpressionSource": "message",
+ "deviceNameExpression": "${serialNumber}"
+ },
+ "attributeNameExpressionSource": "message",
+ "attributeNameExpression": "${versionAttribute}",
"topicExpression": "devices/${deviceName}/attrs",
"valueExpression": "${attributeKey}: ${attributeValue}"
}
]
```
+{: .copy-code}
Also, you can request multiple attributes at once. Simply add one more JSON-path to
attributeNameExpression parameter. For example, we want to request two shared attributes in one request, our config
@@ -20,8 +25,12 @@ will look like:
{
"retain": false,
"topicFilter": "v1/devices/me/attributes/request",
- "deviceNameJsonExpression": "${serialNumber}",
- "attributeNameJsonExpression": "${versionAttribute}, ${pduAttribute}",
+ "deviceInfo": {
+ "deviceNameExpressionSource": "message",
+ "deviceNameExpression": "${serialNumber}"
+ },
+ "attributeNameExpressionSource": "message",
+ "attributeNameExpression": "${versionAttribute}, ${pduAttribute}",
"topicExpression": "devices/${deviceName}/attrs",
"valueExpression": "${attributeKey}: ${attributeValue}"
}
@@ -30,13 +39,13 @@ will look like:
![image](https://img.thingsboard.io/gateway/mqtt-connector/attribute-requests-example-advanced-1-ce.png)
-| **Parameter** | **Default value** | **Description** |
-|:-|:-|-
-| retain | **false** | If set to true, the message will be set as the "last known good"/retained message for the topic. |
-| topicFilter | **v1/devices/me/attributes/request** | Topic for attribute request |
-| deviceNameJsonExpression | **${serialNumber}** | JSON-path expression, for looking the device name in topicFilter message |
-| attributeNameJsonExpression | **${versionAttribute}** | JSON-path expression, for looking the attribute name in topicFilter message |
-| topicExpression | **devices/${deviceName}/attrs** | JSON-path expression, for formatting reply topic |
-| valueExpression | **${attributeKey}: ${attributeValue}** | Message that will be sent to topic from topicExpression |
-|---
+| **Parameter** | **Default value** | **Description** |
+|:--------------------------|:-|-
+| retain | **false** | If set to true, the message will be set as the "last known good"/retained message for the topic. |
+| topicFilter | **v1/devices/me/attributes/request** | Topic for attribute request |
+| deviceNameExpression | **${serialNumber}** | JSON-path expression, for looking the device name in topicFilter message |
+| attributeNameExpression | **${versionAttribute}** | JSON-path expression, for looking the attribute name in topicFilter message |
+| topicExpression | **devices/${deviceName}/attrs** | JSON-path expression, for formatting reply topic |
+| valueExpression | **${attributeKey}: ${attributeValue}** | Message that will be sent to topic from topicExpression |
+| ---
diff --git a/_includes/templates/iot-gateway/mqtt-connector/connect-request-subsection-advanced.md b/_includes/templates/iot-gateway/mqtt-connector/connect-request-subsection-advanced.md
index 120e97630b..e814505c17 100644
--- a/_includes/templates/iot-gateway/mqtt-connector/connect-request-subsection-advanced.md
+++ b/_includes/templates/iot-gateway/mqtt-connector/connect-request-subsection-advanced.md
@@ -1,26 +1,28 @@
This section in configuration looks like:
```json
- "connectRequests": [
- {
- "topicFilter": "sensor/connect",
- "deviceNameJsonExpression": "${serialNumber}"
- },
- {
- "topicFilter": "sensor/+/connect",
- "deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/connect)"
+"connectRequests": [
+ {
+ "topicFilter": "sensor/connect",
+ "deviceInfo": {
+ "deviceNameExpressionSource": "message",
+ "deviceNameExpression": "${serialNumber}",
+ "deviceProfileExpressionSource": "constant",
+ "deviceProfileExpression": "Thermometer"
}
- ]
+ }
+]
```
+{: .copy-code}
![image](https://img.thingsboard.io/gateway/mqtt-connector/connect-request-example-1-ce.png)
**Device name from the message body:**
-| **Parameter** | **Default value** | **Description** |
-|:-------------------------|:-------------------------------------|:---------------------------------------------------------------------------------------------|
-| topicFilter | **sensor/connect** | Topic address on the broker, where the broker sends information about new connected devices. |
-| deviceNameJsonExpression | **${serialNumber}** | JSON-path expression, for looking the new device name. |
-| ---
+| **Parameter** | **Default value** | **Description** |
+|:----------------------|:-------------------------------------|:---------------------------------------------------------------------------------------------|
+| topicFilter | **sensor/connect** | Topic address on the broker, where the broker sends information about new connected devices. |
+| deviceNameExpression | **${serialNumber}** | JSON-path expression, for looking the new device name. |
+| ---
In this case the following messages are valid:
diff --git a/_includes/templates/iot-gateway/mqtt-connector/connection-to-broker-advanced-section.md b/_includes/templates/iot-gateway/mqtt-connector/connection-to-broker-advanced-section.md
index b8a96c78e8..749ad3c809 100644
--- a/_includes/templates/iot-gateway/mqtt-connector/connection-to-broker-advanced-section.md
+++ b/_includes/templates/iot-gateway/mqtt-connector/connection-to-broker-advanced-section.md
@@ -3,9 +3,9 @@ This configuration section contains settings of the connection to broker, such a
| **Parameter** | **Default value** | **Description** |
|:--------------|:-------------------------|--------------------------------------------------------------------
| name | **Default Local Broker** | Broker name for logs and saving to persistent devices. |
-| host | **localhost** | MQTT broker hostname or ip address. |
+| host | **127.0.0.1** | MQTT broker hostname or ip address. |
| port | **1883** | MQTT port on the broker. |
-| version | **5** | MQTT protocol version. |
+| version | **5** | MQTT protocol version may be 3 (3.1), 4(3.11) or 5(5) |
| clientId | **tb_gw_li06e** | This is the client ID. It must be unique for each session. |
| security | **anonymous** | This is the configuration for client authorization at MQTT Broker. |
| ---
diff --git a/_includes/templates/iot-gateway/mqtt-connector/data-conversion-bytes-config.md b/_includes/templates/iot-gateway/mqtt-connector/data-conversion-bytes-config.md
index f3823a28a3..af33b15d6d 100644
--- a/_includes/templates/iot-gateway/mqtt-connector/data-conversion-bytes-config.md
+++ b/_includes/templates/iot-gateway/mqtt-connector/data-conversion-bytes-config.md
@@ -1,21 +1,21 @@
Bytes converter is the default converter, it looks for '**deviceName**', '**deviceType**', attributes and telemetry in the incoming
message from the broker, following the rules described in this subsection:
-| **Parameter** | **Default value** | **Description** |
-|:---------------------|:------------------|------------------------------------------------------------------------------------------------------------------|
-| type | **bytes** | Provides information to connector that default converter is to be used for converting data from topic. |
-| deviceNameExpression | **[0:4]** | The expression that is used to find device name in the incoming message. |
-| deviceTypeExpression | **[1:3]** | The expression that is used to find device type in the incoming message. |
-| timeout | **60000** | Timeout for triggering "Device Disconnected" event. |
-| attributes: | | This subsection contains parameters of the incoming message, to be interpreted as attributes for the device. |
-| ... type | **raw** | Type of incoming data for a current attribute. |
-| ... key | **temp** | Attribute name, to be sent to ThingsBoard instance. |
-| ... value | **[:]** | Final view of data that will be sent to ThingsBoard, [:] - will replace to device data using python slice rules. |
-| timeseries: | | This subsection contains parameters of the incoming message, to be interpreted as telemetry for the device. |
-| ... type | **raw** | Type of incoming data for a current telemetry. |
-| ... key | **rawData** | Telemetry name, to be sent to ThingsBoard instance. |
-| ... value | **[4:]** | Final view of data that will be sent to ThingsBoard, [:] - will replace to device data using python slice rules. |
-| ---
+| **Parameter** | **Default value** | **Description** |
+|:------------------------|:------------------|------------------------------------------------------------------------------------------------------------------|
+| type | **bytes** | Provides information to connector that default converter is to be used for converting data from topic. |
+| deviceNameExpression | **[0:4]** | The expression that is used to find device name in the incoming message. |
+| deviceProfileExpression | **[1:3]** | The expression that is used to find device type in the incoming message. |
+| timeout | **60000** | Timeout for triggering "Device Disconnected" event. |
+| attributes: | | This subsection contains parameters of the incoming message, to be interpreted as attributes for the device. |
+| ... type | **raw** | Type of incoming data for a current attribute. |
+| ... key | **temp** | Attribute name, to be sent to ThingsBoard instance. |
+| ... value | **[:]** | Final view of data that will be sent to ThingsBoard, [:] - will replace to device data using python slice rules. |
+| timeseries: | | This subsection contains parameters of the incoming message, to be interpreted as telemetry for the device. |
+| ... type | **raw** | Type of incoming data for a current telemetry. |
+| ... key | **rawData** | Telemetry name, to be sent to ThingsBoard instance. |
+| ... value | **[4:]** | Final view of data that will be sent to ThingsBoard, [:] - will replace to device data using python slice rules. |
+| ---
{% capture difference %}
**Parameters in attributes and telemetry section may differ from those presented above, but will have the same structure.**
@@ -26,29 +26,35 @@ message from the broker, following the rules described in this subsection:
Mapping subsection will look like:
```json
- {
- "topicFilter": "sensor/raw_data",
- "converter": {
- "type": "bytes",
- "deviceNameExpression": "[0:4]",
- "deviceTypeExpression": "default",
- "timeout": 60000,
- "attributes": [
- {
- "type": "raw",
- "key": "rawData",
- "value": "[:]"
- }
- ],
- "timeseries": [
- {
- "type": "raw",
- "key": "temp",
- "value": "[4:]"
- }
- ]
+{
+ "topicFilter": "sensor/raw_data",
+ "subscriptionQos": 1,
+ "converter": {
+ "type": "bytes",
+ "deviceInfo": {
+ "deviceNameExpressionSource": "message",
+ "deviceNameExpression": "[0:4]",
+ "deviceProfileExpressionSource": "constant",
+ "deviceProfileExpression": "default"
+ },
+ "sendDataOnlyOnChange": false,
+ "timeout": 60000,
+ "attributes": [
+ {
+ "type": "raw",
+ "key": "rawData",
+ "value": "[:]"
}
- }
+ ],
+ "timeseries": [
+ {
+ "type": "raw",
+ "key": "temp",
+ "value": "[4:]"
+ }
+ ]
+ }
+}
```
![image](https://img.thingsboard.io/gateway/mqtt-connector/data-conversion-advanced-bytes-1-ce.png)
\ No newline at end of file
diff --git a/_includes/templates/iot-gateway/mqtt-connector/data-conversion-custom-config.md b/_includes/templates/iot-gateway/mqtt-connector/data-conversion-custom-config.md
index d33cb753fb..16fb601cda 100644
--- a/_includes/templates/iot-gateway/mqtt-connector/data-conversion-custom-config.md
+++ b/_includes/templates/iot-gateway/mqtt-connector/data-conversion-custom-config.md
@@ -18,15 +18,18 @@ A custom converter is converter written for some device:
Converter subsection in the configuration will look like:
```json
- "converter": {
- "type": "custom",
- "extension": "CustomMqttUplinkConverter",
- "extension-config": {
- "temperatureBytes" : 2,
- "humidityBytes" : 2,
- "batteryLevelBytes" : 1
- }
- }
+"topicFilter": "custom/sensors/+",
+ "subscriptionQos": 1,
+ "converter": {
+ "type": "custom",
+ "extension": "CustomMqttUplinkConverter",
+ "cached": true,
+ "extensionConfig": {
+ "temperature": 2,
+ "humidity": 2,
+ "batteryLevel": 1
+ }
+ }
```
![image](https://img.thingsboard.io/gateway/mqtt-connector/data-conversion-advanced-custom-1-ce.png)
\ No newline at end of file
diff --git a/_includes/templates/iot-gateway/mqtt-connector/data-conversion-json-config.md b/_includes/templates/iot-gateway/mqtt-connector/data-conversion-json-config.md
index 50c51c5667..80aabd0b9a 100644
--- a/_includes/templates/iot-gateway/mqtt-connector/data-conversion-json-config.md
+++ b/_includes/templates/iot-gateway/mqtt-connector/data-conversion-json-config.md
@@ -3,8 +3,8 @@ Json converter is the default converter, it looks for '**deviceName**', '**devic
| **Parameter** | **Default value** | **Description** |
|:-------------------------|:--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------|
| type | **json** | Provides information to connector that default converter is to be used for converting data from topic. |
-| deviceNameJsonExpression | **${serialNumber}** | Simple JSON expression, is used for looking up device name in the incoming message (parameter "serialNumber" will be used as the device name). |
-| deviceTypeJsonExpression | **${sensorType}** | Simple JSON expression, is used for looking up device type in the incoming message (parameter "sensorType" will be used as the device type). |
+| deviceNameExpression | **${serialNumber}** | Simple JSON expression, is used for looking up device name in the incoming message (parameter "serialNumber" will be used as the device name). |
+| deviceProfileExpression | **${sensorType}** | Simple JSON expression, is used for looking up device type in the incoming message (parameter "sensorType" will be used as the device type). |
| timeout | **60000** | Timeout for triggering "Device Disconnected" event |
| attributes: | | This subsection contains parameters of the incoming message, to be interpreted as attributes for the device. |
| ... type | **string** | Type of incoming data for a current attribute. |
@@ -37,39 +37,50 @@ Json converter is the default converter, it looks for '**deviceName**', '**devic
Mapping subsection for Example 1 will look like:
```json
- {
- "topicFilter": "sensor/data",
- "converter": {
- "type": "json",
- "deviceNameJsonExpression": "${serialNumber}",
- "deviceTypeJsonExpression": "${sensorType}",
- "timeout": 60000,
- "attributes": [
- {
- "type": "string",
- "key": "model",
- "value": "${sensorModel}"
- },
- {
- "type": "string",
- "key": "${sensorModel}",
- "value": "on"
- }
- ],
- "timeseries": [
- {
- "type": "integer",
- "key": "temperature",
- "value": "${temp}"
- },
- {
- "type": "integer",
- "key": "humidity",
- "value": "${hum}"
- }
- ]
+{
+ "topicFilter": "sensor/data",
+ "subscriptionQos": 1,
+ "converter": {
+ "type": "json",
+ "deviceInfo": {
+ "deviceNameExpressionSource": "message",
+ "deviceNameExpression": "${serialNumber}",
+ "deviceProfileExpressionSource": "message",
+ "deviceProfileExpression": "${sensorType}"
+ },
+ "sendDataOnlyOnChange": false,
+ "timeout": 60000,
+ "attributes": [
+ {
+ "type": "string",
+ "key": "model",
+ "value": "${sensorModel}"
+ },
+ {
+ "type": "string",
+ "key": "${sensorModel}",
+ "value": "on"
}
- }
+ ],
+ "timeseries": [
+ {
+ "type": "string",
+ "key": "temperature",
+ "value": "${temp}"
+ },
+ {
+ "type": "double",
+ "key": "humidity",
+ "value": "${hum}"
+ },
+ {
+ "type": "string",
+ "key": "combine",
+ "value": "${hum}:${temp}"
+ }
+ ]
+ }
+}
```
![image](https://img.thingsboard.io/gateway/mqtt-connector/data-conversion-advanced-json-1-ce.png)
@@ -77,34 +88,39 @@ Mapping subsection for Example 1 will look like:
Mapping for Example 2 will look like:
```json
- {
- "topicFilter": "sensor/+/data",
- "converter": {
- "type": "json",
- "deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/data)",
- "deviceTypeTopicExpression": "Thermometer",
- "timeout": 60000,
- "attributes": [
- {
- "type": "string",
- "key": "model",
- "value": "${sensorModel}"
- }
- ],
- "timeseries": [
- {
- "type": "integer",
- "key": "temperature",
- "value": "${temp}"
- },
- {
- "type": "integer",
- "key": "humidity",
- "value": "${hum}"
- }
- ]
+"topicFilter": "sensor/+/data",
+ "subscriptionQos": 1,
+ "converter": {
+ "type": "json",
+ "deviceInfo": {
+ "deviceNameExpressionSource": "topic",
+ "deviceNameExpression": "(?<=sensor/)(.*?)(?=/data)",
+ "deviceProfileExpressionSource": "constant",
+ "deviceProfileExpression": "Thermometer"
+ },
+ "sendDataOnlyOnChange": false,
+ "timeout": 60000,
+ "attributes": [
+ {
+ "type": "string",
+ "key": "model",
+ "value": "${sensorModel}"
+ }
+ ],
+ "timeseries": [
+ {
+ "type": "double",
+ "key": "temperature",
+ "value": "${temp}"
+ },
+ {
+ "type": "string",
+ "key": "humidity",
+ "value": "${hum}"
}
- }
+ ]
+ }
+}
```
![image](https://img.thingsboard.io/gateway/mqtt-connector/data-conversion-advanced-json-2-ce.png)
\ No newline at end of file
diff --git a/_includes/templates/iot-gateway/mqtt-connector/data-conversion-subsection-advanced.md b/_includes/templates/iot-gateway/mqtt-connector/data-conversion-subsection-advanced.md
index 5714ccf1b8..51416f2c39 100644
--- a/_includes/templates/iot-gateway/mqtt-connector/data-conversion-subsection-advanced.md
+++ b/_includes/templates/iot-gateway/mqtt-connector/data-conversion-subsection-advanced.md
@@ -16,10 +16,14 @@ Also, you can combine values from MQTT message in attributes, telemetry and serv
{
{
"topicFilter": "sensor/data",
+ "subscriptionQos": 1,
"converter": {
"type": "json",
- "deviceNameJsonExpression": "${serialNumber}",
- "deviceTypeJsonExpression": "${sensorType}",
+ "deviceInfo": {
+ "deviceNameExpressionSource": "message",
+ "deviceNameExpression": "${serialNumber}",
+ "deviceProfileExpressionSource": "message",
+ "deviceProfileExpression": "${sensorType}"
"timeout": 60000,
"attributes": [],
"timeseries": [
diff --git a/_includes/templates/iot-gateway/mqtt-connector/data-mapping-subsection-advanced.md b/_includes/templates/iot-gateway/mqtt-connector/data-mapping-subsection-advanced.md
index 4554711797..149411f54f 100644
--- a/_includes/templates/iot-gateway/mqtt-connector/data-mapping-subsection-advanced.md
+++ b/_includes/templates/iot-gateway/mqtt-connector/data-mapping-subsection-advanced.md
@@ -1,7 +1,7 @@
-| **Parameter** | **Default value** | **Description** |
-|:---------------|:------------------|---------------------------------------------------------------------------------------------------------------------------|
-| topicFilter | **sensor/data** | Topic address for subscribing. |
-| QoS | **0** | An agreement between the message sender and receiver that defines the level of delivery guarantee for a specific message. |
+| **Parameter** | **Default value** | **Description** |
+|:---------------|:------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| topicFilter | **sensor/data** | Topic address for subscribing. |
+| QoS | **1** | An agreement between the message sender and receiver that defines the level of delivery guarantee for a specific message. (0-At most once, 1-At least once, 2-Exactly once) |
| ---
The **topicFilter** supports special symbols: '#' and '+', allowing to subscribe to multiple topics.
diff --git a/_includes/templates/iot-gateway/mqtt-connector/data-mapping-subsection-basic.md b/_includes/templates/iot-gateway/mqtt-connector/data-mapping-subsection-basic.md
index 09fa30d3d1..099df6a6e2 100644
--- a/_includes/templates/iot-gateway/mqtt-connector/data-mapping-subsection-basic.md
+++ b/_includes/templates/iot-gateway/mqtt-connector/data-mapping-subsection-basic.md
@@ -12,4 +12,4 @@ Also, MQTT connector supports shared subscriptions.
To create shared subscription you need to add "**$share/**" as a prefix for topic filter and shared subscription group name.
For example to subscribe to the *my-shared-topic* in group ***my-group-name*** you can set the topic filter to "$share/***my-group-name***/*my-shared-topic*".
-M**QTT Quality of Service** (QoS) is an agreement between the message sender and receiver that defines the level of delivery guarantee for a specific message.
\ No newline at end of file
+**MQTT Quality of Service** (QoS) is an agreement between the message sender and receiver that defines the level of delivery guarantee for a specific message. (0-At most once, 1-At least once, 2-Exactly once)
\ No newline at end of file
diff --git a/_includes/templates/iot-gateway/mqtt-connector/disconnect-request-subsection-advanced.md b/_includes/templates/iot-gateway/mqtt-connector/disconnect-request-subsection-advanced.md
index 4bd5b541cd..9f46113527 100644
--- a/_includes/templates/iot-gateway/mqtt-connector/disconnect-request-subsection-advanced.md
+++ b/_includes/templates/iot-gateway/mqtt-connector/disconnect-request-subsection-advanced.md
@@ -1,17 +1,24 @@
This section in configuration file looks like:
```json
- "disconnectRequests": [
- {
- "topicFilter": "sensor/disconnect",
- "deviceNameJsonExpression": "${serialNumber}"
- },
- {
- "topicFilter": "sensor/+/disconnect",
- "deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/disconnect)"
- }
- ]
+"disconnectRequests": [
+ {
+ "topicFilter": "sensor/disconnect",
+ "deviceInfo": {
+ "deviceNameExpressionSource": "message",
+ "deviceNameExpression": "${serialNumber}"
+ }
+},
+ {
+ "topicFilter": "sensor/+/disconnect",
+ "deviceInfo": {
+ "deviceNameExpressionSource": "topic",
+ "deviceNameExpression": "(?<=sensor/)(.*?)(?=/connect)"
+ }
+ }
+]
```
+{: .copy-code}
![image](https://img.thingsboard.io/gateway/mqtt-connector/disconnect-request-example-1-ce.png)
@@ -20,7 +27,7 @@ This section in configuration file looks like:
| **Parameter** | **Default value** | **Description** |
|:-|:-------------------------------------|-
| topicFilter | **sensor/disconnect** | Topic address on the broker, where the broker sends information about disconnected devices. |
-| deviceNameJsonExpression | **${serialNumber}** | JSON-path expression, for looking the new device name. |
+| deviceNameExpression | **${serialNumber}** | JSON-path expression, for looking the new device name. |
|---
In this case the following messages are valid:
diff --git a/_includes/templates/iot-gateway/mqtt-connector/server-side-rpc-commands-subsection-advanced.md b/_includes/templates/iot-gateway/mqtt-connector/server-side-rpc-commands-subsection-advanced.md
index 711b75a77c..61155fe85a 100644
--- a/_includes/templates/iot-gateway/mqtt-connector/server-side-rpc-commands-subsection-advanced.md
+++ b/_includes/templates/iot-gateway/mqtt-connector/server-side-rpc-commands-subsection-advanced.md
@@ -2,23 +2,27 @@
This section in configuration file looks like:
```json
- "serverSideRpc": [
- {
+"serverSideRpc": [
+ {
+ "type": "twoWay",
"deviceNameFilter": ".*",
"methodFilter": "echo",
"requestTopicExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
"responseTopicExpression": "sensor/${deviceName}/response/${methodName}/${requestId}",
+ "responseTopicQoS": 1,
"responseTimeout": 10000,
"valueExpression": "${params}"
- },
- {
+ },
+ {
+ "type": "oneWay",
"deviceNameFilter": ".*",
"methodFilter": "no-reply",
"requestTopicExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
- "valueExpression": "${params.hum}::${params.temp}"
- }
- ]
+ "valueExpression": "${params}"
+ }
+]
```
+{: .copy-code}
![image](https://img.thingsboard.io/gateway/mqtt-connector/server-side-rpc-commands-advanced-1-ce.png)
diff --git a/_includes/templates/iot-gateway/mqtt-connector/workers-settings-section-advanced.md b/_includes/templates/iot-gateway/mqtt-connector/workers-settings-section-advanced.md
index 16830e5b0a..f89fa9ec69 100644
--- a/_includes/templates/iot-gateway/mqtt-connector/workers-settings-section-advanced.md
+++ b/_includes/templates/iot-gateway/mqtt-connector/workers-settings-section-advanced.md
@@ -1,5 +1,4 @@
![image](https://img.thingsboard.io/gateway/mqtt-connector/workers-settings-advanced-1-ce.png)
-**maxNumberOfWorkers** is a maximal number of workers thread for converters (amount of workers changes dynamically, depending on load). Recommended amount 50-100.
-
-**maxMessageNumberPerWorker** is a maximal messages count that will be in queue for each converter worker.
\ No newline at end of file
+- **maxNumberOfWorkers** is a maximal number of workers thread for converters (amount of workers changes dynamically, depending on load). Recommended amount 50-100;
+- **maxMessageNumberPerWorker** is a maximal messages count that will be in queue for each converter worker.
\ No newline at end of file
diff --git a/blog/thingsboard-3-8-0-release/index.html b/blog/thingsboard-3-8-0-release/index.html
index ed8b86a122..883ee3f736 100644
--- a/blog/thingsboard-3-8-0-release/index.html
+++ b/blog/thingsboard-3-8-0-release/index.html
@@ -1557,7 +1557,7 @@ SCADA dashboards
-A SCADA dashboard within ThingsBoard offers all the typical platform dashboard functionalities with a specialized SCADA layout designed to ease the creation of SCADA HMIs (Human-Machine Interfaces). It typically includes unique scalable widgets called SCADA symbols. Each symbol can represent the state of a physical object, such as a valve, pump, motor, tank, or pipe. On ThingsBoard, these symbols are based on SVG (Scalable Vector Graphics) files, ensuring they adjust seamlessly to any screen size. In this update, we’ve also introduced the opportunity to easily create your custom symbols using SVG files.
+A SCADA dashboard within ThingsBoard offers all the typical platform dashboard functionalities with a specialized SCADA layout designed to ease the creation of SCADA HMIs (Human-Machine Interfaces). It typically includes unique scalable widgets called SCADA symbols. Each symbol can represent the state of a physical object, such as a valve, pump, motor, tank, or pipe. On ThingsBoard, these symbols are based on SVG (Scalable Vector Graphics) files, ensuring they adjust seamlessly to any screen size. In this update, we’ve also introduced the opportunity to easily create your custom symbols using SVG files.
diff --git a/docs/iot-gateway/config/mqtt.md b/docs/iot-gateway/config/mqtt.md
index 6f12818a4f..a2712d6357 100644
--- a/docs/iot-gateway/config/mqtt.md
+++ b/docs/iot-gateway/config/mqtt.md
@@ -356,6 +356,193 @@ Advanced%,%advanced%,%templates/iot-gateway/mqtt-connector/worker
{% include content-toggle.liquid content-toggle-id="mqttattributerequestsubsection" toggle-spec=mqttattributerequestsubsection %}
+## Configuration file
+
+Example of MQTT Connector configuration file:
+
+```json
+{
+ "broker": {
+ "name": "Default Local Broker",
+ "host": "127.0.0.1",
+ "port": 1883,
+ "clientId": "ThingsBoard_gateway",
+ "version": 5,
+ "maxMessageNumberPerWorker": 10,
+ "maxNumberOfWorkers": 100,
+ "sendDataOnlyOnChange": false,
+ "security": {
+ "type": "basic",
+ "username": "user",
+ "password": "password"
+ }
+ },
+ "mapping": [
+ {
+ "topicFilter": "sensor/data",
+ "converter": {
+ "type": "json",
+ "deviceNameJsonExpression": "${serialNumber}",
+ "deviceTypeJsonExpression": "${sensorType}",
+ "sendDataOnlyOnChange": false,
+ "timeout": 60000,
+ "attributes": [
+ {
+ "type": "string",
+ "key": "model",
+ "value": "${sensorModel}"
+ },
+ {
+ "type": "string",
+ "key": "${sensorModel}",
+ "value": "on"
+ }
+ ],
+ "timeseries": [
+ {
+ "type": "double",
+ "key": "temperature",
+ "value": "${temp}"
+ },
+ {
+ "type": "double",
+ "key": "humidity",
+ "value": "${hum}"
+ },
+ {
+ "type": "string",
+ "key": "combine",
+ "value": "${hum}:${temp}"
+ }
+ ]
+ }
+ },
+ {
+ "topicFilter": "sensor/+/data",
+ "converter": {
+ "type": "json",
+ "deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/data)",
+ "deviceTypeTopicExpression": "Thermometer",
+ "sendDataOnlyOnChange": false,
+ "timeout": 60000,
+ "attributes": [
+ {
+ "type": "string",
+ "key": "model",
+ "value": "${sensorModel}"
+ }
+ ],
+ "timeseries": [
+ {
+ "type": "double",
+ "key": "temperature",
+ "value": "${temp}"
+ },
+ {
+ "type": "double",
+ "key": "humidity",
+ "value": "${hum}"
+ }
+ ]
+ }
+ },
+ {
+ "topicFilter": "sensor/raw_data",
+ "converter": {
+ "type": "bytes",
+ "deviceNameExpression": "[0:4]",
+ "deviceTypeExpression": "default",
+ "sendDataOnlyOnChange": false,
+ "timeout": 60000,
+ "attributes": [
+ {
+ "type": "raw",
+ "key": "rawData",
+ "value": "[:]"
+ }
+ ],
+ "timeseries": [
+ {
+ "type": "raw",
+ "key": "temp",
+ "value": "[4:]"
+ }
+ ]
+ }
+ },
+ {
+ "topicFilter": "custom/sensors/+",
+ "converter": {
+ "type": "custom",
+ "extension": "CustomMqttUplinkConverter",
+ "cached": true,
+ "extension-config": {
+ "temperatureBytes": 2,
+ "humidityBytes": 2,
+ "batteryLevelBytes": 1
+ }
+ }
+ }
+ ],
+ "connectRequests": [
+ {
+ "topicFilter": "sensor/connect",
+ "deviceNameJsonExpression": "${serialNumber}"
+ },
+ {
+ "topicFilter": "sensor/+/connect",
+ "deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/connect)"
+ }
+ ],
+ "disconnectRequests": [
+ {
+ "topicFilter": "sensor/disconnect",
+ "deviceNameJsonExpression": "${serialNumber}"
+ },
+ {
+ "topicFilter": "sensor/+/disconnect",
+ "deviceNameTopicExpression": "(?<=sensor\/)(.*?)(?=\/disconnect)"
+ }
+ ],
+ "attributeRequests": [
+ {
+ "retain": false,
+ "topicFilter": "v1/devices/me/attributes/request",
+ "deviceNameJsonExpression": "${serialNumber}",
+ "attributeNameJsonExpression": "${versionAttribute}, ${pduAttribute}",
+ "topicExpression": "devices/${deviceName}/attrs",
+ "valueExpression": "${attributeKey}: ${attributeValue}"
+ }
+ ],
+ "attributeUpdates": [
+ {
+ "retain": true,
+ "deviceNameFilter": ".*",
+ "attributeFilter": "firmwareVersion",
+ "topicExpression": "sensor/${deviceName}/${attributeKey}",
+ "valueExpression": "{\"${attributeKey}\":\"${attributeValue}\"}"
+ }
+ ],
+ "serverSideRpc": [
+ {
+ "deviceNameFilter": ".*",
+ "methodFilter": "echo",
+ "requestTopicExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
+ "responseTopicExpression": "sensor/${deviceName}/response/${methodName}/${requestId}",
+ "responseTimeout": 10000,
+ "valueExpression": "${params}"
+ },
+ {
+ "deviceNameFilter": ".*",
+ "methodFilter": "no-reply",
+ "requestTopicExpression": "sensor/${deviceName}/request/${methodName}/${requestId}",
+ "valueExpression": "${params}"
+ }
+ ]
+}
+```
+{:.copy-code.expandable-15}
+
## Next steps
Explore guides related to main ThingsBoard features:
diff --git a/docs/paas/user-guide/ui/microsoft-teams-settings.md b/docs/paas/user-guide/ui/microsoft-teams-settings.md
index 617bfc287e..28dbf3e65d 100644
--- a/docs/paas/user-guide/ui/microsoft-teams-settings.md
+++ b/docs/paas/user-guide/ui/microsoft-teams-settings.md
@@ -4,19 +4,6 @@ assignees:
- stitenko
title: Microsoft Teams Settings
description: ThingsBoard IoT platform Microsoft Teams settings
-microsoft-teams-settings:
- 0:
- image: https://img.thingsboard.io/user-guide/ui/microsoft-teams/microsoft-teams-1-settings.png
- title: 'Sign in to Microsoft Teams and navigate to the "Teams" tab, then click on the three dots next to your channel name. In the drop-down menu click on the "Connectors" item;'
- 1:
- image: https://img.thingsboard.io/user-guide/ui/microsoft-teams/microsoft-teams-2-settings.png
- title: 'Find "Incoming Webhook" connector and click "Configure";'
- 2:
- image: https://img.thingsboard.io/user-guide/ui/microsoft-teams/microsoft-teams-3-settings.png
- title: 'Configure how ThingsBoard will appear when sending messages to your channel (choose a name and icon), and click "Create";'
- 3:
- image: https://img.thingsboard.io/user-guide/ui/microsoft-teams/microsoft-teams-4-settings.png
- title: 'Now, copy the webhook URL. We will use it when adding a notification recipients group in your ThingsBoard instance'
---
diff --git a/docs/pe/user-guide/ui/microsoft-teams-settings.md b/docs/pe/user-guide/ui/microsoft-teams-settings.md
index 7d8c55b77b..823b7b10ab 100644
--- a/docs/pe/user-guide/ui/microsoft-teams-settings.md
+++ b/docs/pe/user-guide/ui/microsoft-teams-settings.md
@@ -4,19 +4,6 @@ assignees:
- stitenko
title: Microsoft Teams Settings
description: ThingsBoard IoT platform Microsoft Teams settings
-microsoft-teams-settings:
- 0:
- image: https://img.thingsboard.io/user-guide/ui/microsoft-teams/microsoft-teams-1-settings.png
- title: 'Sign in to Microsoft Teams and navigate to the "Teams" tab, then click on the three dots next to your channel name. In the drop-down menu click on the "Connectors" item;'
- 1:
- image: https://img.thingsboard.io/user-guide/ui/microsoft-teams/microsoft-teams-2-settings.png
- title: 'Find "Incoming Webhook" connector and click "Configure";'
- 2:
- image: https://img.thingsboard.io/user-guide/ui/microsoft-teams/microsoft-teams-3-settings.png
- title: 'Configure how ThingsBoard will appear when sending messages to your channel (choose a name and icon), and click "Create";'
- 3:
- image: https://img.thingsboard.io/user-guide/ui/microsoft-teams/microsoft-teams-4-settings.png
- title: 'Now, copy the webhook URL. We will use it when adding a notification recipients group in your ThingsBoard instance.'
---
diff --git a/docs/user-guide/install/pe/upgrade-instructions.md b/docs/user-guide/install/pe/upgrade-instructions.md
index e2ed7459bb..95139c0dae 100644
--- a/docs/user-guide/install/pe/upgrade-instructions.md
+++ b/docs/user-guide/install/pe/upgrade-instructions.md
@@ -1220,6 +1220,8 @@ Package installer may ask you to merge your thingsboard configuration. It is pre
{% endcapture %}
{% include templates/info-banner.md content=difference %}
+* Configure Professional Edition license key as described [here](/docs/user-guide/install/pe/ubuntu/#step-3-obtain-and-configure-license-key).
+
Execute regular upgrade script:
```bash
@@ -1259,6 +1261,7 @@ net stop thingsboard
* Make a backup of previous ThingsBoard CE configuration located in \\conf (for ex. C:\thingsboard\conf).
* Run installation package **thingsboard-windows-setup-{{ site.release.pe_ver }}.exe**.
* Compare and merge your old ThingsBoard configuration files (from the backup you made in the first step) with new ones.
+* Configure Professional Edition license key as described [here](/docs/user-guide/install/pe/windows/#step-3-obtain-and-configure-license-key).
* Finally, run **upgrade.bat** script to upgrade ThingsBoard to the new version.
{% capture difference %}
diff --git a/docs/user-guide/ui/microsoft-teams-settings.md b/docs/user-guide/ui/microsoft-teams-settings.md
index dcd14dd6c2..5f500da641 100644
--- a/docs/user-guide/ui/microsoft-teams-settings.md
+++ b/docs/user-guide/ui/microsoft-teams-settings.md
@@ -3,19 +3,6 @@ layout: docwithnav
assignees:
- stitenko
title: Microsoft Teams Settings
-microsoft-teams-settings:
- 0:
- image: https://img.thingsboard.io/user-guide/ui/microsoft-teams/microsoft-teams-1-settings.png
- title: 'Sign in to Microsoft Teams and navigate to the "Teams" tab, then click on the three dots next to your channel name. In the drop-down menu click on the "Connectors" item;'
- 1:
- image: https://img.thingsboard.io/user-guide/ui/microsoft-teams/microsoft-teams-2-settings.png
- title: 'Find "Incoming Webhook" connector and click "Configure";'
- 2:
- image: https://img.thingsboard.io/user-guide/ui/microsoft-teams/microsoft-teams-3-settings.png
- title: 'Configure how ThingsBoard will appear when sending messages to your channel (choose a name and icon), and click "Create";'
- 3:
- image: https://img.thingsboard.io/user-guide/ui/microsoft-teams/microsoft-teams-4-settings.png
- title: 'Now, copy the webhook URL. We will use it when adding a notification recipients group in your ThingsBoard instance.'
---
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-created-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-created-preview.png
deleted file mode 100644
index 1ffcd4687f..0000000000
Binary files a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-created-preview.png and /dev/null differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-created.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-created.png
deleted file mode 100644
index 011e451fd9..0000000000
Binary files a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-created.png and /dev/null differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data-1-ce-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data-1-ce-preview.png
new file mode 100644
index 0000000000..a6e6b54e88
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data-1-ce-preview.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data-1-ce.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data-1-ce.png
new file mode 100644
index 0000000000..6dc9765208
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data-1-ce.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data-1-pe-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data-1-pe-preview.png
new file mode 100644
index 0000000000..021ba52fbc
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data-1-pe-preview.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data-1-pe.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data-1-pe.png
new file mode 100644
index 0000000000..ab22d85c20
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data-1-pe.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data-preview.png
deleted file mode 100644
index 6dd780afe4..0000000000
Binary files a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data-preview.png and /dev/null differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data.png
deleted file mode 100644
index 4a7cb3e2ae..0000000000
Binary files a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-data.png and /dev/null differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-profile-created-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-profile-created-preview.png
deleted file mode 100644
index d175298ac6..0000000000
Binary files a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-profile-created-preview.png and /dev/null differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-profile-created.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-profile-created.png
deleted file mode 100644
index 9d02d0c782..0000000000
Binary files a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/check-device-profile-created.png and /dev/null differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-create-credentials-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-create-credentials-preview.png
deleted file mode 100644
index 284a411322..0000000000
Binary files a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-create-credentials-preview.png and /dev/null differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-create-credentials.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-create-credentials.png
deleted file mode 100644
index ed6a271672..0000000000
Binary files a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-create-credentials.png and /dev/null differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-profile-name-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-profile-name-preview.png
deleted file mode 100644
index 3353bf1706..0000000000
Binary files a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-profile-name-preview.png and /dev/null differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-profile-name.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-profile-name.png
deleted file mode 100644
index 81cd914285..0000000000
Binary files a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-profile-name.png and /dev/null differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-with-transport-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-with-transport-preview.png
deleted file mode 100644
index d529a30268..0000000000
Binary files a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-with-transport-preview.png and /dev/null differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-with-transport.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-with-transport.png
deleted file mode 100644
index 786270b2bd..0000000000
Binary files a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/configure-device-with-transport.png and /dev/null differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-1-ce-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-1-ce-preview.png
new file mode 100644
index 0000000000..7a71301bac
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-1-ce-preview.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-1-ce.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-1-ce.png
new file mode 100644
index 0000000000..61d2713441
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-1-ce.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-1-pe-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-1-pe-preview.png
new file mode 100644
index 0000000000..92087a7020
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-1-pe-preview.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-1-pe.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-1-pe.png
new file mode 100644
index 0000000000..52be0d21d5
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-1-pe.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-2-ce-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-2-ce-preview.png
new file mode 100644
index 0000000000..86bf38b61d
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-2-ce-preview.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-2-ce.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-2-ce.png
new file mode 100644
index 0000000000..1d6a3bc90e
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-2-ce.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-2-pe-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-2-pe-preview.png
new file mode 100644
index 0000000000..3813251086
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-2-pe-preview.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-2-pe.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-2-pe.png
new file mode 100644
index 0000000000..319563d3e8
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-2-pe.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-3-ce-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-3-ce-preview.png
new file mode 100644
index 0000000000..557bc672a7
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-3-ce-preview.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-3-ce.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-3-ce.png
new file mode 100644
index 0000000000..5adb7befdf
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-3-ce.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-3-pe-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-3-pe-preview.png
new file mode 100644
index 0000000000..13ffce3f68
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-3-pe-preview.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-3-pe.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-3-pe.png
new file mode 100644
index 0000000000..cf45d569d4
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-3-pe.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-4-ce-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-4-ce-preview.png
new file mode 100644
index 0000000000..eac819dac5
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-4-ce-preview.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-4-ce.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-4-ce.png
new file mode 100644
index 0000000000..5f3d7b7d70
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-4-ce.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-4-pe-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-4-pe-preview.png
new file mode 100644
index 0000000000..b0730cc6e5
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-4-pe-preview.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-4-pe.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-4-pe.png
new file mode 100644
index 0000000000..6ba7bff221
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-4-pe.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-5-ce-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-5-ce-preview.png
new file mode 100644
index 0000000000..0fedccc38c
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-5-ce-preview.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-5-ce.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-5-ce.png
new file mode 100644
index 0000000000..980c80f2c1
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-5-ce.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-5-pe-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-5-pe-preview.png
new file mode 100644
index 0000000000..b995141e64
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-5-pe-preview.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-5-pe.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-5-pe.png
new file mode 100644
index 0000000000..a2df62a919
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-5-pe.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-preview.png
deleted file mode 100644
index d0783f17bc..0000000000
Binary files a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-preview.png and /dev/null differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-1-ce-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-1-ce-preview.png
new file mode 100644
index 0000000000..4fb5e4513d
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-1-ce-preview.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-1-ce.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-1-ce.png
new file mode 100644
index 0000000000..7e6828b9ae
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-1-ce.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-1-pe-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-1-pe-preview.png
new file mode 100644
index 0000000000..c1fffbee3c
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-1-pe-preview.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-1-pe.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-1-pe.png
new file mode 100644
index 0000000000..e15faa7df8
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-1-pe.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-2-ce-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-2-ce-preview.png
new file mode 100644
index 0000000000..a0b185665b
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-2-ce-preview.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-2-ce.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-2-ce.png
new file mode 100644
index 0000000000..4d38dac352
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-2-ce.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-2-pe-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-2-pe-preview.png
new file mode 100644
index 0000000000..e5816d3c77
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-2-pe-preview.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-2-pe.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-2-pe.png
new file mode 100644
index 0000000000..79cb6748e2
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-2-pe.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-3-ce-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-3-ce-preview.png
new file mode 100644
index 0000000000..795c4dbdec
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-3-ce-preview.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-3-ce.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-3-ce.png
new file mode 100644
index 0000000000..02156015b4
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-3-ce.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-3-pe-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-3-pe-preview.png
new file mode 100644
index 0000000000..6b7cc603df
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-3-pe-preview.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-3-pe.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-3-pe.png
new file mode 100644
index 0000000000..7c8d23951f
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-3-pe.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-4-ce-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-4-ce-preview.png
new file mode 100644
index 0000000000..80f6f7d17b
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-4-ce-preview.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-4-ce.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-4-ce.png
new file mode 100644
index 0000000000..4fef43abca
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-4-ce.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-4-pe-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-4-pe-preview.png
new file mode 100644
index 0000000000..9e1cde9dd4
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-4-pe-preview.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-4-pe.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-4-pe.png
new file mode 100644
index 0000000000..0fb96c7602
Binary files /dev/null and b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-4-pe.png differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-preview.png
deleted file mode 100644
index 34f4030ef9..0000000000
Binary files a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile-preview.png and /dev/null differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile.png
deleted file mode 100644
index 62bb5f481c..0000000000
Binary files a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device-profile.png and /dev/null differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device.png
deleted file mode 100644
index ba6fc136ec..0000000000
Binary files a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/create-device.png and /dev/null differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/device-profile-select-transport-preview.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/device-profile-select-transport-preview.png
deleted file mode 100644
index 87e45bfb12..0000000000
Binary files a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/device-profile-select-transport-preview.png and /dev/null differ
diff --git a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/device-profile-select-transport.png b/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/device-profile-select-transport.png
deleted file mode 100644
index f41fdf45ae..0000000000
Binary files a/images/devices-library/ready-to-go-devices/wireless-open-close-sensor/device-profile-select-transport.png and /dev/null differ
diff --git a/images/gateway/mqtt-connector/data-mapping-advanced-section-1-ce.png b/images/gateway/mqtt-connector/data-mapping-advanced-section-1-ce.png
old mode 100755
new mode 100644
index e5f73446eb..ab27d49de8
Binary files a/images/gateway/mqtt-connector/data-mapping-advanced-section-1-ce.png and b/images/gateway/mqtt-connector/data-mapping-advanced-section-1-ce.png differ
diff --git a/images/gateway/mqtt-created-device-1.png b/images/gateway/mqtt-created-device-1.png
old mode 100755
new mode 100644
index b14af7b2cb..1e652a0adf
Binary files a/images/gateway/mqtt-created-device-1.png and b/images/gateway/mqtt-created-device-1.png differ
diff --git a/images/gateway/mqtt-created-device-2.png b/images/gateway/mqtt-created-device-2.png
old mode 100755
new mode 100644
index 9582788a98..ead1b4cc0e
Binary files a/images/gateway/mqtt-created-device-2.png and b/images/gateway/mqtt-created-device-2.png differ