@@ -4,167 +4,202 @@ var buffer;
4
4
// Uncomment for ChirpStack:
5
5
function Decode ( port , bytes , variables ) {
6
6
7
- // Uncomment for The Things Network:
8
- // function Decoder(port, bytes) {
7
+ // Uncomment for The Things Network:
8
+ // function Decoder(port, bytes) {
9
9
10
- buffer = bytes ;
10
+ buffer = bytes ;
11
11
12
- var data = { } ;
12
+ var data = { } ;
13
13
14
- var header = u8 ( ) ;
14
+ var header = u8 ( ) ;
15
15
16
- if ( ( header & 0x01 ) !== 0 ) {
17
- data . voltage_rest = u16 ( ) ;
18
- data . voltage_load = u16 ( ) ;
19
- data . current_load = u8 ( ) ;
16
+ if ( header & 0x80 ) {
17
+ var header_higher = u8 ( ) << 8 ;
18
+ header = header_higher + header ;
19
+ }
20
20
21
- if ( data . voltage_rest === 0xffff ) {
22
- data . voltage_rest = null ;
23
- } else {
24
- data . voltage_rest = data . voltage_rest / 1000 ;
25
- }
21
+ if ( ( header & 0x01 ) !== 0 ) {
22
+ data . voltage_rest = u16 ( ) ;
23
+ data . voltage_load = u16 ( ) ;
24
+ data . current_load = u8 ( ) ;
26
25
27
- if ( data . voltage_load === 0xffff ) {
28
- data . voltage_load = null ;
29
- } else {
30
- data . voltage_load = data . voltage_load / 1000 ;
31
- }
26
+ if ( data . voltage_rest === 0xffff ) {
27
+ data . voltage_rest = null ;
28
+ } else {
29
+ data . voltage_rest = data . voltage_rest / 1000 ;
30
+ }
31
+
32
+ if ( data . voltage_load === 0xffff ) {
33
+ data . voltage_load = null ;
34
+ } else {
35
+ data . voltage_load = data . voltage_load / 1000 ;
36
+ }
32
37
33
- if ( data . current_load === 0xff ) {
34
- data . current_load = null ;
35
- }
38
+ if ( data . current_load === 0xff ) {
39
+ data . current_load = null ;
36
40
}
41
+ }
37
42
38
- if ( ( header & 0x02 ) !== 0 ) {
39
- data . orientation = u8 ( ) ;
43
+ if ( ( header & 0x02 ) !== 0 ) {
44
+ data . orientation = u8 ( ) ;
40
45
41
- if ( data . orientation === 0xff ) {
42
- data . orientation = null ;
43
- }
46
+ if ( data . orientation === 0xff ) {
47
+ data . orientation = null ;
44
48
}
49
+ }
45
50
46
- if ( ( header & 0x04 ) !== 0 ) {
47
- data . therm_temperature = s16 ( ) ;
51
+ if ( ( header & 0x04 ) !== 0 ) {
52
+ data . therm_temperature = s16 ( ) ;
48
53
49
- if ( data . therm_temperature === 0x7fff ) {
50
- data . therm_temperature = null ;
51
- } else {
52
- data . therm_temperature = data . therm_temperature / 100 ;
53
- }
54
+ if ( data . therm_temperature === 0x7fff ) {
55
+ data . therm_temperature = null ;
56
+ } else {
57
+ data . therm_temperature = data . therm_temperature / 100 ;
54
58
}
59
+ }
60
+
61
+ if ( ( header & 0x10 ) !== 0 ) {
62
+ data . hygro_temperature = s16 ( ) ;
63
+ data . hygro_humidity = u8 ( ) ;
64
+
65
+ if ( data . hygro_temperature === 0x7fff ) {
66
+ data . hygro_temperature = null ;
67
+ } else {
68
+ data . hygro_temperature = data . hygro_temperature / 100 ;
69
+ }
70
+
71
+ if ( data . hygro_humidity === 0xff ) {
72
+ data . hygro_humidity = null ;
73
+ } else {
74
+ data . hygro_humidity = data . hygro_humidity / 2 ;
75
+ }
76
+ }
77
+
78
+ if ( ( header & 0x20 ) !== 0 ) {
79
+ data . w1_thermometers = [ ] ;
55
80
56
- if ( ( header & 0x10 ) !== 0 ) {
57
- data . hygro_temperature = s16 ( ) ;
58
- data . hygro_humidity = u8 ( ) ;
59
-
60
- if ( data . hygro_temperature === 0x7fff ) {
61
- data . hygro_temperature = null ;
62
- } else {
63
- data . hygro_temperature = data . hygro_temperature / 100 ;
64
- }
65
-
66
- if ( data . hygro_humidity === 0xff ) {
67
- data . hygro_humidity = null ;
68
- } else {
69
- data . hygro_humidity = data . hygro_humidity / 2 ;
70
- }
81
+ var count = u8 ( ) ;
82
+
83
+ for ( var i = 0 ; i < count ; i ++ ) {
84
+ var t = s16 ( ) ;
85
+
86
+ if ( t === 0x7fff ) {
87
+ t = null ;
88
+ } else {
89
+ t = t / 100 ;
90
+ }
91
+
92
+ data . w1_thermometers . push ( t ) ;
71
93
}
94
+ }
72
95
73
- if ( ( header & 0x20 ) !== 0 ) {
74
- data . w1_thermometers = [ ] ;
96
+ if ( ( header & 0x40 ) !== 0 ) {
97
+ data . rtd_thermometers = [ ] ;
75
98
76
- var count = u8 ( ) ;
99
+ var count = u8 ( ) ;
77
100
78
- for ( var i = 0 ; i < count ; i ++ ) {
79
- var t = s16 ( ) ;
101
+ for ( var i = 0 ; i < count ; i ++ ) {
102
+ var t = s16 ( ) ;
80
103
81
- if ( t === 0x7fff ) {
82
- t = null ;
83
- } else {
84
- t = t / 100 ;
85
- }
104
+ if ( t === 0x7fff ) {
105
+ t = null ;
106
+ } else {
107
+ t = t / 100 ;
108
+ }
86
109
87
- data . w1_thermometers . push ( t ) ;
88
- }
110
+ data . rtd_thermometers . push ( t ) ;
89
111
}
112
+ }
113
+
114
+ if ( ( header & 0x0100 ) !== 0 ) {
115
+ data . ble_tags = [ ] ;
116
+
117
+ var count = u8 ( ) ;
90
118
91
- if ( ( header & 0x40 ) !== 0 ) {
92
- data . rtd_thermometers = [ ] ;
119
+ for ( var i = 0 ; i < count ; i ++ ) {
120
+ var tag = { } ;
93
121
94
- var count = u8 ( ) ;
122
+ var t = s16 ( ) ;
123
+ var h = u8 ( ) ;
95
124
96
- for ( var i = 0 ; i < count ; i ++ ) {
97
- var t = s16 ( ) ;
125
+ if ( t === 0x7fff ) {
126
+ t = null ;
127
+ } else {
128
+ t = t / 100 ;
129
+ }
98
130
99
- if ( t === 0x7fff ) {
100
- t = null ;
101
- } else {
102
- t = t / 100 ;
103
- }
131
+ if ( h === 0xff ) {
132
+ h = null ;
133
+ } else {
134
+ h = h / 2 ;
135
+ }
104
136
105
- data . rtd_thermometers . push ( t ) ;
106
- }
137
+ tag . temperature = t ;
138
+ tag . humidity = h ;
139
+
140
+ data . ble_tags . push ( tag ) ;
107
141
}
142
+ }
108
143
109
- return data ;
144
+ return data ;
110
145
}
111
146
112
147
function s8 ( ) {
113
- var value = buffer . slice ( cursor ) ;
114
- value = value [ 0 ] ;
115
- if ( ( value & ( 1 << 7 ) ) > 0 ) {
116
- value = ( ~ value & 0xff ) + 1 ;
117
- value = - value ;
118
- }
119
- cursor = cursor + 1 ;
120
- return value ;
148
+ var value = buffer . slice ( cursor ) ;
149
+ value = value [ 0 ] ;
150
+ if ( ( value & ( 1 << 7 ) ) > 0 ) {
151
+ value = ( ~ value & 0xff ) + 1 ;
152
+ value = - value ;
153
+ }
154
+ cursor = cursor + 1 ;
155
+ return value ;
121
156
}
122
157
123
158
function u8 ( ) {
124
- var value = buffer . slice ( cursor ) ;
125
- value = value [ 0 ] ;
126
- cursor = cursor + 1 ;
127
- return value ;
159
+ var value = buffer . slice ( cursor ) ;
160
+ value = value [ 0 ] ;
161
+ cursor = cursor + 1 ;
162
+ return value ;
128
163
}
129
164
130
165
function s16 ( ) {
131
- var value = buffer . slice ( cursor ) ;
132
- value = value [ 0 ] | value [ 1 ] << 8 ;
133
- if ( ( value & ( 1 << 15 ) ) > 0 ) {
134
- value = ( ~ value & 0xffff ) + 1 ;
135
- value = - value ;
136
- }
137
- cursor = cursor + 2 ;
138
- return value ;
166
+ var value = buffer . slice ( cursor ) ;
167
+ value = value [ 0 ] | value [ 1 ] << 8 ;
168
+ if ( ( value & ( 1 << 15 ) ) > 0 ) {
169
+ value = ( ~ value & 0xffff ) + 1 ;
170
+ value = - value ;
171
+ }
172
+ cursor = cursor + 2 ;
173
+ return value ;
139
174
}
140
175
141
176
function u16 ( ) {
142
- var value = buffer . slice ( cursor ) ;
143
- value = value [ 0 ] | value [ 1 ] << 8 ;
144
- cursor = cursor + 2 ;
145
- return value ;
177
+ var value = buffer . slice ( cursor ) ;
178
+ value = value [ 0 ] | value [ 1 ] << 8 ;
179
+ cursor = cursor + 2 ;
180
+ return value ;
146
181
}
147
182
148
183
function u32 ( ) {
149
- var value = buffer . slice ( cursor ) ;
150
- value = value [ 0 ] | value [ 1 ] << 8 | value [ 2 ] << 16 | value [ 3 ] << 24 ;
151
- cursor = cursor + 4 ;
152
- return value ;
184
+ var value = buffer . slice ( cursor ) ;
185
+ value = value [ 0 ] | value [ 1 ] << 8 | value [ 2 ] << 16 | value [ 3 ] << 24 ;
186
+ cursor = cursor + 4 ;
187
+ return value ;
153
188
}
154
189
155
190
function s32 ( ) {
156
- var value = buffer . slice ( cursor ) ;
157
- value = value [ 0 ] | value [ 1 ] << 8 | value [ 2 ] << 16 | value [ 3 ] << 24 ;
158
- if ( ( value & ( 1 << 31 ) ) > 0 ) {
159
- value = ( ~ value & 0xffffffff ) + 1 ;
160
- value = - value ;
161
- }
162
- cursor = cursor + 4 ;
163
- return value ;
191
+ var value = buffer . slice ( cursor ) ;
192
+ value = value [ 0 ] | value [ 1 ] << 8 | value [ 2 ] << 16 | value [ 3 ] << 24 ;
193
+ if ( ( value & ( 1 << 31 ) ) > 0 ) {
194
+ value = ( ~ value & 0xffffffff ) + 1 ;
195
+ value = - value ;
196
+ }
197
+ cursor = cursor + 4 ;
198
+ return value ;
164
199
}
165
200
166
201
if ( false ) {
167
- var hex = "00000020026609ff7fff97260200e712691298b700000000000000000000000000000000000000000000"
168
- var buf = Buffer . from ( hex , 'hex' )
169
- console . log ( JSON . stringify ( Decode ( 1 , buf , 0 ) ) ) ;
202
+ var hex = "00000020026609ff7fff97260200e712691298b700000000000000000000000000000000000000000000"
203
+ var buf = Buffer . from ( hex , 'hex' )
204
+ console . log ( JSON . stringify ( Decode ( 1 , buf , 0 ) ) ) ;
170
205
}
0 commit comments