Changes for page ThingsBoard
Last modified by Dilisi S on 2025/04/23 19:23
Summary
-
Page properties (1 modified, 0 added, 0 removed)
-
Attachments (0 modified, 0 added, 1 removed)
Details
- Page properties
-
- Content
-
... ... @@ -22,10 +22,7 @@ 22 22 To complete this tutorial, you need to have the following: 23 23 24 24 * ThingsBoard cloud account 25 -* MQTT Broker (public or private) such as, 26 -** **[[HiveMQ Cloud>>https://www.hivemq.com]] - You can create a free account to try it or subscribe for a paid account. - We use HiveMQ Cloud as the MQTT broker to build example in this tutorial.** 27 -** [[emqx>>https://www.emqx.com/zh/mqtt/public-mqtt5-broker]] - The public MQTT server is only used for MOTT learning and testing, and should not be used in the production environment. 28 -** [[lns1.thingseye.io>>http://lns1.thingseye.io/]] - This is Dragino's MQTT broker, which requires a CA certificate to use. 25 +* HiveMQ Cloud account 29 29 30 30 == 2.1 ThingsBoard Cloud == 31 31 ... ... @@ -69,9 +69,7 @@ 69 69 70 70 == 2.2 HiveMQ Cloud == 71 71 72 -=== 2.2.1 HiveMQ Cloud === 73 73 74 - 75 75 Go to [[https:~~/~~/www.hivemq.com>>https://www.hivemq.com]] 76 76 77 77 Click on the **Start Free** button. ... ... @@ -146,24 +146,6 @@ 146 146 You will need these MQTT connection parameters when configuring the MQTT integration in the '**Add Integration**' section. 147 147 148 148 149 -=== 2.2.2 emqx === 150 - 151 - 152 -The [[emqx>>https://www.emqx.com/zh/mqtt/public-mqtt5-broker]] public MQTT server is only used for MOTT learning and testing, and should not be used in the production environment. 153 - 154 - 155 -[[image:emqx.png||height="420" width="500"]] 156 - 157 - 158 -=== 2.2.3 Ins1.thingseye.io === 159 - 160 -[[lns1.thingseye.io>>http://lns1.thingseye.io/]] is the Dragino's MQTT broker, which requires a CA certificate file, Certificate file, and the Private key file to use. 161 - 162 -If customers need to use this MQTT connection with ThingsBoard, they need to contact the TE team to obtain three license files. 163 - 164 -[[image:ins1.png||height="310" width="500"]] 165 - 166 - 167 167 = 3. Data Converters = 168 168 169 169 ... ... @@ -176,6 +176,7 @@ 176 176 In the left navigation, click **Integrations center**, and then click **Data converters**. 177 177 178 178 156 + 179 179 [[image:data-converters-list-empty.png]] 180 180 181 181 ... ... @@ -188,130 +188,34 @@ 188 188 189 189 The **Add data converter** window will appear. Name it ‘**MQTT Uplink Converter NB/CB**’ and select the Type as **Uplink**. 190 190 191 -Click on the ** JavaScript**button.169 +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. 192 192 193 -Delete the default decoder function in the code editor. Now copy and paste the following decoder function written in **JavaScript** in to the **code editor**. This decoder function is compatible for both NB and CB series devices. 194 - 195 - 196 196 {{code language="JavaScript"}} 197 -//Version: 0.1 172 +/** Decoder **/ 173 + 198 198 // decode payload to string 199 199 var payloadStr = decodeToString(payload); 176 +var data = JSON.parse(payloadStr); 200 200 178 +var deviceName = metadata.topic.split("/")[3]; 201 201 // decode payload to JSON 202 -var objdata = {}; 203 -var obj1 = {}; 204 -var data = decodeToJson(payload); 205 -var deviceName = data.IMEI; 206 -delete data.IMEI; 207 -var modelname = "Dragino " + data.Model; 208 -//var mod = data.mod 209 -delete data.Model; 210 -//delete data.mod 211 -var timestamp = new Date().getTime(); 180 +var deviceType = 'sensor'; 212 212 213 -for (var key in data) { 214 - 215 - if (Number(key)) { 216 - obj1[key] = data[key]; 217 - obj1[key][obj1[key].length - 1] = Number(new Date( 218 - obj1[key][obj1[key].length - 1])); 219 - 220 - } 221 -//Alec submitted25/02/25 222 -//turn old key into new 223 - else if (key === "Reading") { 224 - objdata["reading"] = data[key]; 225 - } else if (key === "work mode") { 226 - objdata["work_mode"] = data[key]; 227 - } else if (key === "hum") { 228 - objdata["humidity"] = data[key]; 229 - }else if (key === "hum2") { 230 - objdata["humidity2"] = data[key]; 231 - } else if (key === "hum3") { 232 - objdata["humidity3"] = data[key]; 233 - } else if (key === "tem") { 234 - objdata["temperature"] = data[key]; 235 - } else if (key === "tem2") { 236 - objdata["temperature2"] = data[key]; 237 - } else if (key === "tem3") { 238 - objdata["temperature3"] = data[key]; 239 - } else if (key === "DS18B20_Temp") { 240 - objdata["temperature_pro"] = data[key]; 241 - } else if (key === "ds18b20_temperature") { 242 - objdata["temperature_pro"] = data[key]; 243 - } else if (key === "DS18B20_temperature_pro") { 244 - objdata["temperature_pro"] = data[key]; 245 - } else if (key === "tdc send flag") { 246 - objdata["tdc_send_flag"] = data[key]; 247 - } else if (key === "trigger mode") { 248 - objdata["trigger_mode"] = data[key]; 249 - } else if (key === "soil dielectric constant") { 250 - objdata["soil_dielectric_constant"] = data[key]; 251 - } else if (key === "door open num") { 252 - objdata["door_open_num"] = data[key]; 253 - } else if (key === "door duration") { 254 - objdata["door_duration"] = data[key]; 255 - } else if (key === "count time") { 256 - objdata["count_time"] = data[key]; 257 - } else if (key === "last open time2") { 258 - objdata["last_open_time2"] = data[key]; 259 - } else if (key === "last open time3") { 260 - objdata["last_open_time3"] = data[key]; 261 - } 262 -//Alec submitted25/02/25 263 - else { 264 - objdata[key] = data[key] 265 - } 266 -} 267 -var listdata = [{ 268 - "ts": timestamp, 269 - "values": objdata 270 -}] 271 -for (var key1 in obj1) { 272 - if (modelname == "Dragino RS485-NB") { 273 - listdata.push({ 274 - "ts": obj1[key1][obj1[key1].length - 1], 275 - "values": { 276 - "Payload": obj1[key1][0], 277 - } 278 - }) 279 - } else { 280 - listdata.push({ 281 - "ts": obj1[key1][obj1[key1].length - 1], 282 - "values": { 283 - "values": obj1[key1] 284 - }, 285 - }) 286 - } 287 -} 182 +// Result object with device attributes/telemetry data 288 288 var result = { 289 - 290 290 deviceName: deviceName, 291 - deviceType: modelname,185 + deviceType: deviceType, 292 292 attributes: { 293 - model: modelname, 294 - //customerName: "NB-CB", 295 - //groupName: "NB-CB", 296 - //integrationName: metadata['integrationName'] 297 - 187 + integrationName: metadata['integrationName'], 298 298 }, 299 - telemetry: listdata 300 -} 189 + telemetry: { 190 + temperature: data.temperature, 191 + humidity: data.humidity, 192 + } 193 +}; 301 301 302 -function decodeToString(payload) { 303 - return String.fromCharCode.apply(String, payload); 304 -} 195 +/** Helper functions 'decodeToString' and 'decodeToJson' are already built-in **/ 305 305 306 -function decodeToJson(payload) { 307 - // covert payload to string. 308 - var str = decodeToString(payload); 309 - 310 - // parse string to JSON 311 - var data = JSON.parse(str); 312 - return data; 313 -} 314 - 315 315 return result; 316 316 {{/code}} 317 317 ... ... @@ -319,16 +319,16 @@ 319 319 Click on the **Add** button. 320 320 321 321 322 -[[image:mqtt-uplink.png||width="500"]] 323 323 205 +[[image:add-uplink-data-converter.png||height="529" width="500"]] 324 324 325 325 326 326 You should see that the newly added **MQTT Uplink converter **NB/CB is listed on the **Data Converters** page. 327 327 328 - 329 329 [[image:data-converter-list-showing-uplink-dc.png]] 330 330 331 331 213 + 332 332 == 3.2 Downlink == 333 333 334 334 ... ... @@ -386,6 +386,7 @@ 386 386 Click on the **Add** button. 387 387 388 388 271 + 389 389 [[image:add-downlink-data-converter.png||height="529" width="500"]] 390 390 391 391 ... ... @@ -395,6 +395,7 @@ 395 395 [[image:data-converters-list.png]] 396 396 397 397 281 + 398 398 = 4. Add Integration = 399 399 400 400 ... ... @@ -422,6 +422,7 @@ 422 422 Click **Next** button. 423 423 424 424 309 + 425 425 [[image:add-integration-basic-settings.png||height="511" width="500"]] 426 426 427 427 ... ... @@ -433,6 +433,7 @@ 433 433 Click **Next** button. 434 434 435 435 321 + 436 436 [[image:add-integration-uplink-data-converter.png||height="511" width="500"]] 437 437 438 438 ... ... @@ -444,18 +444,19 @@ 444 444 Click **Next** button. 445 445 446 446 333 + 447 447 [[image:add-integration-downlink-data-converter.png||height="511" width="500"]] 448 448 449 449 450 450 **Connection:** 451 451 452 -* **Host**: Cluster URL (Eg. 011731f7 xxxxxxxxxxxfbbedfc63f4.s1.eu.hivemq.cloud)339 +* **Host**: Cluster URL (Eg. 011731f7928541588a6cdfbbedfc63f4.s1.eu.hivemq.cloud) 453 453 * **Port**: 8883 454 454 * **Credentials**: Basic 455 455 * **Enable SSL**: YES 456 456 * **Username**: Username (from your HiveMQ Cloud Cluster with your credentials) 457 457 * **Password:** Password (from your HiveMQ Cloud Cluster with your credentials) 458 -* **Topic: v1/devices/+/telemetry**(the + replaces any 'device name'willcreateadevice in the Entities -> Devices)345 +* **Topic:** tb/mqtt-integration-tutorial/sensors/+/telemetry (the + replaces any 'device name' and creates devices in the Entities -> Devices) 459 459 * **QoS:** 0-At most once 460 460 461 461 [[image:add-integration-connection.png||height="511" width="500"]]
- mqtt-uplink.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.pradeeka - Size
-
... ... @@ -1,1 +1,0 @@ 1 -175.1 KB - Content