node-switchbot 1.10.0 → 2.0.0-beta.1

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.
Files changed (93) hide show
  1. package/.gitattributes +2 -0
  2. package/.github/dependabot.yml +17 -0
  3. package/.github/labeler.yml +38 -0
  4. package/.github/npm-version-script.cjs +81 -0
  5. package/.github/workflows/beta-release.yml +31 -0
  6. package/.github/workflows/build.yml +18 -0
  7. package/.github/workflows/changerelease.yml +13 -0
  8. package/.github/workflows/dependabot.yml +17 -0
  9. package/.github/workflows/labeler.yml +16 -0
  10. package/.github/workflows/release-drafter.yml +14 -0
  11. package/.github/workflows/release.yml +24 -0
  12. package/.github/workflows/stale.yml +12 -0
  13. package/CHANGELOG.md +308 -0
  14. package/dist/advertising.d.ts +172 -0
  15. package/dist/advertising.d.ts.map +1 -0
  16. package/dist/advertising.js +620 -0
  17. package/dist/advertising.js.map +1 -0
  18. package/dist/device/woblindtilt.d.ts +9 -0
  19. package/dist/device/woblindtilt.d.ts.map +1 -0
  20. package/dist/device/woblindtilt.js +108 -0
  21. package/dist/device/woblindtilt.js.map +1 -0
  22. package/dist/device/wobulb.d.ts +39 -0
  23. package/dist/device/wobulb.d.ts.map +1 -0
  24. package/dist/device/wobulb.js +156 -0
  25. package/dist/device/wobulb.js.map +1 -0
  26. package/dist/device/wocontact.d.ts +4 -0
  27. package/dist/device/wocontact.d.ts.map +1 -0
  28. package/dist/device/wocontact.js +8 -0
  29. package/dist/device/wocontact.js.map +1 -0
  30. package/dist/device/wocurtain.d.ts +9 -0
  31. package/dist/device/wocurtain.d.ts.map +1 -0
  32. package/dist/device/wocurtain.js +104 -0
  33. package/dist/device/wocurtain.js.map +1 -0
  34. package/dist/device/wohand.d.ts +10 -0
  35. package/dist/device/wohand.d.ts.map +1 -0
  36. package/dist/device/wohand.js +93 -0
  37. package/dist/device/wohand.js.map +1 -0
  38. package/dist/device/wohumi.d.ts +10 -0
  39. package/dist/device/wohumi.d.ts.map +1 -0
  40. package/dist/device/wohumi.js +93 -0
  41. package/dist/device/wohumi.js.map +1 -0
  42. package/dist/device/woiosensorth.d.ts +4 -0
  43. package/dist/device/woiosensorth.d.ts.map +1 -0
  44. package/dist/device/woiosensorth.js +4 -0
  45. package/dist/device/woiosensorth.js.map +1 -0
  46. package/dist/device/woplugmini.d.ts +31 -0
  47. package/dist/device/woplugmini.d.ts.map +1 -0
  48. package/dist/device/woplugmini.js +68 -0
  49. package/dist/device/woplugmini.js.map +1 -0
  50. package/dist/device/wopresence.d.ts +4 -0
  51. package/dist/device/wopresence.d.ts.map +1 -0
  52. package/dist/device/wopresence.js +4 -0
  53. package/dist/device/wopresence.js.map +1 -0
  54. package/dist/device/wosensorth.d.ts +4 -0
  55. package/dist/device/wosensorth.d.ts.map +1 -0
  56. package/dist/device/wosensorth.js +4 -0
  57. package/dist/device/wosensorth.js.map +1 -0
  58. package/dist/device/wostrip.d.ts +39 -0
  59. package/dist/device/wostrip.d.ts.map +1 -0
  60. package/dist/device/wostrip.js +145 -0
  61. package/dist/device/wostrip.js.map +1 -0
  62. package/dist/device.d.ts +46 -0
  63. package/dist/device.d.ts.map +1 -0
  64. package/dist/device.js +498 -0
  65. package/dist/device.js.map +1 -0
  66. package/dist/index.d.ts +2 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +6 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/parameter-checker.d.ts +25 -0
  71. package/dist/parameter-checker.d.ts.map +1 -0
  72. package/dist/parameter-checker.js +488 -0
  73. package/dist/parameter-checker.js.map +1 -0
  74. package/dist/switchbot.d.ts +29 -0
  75. package/dist/switchbot.d.ts.map +1 -0
  76. package/dist/switchbot.js +461 -0
  77. package/dist/switchbot.js.map +1 -0
  78. package/package.json +19 -12
  79. package/lib/parameter-checker.js +0 -524
  80. package/lib/switchbot-advertising.js +0 -713
  81. package/lib/switchbot-device-woblindtilt.js +0 -120
  82. package/lib/switchbot-device-wobulb.js +0 -188
  83. package/lib/switchbot-device-wocontact.js +0 -6
  84. package/lib/switchbot-device-wocurtain.js +0 -117
  85. package/lib/switchbot-device-wohand.js +0 -106
  86. package/lib/switchbot-device-wohumi.js +0 -106
  87. package/lib/switchbot-device-woiosensorth.js +0 -6
  88. package/lib/switchbot-device-woplugmini.js +0 -84
  89. package/lib/switchbot-device-wopresence.js +0 -6
  90. package/lib/switchbot-device-wosensorth.js +0 -6
  91. package/lib/switchbot-device-wostrip.js +0 -182
  92. package/lib/switchbot-device.js +0 -536
  93. package/lib/switchbot.js +0 -496
@@ -0,0 +1,93 @@
1
+ import { Buffer } from 'buffer';
2
+ import { SwitchbotDevice } from '../switchbot.js';
3
+ export class WoHumi extends SwitchbotDevice {
4
+ /* ------------------------------------------------------------------
5
+ * press()
6
+ * - Press
7
+ *
8
+ * [Arguments]
9
+ * - none
10
+ *
11
+ * [Return value]
12
+ * - Promise object
13
+ * Nothing will be passed to the `resolve()`.
14
+ * ---------------------------------------------------------------- */
15
+ press() {
16
+ return this._operateBot([0x57, 0x01, 0x00]);
17
+ }
18
+ /* ------------------------------------------------------------------
19
+ * turnOn()
20
+ * - Turn on
21
+ *
22
+ * [Arguments]
23
+ * - none
24
+ *
25
+ * [Return value]
26
+ * - Promise object
27
+ * Nothing will be passed to the `resolve()`.
28
+ * ---------------------------------------------------------------- */
29
+ turnOn() {
30
+ return this._operateBot([0x57, 0x01, 0x01]);
31
+ }
32
+ /* ------------------------------------------------------------------
33
+ * turnOff()
34
+ * - Turn off
35
+ *
36
+ * [Arguments]
37
+ * - none
38
+ *
39
+ * [Return value]
40
+ * - Promise object
41
+ * Nothing will be passed to the `resolve()`.
42
+ * ---------------------------------------------------------------- */
43
+ turnOff() {
44
+ return this._operateBot([0x57, 0x01, 0x02]);
45
+ }
46
+ /* ------------------------------------------------------------------
47
+ * down()
48
+ * - Down
49
+ *
50
+ * [Arguments]
51
+ * - none
52
+ *
53
+ * [Return value]
54
+ * - Promise object
55
+ * Nothing will be passed to the `resolve()`.
56
+ * ---------------------------------------------------------------- */
57
+ down() {
58
+ return this._operateBot([0x57, 0x01, 0x03]);
59
+ }
60
+ /* ------------------------------------------------------------------
61
+ * up()
62
+ * - Up
63
+ *
64
+ * [Arguments]
65
+ * - none
66
+ *
67
+ * [Return value]
68
+ * - Promise object
69
+ * Nothing will be passed to the `resolve()`.
70
+ * ---------------------------------------------------------------- */
71
+ up() {
72
+ return this._operateBot([0x57, 0x01, 0x04]);
73
+ }
74
+ _operateBot(bytes) {
75
+ return new Promise((resolve, reject) => {
76
+ const req_buf = Buffer.from(bytes);
77
+ this._command(req_buf)
78
+ .then((res_buf) => {
79
+ const code = res_buf.readUInt8(0);
80
+ if (res_buf.length === 3 && (code === 0x01 || code === 0x05)) {
81
+ resolve();
82
+ }
83
+ else {
84
+ reject(new Error('The device returned an error: 0x' + res_buf.toString('hex')));
85
+ }
86
+ })
87
+ .catch((error) => {
88
+ reject(error);
89
+ });
90
+ });
91
+ }
92
+ }
93
+ //# sourceMappingURL=wohumi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wohumi.js","sourceRoot":"","sources":["../../src/device/wohumi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,OAAO,MAAO,SAAQ,eAAe;IACzC;;;;;;;;;;0EAUsE;IACtE,KAAK;QACH,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;;;;;;0EAUsE;IACtE,MAAM;QACJ,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;;;;;;0EAUsE;IACtE,OAAO;QACL,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;;;;;;0EAUsE;IACtE,IAAI;QACF,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;;;;;;0EAUsE;IACtE,EAAE;QACA,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,WAAW,CAAC,KAAK;QACf,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;iBACnB,IAAI,CAAC,CAAC,OAAgB,EAAE,EAAE;gBACzB,MAAM,IAAI,GAAI,OAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC9C,IAAK,OAAkB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;oBACzE,OAAO,EAAE,CAAC;gBACZ,CAAC;qBAAM,CAAC;oBACN,MAAM,CACJ,IAAI,KAAK,CACP,kCAAkC,GAAI,OAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,CACzE,CACF,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ import { SwitchbotDevice } from '../switchbot.js';
2
+ export declare class WoIOSensorTH extends SwitchbotDevice {
3
+ }
4
+ //# sourceMappingURL=woiosensorth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"woiosensorth.d.ts","sourceRoot":"","sources":["../../src/device/woiosensorth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,qBAAa,YAAa,SAAQ,eAAe;CAAG"}
@@ -0,0 +1,4 @@
1
+ import { SwitchbotDevice } from '../switchbot.js';
2
+ export class WoIOSensorTH extends SwitchbotDevice {
3
+ }
4
+ //# sourceMappingURL=woiosensorth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"woiosensorth.js","sourceRoot":"","sources":["../../src/device/woiosensorth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,OAAO,YAAa,SAAQ,eAAe;CAAG"}
@@ -0,0 +1,31 @@
1
+ import { SwitchbotDevice } from '../switchbot.js';
2
+ /**
3
+ * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/plugmini.md
4
+ */
5
+ export declare class WoPlugMini extends SwitchbotDevice {
6
+ /**
7
+ * @returns {Promise<boolean>} resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
8
+ */
9
+ readState(): Promise<unknown>;
10
+ /**
11
+ * @private
12
+ */
13
+ _setState(reqByteArray: any): Promise<unknown>;
14
+ /**
15
+ * @returns {Promise<boolean>} resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
16
+ */
17
+ turnOn(): Promise<unknown>;
18
+ /**
19
+ * @returns {Promise<boolean>} resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
20
+ */
21
+ turnOff(): Promise<unknown>;
22
+ /**
23
+ * @returns {Promise<boolean>} resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
24
+ */
25
+ toggle(): Promise<unknown>;
26
+ /**
27
+ * @private
28
+ */
29
+ _operateBot(bytes: any): Promise<unknown>;
30
+ }
31
+ //# sourceMappingURL=woplugmini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"woplugmini.d.ts","sourceRoot":"","sources":["../../src/device/woplugmini.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,qBAAa,UAAW,SAAQ,eAAe;IAC7C;;OAEG;IACH,SAAS;IAIT;;OAEG;IACH,SAAS,CAAC,YAAY,KAAA;IAKtB;;OAEG;IACH,MAAM;IAIN;;OAEG;IACH,OAAO;IAIP;;OAEG;IACH,MAAM;IAIN;;OAEG;IACH,WAAW,CAAC,KAAK,KAAA;CAgClB"}
@@ -0,0 +1,68 @@
1
+ import { Buffer } from 'buffer';
2
+ import { SwitchbotDevice } from '../switchbot.js';
3
+ /**
4
+ * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/plugmini.md
5
+ */
6
+ export class WoPlugMini extends SwitchbotDevice {
7
+ /**
8
+ * @returns {Promise<boolean>} resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
9
+ */
10
+ readState() {
11
+ return this._operateBot([0x57, 0x0f, 0x51, 0x01]);
12
+ }
13
+ /**
14
+ * @private
15
+ */
16
+ _setState(reqByteArray) {
17
+ const base = [0x57, 0x0f, 0x50, 0x01];
18
+ return this._operateBot([...base, ...reqByteArray]);
19
+ }
20
+ /**
21
+ * @returns {Promise<boolean>} resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
22
+ */
23
+ turnOn() {
24
+ return this._setState([0x01, 0x80]);
25
+ }
26
+ /**
27
+ * @returns {Promise<boolean>} resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
28
+ */
29
+ turnOff() {
30
+ return this._setState([0x01, 0x00]);
31
+ }
32
+ /**
33
+ * @returns {Promise<boolean>} resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
34
+ */
35
+ toggle() {
36
+ return this._setState([0x02, 0x80]);
37
+ }
38
+ /**
39
+ * @private
40
+ */
41
+ _operateBot(bytes) {
42
+ const req_buf = Buffer.from(bytes);
43
+ return new Promise((resolve, reject) => {
44
+ this._command(req_buf)
45
+ .then((res_bytes) => {
46
+ const res_buf = Buffer.from(res_bytes);
47
+ if (res_buf.length === 2) {
48
+ const code = res_buf.readUInt8(1);
49
+ if (code === 0x00 || code === 0x80) {
50
+ const is_on = code === 0x80;
51
+ resolve(is_on);
52
+ }
53
+ else {
54
+ reject(new Error('The device returned an error: 0x' + res_buf.toString('hex')));
55
+ }
56
+ }
57
+ else {
58
+ reject(new Error('Expecting a 2-byte response, got instead: 0x' +
59
+ res_buf.toString('hex')));
60
+ }
61
+ })
62
+ .catch((error) => {
63
+ reject(error);
64
+ });
65
+ });
66
+ }
67
+ }
68
+ //# sourceMappingURL=woplugmini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"woplugmini.js","sourceRoot":"","sources":["../../src/device/woplugmini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,eAAe;IAC7C;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,YAAY;QACpB,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,KAAK;QACf,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;iBACnB,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;gBAClB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,SAAuB,CAAC,CAAC;gBACrD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBAClC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;wBACnC,MAAM,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC;wBAC5B,OAAO,CAAC,KAAK,CAAC,CAAC;oBACjB,CAAC;yBAAM,CAAC;wBACN,MAAM,CACJ,IAAI,KAAK,CACP,kCAAkC,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC7D,CACF,CAAC;oBACJ,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,CACJ,IAAI,KAAK,CACP,8CAA8C;wBAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC1B,CACF,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ import { SwitchbotDevice } from '../switchbot.js';
2
+ export declare class WoPresence extends SwitchbotDevice {
3
+ }
4
+ //# sourceMappingURL=wopresence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wopresence.d.ts","sourceRoot":"","sources":["../../src/device/wopresence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,qBAAa,UAAW,SAAQ,eAAe;CAAG"}
@@ -0,0 +1,4 @@
1
+ import { SwitchbotDevice } from '../switchbot.js';
2
+ export class WoPresence extends SwitchbotDevice {
3
+ }
4
+ //# sourceMappingURL=wopresence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wopresence.js","sourceRoot":"","sources":["../../src/device/wopresence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,OAAO,UAAW,SAAQ,eAAe;CAAG"}
@@ -0,0 +1,4 @@
1
+ import { SwitchbotDevice } from '../switchbot.js';
2
+ export declare class WoSensorTH extends SwitchbotDevice {
3
+ }
4
+ //# sourceMappingURL=wosensorth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wosensorth.d.ts","sourceRoot":"","sources":["../../src/device/wosensorth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,qBAAa,UAAW,SAAQ,eAAe;CAAG"}
@@ -0,0 +1,4 @@
1
+ import { SwitchbotDevice } from '../switchbot.js';
2
+ export class WoSensorTH extends SwitchbotDevice {
3
+ }
4
+ //# sourceMappingURL=wosensorth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wosensorth.js","sourceRoot":"","sources":["../../src/device/wosensorth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,OAAO,UAAW,SAAQ,eAAe;CAAG"}
@@ -0,0 +1,39 @@
1
+ import { SwitchbotDevice } from '../switchbot.js';
2
+ /**
3
+ * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/colorbulb.md
4
+ */
5
+ export declare class WoStrip extends SwitchbotDevice {
6
+ /**
7
+ * @returns {Promise<boolean>} resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
8
+ */
9
+ readState(): Promise<unknown>;
10
+ /**
11
+ * @private
12
+ */
13
+ _setState(reqByteArray: any): Promise<unknown>;
14
+ /**
15
+ * @returns {Promise<boolean>} resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
16
+ */
17
+ turnOn(): Promise<unknown>;
18
+ /**
19
+ * @returns {Promise<boolean>} resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
20
+ */
21
+ turnOff(): Promise<unknown>;
22
+ /**
23
+ * @returns {Promise<number>} resolves with brightness percent
24
+ */
25
+ setBrightness(brightness: any): Promise<unknown>;
26
+ /**
27
+ * @returns {Promise<number>} resolves with color temperature
28
+ */
29
+ setColorTemperature(color_temperature: any): Promise<unknown> | undefined;
30
+ /**
31
+ * @returns {Promise<number>} resolves with brightness + rgb
32
+ */
33
+ setRGB(brightness: any, red: any, green: any, blue: any): Promise<unknown>;
34
+ /**
35
+ * @private
36
+ */
37
+ _operateBot(bytes: any): Promise<unknown>;
38
+ }
39
+ //# sourceMappingURL=wostrip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wostrip.d.ts","sourceRoot":"","sources":["../../src/device/wostrip.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,qBAAa,OAAQ,SAAQ,eAAe;IAC1C;;OAEG;IACH,SAAS;IAIT;;OAEG;IACH,SAAS,CAAC,YAAY,KAAA;IAKtB;;OAEG;IACH,MAAM;IAIN;;OAEG;IACH,OAAO;IAIP;;OAEG;IACH,aAAa,CAAC,UAAU,KAAA;IAmBxB;;OAEG;IACH,mBAAmB,CAAC,iBAAiB,KAAA;IAarC;;OAEG;IACH,MAAM,CAAC,UAAU,KAAA,EAAE,GAAG,KAAA,EAAE,KAAK,KAAA,EAAE,IAAI,KAAA;IAgEnC;;OAEG;IACH,WAAW,CAAC,KAAK,KAAA;CAgClB"}
@@ -0,0 +1,145 @@
1
+ import { Buffer } from 'buffer';
2
+ import { SwitchbotDevice } from '../switchbot.js';
3
+ /**
4
+ * @see https://github.com/OpenWonderLabs/SwitchBotAPI-BLE/blob/latest/devicetypes/colorbulb.md
5
+ */
6
+ export class WoStrip extends SwitchbotDevice {
7
+ /**
8
+ * @returns {Promise<boolean>} resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
9
+ */
10
+ readState() {
11
+ return this._operateBot([0x57, 0x0f, 0x4A, 0x01]);
12
+ }
13
+ /**
14
+ * @private
15
+ */
16
+ _setState(reqByteArray) {
17
+ const base = [0x57, 0x0f, 0x49, 0x01];
18
+ return this._operateBot([...base, ...reqByteArray]);
19
+ }
20
+ /**
21
+ * @returns {Promise<boolean>} resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
22
+ */
23
+ turnOn() {
24
+ return this._setState([0x01, 0x01]);
25
+ }
26
+ /**
27
+ * @returns {Promise<boolean>} resolves with a boolean that tells whether the plug in ON(true) or OFF(false)
28
+ */
29
+ turnOff() {
30
+ return this._setState([0x01, 0x02]);
31
+ }
32
+ /**
33
+ * @returns {Promise<number>} resolves with brightness percent
34
+ */
35
+ setBrightness(brightness) {
36
+ if (typeof brightness !== 'number') {
37
+ return new Promise((resolve, reject) => {
38
+ reject(new Error('The type of target brightness percentage is incorrent: ' +
39
+ typeof brightness));
40
+ });
41
+ }
42
+ if (brightness > 100) {
43
+ brightness = 100;
44
+ }
45
+ else if (brightness < 0) {
46
+ brightness = 0;
47
+ }
48
+ return this._setState([0x02, 0x14]);
49
+ }
50
+ /**
51
+ * @returns {Promise<number>} resolves with color temperature
52
+ */
53
+ setColorTemperature(color_temperature) {
54
+ if (color_temperature) {
55
+ return new Promise((resolve, reject) => {
56
+ reject(new Error('Strip Light Doesn\'t Support Color temperature: ' +
57
+ typeof color_temperature));
58
+ });
59
+ }
60
+ }
61
+ /**
62
+ * @returns {Promise<number>} resolves with brightness + rgb
63
+ */
64
+ setRGB(brightness, red, green, blue) {
65
+ if (typeof brightness !== 'number') {
66
+ return new Promise((resolve, reject) => {
67
+ reject(new Error('The type of target brightness percentage is incorrent: ' +
68
+ typeof brightness));
69
+ });
70
+ }
71
+ if (typeof red !== 'number') {
72
+ return new Promise((resolve, reject) => {
73
+ reject(new Error('The type of target red is incorrent: ' +
74
+ typeof red));
75
+ });
76
+ }
77
+ if (typeof green !== 'number') {
78
+ return new Promise((resolve, reject) => {
79
+ reject(new Error('The type of target green is incorrent: ' +
80
+ typeof green));
81
+ });
82
+ }
83
+ if (typeof blue !== 'number') {
84
+ return new Promise((resolve, reject) => {
85
+ reject(new Error('The type of target blue is incorrent: ' +
86
+ typeof blue));
87
+ });
88
+ }
89
+ if (brightness > 100) {
90
+ brightness = 100;
91
+ }
92
+ else if (brightness < 0) {
93
+ brightness = 0;
94
+ }
95
+ if (red > 255) {
96
+ red = 255;
97
+ }
98
+ else if (red < 0) {
99
+ red = 0;
100
+ }
101
+ if (green > 255) {
102
+ green = 255;
103
+ }
104
+ else if (green < 0) {
105
+ green = 0;
106
+ }
107
+ if (blue > 255) {
108
+ blue = 255;
109
+ }
110
+ else if (blue < 0) {
111
+ blue = 0;
112
+ }
113
+ return this._setState([0x02, 0x12, brightness, red, green, blue]);
114
+ }
115
+ /**
116
+ * @private
117
+ */
118
+ _operateBot(bytes) {
119
+ const req_buf = Buffer.from(bytes);
120
+ return new Promise((resolve, reject) => {
121
+ this._command(req_buf)
122
+ .then((res_bytes) => {
123
+ const res_buf = Buffer.from(res_bytes);
124
+ if (res_buf.length === 2) {
125
+ const code = res_buf.readUInt8(1);
126
+ if (code === 0x00 || code === 0x80) {
127
+ const is_on = code === 0x80;
128
+ resolve(is_on);
129
+ }
130
+ else {
131
+ reject(new Error('The device returned an error: 0x' + res_buf.toString('hex')));
132
+ }
133
+ }
134
+ else {
135
+ reject(new Error('Expecting a 2-byte response, got instead: 0x' +
136
+ res_buf.toString('hex')));
137
+ }
138
+ })
139
+ .catch((error) => {
140
+ reject(error);
141
+ });
142
+ });
143
+ }
144
+ }
145
+ //# sourceMappingURL=wostrip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wostrip.js","sourceRoot":"","sources":["../../src/device/wostrip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,MAAM,OAAO,OAAQ,SAAQ,eAAe;IAC1C;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,YAAY;QACpB,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,UAAU;QACtB,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,MAAM,CACJ,IAAI,KAAK,CACP,yDAAyD;oBACvD,OAAO,UAAU,CACpB,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;YACrB,UAAU,GAAG,GAAG,CAAC;QACnB,CAAC;aAAM,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YAC1B,UAAU,GAAG,CAAC,CAAC;QACjB,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,iBAAiB;QACnC,IAAI,iBAAiB,EAAE,CAAC;YACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,MAAM,CACJ,IAAI,KAAK,CACP,kDAAkD;oBAChD,OAAO,iBAAiB,CAC3B,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI;QACjC,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,MAAM,CACJ,IAAI,KAAK,CACP,yDAAyD;oBACvD,OAAO,UAAU,CACpB,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,MAAM,CACJ,IAAI,KAAK,CACP,uCAAuC;oBACrC,OAAO,GAAG,CACb,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,MAAM,CACJ,IAAI,KAAK,CACP,yCAAyC;oBACvC,OAAO,KAAK,CACf,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,MAAM,CACJ,IAAI,KAAK,CACP,wCAAwC;oBACtC,OAAO,IAAI,CACd,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;YACrB,UAAU,GAAG,GAAG,CAAC;QACnB,CAAC;aAAM,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YAC1B,UAAU,GAAG,CAAC,CAAC;QACjB,CAAC;QACD,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;YACd,GAAG,GAAG,GAAG,CAAC;QACZ,CAAC;aAAM,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACnB,GAAG,GAAG,CAAC,CAAC;QACV,CAAC;QACD,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;YAChB,KAAK,GAAG,GAAG,CAAC;QACd,CAAC;aAAM,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACrB,KAAK,GAAG,CAAC,CAAC;QACZ,CAAC;QACD,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC;YACf,IAAI,GAAG,GAAG,CAAC;QACb,CAAC;aAAM,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACpB,IAAI,GAAG,CAAC,CAAC;QACX,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,KAAK;QACf,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;iBACnB,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;gBAClB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,SAA4C,CAAC,CAAC;gBAC1E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBAClC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;wBACnC,MAAM,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC;wBAC5B,OAAO,CAAC,KAAK,CAAC,CAAC;oBACjB,CAAC;yBAAM,CAAC;wBACN,MAAM,CACJ,IAAI,KAAK,CACP,kCAAkC,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC7D,CACF,CAAC;oBACJ,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,CACJ,IAAI,KAAK,CACP,8CAA8C;wBAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC1B,CACF,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,46 @@
1
+ export declare class SwitchbotDevice {
2
+ _peripheral: any;
3
+ _noble: any;
4
+ _chars: any;
5
+ _SERV_UUID_PRIMARY: any;
6
+ _CHAR_UUID_WRITE: any;
7
+ _CHAR_UUID_NOTIFY: any;
8
+ _CHAR_UUID_DEVICE: any;
9
+ _READ_TIMEOUT_MSEC: any;
10
+ _WRITE_TIMEOUT_MSEC: any;
11
+ _COMMAND_TIMEOUT_MSEC: any;
12
+ _id: any;
13
+ _address: any;
14
+ _model: any;
15
+ _modelName: any;
16
+ _was_connected_explicitly: any;
17
+ _connected: any;
18
+ _onconnect: () => void;
19
+ _ondisconnect: () => void;
20
+ _ondisconnect_internal: () => void;
21
+ _onnotify_internal: () => void;
22
+ constructor(peripheral: any, noble: any);
23
+ get id(): any;
24
+ get address(): any;
25
+ get model(): any;
26
+ get modelName(): any;
27
+ get connectionState(): any;
28
+ set onconnect(func: any);
29
+ set ondisconnect(func: any);
30
+ connect(): Promise<void>;
31
+ _connect(): Promise<void>;
32
+ _getCharacteristics(): Promise<unknown>;
33
+ _discoverServices(): Promise<unknown>;
34
+ _discoverCharacteristics(service: any): Promise<unknown>;
35
+ _subscribe(): Promise<void>;
36
+ _unsubscribe(): Promise<void>;
37
+ disconnect(): Promise<void>;
38
+ _disconnect(): Promise<void>;
39
+ getDeviceName(): Promise<unknown>;
40
+ setDeviceName(name: any): Promise<void>;
41
+ _command(req_buf: any): Promise<unknown>;
42
+ _waitCommandResponse(): Promise<unknown>;
43
+ _read(char: any): Promise<unknown>;
44
+ _write(char: any, buf: any): Promise<void>;
45
+ }
46
+ //# sourceMappingURL=device.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"AAYA,qBAAa,eAAe;IAC1B,WAAW,MAAC;IACZ,MAAM,MAAC;IACP,MAAM,MAAC;IACP,kBAAkB,MAAC;IACnB,gBAAgB,MAAC;IACjB,iBAAiB,MAAC;IAClB,iBAAiB,MAAC;IAClB,kBAAkB,MAAC;IACnB,mBAAmB,MAAC;IACpB,qBAAqB,MAAC;IACtB,GAAG,MAAC;IACJ,QAAQ,MAAC;IACT,MAAM,MAAC;IACP,UAAU,MAAC;IACX,yBAAyB,MAAC;IAC1B,UAAU,MAAC;IACX,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,sBAAsB,EAAE,MAAM,IAAI,CAAC;IACnC,kBAAkB,EAAE,MAAM,IAAI,CAAC;gBASnB,UAAU,KAAA,EAAE,KAAK,KAAA;IAwB7B,IAAI,EAAE,QAEL;IAED,IAAI,OAAO,QAEV;IAED,IAAI,KAAK,QAER;IAED,IAAI,SAAS,QAEZ;IAED,IAAI,eAAe,QAMlB;IAGD,IAAI,SAAS,CAAC,IAAI,KAAA,EAKjB;IAED,IAAI,YAAY,CAAC,IAAI,KAAA,EAKpB;IAaD,OAAO;IAKP,QAAQ;IA4DR,mBAAmB;IAsEnB,iBAAiB;IAwBjB,wBAAwB,CAAC,OAAO,KAAA;IAYhC,UAAU;IAoBV,YAAY;IAyBZ,UAAU;IAyBV,WAAW;IAqBX,aAAa;IAwCb,aAAa,CAAC,IAAI,KAAA;IA4ClB,QAAQ,CAAC,OAAO,KAAA;IAgChB,oBAAoB;IAsBpB,KAAK,CAAC,IAAI,KAAA;IAuBV,MAAM,CAAC,IAAI,KAAA,EAAE,GAAG,KAAA;CAqBjB"}