@@ -3,19 +3,17 @@ var buffer;
3
3
4
4
// Uncomment for ChirpStack:
5
5
function decodeUplink ( input ) {
6
-
7
6
// Uncomment for The Things Network:
8
7
// function Decoder(port, bytes) {
9
8
10
- buffer = bytes ;
9
+ buffer = input . bytes ;
11
10
12
11
var data = { } ;
13
12
14
13
var header = u8 ( ) ;
15
14
16
15
if ( header & 0x80 ) {
17
- var header_higher = u8 ( ) << 8 ;
18
- header = header_higher + header ;
16
+ header = header | ( u8 ( ) << 8 ) ;
19
17
}
20
18
21
19
if ( ( header & 0x01 ) !== 0 ) {
@@ -48,7 +46,16 @@ function decodeUplink(input) {
48
46
}
49
47
}
50
48
51
- if ( ( header & 0x04 ) !== 0 ) {
49
+ if ( ( header & 0x04 ) !== 0 && ( header & 0x08 ) == 0 ) {
50
+ data . therm_temperature = s16 ( ) ;
51
+ if ( data . therm_temperature === 0x7fff ) {
52
+ data . therm_temperature = null ;
53
+ } else {
54
+ data . therm_temperature /= 100 ;
55
+ }
56
+ }
57
+
58
+ if ( ( header & 0x08 ) !== 0 ) {
52
59
data . internal_temperature = s16 ( ) ;
53
60
if ( data . internal_temperature === 0x7fff ) {
54
61
data . internal_temperature = null ;
@@ -91,11 +98,11 @@ function decodeUplink(input) {
91
98
data . illuminance = data . illuminance / 100 ;
92
99
}
93
100
94
- data . presure = u16 ( ) ;
95
- if ( data . presure === 0xffff ) {
96
- data . presure = null ;
101
+ data . pressure = u16 ( ) ;
102
+ if ( data . pressure === 0xffff ) {
103
+ data . pressure = null ;
97
104
} else {
98
- data . presure = data . presure / 100 ;
105
+ data . pressure = data . pressure / 100 ;
99
106
}
100
107
}
101
108
@@ -182,7 +189,33 @@ function decodeUplink(input) {
182
189
}
183
190
}
184
191
185
- return data ;
192
+ if ( ( header & 0x0200 ) !== 0 ) {
193
+ data . soil_sensors = [ ] ;
194
+
195
+ let count = u8 ( ) ;
196
+
197
+ for ( let i = 0 ; i < count ; i ++ ) {
198
+ let sensor = { } ;
199
+
200
+ let temperature = s16 ( ) ;
201
+ if ( temperature === 0x7fff ) {
202
+ sensor . temperature = null ;
203
+ } else {
204
+ sensor . temperature = temperature / 100 ;
205
+ }
206
+
207
+ let moisture = u16 ( ) ;
208
+ if ( moisture === 0xffff ) {
209
+ sensor . moisture = null ;
210
+ } else {
211
+ sensor . moisture = moisture ;
212
+ }
213
+
214
+ data . soil_sensors . push ( sensor ) ;
215
+ }
216
+ }
217
+
218
+ return { data : data } ;
186
219
}
187
220
188
221
function s8 ( ) {
@@ -205,7 +238,7 @@ function u8() {
205
238
206
239
function s16 ( ) {
207
240
var value = buffer . slice ( cursor ) ;
208
- value = value [ 0 ] | value [ 1 ] << 8 ;
241
+ value = value [ 0 ] | ( value [ 1 ] << 8 ) ;
209
242
if ( ( value & ( 1 << 15 ) ) > 0 ) {
210
243
value = ( ~ value & 0xffff ) + 1 ;
211
244
value = - value ;
@@ -216,21 +249,21 @@ function s16() {
216
249
217
250
function u16 ( ) {
218
251
var value = buffer . slice ( cursor ) ;
219
- value = value [ 0 ] | value [ 1 ] << 8 ;
252
+ value = value [ 0 ] | ( value [ 1 ] << 8 ) ;
220
253
cursor = cursor + 2 ;
221
254
return value ;
222
255
}
223
256
224
257
function u32 ( ) {
225
258
var value = buffer . slice ( cursor ) ;
226
- value = value [ 0 ] | value [ 1 ] << 8 | value [ 2 ] << 16 | value [ 3 ] << 24 ;
259
+ value = value [ 0 ] | ( value [ 1 ] << 8 ) | ( value [ 2 ] << 16 ) | ( value [ 3 ] << 24 ) ;
227
260
cursor = cursor + 4 ;
228
261
return value ;
229
262
}
230
263
231
264
function s32 ( ) {
232
265
var value = buffer . slice ( cursor ) ;
233
- value = value [ 0 ] | value [ 1 ] << 8 | value [ 2 ] << 16 | value [ 3 ] << 24 ;
266
+ value = value [ 0 ] | ( value [ 1 ] << 8 ) | ( value [ 2 ] << 16 ) | ( value [ 3 ] << 24 ) ;
234
267
if ( ( value & ( 1 << 31 ) ) > 0 ) {
235
268
value = ( ~ value & 0xffffffff ) + 1 ;
236
269
value = - value ;
@@ -240,7 +273,8 @@ function s32() {
240
273
}
241
274
242
275
if ( false ) {
243
- var hex = "00000020026609ff7fff97260200e712691298b700000000000000000000000000000000000000000000"
244
- var buf = Buffer . from ( hex , ' hex' )
245
- console . log ( JSON . stringify ( Decode ( 1 , buf , 0 ) ) ) ;
276
+ var hex = "af01070eda0d23022e094f096d0d2887c4e46400145c0000" ;
277
+ var buf = Buffer . from ( hex , " hex" ) ;
278
+ console . log ( decodeUplink ( { bytes : buf } ) ) ;
246
279
}
280
+
0 commit comments