node-switchbot 1.1.3-beta.7 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +38 -1
- package/lib/switchbot-advertising.js +43 -14
- package/lib/switchbot.js +3 -2
- package/package.json +40 -40
package/CHANGELOG.md
CHANGED
|
@@ -2,25 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. This project uses [Semantic Versioning](https://semver.org/)
|
|
4
4
|
|
|
5
|
-
## [
|
|
5
|
+
## [Version 1.2.0](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.2.0) (2022-03-04)
|
|
6
6
|
|
|
7
7
|
### Changes
|
|
8
8
|
|
|
9
9
|
- Added support for SwitchBot "Contact" and "Motion"
|
|
10
|
+
- Fix for Curtains on Firmware v3.3 and above
|
|
10
11
|
- Housekeeping and update dependencies
|
|
11
12
|
|
|
13
|
+
**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v1.1.2...v1.2.0
|
|
14
|
+
|
|
12
15
|
## [Version 1.1.2](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.1.2) (2021-11-13)
|
|
13
16
|
|
|
14
17
|
### Changes
|
|
15
18
|
|
|
16
19
|
- Housekeeping and update dependencies
|
|
17
20
|
|
|
21
|
+
**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v1.1.1...v1.1.2
|
|
22
|
+
|
|
18
23
|
## [Version 1.1.1](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.1.1) (2021-11-02)
|
|
19
24
|
|
|
20
25
|
### Changes
|
|
21
26
|
|
|
22
27
|
- Change back from @node/noble to @abandonware/noble
|
|
23
28
|
|
|
29
|
+
**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v1.1.0...v1.1.1
|
|
30
|
+
|
|
24
31
|
## [Version 1.1.0](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.1.0) (2021-10-26)
|
|
25
32
|
|
|
26
33
|
### Changes
|
|
@@ -29,24 +36,32 @@ All notable changes to this project will be documented in this file. This projec
|
|
|
29
36
|
- Add Humidifier advertisement
|
|
30
37
|
- Correct Model for advertisement
|
|
31
38
|
|
|
39
|
+
**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v1.0.8...v1.1.0
|
|
40
|
+
|
|
32
41
|
## [Version 1.0.8](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.0.8) (2021-09-30)
|
|
33
42
|
|
|
34
43
|
### Changes
|
|
35
44
|
|
|
36
45
|
- fix extra trace of old noble from @abandonware/noble
|
|
37
46
|
|
|
47
|
+
**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v1.0.7...v1.0.8
|
|
48
|
+
|
|
38
49
|
## [Version 1.0.7](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.0.7) (2021-09-24)
|
|
39
50
|
|
|
40
51
|
### Changes
|
|
41
52
|
|
|
42
53
|
- Change from @abandonware/noble to @homebridge/noble
|
|
43
54
|
|
|
55
|
+
**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v1.0.6...v1.0.7
|
|
56
|
+
|
|
44
57
|
## [Version 1.0.6](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.0.6) (2021-08-29)
|
|
45
58
|
|
|
46
59
|
### Changes
|
|
47
60
|
|
|
48
61
|
- Fixes FATAL ERROR: ad_id is not defined
|
|
49
62
|
|
|
63
|
+
**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v1.0.5...v1.0.6
|
|
64
|
+
|
|
50
65
|
## [Version 1.0.5](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.0.5) (2021-08-04)
|
|
51
66
|
|
|
52
67
|
### Changes
|
|
@@ -54,42 +69,56 @@ All notable changes to this project will be documented in this file. This projec
|
|
|
54
69
|
- Adding code for Contact and Motion Sensors
|
|
55
70
|
- Not Ready to be used yet though
|
|
56
71
|
|
|
72
|
+
**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v1.0.4...v1.0.5
|
|
73
|
+
|
|
57
74
|
## [Version 1.0.4](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.0.4) (2021-08-03)
|
|
58
75
|
|
|
59
76
|
### Changes
|
|
60
77
|
|
|
61
78
|
- Support for the discover method with id on macOS
|
|
62
79
|
|
|
80
|
+
**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v1.0.3...v1.0.4
|
|
81
|
+
|
|
63
82
|
## [Version 1.0.3](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.0.3) (2021-07-30)
|
|
64
83
|
|
|
65
84
|
### Changes
|
|
66
85
|
|
|
67
86
|
- Fixed misspelling.
|
|
68
87
|
|
|
88
|
+
**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v1.0.2...v1.0.3
|
|
89
|
+
|
|
69
90
|
## [Version 1.0.2](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.0.2) (2021-07-29)
|
|
70
91
|
|
|
71
92
|
### Changes
|
|
72
93
|
|
|
73
94
|
- Housekeeping and update dependencies
|
|
74
95
|
|
|
96
|
+
**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v1.0.1...v1.0.2
|
|
97
|
+
|
|
75
98
|
## [Version 1.0.1](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.0.1) (2021-07-29)
|
|
76
99
|
|
|
77
100
|
### Changes
|
|
78
101
|
|
|
79
102
|
- Fixed issue where after switching Bluetooth off and on, would not work properly.
|
|
80
103
|
|
|
104
|
+
**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v1.0.0...v1.0.1
|
|
105
|
+
|
|
81
106
|
## [Version 1.0.0](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v1.0.0) (2021-01-21)
|
|
82
107
|
|
|
83
108
|
### Changes
|
|
84
109
|
|
|
85
110
|
- * fix "No device was found" in MacOS
|
|
86
111
|
|
|
112
|
+
**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v0.2.0...v1.0.0
|
|
113
|
+
|
|
87
114
|
## [Version 0.2.0](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v0.2.0) (2020-11-05)
|
|
88
115
|
|
|
89
116
|
### Changes
|
|
90
117
|
|
|
91
118
|
- Modify Curtain's action command to support group and running mode. (Thanks to [@SwitchBot-Wonderlabs](https://github.com/OpenWonderLabs/node-switchbot/pull/7/))
|
|
92
119
|
|
|
120
|
+
**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v0.1.0...v0.2.0
|
|
121
|
+
|
|
93
122
|
## [Version 0.1.0](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v0.1.0) (2020-10-28)
|
|
94
123
|
|
|
95
124
|
### Changes
|
|
@@ -97,18 +126,24 @@ All notable changes to this project will be documented in this file. This projec
|
|
|
97
126
|
- Added support for SwitchBot Curtain. (Thanks to [@SwitchBot-Wonderlabs](https://github.com/OpenWonderLabs/node-switchbot/pull/6/))
|
|
98
127
|
- Added support for running on the Raspberry Pi Zero W. (Thanks to [@zizi4n5](https://github.com/OpenWonderLabs/node-switchbot/pull/5))
|
|
99
128
|
|
|
129
|
+
**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v0.0.5...v0.1.0
|
|
130
|
+
|
|
100
131
|
## [Version 0.0.5](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v0.0.5) (2020-02-19)
|
|
101
132
|
|
|
102
133
|
### Changes
|
|
103
134
|
|
|
104
135
|
- Improved the stability of discovering the BLE characteristics. (Thanks to [@dnicolson](https://github.com/OpenWonderLabs/node-switchbot/issues/3))
|
|
105
136
|
|
|
137
|
+
**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v0.0.4...v0.0.5
|
|
138
|
+
|
|
106
139
|
## [Version 0.0.4](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v0.0.4) (2020-02-11)
|
|
107
140
|
|
|
108
141
|
### Changes
|
|
109
142
|
|
|
110
143
|
- Fixed the bug that temperature value lower than 0 degC could not be handled. (Thanks to [@musimasami](https://github.com/OpenWonderLabs/node-switchbot/issues/2))
|
|
111
144
|
|
|
145
|
+
**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v0.0.3...v0.0.4
|
|
146
|
+
|
|
112
147
|
## [Version 0.0.3](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v0.0.3) (2020-02-10)
|
|
113
148
|
|
|
114
149
|
### Changes
|
|
@@ -116,6 +151,8 @@ All notable changes to this project will be documented in this file. This projec
|
|
|
116
151
|
- Now the characteristic UUID `0x2a00` (Device Name) is not mandatory. Some models of Bot don't seem to support the characteristic. (Thanks to [@dnicolson](https://github.com/OpenWonderLabs/node-switchbot/issues/1))
|
|
117
152
|
- Fixed the bug that the `turnOn()` method returns an error if the "Press mode" is selected on the Bot.
|
|
118
153
|
|
|
154
|
+
**Full Changelog**: https://github.com/OpenWonderLabs/node-switchbot/compare/v0.0.2...v0.0.3
|
|
155
|
+
|
|
119
156
|
## [Version 0.0.2](https://github.com/OpenWonderLabs/node-switchbot/releases/tag/v0.0.2) (2019-11-20)
|
|
120
157
|
|
|
121
158
|
### Changes
|
|
@@ -60,7 +60,7 @@ class SwitchbotAdvertising {
|
|
|
60
60
|
* If the specified `Peripheral` does not represent any switchbot
|
|
61
61
|
* device, this method will return `null`.
|
|
62
62
|
* ---------------------------------------------------------------- */
|
|
63
|
-
parse(peripheral) {
|
|
63
|
+
parse(peripheral, onlog) {
|
|
64
64
|
let ad = peripheral.advertisement;
|
|
65
65
|
if (!ad || !ad.serviceData) {
|
|
66
66
|
return null;
|
|
@@ -75,22 +75,28 @@ class SwitchbotAdvertising {
|
|
|
75
75
|
let sd = null;
|
|
76
76
|
|
|
77
77
|
if (model === 'H') { // WoHand
|
|
78
|
-
sd = this._parseServiceDataForWoHand(buf);
|
|
78
|
+
sd = this._parseServiceDataForWoHand(buf, onlog);
|
|
79
79
|
} else if (model === 'e') { // WoHumi
|
|
80
|
-
sd = this._parseServiceDataForWoHumi(buf);
|
|
80
|
+
sd = this._parseServiceDataForWoHumi(buf, onlog);
|
|
81
81
|
} else if (model === 'T') { // WoSensorTH
|
|
82
|
-
sd = this._parseServiceDataForWoSensorTH(buf);
|
|
82
|
+
sd = this._parseServiceDataForWoSensorTH(buf, onlog);
|
|
83
83
|
} else if (model === 'c') { // WoCurtain
|
|
84
|
-
sd = this._parseServiceDataForWoCurtain(buf);
|
|
84
|
+
sd = this._parseServiceDataForWoCurtain(buf, onlog);
|
|
85
85
|
} else if (model === 's') { // WoMotion
|
|
86
|
-
sd = this._parseServiceDataForWoPresence(buf);
|
|
86
|
+
sd = this._parseServiceDataForWoPresence(buf, onlog);
|
|
87
87
|
} else if (model === 'd') { // WoContact
|
|
88
|
-
sd = this._parseServiceDataForWoContact(buf);
|
|
88
|
+
sd = this._parseServiceDataForWoContact(buf, onlog);
|
|
89
89
|
} else {
|
|
90
|
+
if (onlog && typeof onlog === 'function') {
|
|
91
|
+
onlog(`[parseAdvertising.${peripheral.id}] return null, model "${model}" not available!`);
|
|
92
|
+
}
|
|
90
93
|
return null;
|
|
91
94
|
}
|
|
92
95
|
|
|
93
96
|
if (!sd) {
|
|
97
|
+
if (onlog && typeof onlog === 'function') {
|
|
98
|
+
onlog(`[parseAdvertising.${peripheral.id}.${model}] return null, parsed serviceData empty!`);
|
|
99
|
+
}
|
|
94
100
|
return null;
|
|
95
101
|
}
|
|
96
102
|
let address = peripheral.address || '';
|
|
@@ -114,11 +120,18 @@ class SwitchbotAdvertising {
|
|
|
114
120
|
rssi: peripheral.rssi,
|
|
115
121
|
serviceData: sd
|
|
116
122
|
};
|
|
123
|
+
|
|
124
|
+
if (onlog && typeof onlog === 'function') {
|
|
125
|
+
onlog(`[parseAdvertising.${peripheral.id}.${model}] return ${JSON.stringify(data)}`);
|
|
126
|
+
}
|
|
117
127
|
return data;
|
|
118
128
|
}
|
|
119
129
|
|
|
120
|
-
_parseServiceDataForWoHand(buf) {
|
|
130
|
+
_parseServiceDataForWoHand(buf, onlog) {
|
|
121
131
|
if (buf.length !== 3) {
|
|
132
|
+
if (onlog && typeof onlog === 'function') {
|
|
133
|
+
onlog(`[_parseServiceDataForWoHand] Buffer length ${buf.length} !== 3!`);
|
|
134
|
+
}
|
|
122
135
|
return null;
|
|
123
136
|
}
|
|
124
137
|
let byte1 = buf.readUInt8(1);
|
|
@@ -139,8 +152,11 @@ class SwitchbotAdvertising {
|
|
|
139
152
|
return data;
|
|
140
153
|
}
|
|
141
154
|
|
|
142
|
-
_parseServiceDataForWoHumi(buf) {
|
|
155
|
+
_parseServiceDataForWoHumi(buf, onlog) {
|
|
143
156
|
if (buf.length !== 8) {
|
|
157
|
+
if (onlog && typeof onlog === 'function') {
|
|
158
|
+
onlog(`[_parseServiceDataForWoHumi] Buffer length ${buf.length} !== 8!`);
|
|
159
|
+
}
|
|
144
160
|
return null;
|
|
145
161
|
}
|
|
146
162
|
let byte1 = buf.readUInt8(1);
|
|
@@ -164,8 +180,11 @@ class SwitchbotAdvertising {
|
|
|
164
180
|
return data;
|
|
165
181
|
}
|
|
166
182
|
|
|
167
|
-
_parseServiceDataForWoSensorTH(buf) {
|
|
183
|
+
_parseServiceDataForWoSensorTH(buf, onlog) {
|
|
168
184
|
if (buf.length !== 6) {
|
|
185
|
+
if (onlog && typeof onlog === 'function') {
|
|
186
|
+
onlog(`[_parseServiceDataForWoSensorTH] Buffer length ${buf.length} !== 6!`);
|
|
187
|
+
}
|
|
169
188
|
return null;
|
|
170
189
|
}
|
|
171
190
|
let byte2 = buf.readUInt8(2);
|
|
@@ -193,8 +212,11 @@ class SwitchbotAdvertising {
|
|
|
193
212
|
return data;
|
|
194
213
|
}
|
|
195
214
|
|
|
196
|
-
_parseServiceDataForWoPresence(buf) {
|
|
215
|
+
_parseServiceDataForWoPresence(buf, onlog) {
|
|
197
216
|
if (buf.length !== 6) {
|
|
217
|
+
if (onlog && typeof onlog === 'function') {
|
|
218
|
+
onlog(`[_parseServiceDataForWoPresence] Buffer length ${buf.length} !== 6!`);
|
|
219
|
+
}
|
|
198
220
|
return null;
|
|
199
221
|
}
|
|
200
222
|
let byte1 = buf.readUInt8(1);
|
|
@@ -218,8 +240,11 @@ class SwitchbotAdvertising {
|
|
|
218
240
|
return data;
|
|
219
241
|
}
|
|
220
242
|
|
|
221
|
-
_parseServiceDataForWoContact(buf) {
|
|
243
|
+
_parseServiceDataForWoContact(buf, onlog) {
|
|
222
244
|
if (buf.length !== 9) {
|
|
245
|
+
if (onlog && typeof onlog === 'function') {
|
|
246
|
+
onlog(`[_parseServiceDataForWoContact] Buffer length ${buf.length} !== 9!`);
|
|
247
|
+
}
|
|
223
248
|
return null;
|
|
224
249
|
}
|
|
225
250
|
|
|
@@ -249,14 +274,18 @@ class SwitchbotAdvertising {
|
|
|
249
274
|
return data;
|
|
250
275
|
}
|
|
251
276
|
|
|
252
|
-
_parseServiceDataForWoCurtain(buf) {
|
|
253
|
-
if (buf.length !== 5) {
|
|
277
|
+
_parseServiceDataForWoCurtain(buf, onlog) {
|
|
278
|
+
if (buf.length !== 5 && buf.length !== 6) {
|
|
279
|
+
if (onlog && typeof onlog === 'function') {
|
|
280
|
+
onlog(`[_parseServiceDataForWoCurtain] Buffer length ${buf.length} !== 5 or 6!`);
|
|
281
|
+
}
|
|
254
282
|
return null;
|
|
255
283
|
}
|
|
256
284
|
let byte1 = buf.readUInt8(1);
|
|
257
285
|
let byte2 = buf.readUInt8(2);
|
|
258
286
|
let byte3 = buf.readUInt8(3);
|
|
259
287
|
let byte4 = buf.readUInt8(4);
|
|
288
|
+
// let byte5 = buf.readUInt8(5);
|
|
260
289
|
|
|
261
290
|
let calibration = (byte1 & 0b01000000) ? true : false; // Whether the calibration is completed
|
|
262
291
|
let battery = byte2 & 0b01111111; // %
|
package/lib/switchbot.js
CHANGED
|
@@ -34,6 +34,7 @@ class Switchbot {
|
|
|
34
34
|
this.noble = noble;
|
|
35
35
|
this.ondiscover = null;
|
|
36
36
|
this.onadvertisement = null;
|
|
37
|
+
this.onlog = null;
|
|
37
38
|
|
|
38
39
|
// Private properties
|
|
39
40
|
this._scanning = false;
|
|
@@ -178,7 +179,7 @@ class Switchbot {
|
|
|
178
179
|
}
|
|
179
180
|
|
|
180
181
|
_getDeviceObject(peripheral, id, model) {
|
|
181
|
-
let ad = switchbotAdvertising.parse(peripheral);
|
|
182
|
+
let ad = switchbotAdvertising.parse(peripheral, this.onlog);
|
|
182
183
|
if (this._filterAdvertising(ad, id, model)) {
|
|
183
184
|
let device = null;
|
|
184
185
|
switch (ad.serviceData.model) {
|
|
@@ -293,7 +294,7 @@ class Switchbot {
|
|
|
293
294
|
|
|
294
295
|
// Set a handler for the 'discover' event
|
|
295
296
|
this.noble.on('discover', (peripheral) => {
|
|
296
|
-
let ad = switchbotAdvertising.parse(peripheral);
|
|
297
|
+
let ad = switchbotAdvertising.parse(peripheral, this.onlog);
|
|
297
298
|
if (this._filterAdvertising(ad, p.id, p.model)) {
|
|
298
299
|
if (this.onadvertisement && typeof (this.onadvertisement) === 'function') {
|
|
299
300
|
this.onadvertisement(ad);
|
package/package.json
CHANGED
|
@@ -1,42 +1,42 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
2
|
+
"name": "node-switchbot",
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"description": "The node-switchbot is a Node.js module which allows you to move your Switchbot (Bot)'s arm and Switchbot Curtain(Curtain), also monitor the temperature/humidity from SwitchBot Thermometer & Hygrometer (Meter).",
|
|
5
|
+
"main": "./lib/switchbot.js",
|
|
6
|
+
"files": [
|
|
7
|
+
"lib"
|
|
8
|
+
],
|
|
9
|
+
"directories": {
|
|
10
|
+
"lib": "./lib"
|
|
11
|
+
},
|
|
12
|
+
"scripts": {
|
|
13
|
+
"check": "npm install && npm outdated",
|
|
14
|
+
"update": "ncu -u && npm update && npm install"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"switchbot",
|
|
18
|
+
"bot",
|
|
19
|
+
"meter",
|
|
20
|
+
"temperature",
|
|
21
|
+
"humidity",
|
|
22
|
+
"curtain",
|
|
23
|
+
"BLE",
|
|
24
|
+
"Bluetooth Low Energy",
|
|
25
|
+
"Bluetooth smart",
|
|
26
|
+
"Bluetooth"
|
|
27
|
+
],
|
|
28
|
+
"homepage": "https://github.com/OpenWonderLabs",
|
|
29
|
+
"author": "OpenWonderLabs (https://github.com/OpenWonderLabs)",
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"repository": {
|
|
32
|
+
"type": "git",
|
|
33
|
+
"url": "https://github.com/OpenWonderLabs/node-switchbot.git"
|
|
34
|
+
},
|
|
35
|
+
"readmeFilename": "README.md",
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@abandonware/noble": "^1.9.2-15"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"npm-check-updates": "^12.5.2"
|
|
41
|
+
}
|
|
42
42
|
}
|