@switchbot/homebridge-switchbot 3.5.0-beta.5 → 3.5.0-beta.50

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 (168) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/config.schema.json +120 -17
  3. package/dist/device/blindtilt.d.ts +21 -94
  4. package/dist/device/blindtilt.d.ts.map +1 -1
  5. package/dist/device/blindtilt.js +351 -757
  6. package/dist/device/blindtilt.js.map +1 -1
  7. package/dist/device/bot.d.ts +25 -71
  8. package/dist/device/bot.d.ts.map +1 -1
  9. package/dist/device/bot.js +587 -761
  10. package/dist/device/bot.js.map +1 -1
  11. package/dist/device/ceilinglight.d.ts +13 -67
  12. package/dist/device/ceilinglight.d.ts.map +1 -1
  13. package/dist/device/ceilinglight.js +213 -588
  14. package/dist/device/ceilinglight.js.map +1 -1
  15. package/dist/device/colorbulb.d.ts +13 -74
  16. package/dist/device/colorbulb.d.ts.map +1 -1
  17. package/dist/device/colorbulb.js +255 -634
  18. package/dist/device/colorbulb.js.map +1 -1
  19. package/dist/device/contact.d.ts +14 -65
  20. package/dist/device/contact.d.ts.map +1 -1
  21. package/dist/device/contact.js +208 -532
  22. package/dist/device/contact.js.map +1 -1
  23. package/dist/device/curtain.d.ts +17 -86
  24. package/dist/device/curtain.d.ts.map +1 -1
  25. package/dist/device/curtain.js +339 -787
  26. package/dist/device/curtain.js.map +1 -1
  27. package/dist/device/device.d.ts +59 -0
  28. package/dist/device/device.d.ts.map +1 -0
  29. package/dist/device/device.js +681 -0
  30. package/dist/device/device.js.map +1 -0
  31. package/dist/device/fan.d.ts +51 -0
  32. package/dist/device/fan.d.ts.map +1 -0
  33. package/dist/device/fan.js +504 -0
  34. package/dist/device/fan.js.map +1 -0
  35. package/dist/device/hub.d.ts +15 -59
  36. package/dist/device/hub.d.ts.map +1 -1
  37. package/dist/device/hub.js +246 -597
  38. package/dist/device/hub.js.map +1 -1
  39. package/dist/device/humidifier.d.ts +10 -65
  40. package/dist/device/humidifier.d.ts.map +1 -1
  41. package/dist/device/humidifier.js +217 -579
  42. package/dist/device/humidifier.js.map +1 -1
  43. package/dist/device/iosensor.d.ts +11 -64
  44. package/dist/device/iosensor.d.ts.map +1 -1
  45. package/dist/device/iosensor.js +178 -585
  46. package/dist/device/iosensor.js.map +1 -1
  47. package/dist/device/lightstrip.d.ts +10 -68
  48. package/dist/device/lightstrip.d.ts.map +1 -1
  49. package/dist/device/lightstrip.js +256 -569
  50. package/dist/device/lightstrip.js.map +1 -1
  51. package/dist/device/lock.d.ts +15 -62
  52. package/dist/device/lock.d.ts.map +1 -1
  53. package/dist/device/lock.js +214 -543
  54. package/dist/device/lock.js.map +1 -1
  55. package/dist/device/meter.d.ts +13 -63
  56. package/dist/device/meter.d.ts.map +1 -1
  57. package/dist/device/meter.js +174 -578
  58. package/dist/device/meter.js.map +1 -1
  59. package/dist/device/meterplus.d.ts +13 -64
  60. package/dist/device/meterplus.d.ts.map +1 -1
  61. package/dist/device/meterplus.js +163 -578
  62. package/dist/device/meterplus.js.map +1 -1
  63. package/dist/device/motion.d.ts +13 -69
  64. package/dist/device/motion.d.ts.map +1 -1
  65. package/dist/device/motion.js +141 -520
  66. package/dist/device/motion.js.map +1 -1
  67. package/dist/device/plug.d.ts +9 -57
  68. package/dist/device/plug.d.ts.map +1 -1
  69. package/dist/device/plug.js +86 -453
  70. package/dist/device/plug.js.map +1 -1
  71. package/dist/device/robotvacuumcleaner.d.ts +11 -62
  72. package/dist/device/robotvacuumcleaner.d.ts.map +1 -1
  73. package/dist/device/robotvacuumcleaner.js +144 -452
  74. package/dist/device/robotvacuumcleaner.js.map +1 -1
  75. package/dist/device/waterdetector.d.ts +9 -70
  76. package/dist/device/waterdetector.d.ts.map +1 -1
  77. package/dist/device/waterdetector.js +125 -665
  78. package/dist/device/waterdetector.js.map +1 -1
  79. package/dist/homebridge-ui/public/index.html +2 -2
  80. package/dist/index.js +1 -1
  81. package/dist/irdevice/airconditioner.d.ts +8 -48
  82. package/dist/irdevice/airconditioner.d.ts.map +1 -1
  83. package/dist/irdevice/airconditioner.js +309 -419
  84. package/dist/irdevice/airconditioner.js.map +1 -1
  85. package/dist/irdevice/airpurifier.d.ts +7 -38
  86. package/dist/irdevice/airpurifier.d.ts.map +1 -1
  87. package/dist/irdevice/airpurifier.js +72 -304
  88. package/dist/irdevice/airpurifier.js.map +1 -1
  89. package/dist/irdevice/camera.d.ts +6 -35
  90. package/dist/irdevice/camera.d.ts.map +1 -1
  91. package/dist/irdevice/camera.js +34 -278
  92. package/dist/irdevice/camera.js.map +1 -1
  93. package/dist/irdevice/fan.d.ts +6 -39
  94. package/dist/irdevice/fan.d.ts.map +1 -1
  95. package/dist/irdevice/fan.js +67 -311
  96. package/dist/irdevice/fan.js.map +1 -1
  97. package/dist/irdevice/irdevice.d.ts +40 -0
  98. package/dist/irdevice/irdevice.d.ts.map +1 -0
  99. package/dist/irdevice/irdevice.js +512 -0
  100. package/dist/irdevice/irdevice.js.map +1 -0
  101. package/dist/irdevice/light.d.ts +6 -34
  102. package/dist/irdevice/light.d.ts.map +1 -1
  103. package/dist/irdevice/light.js +23 -272
  104. package/dist/irdevice/light.js.map +1 -1
  105. package/dist/irdevice/other.d.ts +18 -47
  106. package/dist/irdevice/other.d.ts.map +1 -1
  107. package/dist/irdevice/other.js +352 -546
  108. package/dist/irdevice/other.js.map +1 -1
  109. package/dist/irdevice/tv.d.ts +7 -39
  110. package/dist/irdevice/tv.d.ts.map +1 -1
  111. package/dist/irdevice/tv.js +82 -321
  112. package/dist/irdevice/tv.js.map +1 -1
  113. package/dist/irdevice/vacuumcleaner.d.ts +6 -35
  114. package/dist/irdevice/vacuumcleaner.d.ts.map +1 -1
  115. package/dist/irdevice/vacuumcleaner.js +41 -284
  116. package/dist/irdevice/vacuumcleaner.js.map +1 -1
  117. package/dist/irdevice/waterheater.d.ts +6 -35
  118. package/dist/irdevice/waterheater.d.ts.map +1 -1
  119. package/dist/irdevice/waterheater.js +42 -287
  120. package/dist/irdevice/waterheater.js.map +1 -1
  121. package/dist/platform.d.ts +14 -1
  122. package/dist/platform.d.ts.map +1 -1
  123. package/dist/platform.js +291 -147
  124. package/dist/platform.js.map +1 -1
  125. package/dist/settings.d.ts +41 -11
  126. package/dist/settings.d.ts.map +1 -1
  127. package/dist/settings.js +0 -552
  128. package/dist/settings.js.map +1 -1
  129. package/dist/utils.d.ts +77 -0
  130. package/dist/utils.d.ts.map +1 -1
  131. package/dist/utils.js +638 -1
  132. package/dist/utils.js.map +1 -1
  133. package/package.json +15 -14
  134. package/src/custom.d.ts +2 -1
  135. package/src/device/blindtilt.ts +377 -783
  136. package/src/device/bot.ts +620 -845
  137. package/src/device/ceilinglight.ts +226 -608
  138. package/src/device/colorbulb.ts +268 -657
  139. package/src/device/contact.ts +233 -554
  140. package/src/device/curtain.ts +359 -811
  141. package/src/device/device.ts +709 -0
  142. package/src/device/fan.ts +553 -0
  143. package/src/device/hub.ts +273 -625
  144. package/src/device/humidifier.ts +245 -624
  145. package/src/device/iosensor.ts +204 -611
  146. package/src/device/lightstrip.ts +277 -597
  147. package/src/device/lock.ts +251 -583
  148. package/src/device/meter.ts +199 -601
  149. package/src/device/meterplus.ts +188 -603
  150. package/src/device/motion.ts +160 -542
  151. package/src/device/plug.ts +96 -481
  152. package/src/device/robotvacuumcleaner.ts +165 -478
  153. package/src/device/waterdetector.ts +142 -689
  154. package/src/homebridge-ui/public/index.html +2 -2
  155. package/src/index.ts +1 -1
  156. package/src/irdevice/airconditioner.ts +330 -446
  157. package/src/irdevice/airpurifier.ts +89 -321
  158. package/src/irdevice/camera.ts +42 -293
  159. package/src/irdevice/fan.ts +78 -327
  160. package/src/irdevice/irdevice.ts +528 -0
  161. package/src/irdevice/light.ts +32 -287
  162. package/src/irdevice/other.ts +396 -615
  163. package/src/irdevice/tv.ts +100 -339
  164. package/src/irdevice/vacuumcleaner.ts +49 -305
  165. package/src/irdevice/waterheater.ts +50 -310
  166. package/src/platform.ts +301 -155
  167. package/src/settings.ts +57 -566
  168. package/src/utils.ts +642 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../../src/device/device.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { deviceBase } from './device.js';
2
+ import { SwitchBotPlatform } from '../platform.js';
3
+ import { Subject } from 'rxjs';
4
+ import { CharacteristicValue, PlatformAccessory } from 'homebridge';
5
+ import { device, devicesConfig, serviceData, deviceStatus } from '../settings.js';
6
+ export declare class Fan extends deviceBase {
7
+ readonly platform: SwitchBotPlatform;
8
+ private Fan;
9
+ private Battery;
10
+ plugUpdateInProgress: boolean;
11
+ doPlugUpdate: Subject<void>;
12
+ constructor(platform: SwitchBotPlatform, accessory: PlatformAccessory, device: device & devicesConfig);
13
+ BLEparseStatus(serviceData: serviceData): Promise<void>;
14
+ openAPIparseStatus(deviceStatus: deviceStatus): Promise<void>;
15
+ /**
16
+ * Asks the SwitchBot API for the latest device information
17
+ */
18
+ refreshStatus(): Promise<void>;
19
+ BLERefreshStatus(): Promise<void>;
20
+ openAPIRefreshStatus(): Promise<void>;
21
+ /**
22
+ * Pushes the requested changes to the SwitchBot API
23
+ * deviceType commandType Command command parameter Description
24
+ * Battery Circulator Fan - "command" "turnOff" "default" = set to OFF state
25
+ * Battery Circulator Fan - "command" "turnOn" "default" = set to ON state
26
+ * Battery Circulator Fan - "command" "setNightLightMode" "off, 1, or 2" = off, turn off nightlight, (1, bright) (2, dim)
27
+ * Battery Circulator Fan - "command" "setWindMode" "direct, natural, sleep, or baby" = Set fan mode. direct: direct mode. natural: natural mode. sleep: sleep mode. baby: ultra quiet mode
28
+ * Battery Circulator Fan - "command" "setWindSpeed" "{1-100} e.g. 10" = Set fan speed.1~100
29
+ */
30
+ pushChanges(): Promise<void>;
31
+ BLEpushChanges(): Promise<void>;
32
+ openAPIpushChanges(): Promise<void>;
33
+ /**
34
+ * Handle requests to set the value of the "On" characteristic
35
+ */
36
+ ActiveSet(value: CharacteristicValue): Promise<void>;
37
+ /**
38
+ * Handle requests to set the value of the "On" characteristic
39
+ */
40
+ RotationSpeedSet(value: CharacteristicValue): Promise<void>;
41
+ /**
42
+ * Handle requests to set the value of the "On" characteristic
43
+ */
44
+ SwingModeSet(value: CharacteristicValue): Promise<void>;
45
+ updateHomeKitCharacteristics(): Promise<void>;
46
+ BLEPushConnection(): Promise<void>;
47
+ BLERefreshConnection(switchbot: any): Promise<void>;
48
+ offlineOff(): Promise<void>;
49
+ apiError(e: any): Promise<void>;
50
+ }
51
+ //# sourceMappingURL=fan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fan.d.ts","sourceRoot":"","sources":["../../src/device/fan.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAgD,MAAM,MAAM,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAW,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAW,MAAM,gBAAgB,CAAC;AAE3F,qBAAa,GAAI,SAAQ,UAAU;IAqB/B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB;IAnBtC,OAAO,CAAC,GAAG,CAKT;IAEF,OAAO,CAAC,OAAO,CAKb;IAGF,oBAAoB,EAAG,OAAO,CAAC;IAC/B,YAAY,EAAG,OAAO,CAAC,IAAI,CAAC,CAAC;gBAGlB,QAAQ,EAAE,iBAAiB,EACpC,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,MAAM,GAAG,aAAa;IA6H1B,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAcvD,kBAAkB,CAAC,YAAY,EAAE,YAAY;IA6CnD;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB9B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAqCjC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B3C;;;;;;;;OAQG;IAEG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB5B,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAkD/B,kBAAkB;IA8CxB;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1D;;OAEG;IACG,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjE;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAWvD,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;IAmD7C,iBAAiB;IAOjB,oBAAoB,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IASnD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,QAAQ,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;CAKtC"}
@@ -0,0 +1,504 @@
1
+ /* eslint-disable max-len */
2
+ /* Copyright(C) 2021-2024, donavanbecker (https://github.com/donavanbecker). All rights reserved.
3
+ *
4
+ * plug.ts: @switchbot/homebridge-switchbot.
5
+ */
6
+ import { request } from 'undici';
7
+ import { deviceBase } from './device.js';
8
+ import { Subject, debounceTime, interval, skipWhile, take, tap } from 'rxjs';
9
+ import { Devices } from '../settings.js';
10
+ export class Fan extends deviceBase {
11
+ platform;
12
+ // Services
13
+ Fan;
14
+ Battery;
15
+ // Updates
16
+ plugUpdateInProgress;
17
+ doPlugUpdate;
18
+ constructor(platform, accessory, device) {
19
+ super(platform, accessory, device);
20
+ this.platform = platform;
21
+ // this is subject we use to track when we need to POST changes to the SwitchBot API
22
+ this.doPlugUpdate = new Subject();
23
+ this.plugUpdateInProgress = false;
24
+ // Initialize Fan property
25
+ this.Fan = {
26
+ Service: accessory.getService(this.hap.Service.Fanv2),
27
+ Active: accessory.context.Active || this.hap.Characteristic.Active.INACTIVE,
28
+ SwingMode: accessory.context.SwingMode || this.hap.Characteristic.SwingMode.SWING_DISABLED,
29
+ RotationSpeed: accessory.context.RotationSpeed || 0,
30
+ };
31
+ // Initialize Battery property
32
+ this.Battery = {
33
+ Service: accessory.getService(this.hap.Service.Battery),
34
+ BatteryLevel: accessory.context.BatteryLevel || 100,
35
+ StatusLowBattery: accessory.context.StatusLowBattery || this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
36
+ ChargingState: accessory.context.ChargingState || this.hap.Characteristic.ChargingState.NOT_CHARGING,
37
+ };
38
+ // Retrieve initial values and updateHomekit
39
+ this.refreshStatus();
40
+ // get the Fan service if it exists, otherwise create a new Fanv2 service
41
+ // you can create multiple services for each accessory
42
+ const FanService = `${accessory.displayName} ${device.deviceType}`;
43
+ (this.Fan.Service = accessory.getService(this.hap.Service.Fanv2)
44
+ || accessory.addService(this.hap.Service.Fanv2)), FanService;
45
+ this.Fan.Service.setCharacteristic(this.hap.Characteristic.Name, accessory.displayName);
46
+ // each service must implement at-minimum the "required characteristics" for the given service type
47
+ // see https://developers.homebridge.io/#/service/Fanv2
48
+ // create handlers for required characteristics
49
+ this.Fan.Service.getCharacteristic(this.hap.Characteristic.Active).onSet(this.ActiveSet.bind(this));
50
+ // create handlers for required characteristics
51
+ this.Fan.Service.getCharacteristic(this.hap.Characteristic.RotationSpeed).onSet(this.RotationSpeedSet.bind(this));
52
+ // create handlers for required characteristics
53
+ this.Fan.Service.getCharacteristic(this.hap.Characteristic.SwingMode).onSet(this.SwingModeSet.bind(this));
54
+ // Update Homekit
55
+ this.updateHomeKitCharacteristics();
56
+ // Start an update interval
57
+ interval(this.deviceRefreshRate * 1000)
58
+ .pipe(skipWhile(() => this.plugUpdateInProgress))
59
+ .subscribe(async () => {
60
+ await this.refreshStatus();
61
+ });
62
+ //regisiter webhook event handler
63
+ if (device.webhook) {
64
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} is listening webhook.`);
65
+ this.platform.webhookEventHandler[this.device.deviceId] = async (context) => {
66
+ try {
67
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} received Webhook: ${JSON.stringify(context)}`);
68
+ const { version, battery, powerState, oscillation, chargingStatus, fanSpeed } = context;
69
+ const { Active, SwingMode, RotationSpeed } = this.Fan;
70
+ const { BatteryLevel, ChargingState } = this.Battery;
71
+ const { FirmwareRevision } = this.accessory.context;
72
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ` +
73
+ '(version, battery, powerState, oscillation, chargingStatus, fanSpeed) = '
74
+ + `Webhook:(${version}, ${battery}, ${powerState}, ${oscillation}, ${chargingStatus}, ${fanSpeed}), `
75
+ + `current:(${FirmwareRevision}, ${BatteryLevel}, ${Active}, ${SwingMode}, ${ChargingState}, ${RotationSpeed})`);
76
+ // Active
77
+ this.Fan.Active = powerState === 'ON' ? this.hap.Characteristic.Active.ACTIVE : this.hap.Characteristic.Active.INACTIVE;
78
+ // SwingMode
79
+ this.Fan.SwingMode = oscillation === 'on' ?
80
+ this.hap.Characteristic.SwingMode.SWING_ENABLED : this.hap.Characteristic.SwingMode.SWING_DISABLED;
81
+ // RotationSpeed
82
+ this.Fan.RotationSpeed = fanSpeed;
83
+ // ChargingState
84
+ this.Battery.ChargingState = chargingStatus === 'charging' ?
85
+ this.hap.Characteristic.ChargingState.CHARGING : this.hap.Characteristic.ChargingState.NOT_CHARGING;
86
+ // BatteryLevel
87
+ this.Battery.BatteryLevel = battery;
88
+ // Firmware Version
89
+ if (version) {
90
+ this.accessory.context.version = version;
91
+ this.accessory
92
+ .getService(this.hap.Service.AccessoryInformation)
93
+ .setCharacteristic(this.hap.Characteristic.FirmwareRevision, this.accessory.context.version)
94
+ .getCharacteristic(this.hap.Characteristic.FirmwareRevision)
95
+ .updateValue(this.accessory.context.version);
96
+ }
97
+ this.updateHomeKitCharacteristics();
98
+ }
99
+ catch (e) {
100
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} `
101
+ + `failed to handle webhook. Received: ${JSON.stringify(context)} Error: ${e}`);
102
+ }
103
+ };
104
+ }
105
+ // Watch for Plug change events
106
+ // We put in a debounce of 100ms so we don't make duplicate calls
107
+ this.doPlugUpdate
108
+ .pipe(tap(() => {
109
+ this.plugUpdateInProgress = true;
110
+ }), debounceTime(this.platform.config.options.pushRate * 1000))
111
+ .subscribe(async () => {
112
+ try {
113
+ await this.pushChanges();
114
+ }
115
+ catch (e) {
116
+ this.apiError(e);
117
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} failed pushChanges with ${this.device.connectionType} Connection,` +
118
+ ` Error Message: ${JSON.stringify(e.message)}`);
119
+ }
120
+ this.plugUpdateInProgress = false;
121
+ });
122
+ }
123
+ async BLEparseStatus(serviceData) {
124
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLEparseStatus`);
125
+ // State
126
+ switch (serviceData.state) {
127
+ case 'on':
128
+ this.Fan.Active = true;
129
+ break;
130
+ default:
131
+ this.Fan.Active = false;
132
+ }
133
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.Fan.Active}`);
134
+ }
135
+ async openAPIparseStatus(deviceStatus) {
136
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} openAPIparseStatus`);
137
+ // Active
138
+ this.Fan.Active = deviceStatus.body.power === 'on' ? this.hap.Characteristic.Active.ACTIVE : this.hap.Characteristic.Active.INACTIVE;
139
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Active: ${this.Fan.Active}`);
140
+ // SwingMode
141
+ this.Fan.SwingMode = deviceStatus.body.oscillation === 'on' ?
142
+ this.hap.Characteristic.SwingMode.SWING_ENABLED : this.hap.Characteristic.SwingMode.SWING_DISABLED;
143
+ // RotationSpeed
144
+ this.Fan.RotationSpeed = deviceStatus.body.fanSpeed;
145
+ // ChargingState
146
+ this.Battery.ChargingState = deviceStatus.body.chargingStatus === 'charging' ?
147
+ this.hap.Characteristic.ChargingState.CHARGING : this.hap.Characteristic.ChargingState.NOT_CHARGING;
148
+ // BatteryLevel
149
+ this.Battery.BatteryLevel = Number(deviceStatus.body.battery);
150
+ if (this.Battery.BatteryLevel < 10) {
151
+ this.Battery.StatusLowBattery = this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_LOW;
152
+ }
153
+ else {
154
+ this.Battery.StatusLowBattery = this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL;
155
+ }
156
+ if (Number.isNaN(this.Battery.BatteryLevel)) {
157
+ this.Battery.BatteryLevel = 100;
158
+ }
159
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BatteryLevel: ${this.Battery.BatteryLevel},`
160
+ + ` StatusLowBattery: ${this.Battery.StatusLowBattery}`);
161
+ // Firmware Version
162
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Firmware Version: ${deviceStatus.body.version}`);
163
+ if (deviceStatus.body.version) {
164
+ this.accessory.context.version = deviceStatus.body.version.toString();
165
+ this.accessory
166
+ .getService(this.hap.Service.AccessoryInformation)
167
+ .setCharacteristic(this.hap.Characteristic.FirmwareRevision, this.accessory.context.version)
168
+ .getCharacteristic(this.hap.Characteristic.FirmwareRevision)
169
+ .updateValue(this.accessory.context.version);
170
+ }
171
+ }
172
+ /**
173
+ * Asks the SwitchBot API for the latest device information
174
+ */
175
+ async refreshStatus() {
176
+ if (!this.device.enableCloudService && this.OpenAPI) {
177
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} refreshStatus enableCloudService: ${this.device.enableCloudService}`);
178
+ }
179
+ else if (this.BLE) {
180
+ await this.BLERefreshStatus();
181
+ }
182
+ else if (this.OpenAPI && this.platform.config.credentials?.token) {
183
+ await this.openAPIRefreshStatus();
184
+ }
185
+ else {
186
+ await this.offlineOff();
187
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} Connection Type:` +
188
+ ` ${this.device.connectionType}, refreshStatus will not happen.`);
189
+ }
190
+ }
191
+ async BLERefreshStatus() {
192
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLERefreshStatus`);
193
+ const switchbot = await this.platform.connectBLE();
194
+ // Convert to BLE Address
195
+ this.device.bleMac = this.device
196
+ .deviceId.match(/.{1,2}/g)
197
+ .join(':')
198
+ .toLowerCase();
199
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLE Address: ${this.device.bleMac}`);
200
+ this.getCustomBLEAddress(switchbot);
201
+ // Start to monitor advertisement packets
202
+ (async () => {
203
+ // Start to monitor advertisement packets
204
+ await switchbot.startScan({ model: this.device.bleModel, id: this.device.bleMac });
205
+ // Set an event handler
206
+ switchbot.onadvertisement = (ad) => {
207
+ if (this.device.bleMac === ad.address && ad.model === this.device.bleModel) {
208
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ${JSON.stringify(ad, null, ' ')}`);
209
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} address: ${ad.address}, model: ${ad.model}`);
210
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} serviceData: ${JSON.stringify(ad.serviceData)}`);
211
+ }
212
+ else {
213
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} serviceData: ${JSON.stringify(ad.serviceData)}`);
214
+ }
215
+ };
216
+ // Wait 10 seconds
217
+ await switchbot.wait(this.scanDuration * 1000);
218
+ // Stop to monitor
219
+ await switchbot.stopScan();
220
+ // Update HomeKit
221
+ await this.BLEparseStatus(switchbot.onadvertisement.serviceData);
222
+ await this.updateHomeKitCharacteristics();
223
+ })();
224
+ if (switchbot === undefined) {
225
+ await this.BLERefreshConnection(switchbot);
226
+ }
227
+ }
228
+ async openAPIRefreshStatus() {
229
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} openAPIRefreshStatus`);
230
+ try {
231
+ const { body, statusCode } = await this.platform.retryRequest(this.deviceMaxRetries, this.deviceDelayBetweenRetries, `${Devices}/${this.device.deviceId}/status`, { headers: this.platform.generateHeaders() });
232
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} statusCode: ${statusCode}`);
233
+ const deviceStatus = await body.json();
234
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus: ${JSON.stringify(deviceStatus)}`);
235
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus statusCode: ${deviceStatus.statusCode}`);
236
+ if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
237
+ this.debugSuccessLog(`${this.device.deviceType}: ${this.accessory.displayName} `
238
+ + `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
239
+ this.openAPIparseStatus(deviceStatus);
240
+ this.updateHomeKitCharacteristics();
241
+ }
242
+ else {
243
+ this.statusCode(statusCode);
244
+ this.statusCode(deviceStatus.statusCode);
245
+ }
246
+ }
247
+ catch (e) {
248
+ this.apiError(e);
249
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} failed openAPIRefreshStatus with ${this.device.connectionType}` +
250
+ ` Connection, Error Message: ${JSON.stringify(e.message)}`);
251
+ }
252
+ }
253
+ /**
254
+ * Pushes the requested changes to the SwitchBot API
255
+ * deviceType commandType Command command parameter Description
256
+ * Battery Circulator Fan - "command" "turnOff" "default" = set to OFF state
257
+ * Battery Circulator Fan - "command" "turnOn" "default" = set to ON state
258
+ * Battery Circulator Fan - "command" "setNightLightMode" "off, 1, or 2" = off, turn off nightlight, (1, bright) (2, dim)
259
+ * Battery Circulator Fan - "command" "setWindMode" "direct, natural, sleep, or baby" = Set fan mode. direct: direct mode. natural: natural mode. sleep: sleep mode. baby: ultra quiet mode
260
+ * Battery Circulator Fan - "command" "setWindSpeed" "{1-100} e.g. 10" = Set fan speed.1~100
261
+ */
262
+ async pushChanges() {
263
+ if (!this.device.enableCloudService && this.OpenAPI) {
264
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} pushChanges enableCloudService: ${this.device.enableCloudService}`);
265
+ }
266
+ else if (this.BLE) {
267
+ await this.BLEpushChanges();
268
+ }
269
+ else if (this.OpenAPI && this.platform.config.credentials?.token) {
270
+ await this.openAPIpushChanges();
271
+ }
272
+ else {
273
+ await this.offlineOff();
274
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} Connection Type:` + ` ${this.device.connectionType}, pushChanges will not happen.`);
275
+ }
276
+ // Refresh the status from the API
277
+ interval(15000)
278
+ .pipe(skipWhile(() => this.plugUpdateInProgress))
279
+ .pipe(take(1))
280
+ .subscribe(async () => {
281
+ await this.refreshStatus();
282
+ });
283
+ }
284
+ async BLEpushChanges() {
285
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLEpushChanges`);
286
+ if (this.Fan.Active !== this.accessory.context.Active) {
287
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLEpushChanges`
288
+ + ` On: ${this.Fan.Active} OnCached: ${this.accessory.context.Active}`);
289
+ const switchbot = await this.platform.connectBLE();
290
+ // Convert to BLE Address
291
+ this.device.bleMac = this.device
292
+ .deviceId.match(/.{1,2}/g)
293
+ .join(':')
294
+ .toLowerCase();
295
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BLE Address: ${this.device.bleMac}`);
296
+ switchbot
297
+ .discover({
298
+ model: this.device.bleModel,
299
+ id: this.device.bleMac,
300
+ })
301
+ .then(async (device_list) => {
302
+ this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} On: ${this.Fan.Active}`);
303
+ return await this.retryBLE({
304
+ max: await this.maxRetryBLE(),
305
+ fn: async () => {
306
+ if (this.Fan.Active) {
307
+ return await device_list[0].turnOn({ id: this.device.bleMac });
308
+ }
309
+ else {
310
+ return await device_list[0].turnOff({ id: this.device.bleMac });
311
+ }
312
+ },
313
+ });
314
+ })
315
+ .then(() => {
316
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Done.`);
317
+ this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
318
+ + `Active: ${this.Fan.Active} sent over BLE, sent successfully`);
319
+ this.Fan.Active = false;
320
+ })
321
+ .catch(async (e) => {
322
+ this.apiError(e);
323
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} failed BLEpushChanges with ${this.device.connectionType}` +
324
+ ` Connection, Error Message: ${JSON.stringify(e.message)}`);
325
+ await this.BLEPushConnection();
326
+ });
327
+ }
328
+ else {
329
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No BLEpushChanges,`
330
+ + ` Active: ${this.Fan.Active}, ActiveCached: ${this.accessory.context.Active}`);
331
+ }
332
+ }
333
+ async openAPIpushChanges() {
334
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} openAPIpushChanges`);
335
+ if (this.Fan.Active !== this.accessory.context.Active) {
336
+ let command = '';
337
+ if (this.Fan.Active) {
338
+ command = 'turnOn';
339
+ }
340
+ else {
341
+ command = 'turnOff';
342
+ }
343
+ const bodyChange = JSON.stringify({
344
+ command: `${command}`,
345
+ parameter: 'default',
346
+ commandType: 'command',
347
+ });
348
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Sending request to SwitchBot API, body: ${bodyChange},`);
349
+ try {
350
+ const { body, statusCode } = await request(`${Devices}/${this.device.deviceId}/commands`, {
351
+ body: bodyChange,
352
+ method: 'POST',
353
+ headers: this.platform.generateHeaders(),
354
+ });
355
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} statusCode: ${statusCode}`);
356
+ const deviceStatus = await body.json();
357
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus: ${JSON.stringify(deviceStatus)}`);
358
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus body: ${JSON.stringify(deviceStatus.body)}`);
359
+ this.debugWarnLog(`${this.device.deviceType}: ${this.accessory.displayName} deviceStatus statusCode: ${deviceStatus.statusCode}`);
360
+ if ((statusCode === 200 || statusCode === 100) && (deviceStatus.statusCode === 200 || deviceStatus.statusCode === 100)) {
361
+ this.debugErrorLog(`${this.device.deviceType}: ${this.accessory.displayName} `
362
+ + `statusCode: ${statusCode} & deviceStatus StatusCode: ${deviceStatus.statusCode}`);
363
+ this.successLog(`${this.device.deviceType}: ${this.accessory.displayName} `
364
+ + `request to SwitchBot API, body: ${JSON.stringify(deviceStatus)} sent successfully`);
365
+ }
366
+ else {
367
+ this.statusCode(statusCode);
368
+ this.statusCode(deviceStatus.statusCode);
369
+ }
370
+ }
371
+ catch (e) {
372
+ this.apiError(e);
373
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} failed openAPIpushChanges with ${this.device.connectionType}`
374
+ + ` Connection, Error Message: ${JSON.stringify(e.message)}`);
375
+ }
376
+ }
377
+ else {
378
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No openAPIpushChanges.`
379
+ + `On: ${this.Fan.Active}, ActiveCached: ${this.accessory.context.Active}`);
380
+ }
381
+ }
382
+ /**
383
+ * Handle requests to set the value of the "On" characteristic
384
+ */
385
+ async ActiveSet(value) {
386
+ if (this.Fan.Active === this.accessory.context.Active) {
387
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set Active: ${value}`);
388
+ }
389
+ else {
390
+ this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set Active: ${value}`);
391
+ }
392
+ this.Fan.Active = value;
393
+ this.doPlugUpdate.next();
394
+ }
395
+ /**
396
+ * Handle requests to set the value of the "On" characteristic
397
+ */
398
+ async RotationSpeedSet(value) {
399
+ if (this.Fan.RotationSpeed === this.accessory.context.RotationSpeed) {
400
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set RotationSpeed: ${value}`);
401
+ }
402
+ else {
403
+ this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set RotationSpeed: ${value}`);
404
+ }
405
+ this.Fan.RotationSpeed = value;
406
+ this.doPlugUpdate.next();
407
+ }
408
+ /**
409
+ * Handle requests to set the value of the "On" characteristic
410
+ */
411
+ async SwingModeSet(value) {
412
+ if (this.Fan.SwingMode === this.accessory.context.SwingMode) {
413
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} No Changes, Set SwingMode: ${value}`);
414
+ }
415
+ else {
416
+ this.infoLog(`${this.device.deviceType}: ${this.accessory.displayName} Set SwingMode: ${value}`);
417
+ }
418
+ this.Fan.SwingMode = value;
419
+ this.doPlugUpdate.next();
420
+ }
421
+ async updateHomeKitCharacteristics() {
422
+ // Active
423
+ if (this.Fan.Active === undefined) {
424
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} Active: ${this.Fan.Active}`);
425
+ }
426
+ else {
427
+ this.accessory.context.Active = this.Fan.Active;
428
+ this.Fan.Service.updateCharacteristic(this.hap.Characteristic.Active, this.Fan.Active);
429
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic Active: ${this.Fan.Active}`);
430
+ }
431
+ // RotationSpeed
432
+ if (this.Fan.RotationSpeed === undefined) {
433
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} RotationSpeed: ${this.Fan.RotationSpeed}`);
434
+ }
435
+ else {
436
+ this.accessory.context.RotationSpeed = this.Fan.RotationSpeed;
437
+ this.Fan.Service.updateCharacteristic(this.hap.Characteristic.RotationSpeed, this.Fan.RotationSpeed);
438
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic RotationSpeed: ${this.Fan.RotationSpeed}`);
439
+ }
440
+ // SwingMode
441
+ if (this.Fan.SwingMode === undefined) {
442
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} SwingMode: ${this.Fan.SwingMode}`);
443
+ }
444
+ else {
445
+ this.accessory.context.SwingMode = this.Fan.SwingMode;
446
+ this.Fan.Service.updateCharacteristic(this.hap.Characteristic.SwingMode, this.Fan.SwingMode);
447
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic SwingMode: ${this.Fan.SwingMode}`);
448
+ }
449
+ // BateryLevel
450
+ if (this.Battery.BatteryLevel === undefined) {
451
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} BatteryLevel: ${this.Battery.BatteryLevel}`);
452
+ }
453
+ else {
454
+ this.accessory.context.BatteryLevel = this.Battery.BatteryLevel;
455
+ this.Battery.Service.updateCharacteristic(this.hap.Characteristic.BatteryLevel, this.Battery.BatteryLevel);
456
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic BatteryLevel: ${this.Battery.BatteryLevel}`);
457
+ }
458
+ // ChargingState
459
+ if (this.Battery.ChargingState === undefined) {
460
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} ChargingState: ${this.Battery.ChargingState}`);
461
+ }
462
+ else {
463
+ this.accessory.context.ChargingState = this.Battery.ChargingState;
464
+ this.Battery.Service.updateCharacteristic(this.hap.Characteristic.ChargingState, this.Battery.ChargingState);
465
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic ChargingState: ${this.Battery.ChargingState}`);
466
+ }
467
+ // StatusLowBattery
468
+ if (this.Battery.StatusLowBattery === undefined) {
469
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} StatusLowBattery: ${this.Battery.StatusLowBattery}`);
470
+ }
471
+ else {
472
+ this.accessory.context.StatusLowBattery = this.Battery.StatusLowBattery;
473
+ this.Battery.Service.updateCharacteristic(this.hap.Characteristic.StatusLowBattery, this.Battery.StatusLowBattery);
474
+ this.debugLog(`${this.device.deviceType}: ${this.accessory.displayName} updateCharacteristic StatusLowBattery: ${this.Battery.StatusLowBattery}`);
475
+ }
476
+ }
477
+ async BLEPushConnection() {
478
+ if (this.platform.config.credentials?.token && this.device.connectionType === 'BLE/OpenAPI') {
479
+ this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} Using OpenAPI Connection to Push Changes`);
480
+ await this.openAPIpushChanges();
481
+ }
482
+ }
483
+ async BLERefreshConnection(switchbot) {
484
+ this.errorLog(`${this.device.deviceType}: ${this.accessory.displayName} wasn't able to establish BLE Connection, node-switchbot:`
485
+ + ` ${JSON.stringify(switchbot)}`);
486
+ if (this.platform.config.credentials?.token && this.device.connectionType === 'BLE/OpenAPI') {
487
+ this.warnLog(`${this.device.deviceType}: ${this.accessory.displayName} Using OpenAPI Connection to Refresh Status`);
488
+ await this.openAPIRefreshStatus();
489
+ }
490
+ }
491
+ async offlineOff() {
492
+ if (this.device.offline) {
493
+ this.Fan.Service.updateCharacteristic(this.hap.Characteristic.Active, this.hap.Characteristic.Active.INACTIVE);
494
+ this.Fan.Service.updateCharacteristic(this.hap.Characteristic.RotationSpeed, 0);
495
+ this.Fan.Service.updateCharacteristic(this.hap.Characteristic.SwingMode, this.hap.Characteristic.SwingMode.SWING_DISABLED);
496
+ }
497
+ }
498
+ async apiError(e) {
499
+ this.Fan.Service.updateCharacteristic(this.hap.Characteristic.Active, e);
500
+ this.Fan.Service.updateCharacteristic(this.hap.Characteristic.RotationSpeed, e);
501
+ this.Fan.Service.updateCharacteristic(this.hap.Characteristic.SwingMode, e);
502
+ }
503
+ }
504
+ //# sourceMappingURL=fan.js.map