Last modified by Hera Guo on 2025/02/18 09:29

From version 16.1
edited by Hera Guo
on 2024/11/27 09:09
Change comment: There is no comment for this version
To version 10.1
edited by Chxy
on 2024/10/11 09:41
Change comment: There is no comment for this version

Summary

Details

Page properties
Author
... ... @@ -1,1 +1,1 @@
1 -XWiki.hera
1 +XWiki.EdwinChen
Content
... ... @@ -44,7 +44,7 @@
44 44  
45 45  Device here is **[[S31-NB>>https://www.dragino.com/products/temperature-humidity-sensor/item/288-s31-nb-s31b-nb.html]]** : and have been configure below
46 46  
47 -* Set to use ThingsEye UDP server: **AT+SERVADDR=server1.thingseye.io,11562**
47 +* Set to use ThingsEye UDP server: **AT+SERVADDR=server1.thingseye.io,11560**
48 48  * Use UDP Uplink & Json protocol:** AT+PRO=2,5**
49 49  * Equip with a NB-IoT SIM Card to access to NB-IoT Network.
50 50  
... ... @@ -69,6 +69,8 @@
69 69  
70 70  **So we have this device in the Tenant Device List. The next step will be how to use these value to make a nice dashboard for user's application.**
71 71  
72 +
73 +
72 72  = 3.  Connect to The Things Stack =
73 73  
74 74  == 3.1 Network Structure ==
... ... @@ -93,17 +93,107 @@
93 93  
94 94  [[image:1728535941851-388.png||height="466" width="398"]]
95 95  
96 -Demo JavaScript Code: [[https:~~/~~/raw.githubusercontent.com/ThingsEye-io/te-platform/refs/heads/main/Data%20Converters/The_Things_Network_MQTT_Uplink_Converter.js >>https://raw.githubusercontent.com/ThingsEye-io/te-platform/refs/heads/main/Data%20Converters/The_Things_Network_MQTT_Uplink_Converter.js]]
98 +Demo Code as below:
97 97  
100 +>var data = decodeToJson(payload);
101 +>var deviceName = data.end_device_ids.device_id;
102 +>var deviceType = data.end_device_ids.application_ids.application_id;
103 +>var model = {};
104 +>var data2 = data.uplink_message.decoded_payload;
105 +>var flg = data.uplink_message.f_port
106 +>for (var key in data2) {
107 +> model[key] = data2[key];
108 +>}
109 +>var obj =  {"devid":deviceName}
110 +>var result = {
111 +> deviceName: deviceName,
112 +> deviceType: deviceType,
113 +> telemetry: model,
114 +> groupName: "Case Study",
115 +> attributes:{"devid":deviceName,
116 +> "timevalue":"test",
117 +> "inactivityTimeout":1260000
118 +> }
119 +>};
120 +>function decodeToString(payload) {
121 +> return String.fromCharCode.apply(String, payload);
122 +>}function decodeToJson(payload) {
123 +> var str = decodeToString(payload);
124 +> var data = JSON.parse(str);
125 +> return data;
126 +>}
127 +>if (flg===2){
128 +>return result;
129 +>}
98 98  
131 +
99 99  (% class="lead" %)
100 100  Input Downlink Converter
101 101  
102 102  [[image:1728536142721-488.png||height="470" width="407"]]
103 103  
104 -Example Javascript Code as below: [[https:~~/~~/raw.githubusercontent.com/ThingsEye-io/te-platform/refs/heads/main/Data%20Converters/The_Things_Network_MQTT_Downlink_Converter.js>>https://raw.githubusercontent.com/ThingsEye-io/te-platform/refs/heads/main/Data%20Converters/The_Things_Network_MQTT_Downlink_Converter.js]]
137 +Example Code as below:
105 105  
139 +>function hexToBase64(hexString) {
140 +> var bytes = hexString.match(/.{2}/g);
141 +> var binaryString = bytes.map(function(byte) {
142 +> return String.fromCharCode(parseInt(byte, 16));
143 +> }).join('');
144 +>
145 +> return btoa(binaryString);
146 +>}
147 +>var flg = "shared_value" in metadata
148 +>var value2 = parseInt(metadata.ss_timevalue).toString(16)if (value2.length==1){
149 +> value2 = "00000"+parseInt(metadata.ss_timevalue).toString(16)
150 +>}
151 +>else if (value2.length==2){
152 +> value2 = "0000"+parseInt(metadata.ss_timevalue).toString(16)
153 +>}
154 +>else if (value2.length==3){
155 +> value2 = "000"+parseInt(metadata.ss_timevalue).toString(16)
156 +>}
157 +>else if (value2.length==4){
158 +> value2 = "00"+parseInt(metadata.ss_timevalue).toString(16)
159 +>}
160 +>else if (value2.length==5){
161 +> value2 = "0"+parseInt(metadata.ss_timevalue).toString(16)
162 +>}
163 +>else {
164 +> value2 = value2
165 +>}
166 +>var data = "01"+value2
167 +>if (flg === true){
168 +>data = {
169 +> downlinks: [{
170 +> f_port: 1,
171 +> confirmed: false,
172 +> frm_payload: hexToBase64(metadata.shared_value),
173 +> priority: "NORMAL"
174 +> }]
175 +> };
176 +>}
177 +>else{
178 +> data = {
179 +> downlinks: [{
180 +> f_port: 1,
181 +> confirmed: false,
182 +> frm_payload: hexToBase64(data),
183 +> priority: "NORMAL"
184 +> }]
185 +> };
186 +>}
187 +>var result = {
188 +> contentType: "JSON",
189 +> data: JSON.stringify(data),
190 +> metadata: {
191 +> devId: metadata.ss_devid
192 +> }
193 +>};
194 +>if (metadata.shared_timevalue!=="test" || metadata.ss_timevalue!=="test"){
195 +>return result;
196 +>}
106 106  
198 +
107 107  (% class="lead" %)
108 108  Set up Connection to The Things Network application
109 109  
... ... @@ -129,201 +129,3 @@
129 129  
130 130  
131 131  [[image:1728536541040-814.png]]
132 -
133 -= 4.Connect chirpstack to Thingseye by way of MQTT =
134 -
135 -* **How to connect chirpstack to Thingseye by way of MQTT? The following tutorial will show you**
136 -
137 -== 4.1 Thingseye adds MQTT integration ==
138 -
139 -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";
140 -
141 -[[image:图片1.png]]
142 -
143 -== 4.2 Add an uplink and downlink data converter ==
144 -
145 -In the function decoder field, specify the script to parse and transform the data.
146 -
147 -[[image:图片2.png]]
148 -
149 -* **Uplink——JavaScript:**
150 -
151 -var data = decodeToJson(payload);
152 -
153 -var deviceName = data.deviceInfo.deviceName;
154 -
155 -var deviceType = data.applicationName;
156 -
157 -var devEui = data.deviceInfo.devEui
158 -
159 -var label = data.deviceInfo.devEui
160 -
161 -var model = {};
162 -
163 -var data2 = data.object;
164 -
165 -var flg = data.fPort
166 -
167 -for (var key in data2) {
168 -
169 - ~/~/ 将属性名存入新对象中
170 -
171 - model[key] = data2[key];
172 -
173 -}
174 -
175 -~/~/var obj = {"devid":deviceName}
176 -
177 -var result = {
178 -
179 - deviceName: deviceName,
180 -
181 - deviceType: deviceType,
182 -
183 - telemetry: model,
184 -
185 - groupName: "Case Study",
186 -
187 - ~/~/label:label,
188 -
189 - attributes:{"devEui":devEui,
190 -
191 - ~/~/"timevalue":"test",
192 -
193 - "inactivityTimeout":1260000
194 -
195 - ~/~/ "High_humidity_alarm":"not set",
196 -
197 - ~/~/ "High_temperature_alarm":"not set",
198 -
199 - ~/~/ "Low_humidity_alarm":"not set",
200 -
201 - ~/~/ "Low_temperature_alarm":"not set",
202 -
203 - ~/~/ "Low_voltage_alarm":"not set"
204 -
205 - ~/~/"customerName": "Civionic Engineering & Consulting (2014) Inc."
206 -
207 - }
208 -
209 -};
210 -
211 -function decodeToString(payload) {
212 -
213 - return String.fromCharCode.apply(String, payload);
214 -
215 -}
216 -
217 -function decodeToJson(payload) {
218 -
219 - var str = decodeToString(payload);
220 -
221 - var data = JSON.parse(str);
222 -
223 - return data;
224 -
225 -}
226 -
227 -return result;
228 -
229 -[[image:图片3.png]]
230 -
231 -* **Dowblink——JavaScript:**
232 -
233 -~/~/ Encode downlink data from incoming Rule Engine message
234 -
235 -~/~/ msg - JSON message payload downlink message json
236 -
237 -~/~/ msgType - type of message, for ex. 'ATTRIBUTES_UPDATED', 'POST_TELEMETRY_REQUEST', etc.
238 -
239 -~/~/ metadata - list of key-value pairs with additional data about the message
240 -
241 -~/~/ integrationMetadata - list of key-value pairs with additional data defined in Integration executing this converter
242 -
243 -~/~/ /~*~* Encoder ~*~*/
244 -
245 -~/~/var data = {"value":99};
246 -
247 -~/~/ ~/~/ Process data from incoming message and metadata
248 -
249 -~/~/ data.tempFreq = msg.temperatureUploadFrequency;
250 -
251 -~/~/ data.humFreq = msg.humidityUploadFrequency;
252 -
253 -~/~/ data.devSerialNumber = metadata['ss_serialNumber'];
254 -
255 -~/~/ ~/~/ Result object with encoded downlink payload
256 -
257 -var result = {
258 -
259 - ~/~/ downlink data content type: JSON, TEXT or BINARY (base64 format)
260 -
261 - contentType: "TEXT",
262 -
263 - ~/~/ downlink data
264 -
265 - data: msg.shared_value ,~/~/JSON.stringify(data),
266 -
267 - ~/~/ Optional metadata object presented in key/value format
268 -
269 - metadata: {
270 -
271 - topic: '/test/down/'+metadata.deviceName
272 -
273 - }
274 -
275 -};
276 -
277 -return result;
278 -
279 -== 4.3 Configure the connection ==
280 -
281 -Generate MQTT certificate integrated on chirpstack
282 -
283 -Chirpstack generates CA certificate, TLS certificate, and TLS key respectively
284 -
285 -They correspond to the CA certificate file, Certificate file, and Private key file on thingseye
286 -
287 -[[image:图片4.png]]
288 -
289 -[[image:图片5.png||height="630" width="1269"]]
290 -
291 -* Copy the contents of the certificates and paste them into the linked file below, a total of three certificates are required
292 -
293 -**Integrated Certificate File demo Download Address:**
294 -
295 -[[https:~~/~~/github.com/ThingsEye-io/te-platform/tree/main/chirpstack>>https://github.com/ThingsEye-io/te-platform/tree/main/chirpstack]]
296 -
297 -Enter the server address Host: lns1.thingseye.io on the Connection configuration
298 -
299 -Port: 8883
300 -
301 -Credentials type: PEM
302 -
303 -Upload the certificate and key file
304 -
305 -[[image:图片6.png]]
306 -
307 -[[image:图片7.png]]
308 -
309 -The default for Topic is:
310 -
311 -application/**chirpstack application id**/device/+/event/up
312 -
313 -[[image:图片8.png]]
314 -
315 -
316 -(% class="wikigeneratedid" %)
317 -[[image:屏幕截图 2024-11-25 095805.png||height="374" width="1272"]]
318 -
319 -== 4.4 Check the connection ==
320 -
321 -[[image:图片9.png]]
322 -
323 -[[image:图片10.png]]
324 -
325 -= 5. Check Data Uplink Log =
326 -
327 -User can check the devices log in Intergration.
328 -
329 -[[image:1729562069134-315.png||height="587" width="723"]]
1729562069134-315.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.EdwinChen
Size
... ... @@ -1,1 +1,0 @@
1 -67.5 KB
Content
图片1.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -123.1 KB
Content
图片10.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -173.4 KB
Content
图片2.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -163.3 KB
Content
图片3.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -124.8 KB
Content
图片4.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -68.8 KB
Content
图片5.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -98.5 KB
Content
图片6.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -136.5 KB
Content
图片7.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -143.5 KB
Content
图片8.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -151.0 KB
Content
图片9.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -134.6 KB
Content
屏幕截图 2024-11-25 095805.png
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.hera
Size
... ... @@ -1,1 +1,0 @@
1 -45.7 KB
Content