Skip to content

Commit 134d642

Browse files
Add Humidifier advertisement
1 parent 4e4bb88 commit 134d642

File tree

1 file changed

+21
-17
lines changed

1 file changed

+21
-17
lines changed

lib/switchbot-advertising.js

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)