Changes for page ThingsBoard

Last modified by Dilisi S on 2025/04/23 19:23

From version 64.1
edited by Dilisi S
on 2025/03/07 00:17
Change comment: Mar 6 edits - part 2
To version 118.1
edited by Dilisi S
on 2025/03/08 20:20
Change comment: Uploaded new attachment "hivemq-8.png", version {1}

Summary

Details

Page properties
Content
... ... @@ -6,280 +6,204 @@
6 6  Draft Document
7 7  {{/warning}}
8 8  
9 -= Introduction =
10 10  
10 +
11 +
12 += 1. Introduction =
13 +
14 +
11 11  This document guides you on integrating Dragino **-NB** and **-CB** series devices data with ThingsBoard. For this guide, we use ThingsBoard Cloud, which is one of the ThingsBoard versions that allows you to try it for free.
12 12  
13 13  The **NB series** devices end with the suffix **-NB**, and the **CB series** devices end with the suffix **-CB**. For example, **S31B-NB** is an **NB device**, and **S31-CB** is a **CB device**.
14 14  
15 15  
16 -= Add New Device =
20 += 2. Prerequisites =
17 17  
18 -First, we will add a device to simulate data using MQTT. This device does not represent a real physical device but serves as a common virtual device for all Dragino NB/CB devices.
22 +To complete this tutorial, you need to have the following:
19 19  
20 -In the left navigation, click **Entities** and then click **Devices**.
24 +* ThingsBoard cloud account -
25 +* HiveMQ Cloud account
21 21  
22 22  
23 -[[image:device-list-empty.png]]
28 +== 2.1 HiveMQ Cloud ==
24 24  
25 25  
26 -On the **Devices **page, click on the ‘**+**’ button, and then click on the **Add new device **from the dropdown menu.
31 +Go to [[https:~~/~~/www.hivemq.com>>https://www.hivemq.com]]
27 27  
33 +Click on the **Start Free** button.
28 28  
29 -[[image:ThingsBoard-add-new-device.png||height="279" width="500"]]
35 +[[image:hivwmq-1.png]]
30 30  
31 31  
32 -The **Add new device** window appears. Name the device, for example '**Virtual NB/CB device**'.
38 +Click on the **Sign Up FREE Now** button in the **HIVEMQ CLOUD** section.
33 33  
34 -Click on the **Next: Credentials** button.
40 +[[image:hivemq-2.png]]
35 35  
36 36  
37 -[[image:new-device-device-details.png||height="529" width="500"]]
43 +Click on the **Sign Up** button.
38 38  
45 +You can sign up with HiveMQ using your **GitHub**, **Google**, or **LinkedIn** account.
39 39  
40 -Click the **Access token** button if it is not selected by default.
47 +If not, provide your **email address** and a **password** to create an account by clicking on the **Sign Up** button.
41 41  
42 -Copy the **Access token** to a text editor, as you will need it in the section **'Sending data from an MQTT client'**.
43 43  
44 -Click on the **Add** button.
50 +[[image:hivemq-3.png]]
45 45  
46 -[[image:new-device-access-token.png||height="528" width="500"]]
47 47  
53 +You will receive an email to verify your email address. Click on the **Confirm my account** button.
48 48  
49 -Click on the **MQTT** button.
50 50  
51 -Then, select the operating system you are going to use with the **Mosquitto MQTT Broker**. This example shows sending a command from a computer running **MacOS**. First, install the necessary client tools on your computer.
56 +[[image:hivemq-4.jpg||height="889" width="400"]]
52 52  
53 -Copy the MQTT pub command in the '**Execute the following command**' section.
54 54  
55 -{{code language="none"}}
56 -mosquitto_pub -d -q 1 -h mqtt.eu.thingsboard.cloud -p 1883 -t v1/devices/me/telemetry -u "24vk3w9h7sqdld1me5eh" -m "{temperature:25}"
57 -{{/code}}
59 +You will be redirected to a page asking you to complete your profile. Once done, click the **Continue** button.
58 58  
59 -Note that the **State** is still shown as **'Inactive'** in the **Latest telemetry** section.
60 60  
61 -[[image:new-device-check-connectivity.png||height="522" width="500"]]
62 +[[image:hivemq-5.png||height="655" width="700"]]
62 62  
63 63  
64 -On the terminal, enter the command you copied. This command sends the MQTT payload **{temperature:25}** as telemetry data from a virtual device named **'me'**. Of course, you can replace **'me'** with a device name or use the wildcard character **'+'** to match any device name.
65 +Select the CloudMQ Cloud plan you need. For testing purposes, select the **Serverless FREE** plan by clicking on the **Create Serverless Cluster** button.
65 65  
66 66  
67 -[[image:mqtt-command-1.png||height="228" width="700"]]
68 +[[image:hivemq-6.png]]
68 68  
69 69  
70 -If the command is successful, you can see the telemetry data you sent under the **Latest telemetry** section. Note that the **State** is now **'Active'** in the **Latest telemetry** section.
71 +You will be navigated to the **Your Clusters** page. Click on the **Manage Cluster** button.
71 71  
73 +[[image:hivemq-7.png]]
72 72  
73 -[[image:new-device-telemetry-test.png||height="520" width="500"]]
74 74  
76 +In your cluster page, you can find some useful parameters you need to create a MQTT connection.
75 75  
76 -Send the same command again, only changing the **temperature** value, to see how the **Latest telemetry** section updates its data.
78 +**URL**: This is the host name. Click on the copy button to copy it.
77 77  
78 -Once you are done experimenting with this, close the window by clicking the **Close** button.
80 +**Port**: 8883
79 79  
80 80  
81 -[[image:mqtt-command-2.png||height="227" width="700"]]
83 +Click on the **Getting Started** tab to setup the username and the password.
82 82  
83 83  
86 +[[image:hivemq-8.png]]
84 84  
85 -[[image:virtual-device-active.png]]
86 86  
87 87  
88 -= Data Converters =
90 += 2. Data Converters =
89 89  
92 +
90 90  In **ThingsBoard**, **Data Converters** are components used to transform incoming or outgoing data between different formats, typically to convert raw telemetry data from devices into a structured format that ThingsBoard can understand, or vice versa.
91 91  
92 92  
93 -== Uplink ==
96 +== 2.1 Uplink ==
94 94  
98 +
95 95  In the left navigation, click **Integrations center**, and then click **Data converters**.
96 96  
97 97  
98 -[[image:data-converter-list-page.png]]
99 99  
103 +[[image:data-converters-list-empty.png]]
100 100  
101 -On the **Data converters** page, click on the ‘+’ button, and then click on the **Create new converter** from the dropdown menu.
102 102  
106 +On the **Data converters** page, click on the ‘**+**’ button, and then click on the **Create new converter** from the dropdown menu.
103 103  
104 -[[image:ThingsBoard-new-data-converter.png||height="282" width="500"]]
105 105  
106 106  
110 +[[image:create-new-converter-menu.png||height="259" width="500"]]
111 +
112 +
107 107  The **Add data converter** window will appear. Name it ‘**MQTT Uplink Converter NB/CB**’ and select the Type as **Uplink**.
108 108  
109 -Click on the **JavaScript** button. Now copy and paste the following JavaScript to the **Decoder function** section. This decoder function is valid for both NB and CB series devices.
115 +Click on the **TBEL** button if not selected it by default. Delete the existing decoder function in the code editor. Now copy and paste the following decoder function written in **TBEL (ThingsBoard Expression Language)** in to the **code editor**. This decoder function is compatible for both NB and CB series devices.
110 110  
111 111  {{code language="JavaScript"}}
112 -//Version: 0.1
118 +/** Decoder **/
119 +
113 113  // decode payload to string
114 114  var payloadStr = decodeToString(payload);
122 +var data = JSON.parse(payloadStr);
115 115  
124 +var deviceName = metadata.topic.split("/")[3];
116 116  // decode payload to JSON
117 -var objdata = {};
118 -var obj1 = {};
119 -var data = decodeToJson(payload);
120 -var deviceName = data.IMEI;
121 -delete data.IMEI;
122 -var modelname = "Dragino " + data.Model;
123 -//var mod = data.mod
124 -delete data.Model;
125 -//delete data.mod
126 -var timestamp = new Date().getTime();
126 +var deviceType = 'sensor';
127 127  
128 -for (var key in data) {
129 -
130 - if (Number(key)) {
131 - obj1[key] = data[key];
132 - obj1[key][obj1[key].length - 1] = Number(new Date(
133 - obj1[key][obj1[key].length - 1]));
134 -
135 - }
136 -//Alec submitted25/02/25
137 -//turn old key into new
138 - else if (key === "Reading") {
139 - objdata["reading"] = data[key];
140 - } else if (key === "work mode") {
141 - objdata["work_mode"] = data[key];
142 - } else if (key === "hum") {
143 - objdata["humidity"] = data[key];
144 - }else if (key === "hum2") {
145 - objdata["humidity2"] = data[key];
146 - } else if (key === "hum3") {
147 - objdata["humidity3"] = data[key];
148 - } else if (key === "tem") {
149 - objdata["temperature"] = data[key];
150 - } else if (key === "tem2") {
151 - objdata["temperature2"] = data[key];
152 - } else if (key === "tem3") {
153 - objdata["temperature3"] = data[key];
154 - } else if (key === "DS18B20_Temp") {
155 - objdata["temperature_pro"] = data[key];
156 - } else if (key === "ds18b20_temperature") {
157 - objdata["temperature_pro"] = data[key];
158 - } else if (key === "DS18B20_temperature_pro") {
159 - objdata["temperature_pro"] = data[key];
160 - } else if (key === "tdc send flag") {
161 - objdata["tdc_send_flag"] = data[key];
162 - } else if (key === "trigger mode") {
163 - objdata["trigger_mode"] = data[key];
164 - } else if (key === "soil dielectric constant") {
165 - objdata["soil_dielectric_constant"] = data[key];
166 - } else if (key === "door open num") {
167 - objdata["door_open_num"] = data[key];
168 - } else if (key === "door duration") {
169 - objdata["door_duration"] = data[key];
170 - } else if (key === "count time") {
171 - objdata["count_time"] = data[key];
172 - } else if (key === "last open time2") {
173 - objdata["last_open_time2"] = data[key];
174 - } else if (key === "last open time3") {
175 - objdata["last_open_time3"] = data[key];
176 - }
177 -//Alec submitted25/02/25
178 - else {
179 - objdata[key] = data[key]
180 - }
181 -}
182 -var listdata = [{
183 - "ts": timestamp,
184 - "values": objdata
185 -}]
186 -for (var key1 in obj1) {
187 - if (modelname == "Dragino RS485-NB") {
188 - listdata.push({
189 - "ts": obj1[key1][obj1[key1].length - 1],
190 - "values": {
191 - "Payload": obj1[key1][0],
192 - }
193 - })
194 - } else {
195 - listdata.push({
196 - "ts": obj1[key1][obj1[key1].length - 1],
197 - "values": {
198 - "values": obj1[key1]
199 - },
200 - })
201 - }
202 -}
128 +// Result object with device attributes/telemetry data
203 203  var result = {
204 -
205 205   deviceName: deviceName,
206 - deviceType: modelname,
131 + deviceType: deviceType,
207 207   attributes: {
208 - model: modelname,
209 - //customerName: "NB-CB",
210 - //groupName: "NB-CB",
211 - //integrationName: metadata['integrationName']
212 -
133 + integrationName: metadata['integrationName'],
213 213   },
214 - telemetry: listdata
215 -}
135 + telemetry: {
136 + temperature: data.temperature,
137 + humidity: data.humidity,
138 + }
139 +};
216 216  
217 -function decodeToString(payload) {
218 - return String.fromCharCode.apply(String, payload);
219 -}
141 +/** Helper functions 'decodeToString' and 'decodeToJson' are already built-in **/
220 220  
221 -function decodeToJson(payload) {
222 - // covert payload to string.
223 - var str = decodeToString(payload);
224 -
225 - // parse string to JSON
226 - var data = JSON.parse(str);
227 - return data;
228 -}
229 -
230 230  return result;
231 -
232 232  {{/code}}
233 233  
146 +
234 234  Click on the **Add** button.
235 235  
236 236  
237 -[[image:uplink-data-converter.png||height="529" width="500"]]
238 238  
151 +[[image:add-uplink-data-converter.png||height="529" width="500"]]
239 239  
240 240  
241 -You should see that the newly added **uplink data converter** is listed on the **Data Converters** page.
154 +You should see that the newly added **MQTT Uplink converter **NB/CB is listed on the **Data Converters** page.
242 242  
243 -
244 244  [[image:data-converter-list-showing-uplink-dc.png]]
245 245  
246 246  
247 -== Downlink ==
248 248  
160 +== 3.2 Downlink ==
161 +
162 +
249 249  On the **Data converters** page, click on the ‘**+**’ button, and then click on the **Create new converter** from the dropdown menu.
250 250  
251 251  
252 -[[image:ThingsBoard-new-data-converter.png||height="282" width="500"]]
166 +[[image:create-new-converter-menu.png||width="500"]]
253 253  
254 254  
169 +
255 255  The **Add data converter** window will appear. Name it ‘**MQTT Downlink Converter NB/CB**’ and select the Type as **Downlink**.
256 256  
257 -Click on the **JavaScript** button. Now copy and paste the following JavaScript to the **Encoder function **section. This encoder function is valid for both NB and CB series devices.
172 +Click on the **TBEL** button if not selected it by default. Now copy and paste the following encoder function written in **TBEL (ThingsBoard Expression Language)** in to the **code editor**. This encoder function is compatible for both NB and CB series devices.
258 258  
259 259  
260 260  {{code language="JavaScript"}}
261 -function hexToBase64(hexString) {
262 - // 将16进制字符串两个字符转换为一个字节
263 - var bytes = hexString.match(/.{2}/g);
264 - // 对每个字节进行解析,并转换为对应的字符
265 - var binaryString = bytes.map(function(byte) {
266 - return String.fromCharCode(parseInt(byte, 16));
267 - }).join('');
268 -
269 - // 使用btoa进行base64编码
270 - return btoa(binaryString);
271 -}
176 +// Encode downlink data from incoming Rule Engine message
272 272  
178 +// msg - JSON message payload downlink message json
179 +// msgType - type of message, for ex. 'ATTRIBUTES_UPDATED', 'POST_TELEMETRY_REQUEST', etc.
180 +// metadata - list of key-value pairs with additional data about the message
181 +// integrationMetadata - list of key-value pairs with additional data defined in Integration executing this converter
182 +
183 +/** Encoder **/
184 +
185 +var data = {};
186 +
187 +// Process data from incoming message and metadata
188 +
189 +data.tempFreq = msg.temperatureUploadFrequency;
190 +data.humFreq = msg.humidityUploadFrequency;
191 +
192 +data.devSerialNumber = metadata['ss_serialNumber'];
193 +
273 273  // Result object with encoded downlink payload
274 274  var result = {
196 +
275 275   // downlink data content type: JSON, TEXT or BINARY (base64 format)
276 - contentType: "BINARY",
198 + contentType: "JSON",
277 277  
278 278   // downlink data
279 - data:hexToBase64(metadata.shared_value)
201 + data: JSON.stringify(data),
280 280  
281 281   // Optional metadata object presented in key/value format
282 - //metadata: {}
204 + metadata: {
205 + topic: metadata['deviceType']+'/'+metadata['deviceName']+'/upload'
206 + }
283 283  
284 284  };
285 285  
... ... @@ -290,26 +290,29 @@
290 290  Click on the **Add** button.
291 291  
292 292  
293 -[[image:downlink-data-converter.png||height="530" width="500"]]
294 294  
218 +[[image:add-downlink-data-converter.png||height="529" width="500"]]
295 295  
296 296  
297 -You should see that the newly added **downlink data converter** is listed on the **Data Converters** page.
221 +You should see that the newly added **MQTT Downlink** Converter NB/CB is listed on the **Data Converters** page.
298 298  
299 299  
300 -[[image:data-converter-list.png]]
224 +[[image:data-converters-list.png]]
301 301  
302 302  
303 -= Add Integration =
304 304  
228 += 3. Add Integration =
229 +
230 +
305 305  In the left navigation, click **Integrations center**, and then click **Integrations**.
306 306  
307 -On the **Integrations** page, click on the '**+**' button.
308 308  
234 +[[image:integrations-list-empty.png]]
309 309  
310 -[[image:data-converter-list-page.png]]
311 311  
237 +On the **Integrations** page, click on the '**+**' button.
312 312  
239 +
313 313  The **Add integration** window appears.
314 314  
315 315  In the **Add integration** window, configure the following settings:
... ... @@ -319,14 +319,16 @@
319 319  
320 320  * **Integration type**: MQTT
321 321  * **Name**: MQTT integration NB/CB
249 +* **Enable integration**: YES
250 +* **Allows create devices or assets**: YES
322 322  
323 323  Click **Next** button.
324 324  
325 325  
255 +
326 326  [[image:add-integration-basic-settings.png||height="511" width="500"]]
327 327  
328 328  
329 -
330 330  **Uplink data converter:**
331 331  
332 332  * Click on the **Select existing** button.
... ... @@ -335,8 +335,8 @@
335 335  Click **Next** button.
336 336  
337 337  
338 -[[image:add-integration-uplink-data-converter.png||width="500"]]
339 339  
268 +[[image:add-integration-uplink-data-converter.png||height="511" width="500"]]
340 340  
341 341  
342 342  **Downlink data converter:**
... ... @@ -347,33 +347,45 @@
347 347  Click **Next** button.
348 348  
349 349  
350 -[[image:add-integration-downlink-data-converter.png||height="510" width="500"]]
351 351  
280 +[[image:add-integration-downlink-data-converter.png||height="511" width="500"]]
352 352  
353 353  
354 354  **Connection:**
355 355  
356 -* **Host**: mqtt.eu.thingsboard.cloud (This is the host name you copied from the device - See section xxxxx for more information)
357 -* **Port**: 1883 (This is the port number you copied from the device - See section xxxxx for more information)
285 +* **Host**: Cluster URL (Eg. 011731f7928541588a6cdfbbedfc63f4.s1.eu.hivemq.cloud)
286 +* **Port**: 8883
358 358  * **Credentials**: Basic
359 -* **Username**: Access token (This is the access token you copied from the device)
360 -* **Password** - Leave it as blank
361 -* **Topic** - v1/devices/+/telemetry (sightly modify the topic 'v1/devices/me/telemetry' you copied from the device to enable receiving data from any 'device name')
362 -* **QoS** - 0-At most once
288 +* **Enable SSL**: YES
289 +* **Username**: Username (from your HiveMQ Cloud Cluster with your credentials)
290 +* **Password:** Password (from your HiveMQ Cloud Cluster with your credentials)
291 +* **Topic:** tb/mqtt-integration-tutorial/sensors/+/telemetry (the + replaces any 'device name' and creates devices in the Entities -> Devices)
292 +* **QoS:** 0-At most once
363 363  
294 +[[image:add-integration-connection.png||height="511" width="500"]]
295 +
296 +
297 +Click on the **Advanced settings** button.
298 +
299 +* **Clean session:** NO
300 +* **Retained**: NO
301 +
302 +[[image:add-integration-connection-advanced-settings.png||height="510" width="500"]]
303 +
304 +
364 364  Click on the **Check connection** button to verify the MQTT connection using the provided parameters.
365 365  
366 366  
367 -[[image:add-integration-connection.png||width="500"]]
308 +[[image:check-connection.png||height="83" width="300"]]
368 368  
369 369  
370 -If the connection is successful, you will see the **Connected** message.
311 +If the connection is successful, you will see the **Connected** message. If not, check your connection parameters again.
371 371  
372 -Click on the **Add** button.
373 373  
314 +[[image:connection-success.png||height="511" width="500"]]
374 374  
375 -[[image:add-connection-success.png||height="511" width="500"]]
376 376  
317 +Click on the **Add** button.
377 377  
378 378  You should see that the newly added integration is listed on the **Integrations** page.
379 379  
... ... @@ -381,14 +381,14 @@
381 381  
382 382  
383 383  
384 -[[image:integrations-list-added-pending.png]]
325 +[[image:new-integration-pending.png]]
385 385  
386 386  
387 -= Verifying the receipt of data from the device =
328 += 5. Verifying the receipt of data from the device =
388 388  
330 +
389 389  On the terminal, issue the following MQTT command which simulates the device S31B-NB.
390 390  
391 -
392 392  {{code language="none"}}
393 393  mosquitto_pub -d -q 1 -h mqtt.eu.thingsboard.cloud -p 1883 -t v1/devices/S31B-NB/telemetry -u "24vk3w9h7sqdld1me5eh" -m "{temperature:20}"
394 394  {{/code}}
ThingsBoard-add-data-converter.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.pradeeka
Size
... ... @@ -1,1 +1,0 @@
1 -128.6 KB
Content
ThingsBoard-add-new-device.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.pradeeka
Size
... ... @@ -1,1 +1,0 @@
1 -89.7 KB
Content
ThingsBoard-new-data-converter.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.pradeeka
Size
... ... @@ -1,1 +1,0 @@
1 -100.3 KB
Content
add-connection-success.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.pradeeka
Size
... ... @@ -1,1 +1,0 @@
1 -202.8 KB
Content
data-converter-list-page.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.pradeeka
Size
... ... @@ -1,1 +1,0 @@
1 -190.8 KB
Content
data-converter-list.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.pradeeka
Size
... ... @@ -1,1 +1,0 @@
1 -202.8 KB
Content
device-list-empty.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.pradeeka
Size
... ... @@ -1,1 +1,0 @@
1 -202.8 KB
Content
downlink-data-converter.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.pradeeka
Size
... ... @@ -1,1 +1,0 @@
1 -207.8 KB
Content
integrations-list-added-pending.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.pradeeka
Size
... ... @@ -1,1 +1,0 @@
1 -202.8 KB
Content
mqtt-command-1.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.pradeeka
Size
... ... @@ -1,1 +1,0 @@
1 -202.8 KB
Content
mqtt-command-2.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.pradeeka
Size
... ... @@ -1,1 +1,0 @@
1 -202.8 KB
Content
new-device-access-token.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.pradeeka
Size
... ... @@ -1,1 +1,0 @@
1 -202.8 KB
Content
new-device-check-connectivity.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.pradeeka
Size
... ... @@ -1,1 +1,0 @@
1 -202.8 KB
Content
new-device-device-details.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.pradeeka
Size
... ... @@ -1,1 +1,0 @@
1 -88.4 KB
Content
new-device-telemetry-test.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.pradeeka
Size
... ... @@ -1,1 +1,0 @@
1 -202.8 KB
Content
uplink-data-converter.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.pradeeka
Size
... ... @@ -1,1 +1,0 @@
1 -128.6 KB
Content
virtual-device-active.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.pradeeka
Size
... ... @@ -1,1 +1,0 @@
1 -202.8 KB
Content
add-downlink-data-converter.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +175.2 KB
Content
add-integration-connection-advanced-settings.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +155.2 KB
Content
add-uplink-data-converter.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +174.1 KB
Content
check-connection.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +14.7 KB
Content
connection-success.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +90.0 KB
Content
create-new-converter-menu.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +31.5 KB
Content
data-converters-list-empty.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +260.7 KB
Content
data-converters-list.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +212.2 KB
Content
hivemq-2.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +300.7 KB
Content
hivemq-3.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +535.2 KB
Content
hivemq-4.jpg
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +309.8 KB
Content
hivemq-5.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +115.0 KB
Content
hivemq-6.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +321.0 KB
Content
hivemq-7.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +203.5 KB
Content
hivemq-8.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +268.7 KB
Content
hivwmq-1.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +380.3 KB
Content
integrations-list-empty.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +264.5 KB
Content
new-integration-pending.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.pradeeka
Size
... ... @@ -1,0 +1,1 @@
1 +199.7 KB
Content