@@ -91,7 +91,7 @@ class SwitchbotAdvertising {
9191 sd = this . _parseServiceDataForWoSensorTH ( buf ) ;
9292 } else if ( model === 'c' ) { // WoCurtain
9393 sd = this . _parseServiceDataForWoCurtain ( buf ) ;
94- } else if ( model === 's' ) { // WoPresence
94+ } else if ( model === 's' ) { // WoMotion
9595 sd = this . _parseServiceDataForWoPresence ( buf ) ;
9696 } else if ( model === 'd' ) { // WoContact
9797 sd = this . _parseServiceDataForWoContact ( buf ) ;
@@ -149,20 +149,25 @@ class SwitchbotAdvertising {
149149 }
150150
151151 _parseServiceDataForWoHumi ( buf ) {
152- if ( buf . length !== 3 ) {
152+ if ( buf . length !== 8 ) {
153153 return null ;
154154 }
155155 let byte1 = buf . readUInt8 ( 1 ) ;
156- let byte2 = buf . readUInt8 ( 2 ) ;
156+ // let byte2 = buf.readUInt8(2);
157+ let byte3 = buf . readUInt8 ( 3 ) ;
158+ let byte4 = buf . readUInt8 ( 4 ) ;
159+ let byte5 = buf . readUInt8 ( 5 ) ;
157160
158- let mode = ( byte1 & 0b10000000 ) ? true : false ; // Whether the light switch Add-on is used or not
159- let state = ( byte1 & 0b01000000 ) ? true : false ; // Whether the switch status is ON or OFF
161+ let onState = ( byte1 & 0b10000000 ) ? true : false ; // 1 - on
162+ let autoMode = ( byte4 & 0b10000000 ) ? true : false ; // 1 - auto
163+ let percentage = byte4 & 0b01111111 ; // 0-100%, 101/102/103 - Quick gear 1/2/3
160164
161165 let data = {
162- model : 'h ' ,
166+ model : 'e ' ,
163167 modelName : 'WoHumi' ,
164- mode : mode ,
165- state : state
168+ onState : onState ,
169+ autoMode : autoMode ,
170+ percentage : autoMode ? 0 : percentage ,
166171 } ;
167172
168173 return data ;
@@ -201,21 +206,20 @@ class SwitchbotAdvertising {
201206 if ( buf . length !== 6 ) {
202207 return null ;
203208 }
204-
205209 let byte1 = buf . readUInt8 ( 1 ) ;
206210 let byte2 = buf . readUInt8 ( 2 ) ;
207211 // let byte3 = buf.readUInt8(3);
208212 // let byte4 = buf.readUInt8(4);
209213 let byte5 = buf . readUInt8 ( 5 ) ;
210214
211- let pirState = byte1 & 0b01000000 ; // 1 - Movement detected
215+ let pirState = ( byte1 & 0b01000000 ) ? true : false ; // 1 - Movement detected
212216 let battery = byte2 & 0b01111111 ; // %
213217 let lightLevel = byte5 & 0b00000011 ;
214218
215219 let data = {
216220 model : 's' ,
217- modelName : 'WoPresence ' ,
218- movement : pirState ? true : false ,
221+ modelName : 'WoMotion ' ,
222+ movement : pirState ,
219223 battery : battery ,
220224 lightLevel : ( lightLevel == 1 ) ? 'dark' : ( ( lightLevel == 2 ) ? 'bright' : 'unknown' ) ,
221225 } ;
@@ -237,15 +241,15 @@ class SwitchbotAdvertising {
237241 // let byte7 = buf.readUInt8(7);
238242 // let byte8 = buf.readUInt8(8);
239243
240- let pirState = byte1 & 0b01000000 ; // 1 - Movement detected
244+ let pirState = ( byte1 & 0b01000000 ) ? true : false ; // 1 - Movement detected
241245 let battery = byte2 & 0b01111111 ; // %
242246 let hallState = ( byte3 >> 1 ) & 0b00000011 ;
243247 let lightLevel = byte3 & 0b00000001 ;
244248
245249 let data = {
246250 model : 'd' ,
247251 modelName : 'WoContact' ,
248- movement : pirState ? true : false ,
252+ movement : pirState ,
249253 battery : battery ,
250254 doorState : ( hallState == 0 ) ? 'close' : ( ( hallState == 1 ) ? 'open' : 'timeout no closed' ) ,
251255 lightLevel : ( lightLevel == 0 ) ? 'dark' : 'bright' ,
@@ -263,15 +267,15 @@ class SwitchbotAdvertising {
263267 let byte3 = buf . readUInt8 ( 3 ) ;
264268 let byte4 = buf . readUInt8 ( 4 ) ;
265269
266- let calibration = byte1 & 0b01000000 ; // Whether the calibration is completed
270+ let calibration = ( byte1 & 0b01000000 ) ? true : false ; // Whether the calibration is completed
267271 let battery = byte2 & 0b01111111 ; // %
268272 let currPosition = byte3 & 0b01111111 ; // current positon %
269273 let lightLevel = ( byte4 >> 4 ) & 0b00001111 ; // light sensor level (1-10)
270274
271275 let data = {
272276 model : 'c' ,
273277 modelName : 'WoCurtain' ,
274- calibration : calibration ? true : false ,
278+ calibration : calibration ,
275279 battery : battery ,
276280 position : currPosition ,
277281 lightLevel : lightLevel
@@ -281,4 +285,4 @@ class SwitchbotAdvertising {
281285 }
282286}
283287
284- module . exports = new SwitchbotAdvertising ( ) ;
288+ module . exports = new SwitchbotAdvertising ( ) ;
0 commit comments