Wiki source code of Chirpstack is integrated into the Thingseye step via MQTT
Last modified by Hera Guo on 2024/11/26 12:12
Hide last authors
| author | version | line-number | content |
|---|---|---|---|
| |
1.1 | 1 | **Table of Contents:** |
| 2 | |||
| 3 | {{toc/}} | ||
| 4 | |||
| |
2.1 | 5 | = **How to connect chirpstack to Thingseye by way of MQTT** = |
| |
1.1 | 6 | |
| 7 | * **How to connect chirpstack to Thingseye by way of MQTT? The following tutorial will show you** | ||
| 8 | |||
| |
2.1 | 9 | == **Step 1: Thingseye adds MQTT integration** == |
| |
1.1 | 10 | |
| 11 | Go to the Integrations page in the Integrations center section. Click the plus button to start adding a new integration. Select the type "MQTT" integration and click "Next"; | ||
| 12 | |||
| |
2.1 | 13 | [[image:图片1.png||height="655" width="1320"]] |
| |
1.1 | 14 | |
| 15 | |||
| |
2.1 | 16 | == **Step 2. Add an uplink and downlink data converter** == |
| |
1.1 | 17 | |
| 18 | In the function decoder field, specify the script to parse and transform the data. | ||
| 19 | |||
| |
2.1 | 20 | [[image:图片2.png||height="653" width="1315"]] |
| |
1.1 | 21 | |
| 22 | * **Uplink——JavaScript:** | ||
| 23 | |||
| 24 | var data = decodeToJson(payload); | ||
| 25 | |||
| 26 | var deviceName = data.deviceInfo.deviceName; | ||
| 27 | |||
| 28 | var deviceType = data.applicationName; | ||
| 29 | |||
| 30 | var devEui = data.deviceInfo.devEui | ||
| 31 | |||
| 32 | var label = data.deviceInfo.devEui | ||
| 33 | |||
| 34 | var model = {}; | ||
| 35 | |||
| 36 | var data2 = data.object; | ||
| 37 | |||
| 38 | var flg = data.fPort | ||
| 39 | |||
| 40 | for (var key in data2) { | ||
| 41 | |||
| 42 | ~/~/ 将属性名存入新对象中 | ||
| 43 | |||
| 44 | model[key] = data2[key]; | ||
| 45 | |||
| 46 | } | ||
| 47 | |||
| 48 | ~/~/var obj = {"devid":deviceName} | ||
| 49 | |||
| 50 | |||
| 51 | var result = { | ||
| 52 | |||
| 53 | deviceName: deviceName, | ||
| 54 | |||
| 55 | deviceType: deviceType, | ||
| 56 | |||
| 57 | telemetry: model, | ||
| 58 | |||
| 59 | groupName: "Case Study", | ||
| 60 | |||
| 61 | ~/~/label:label, | ||
| 62 | |||
| 63 | attributes:{"devEui":devEui, | ||
| 64 | |||
| 65 | ~/~/"timevalue":"test", | ||
| 66 | |||
| 67 | "inactivityTimeout":1260000 | ||
| 68 | |||
| 69 | ~/~/ "High_humidity_alarm":"not set", | ||
| 70 | |||
| 71 | ~/~/ "High_temperature_alarm":"not set", | ||
| 72 | |||
| 73 | ~/~/ "Low_humidity_alarm":"not set", | ||
| 74 | |||
| 75 | ~/~/ "Low_temperature_alarm":"not set", | ||
| 76 | |||
| 77 | ~/~/ "Low_voltage_alarm":"not set" | ||
| 78 | |||
| 79 | ~/~/"customerName": "Civionic Engineering & Consulting (2014) Inc." | ||
| 80 | |||
| 81 | } | ||
| 82 | |||
| 83 | }; | ||
| 84 | |||
| 85 | function decodeToString(payload) { | ||
| 86 | |||
| 87 | return String.fromCharCode.apply(String, payload); | ||
| 88 | |||
| 89 | } | ||
| 90 | |||
| 91 | |||
| 92 | function decodeToJson(payload) { | ||
| 93 | |||
| 94 | var str = decodeToString(payload); | ||
| 95 | |||
| 96 | var data = JSON.parse(str); | ||
| 97 | |||
| 98 | return data; | ||
| 99 | |||
| 100 | } | ||
| 101 | |||
| 102 | |||
| 103 | return result; | ||
| 104 | |||
| |
2.1 | 105 | [[image:图片3.png||height="657" width="1324"]] |
| |
1.1 | 106 | |
| 107 | * **Dowblink——JavaScript:** | ||
| 108 | |||
| 109 | ~/~/ Encode downlink data from incoming Rule Engine message | ||
| 110 | |||
| 111 | |||
| 112 | ~/~/ msg - JSON message payload downlink message json | ||
| 113 | |||
| 114 | ~/~/ msgType - type of message, for ex. 'ATTRIBUTES_UPDATED', 'POST_TELEMETRY_REQUEST', etc. | ||
| 115 | |||
| 116 | ~/~/ metadata - list of key-value pairs with additional data about the message | ||
| 117 | |||
| 118 | ~/~/ integrationMetadata - list of key-value pairs with additional data defined in Integration executing this converter | ||
| 119 | |||
| 120 | |||
| 121 | ~/~/ /~*~* Encoder ~*~*/ | ||
| 122 | |||
| 123 | |||
| 124 | ~/~/var data = {"value":99}; | ||
| 125 | |||
| 126 | |||
| 127 | ~/~/ ~/~/ Process data from incoming message and metadata | ||
| 128 | |||
| 129 | |||
| 130 | ~/~/ data.tempFreq = msg.temperatureUploadFrequency; | ||
| 131 | |||
| 132 | ~/~/ data.humFreq = msg.humidityUploadFrequency; | ||
| 133 | |||
| 134 | |||
| 135 | ~/~/ data.devSerialNumber = metadata['ss_serialNumber']; | ||
| 136 | |||
| 137 | |||
| 138 | ~/~/ ~/~/ Result object with encoded downlink payload | ||
| 139 | |||
| 140 | var result = { | ||
| 141 | |||
| 142 | |||
| 143 | ~/~/ downlink data content type: JSON, TEXT or BINARY (base64 format) | ||
| 144 | |||
| 145 | contentType: "TEXT", | ||
| 146 | |||
| 147 | |||
| 148 | ~/~/ downlink data | ||
| 149 | |||
| 150 | data: msg.shared_value ,~/~/JSON.stringify(data), | ||
| 151 | |||
| 152 | |||
| 153 | ~/~/ Optional metadata object presented in key/value format | ||
| 154 | |||
| 155 | metadata: { | ||
| 156 | |||
| 157 | topic: '/test/down/'+metadata.deviceName | ||
| 158 | |||
| 159 | } | ||
| 160 | |||
| 161 | |||
| 162 | }; | ||
| 163 | |||
| 164 | |||
| 165 | return result; | ||
| 166 | |||
| 167 | |||
| |
2.1 | 168 | == **Step 3. Configure the connection** == |
| |
1.1 | 169 | |
| 170 | Generate MQTT certificate integrated on chirpstack | ||
| 171 | |||
| 172 | Chirpstack generates CA certificate, TLS certificate, and TLS key respectively | ||
| 173 | |||
| 174 | They correspond to the CA certificate file, Certificate file, and Private key file on thingseye | ||
| 175 | |||
| 176 | |||
| |
2.1 | 177 | [[image:图片4.png||height="669" width="1348"]] |
| |
1.1 | 178 | |
| |
2.1 | 179 | [[image:图片5.png||height="669" width="1348"]] |
| |
1.1 | 180 | |
| |
3.1 | 181 | * Copy the contents of the certificates and paste them into the linked file below, a total of three certificates are required |
| |
1.1 | 182 | |
| |
3.1 | 183 | **Integrated Certificate File demo Download Address:** |
| |
1.1 | 184 | |
| |
3.1 | 185 | [[https:~~/~~/github.com/ThingsEye-io/te-platform/tree/main/chirpstack>>https://github.com/ThingsEye-io/te-platform/tree/main/chirpstack]] |
| 186 | |||
| |
1.1 | 187 | Enter the server address Host: lns1.thingseye.io on the Connection configuration |
| 188 | |||
| 189 | Port: 8883 | ||
| 190 | |||
| 191 | Credentials type: PEM | ||
| 192 | |||
| 193 | Upload the certificate and key file | ||
| 194 | |||
| |
2.1 | 195 | [[image:图片6.png||height="672" width="1353"]] |
| |
1.1 | 196 | |
| |
2.1 | 197 | [[image:图片7.png||height="671" width="1352"]] |
| |
1.1 | 198 | |
| 199 | |||
| 200 | The default for Topic is: | ||
| 201 | |||
| 202 | application/**chirpstack application id**/device/+/event/up | ||
| 203 | |||
| |
2.1 | 204 | [[image:图片8.png||height="673" width="1356"]] |
| |
1.1 | 205 | |
| |
2.1 | 206 | [[image:1732500689044-955.png]] |
| |
1.1 | 207 | |
| |
2.1 | 208 | == Step 4. Check the connection == |
| |
1.1 | 209 | |
| |
2.1 | 210 | [[image:图片9.png||height="718" width="1446"]] |
| |
1.1 | 211 | |
| |
2.1 | 212 | |
| 213 | [[image:图片10.png||height="711" width="1432"]] |