@homebridge-plugins/homebridge-sharkiq 1.3.2

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 (75) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +176 -0
  3. package/README.md +92 -0
  4. package/config.schema.json +114 -0
  5. package/dist/config.d.ts +7 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +131 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/homebridge-ui/public/index.html +201 -0
  10. package/dist/homebridge-ui/server.d.ts +2 -0
  11. package/dist/homebridge-ui/server.d.ts.map +1 -0
  12. package/dist/homebridge-ui/server.js +47 -0
  13. package/dist/homebridge-ui/server.js.map +1 -0
  14. package/dist/index.d.ts +4 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +7 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/login.d.ts +16 -0
  19. package/dist/login.d.ts.map +1 -0
  20. package/dist/login.js +242 -0
  21. package/dist/login.js.map +1 -0
  22. package/dist/platform.d.ts +16 -0
  23. package/dist/platform.d.ts.map +1 -0
  24. package/dist/platform.js +118 -0
  25. package/dist/platform.js.map +1 -0
  26. package/dist/platformAccessory.d.ts +29 -0
  27. package/dist/platformAccessory.d.ts.map +1 -0
  28. package/dist/platformAccessory.js +285 -0
  29. package/dist/platformAccessory.js.map +1 -0
  30. package/dist/settings.d.ts +3 -0
  31. package/dist/settings.d.ts.map +1 -0
  32. package/dist/settings.js +3 -0
  33. package/dist/settings.js.map +1 -0
  34. package/dist/sharkiq-js/ayla_api.d.ts +39 -0
  35. package/dist/sharkiq-js/ayla_api.d.ts.map +1 -0
  36. package/dist/sharkiq-js/ayla_api.js +289 -0
  37. package/dist/sharkiq-js/ayla_api.js.map +1 -0
  38. package/dist/sharkiq-js/const.d.ts +22 -0
  39. package/dist/sharkiq-js/const.d.ts.map +1 -0
  40. package/dist/sharkiq-js/const.js +23 -0
  41. package/dist/sharkiq-js/const.js.map +1 -0
  42. package/dist/sharkiq-js/properties.d.ts +52 -0
  43. package/dist/sharkiq-js/properties.d.ts.map +1 -0
  44. package/dist/sharkiq-js/properties.js +56 -0
  45. package/dist/sharkiq-js/properties.js.map +1 -0
  46. package/dist/sharkiq-js/sharkiq.d.ts +59 -0
  47. package/dist/sharkiq-js/sharkiq.d.ts.map +1 -0
  48. package/dist/sharkiq-js/sharkiq.js +359 -0
  49. package/dist/sharkiq-js/sharkiq.js.map +1 -0
  50. package/dist/type.d.ts +12 -0
  51. package/dist/type.d.ts.map +1 -0
  52. package/dist/type.js +2 -0
  53. package/dist/type.js.map +1 -0
  54. package/dist/utils.d.ts +10 -0
  55. package/dist/utils.d.ts.map +1 -0
  56. package/dist/utils.js +35 -0
  57. package/dist/utils.js.map +1 -0
  58. package/docs/.nojekyll +1 -0
  59. package/docs/assets/dmt/dmt-component-data.js +1 -0
  60. package/docs/assets/dmt/dmt-components.css +20 -0
  61. package/docs/assets/dmt/dmt-components.js +67 -0
  62. package/docs/assets/dmt/dmt-search.cmp +0 -0
  63. package/docs/assets/dmt/dmt-theme.css +1 -0
  64. package/docs/assets/hierarchy.js +1 -0
  65. package/docs/assets/highlight.css +57 -0
  66. package/docs/assets/icons.js +18 -0
  67. package/docs/assets/icons.svg +1 -0
  68. package/docs/assets/main.js +60 -0
  69. package/docs/assets/style.css +1611 -0
  70. package/docs/functions/default.html +2 -0
  71. package/docs/index.html +50 -0
  72. package/docs/modules.html +2 -0
  73. package/eslint.config.js +49 -0
  74. package/package.json +87 -0
  75. package/typedoc.json +21 -0
@@ -0,0 +1,118 @@
1
+ import { join } from 'node:path';
2
+ import { Login } from './login.js';
3
+ import { SharkIQAccessory } from './platformAccessory.js';
4
+ import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
5
+ import { get_ayla_api } from './sharkiq-js/ayla_api.js';
6
+ import { global_vars } from './sharkiq-js/const.js';
7
+ // SharkIQPlatform Main Class
8
+ export class SharkIQPlatform {
9
+ log;
10
+ config;
11
+ api;
12
+ Service;
13
+ Characteristic;
14
+ // this is used to track restored cached accessories
15
+ accessories = [];
16
+ // Device vacuums object array
17
+ vacuumDevices = [];
18
+ constructor(log, config, api) {
19
+ this.log = log;
20
+ this.config = config;
21
+ this.api = api;
22
+ this.Service = this.api.hap.Service;
23
+ this.Characteristic = this.api.hap.Characteristic;
24
+ this.log.debug('Finished initializing platform:', this.config.name);
25
+ // Start plugin and attempt to login
26
+ this.api.on('didFinishLaunching', () => {
27
+ const serialNumbers = config.vacuums;
28
+ if (!Array.isArray(serialNumbers) || serialNumbers.length === 0) {
29
+ log.error('List of your vacuum DSNs you want to be added must be present in the config');
30
+ return;
31
+ }
32
+ this.login().then((devices) => {
33
+ for (let i = 0; i < devices.length; i++) {
34
+ if (serialNumbers.includes(devices[i]._dsn)) {
35
+ this.vacuumDevices.push(devices[i]);
36
+ }
37
+ }
38
+ if (this.vacuumDevices.length === 0) {
39
+ log.warn('None of the DSNs provided matched the vacuum(s) on your account.');
40
+ }
41
+ this.discoverDevices();
42
+ }).catch((error) => {
43
+ log.error('Error with login.');
44
+ log.error(error);
45
+ });
46
+ });
47
+ }
48
+ // Attempt to login and fetch devices.
49
+ login = async () => {
50
+ const europe = this.config.europe || false;
51
+ const storagePath = this.api.user.storagePath();
52
+ const auth_file = join(storagePath, global_vars.FILE);
53
+ const oauth_file = join(storagePath, global_vars.OAUTH.FILE);
54
+ const oAuthCode = this.config.oAuthCode || '';
55
+ const email = this.config.email || '';
56
+ const password = this.config.password || '';
57
+ if (!email || typeof email !== 'string' || !password || typeof password !== 'string') {
58
+ this.log.warn('Email and password not present in the config. Using OAuth code login method instead.');
59
+ this.log.info('Please provide email and password in the config if you want to use email/password login method.');
60
+ }
61
+ else if (email !== '' && password === '') {
62
+ return Promise.reject(new Error('Password must be present in the config if email is provided.'));
63
+ }
64
+ else if (email === '' && password !== '') {
65
+ return Promise.reject(new Error('Email must be present in the config if password is provided.'));
66
+ }
67
+ const login = new Login(this.log, auth_file, oauth_file, email, password, oAuthCode);
68
+ try {
69
+ await login.checkLogin();
70
+ const ayla_api = get_ayla_api(auth_file, this.log, europe);
71
+ await ayla_api.sign_in();
72
+ const devices = await ayla_api.get_devices();
73
+ return devices;
74
+ }
75
+ catch (error) {
76
+ return Promise.reject(error);
77
+ }
78
+ };
79
+ // Restore accessory cache.
80
+ configureAccessory(accessory) {
81
+ this.log.info('Loading accessory from cache:', accessory.displayName);
82
+ this.accessories.push(accessory);
83
+ }
84
+ // Add vacuums to Homebridge.
85
+ discoverDevices() {
86
+ const devices = [];
87
+ const unusedDeviceAccessories = this.accessories;
88
+ const invertDockedStatus = this.config.invertDockedStatus || false;
89
+ const dockedUpdateInterval = this.config.dockedUpdateInterval || 5000;
90
+ this.vacuumDevices.forEach((vacuumDevice) => {
91
+ const uuid = this.api.hap.uuid.generate(vacuumDevice._dsn.toString());
92
+ let accessory = unusedDeviceAccessories.find(accessory => accessory.UUID === uuid);
93
+ if (accessory) {
94
+ unusedDeviceAccessories.splice(unusedDeviceAccessories.indexOf(accessory), 1);
95
+ }
96
+ else {
97
+ accessory = new this.api.platformAccessory(vacuumDevice._name.toString(), uuid);
98
+ devices.push(accessory);
99
+ }
100
+ let accessoryInformationService = accessory.getService(this.Service.AccessoryInformation);
101
+ if (!accessoryInformationService) {
102
+ accessoryInformationService = accessory.addService(this.Service.AccessoryInformation);
103
+ }
104
+ accessoryInformationService
105
+ .setCharacteristic(this.Characteristic.Manufacturer, 'Shark')
106
+ .setCharacteristic(this.Characteristic.Model, vacuumDevice._vac_model_number || 'Unknown')
107
+ .setCharacteristic(this.Characteristic.SerialNumber, vacuumDevice._dsn);
108
+ new SharkIQAccessory(this, accessory, vacuumDevice, this.api.hap.uuid, this.log, invertDockedStatus, dockedUpdateInterval);
109
+ });
110
+ this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, devices);
111
+ unusedDeviceAccessories.forEach((unusedDeviceAccessory) => {
112
+ this.log.info(`Removing unused accessory with name ${unusedDeviceAccessory.displayName}`);
113
+ this.accessories.splice(this.accessories.indexOf(unusedDeviceAccessory), 1);
114
+ });
115
+ this.api.unregisterPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, unusedDeviceAccessories);
116
+ }
117
+ }
118
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { CharacteristicValue, Logger, PlatformAccessory, uuid } from 'homebridge';
2
+ import type { SharkIQPlatform } from './platform.js';
3
+ import type { SharkIqVacuum } from './sharkiq-js/sharkiq.js';
4
+ export declare class SharkIQAccessory {
5
+ private readonly platform;
6
+ private readonly accessory;
7
+ private device;
8
+ private readonly log;
9
+ private readonly invertDockedStatus;
10
+ private readonly dockedUpdateInterval;
11
+ private dockedDelay;
12
+ private service;
13
+ private dockedStatusService;
14
+ private vacuumPausedService;
15
+ constructor(platform: SharkIQPlatform, accessory: PlatformAccessory, device: SharkIqVacuum, UUIDGen: typeof uuid, log: Logger, invertDockedStatus: boolean, dockedUpdateInterval: number, dockedDelay?: number);
16
+ retrieveVacuumStateInterval(): Promise<void>;
17
+ retrieveDockedStatus(): Promise<boolean>;
18
+ retrieveOperatingMode(): Promise<void>;
19
+ retrievePowerMode(): Promise<void>;
20
+ retrieveVacuumStates(): Promise<void>;
21
+ updateStates(): void;
22
+ getPaused(): Promise<boolean>;
23
+ setPaused(value: CharacteristicValue): Promise<void>;
24
+ getVacuumActive(): Promise<boolean>;
25
+ setVacuumActive(value: CharacteristicValue): Promise<void>;
26
+ getFanSpeed(): Promise<number>;
27
+ setFanSpeed(value: CharacteristicValue): Promise<void>;
28
+ }
29
+ //# sourceMappingURL=platformAccessory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platformAccessory.d.ts","sourceRoot":"","sources":["../src/platformAccessory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,iBAAiB,EAAW,IAAI,EAAE,MAAM,YAAY,CAAA;AAE/F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAI5D,qBAAa,gBAAgB;IAMzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,WAAW;IAZrB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,mBAAmB,CAAS;gBAGjB,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,iBAAiB,EACrC,MAAM,EAAE,aAAa,EAC7B,OAAO,EAAE,OAAO,IAAI,EACH,GAAG,EAAE,MAAM,EACX,kBAAkB,EAAE,OAAO,EAC3B,oBAAoB,EAAE,MAAM,EACrC,WAAW,GAAE,MAAU;IAuD3B,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5C,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBxC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAStC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IASlC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAyC3C,YAAY,IAAI,IAAI;IAgBd,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAc7B,SAAS,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBpD,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAYnC,eAAe,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAe1D,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAqB9B,WAAW,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;CAsC7D"}
@@ -0,0 +1,285 @@
1
+ import { OperatingModes, PowerModes, Properties } from './sharkiq-js/sharkiq.js';
2
+ export class SharkIQAccessory {
3
+ platform;
4
+ accessory;
5
+ device;
6
+ log;
7
+ invertDockedStatus;
8
+ dockedUpdateInterval;
9
+ dockedDelay;
10
+ service;
11
+ dockedStatusService;
12
+ vacuumPausedService;
13
+ constructor(platform, accessory, device, UUIDGen, log, invertDockedStatus, dockedUpdateInterval, dockedDelay = 0) {
14
+ this.platform = platform;
15
+ this.accessory = accessory;
16
+ this.device = device;
17
+ this.log = log;
18
+ this.invertDockedStatus = invertDockedStatus;
19
+ this.dockedUpdateInterval = dockedUpdateInterval;
20
+ this.dockedDelay = dockedDelay;
21
+ // Get device serial number
22
+ const serial_number = device._dsn;
23
+ const vacuumUUID = UUIDGen.generate(`${serial_number}-vacuum`);
24
+ this.service = this.accessory.getService('Vacuum')
25
+ || this.accessory.addService(this.platform.Service.Fanv2, 'Vacuum', vacuumUUID);
26
+ // Vacuum Name - Default is device name
27
+ this.service.setCharacteristic(this.platform.Characteristic.Name, device._name.toString());
28
+ // // Vacuum Active
29
+ this.service.getCharacteristic(this.platform.Characteristic.Active)
30
+ .onSet(this.setVacuumActive.bind(this))
31
+ .onGet(this.getVacuumActive.bind(this));
32
+ // Vacuum Power (Eco, Normal, Max)
33
+ this.service.getCharacteristic(this.platform.Characteristic.RotationSpeed)
34
+ .setProps({
35
+ minStep: 30,
36
+ minValue: 0,
37
+ maxValue: 90,
38
+ })
39
+ .onSet(this.setFanSpeed.bind(this))
40
+ .onGet(this.getFanSpeed.bind(this));
41
+ // Vacuum Docked Status
42
+ this.dockedStatusService = this.accessory.getService('Vacuum Docked')
43
+ || this.accessory.addService(this.platform.Service.ContactSensor, 'Vacuum Docked', 'Docked');
44
+ this.dockedStatusService.setCharacteristic(this.platform.Characteristic.Name, `${device._name.toString()} Docked`);
45
+ this.dockedStatusService.getCharacteristic(this.platform.Characteristic.ContactSensorState)
46
+ .onGet(this.retrieveDockedStatus.bind(this));
47
+ // Vacuum Paused Status
48
+ this.vacuumPausedService = this.accessory.getService('Vacuum Paused')
49
+ || this.accessory.addService(this.platform.Service.Switch, 'Vacuum Paused', 'Paused');
50
+ this.vacuumPausedService.setCharacteristic(this.platform.Characteristic.Name, `${device._name.toString()} Paused`);
51
+ // Vacuum Paused getting and setting state
52
+ this.vacuumPausedService.getCharacteristic(this.platform.Characteristic.On)
53
+ .onSet(this.setPaused.bind(this))
54
+ .onGet(this.getPaused.bind(this));
55
+ this.updateStates();
56
+ // Retrieve vacuum states
57
+ this.retrieveVacuumStates().then(() => {
58
+ this.retrieveVacuumStateInterval();
59
+ }).catch(() => {
60
+ this.log.debug('Promise Rejected with first interval update.');
61
+ this.retrieveVacuumStateInterval();
62
+ });
63
+ }
64
+ // Retrieve vacuum states interval function
65
+ async retrieveVacuumStateInterval() {
66
+ setInterval(async () => {
67
+ await this.retrieveVacuumStates()
68
+ .catch(() => {
69
+ this.log.debug('Promise Rejected with interval update.');
70
+ });
71
+ }, this.dockedUpdateInterval + this.dockedDelay);
72
+ }
73
+ // Retrieve docked status
74
+ async retrieveDockedStatus() {
75
+ this.log.debug('Triggering GET Docked Status');
76
+ await this.device.update(Properties.DOCKED_STATUS);
77
+ const docked_status = this.device.docked_status();
78
+ let vacuumDocked = false;
79
+ if (!this.invertDockedStatus) {
80
+ vacuumDocked = docked_status === 1;
81
+ }
82
+ else {
83
+ vacuumDocked = docked_status !== 1;
84
+ }
85
+ return vacuumDocked;
86
+ }
87
+ // Retrieve operating mode
88
+ async retrieveOperatingMode() {
89
+ this.log.debug('Triggering GET Operating Mode');
90
+ await this.device.update(Properties.OPERATING_MODE)
91
+ .then((delay) => {
92
+ this.dockedDelay = delay;
93
+ });
94
+ }
95
+ // Retrieve power mode
96
+ async retrievePowerMode() {
97
+ this.log.debug('Triggering GET Power Mode');
98
+ await this.device.update(Properties.POWER_MODE)
99
+ .then((delay) => {
100
+ this.dockedDelay = delay;
101
+ });
102
+ }
103
+ // Monitor vacuum state function
104
+ async retrieveVacuumStates() {
105
+ this.log.debug('Triggering GET Vacuum States');
106
+ let vacuumDocked = false;
107
+ await this.device.update([Properties.DOCKED_STATUS, Properties.OPERATING_MODE, Properties.POWER_MODE])
108
+ .then((delay) => {
109
+ this.dockedDelay = delay;
110
+ });
111
+ const docked_status = this.device.docked_status();
112
+ if (!this.invertDockedStatus) {
113
+ vacuumDocked = docked_status === 1;
114
+ }
115
+ else {
116
+ vacuumDocked = docked_status !== 1;
117
+ }
118
+ const power_mode = this.device.power_mode();
119
+ const mode = this.device.operating_mode();
120
+ const vacuumActive = mode === OperatingModes.START || mode === OperatingModes.STOP;
121
+ this.service.updateCharacteristic(this.platform.Characteristic.Active, vacuumActive);
122
+ if (vacuumActive) {
123
+ if (power_mode === PowerModes.MAX) {
124
+ this.service.updateCharacteristic(this.platform.Characteristic.RotationSpeed, 90);
125
+ }
126
+ else if (power_mode === PowerModes.ECO) {
127
+ this.service.updateCharacteristic(this.platform.Characteristic.RotationSpeed, 30);
128
+ }
129
+ else {
130
+ this.service.updateCharacteristic(this.platform.Characteristic.RotationSpeed, 60);
131
+ }
132
+ if (mode === OperatingModes.STOP) {
133
+ this.vacuumPausedService.updateCharacteristic(this.platform.Characteristic.On, true);
134
+ }
135
+ else {
136
+ this.vacuumPausedService.updateCharacteristic(this.platform.Characteristic.On, false);
137
+ }
138
+ }
139
+ else {
140
+ this.service.updateCharacteristic(this.platform.Characteristic.RotationSpeed, 0);
141
+ }
142
+ this.dockedStatusService.updateCharacteristic(this.platform.Characteristic.ContactSensorState, vacuumDocked);
143
+ this.log.debug('Vacuum Docked:', vacuumDocked, 'Vacuum Active:', vacuumActive, 'Power Mode:', power_mode);
144
+ }
145
+ // Update paused and active state on switch
146
+ updateStates() {
147
+ const mode = this.device.operating_mode();
148
+ if (mode === OperatingModes.START || mode === OperatingModes.STOP) {
149
+ this.service.updateCharacteristic(this.platform.Characteristic.Active, this.platform.Characteristic.Active.ACTIVE);
150
+ }
151
+ else {
152
+ this.service.updateCharacteristic(this.platform.Characteristic.Active, this.platform.Characteristic.Active.INACTIVE);
153
+ }
154
+ if (mode === OperatingModes.STOP) {
155
+ this.vacuumPausedService.updateCharacteristic(this.platform.Characteristic.On, true);
156
+ }
157
+ else {
158
+ this.vacuumPausedService.updateCharacteristic(this.platform.Characteristic.On, false);
159
+ }
160
+ }
161
+ // Get paused state
162
+ async getPaused() {
163
+ this.log.debug('Triggering GET Paused');
164
+ await this.retrieveOperatingMode();
165
+ const mode = this.device.operating_mode();
166
+ this.log.debug('State:', mode);
167
+ if (mode === OperatingModes.STOP) {
168
+ return true;
169
+ }
170
+ else {
171
+ return false;
172
+ }
173
+ }
174
+ // Set paused state
175
+ async setPaused(value) {
176
+ this.log.debug('Triggering SET Paused. Paused:', value);
177
+ const mode = this.device.operating_mode();
178
+ if (mode === OperatingModes.START || mode === OperatingModes.STOP) {
179
+ if (value) {
180
+ await this.device.set_operating_mode(OperatingModes.STOP)
181
+ .catch(() => {
182
+ this.log.debug('Promise Rejected with setting operating mode.');
183
+ });
184
+ }
185
+ else {
186
+ await this.device.set_operating_mode(OperatingModes.START)
187
+ .catch(() => {
188
+ this.log.debug('Promise Rejected with setting operating mode.');
189
+ });
190
+ }
191
+ }
192
+ else {
193
+ setTimeout(() => {
194
+ this.vacuumPausedService.updateCharacteristic(this.platform.Characteristic.On, false);
195
+ }, 100);
196
+ }
197
+ }
198
+ // Check if the vacuum is active for UI
199
+ async getVacuumActive() {
200
+ this.log.debug('Triggering GET Vacuum Active');
201
+ const mode = this.device.operating_mode();
202
+ if (mode === OperatingModes.START || mode === OperatingModes.STOP) {
203
+ return true;
204
+ }
205
+ else {
206
+ return false;
207
+ }
208
+ }
209
+ // Set the vacuum state by UI
210
+ async setVacuumActive(value) {
211
+ this.log.debug('Triggering SET Vacuum Active');
212
+ if (!value) {
213
+ const mode = this.device.operating_mode();
214
+ if (mode === OperatingModes.START || mode === OperatingModes.STOP) {
215
+ await this.setFanSpeed(0)
216
+ .catch(() => {
217
+ this.log.debug('Promise Rejected with setting fan speed.');
218
+ });
219
+ }
220
+ }
221
+ }
222
+ // Get vacuum power for UI
223
+ async getFanSpeed() {
224
+ this.log.debug('Triggering GET Fan Speed');
225
+ await this.retrievePowerMode();
226
+ const mode = this.device.operating_mode();
227
+ const vacuumActive = mode === OperatingModes.START || mode === OperatingModes.STOP;
228
+ if (vacuumActive) {
229
+ const power_mode = this.device.power_mode();
230
+ if (power_mode === PowerModes.MAX) {
231
+ return 90;
232
+ }
233
+ else if (power_mode === PowerModes.ECO) {
234
+ return 30;
235
+ }
236
+ else {
237
+ return 60;
238
+ }
239
+ }
240
+ else {
241
+ return 0;
242
+ }
243
+ }
244
+ // Set vacuum power from UI (and start/stop vacuum if needed)
245
+ async setFanSpeed(value) {
246
+ this.log.debug('Triggering SET Fan Speed. Value:', value);
247
+ let power_mode = PowerModes.NORMAL;
248
+ if (value === 30) {
249
+ power_mode = PowerModes.ECO;
250
+ }
251
+ else if (value === 90) {
252
+ power_mode = PowerModes.MAX;
253
+ }
254
+ else if (value === 0) {
255
+ await this.device.cancel_clean()
256
+ .catch(() => {
257
+ this.log.debug('Promise Rejected with cancel cleaning update.');
258
+ });
259
+ this.service.updateCharacteristic(this.platform.Characteristic.Active, this.platform.Characteristic.Active.INACTIVE);
260
+ this.vacuumPausedService.updateCharacteristic(this.platform.Characteristic.On, false);
261
+ return;
262
+ }
263
+ const isPaused = await this.getPaused();
264
+ if (isPaused) {
265
+ await this.device.set_operating_mode(OperatingModes.START)
266
+ .catch(() => {
267
+ this.log.debug('Promise Rejected with setting operating mode.');
268
+ });
269
+ this.vacuumPausedService.updateCharacteristic(this.platform.Characteristic.On, false);
270
+ }
271
+ await this.device.set_property_value(Properties.POWER_MODE, power_mode)
272
+ .catch(() => {
273
+ this.log.debug('Promise Rejected with powermode update.');
274
+ });
275
+ const mode = this.device.operating_mode();
276
+ if (mode !== OperatingModes.START && mode !== OperatingModes.STOP) {
277
+ this.service.updateCharacteristic(this.platform.Characteristic.Active, this.platform.Characteristic.Active.ACTIVE);
278
+ await this.device.clean_rooms([])
279
+ .catch(() => {
280
+ this.log.debug('Promise Rejected with start cleaning update.');
281
+ });
282
+ }
283
+ }
284
+ }
285
+ //# sourceMappingURL=platformAccessory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platformAccessory.js","sourceRoot":"","sources":["../src/platformAccessory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const PLATFORM_NAME = "SharkIQ";
2
+ export declare const PLUGIN_NAME = "homebridge-sharkiq";
3
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,YAAY,CAAA;AAEtC,eAAO,MAAM,WAAW,uBAAuB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export const PLATFORM_NAME = 'SharkIQ';
2
+ export const PLUGIN_NAME = 'homebridge-sharkiq';
3
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAA;AAEtC,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,CAAA"}
@@ -0,0 +1,39 @@
1
+ import type { Logger } from 'homebridge';
2
+ import type { AuthData } from '../type.js';
3
+ import { SharkIqVacuum } from './sharkiq.js';
4
+ interface APIResponse {
5
+ status: number;
6
+ response: string;
7
+ ok: boolean;
8
+ }
9
+ declare function get_ayla_api(auth_file_path: string, log: Logger, europe?: boolean): AylaApi;
10
+ declare class AylaApi {
11
+ _auth_file_path: string;
12
+ _access_token: string | null;
13
+ _refresh_token: string | null;
14
+ _auth_expiration: Date | null;
15
+ _is_authed: boolean;
16
+ _app_id: string;
17
+ _app_secret: string;
18
+ log: Logger;
19
+ europe: boolean;
20
+ constructor(auth_file_path: any, app_id: any, app_secret: any, log: any, europe?: boolean);
21
+ get exit_error_message(): string;
22
+ makeRequest(method: string, url: string, data: object | null, auth_header: string | null): Promise<APIResponse>;
23
+ _set_credentials(login_result: AuthData): void;
24
+ sign_in(): Promise<boolean>;
25
+ refresh_auth(): Promise<boolean>;
26
+ get sign_out_data(): object;
27
+ _clear_auth(): void;
28
+ sign_out(): Promise<void>;
29
+ auth_expiration(): Promise<Date | null>;
30
+ token_expired(): Promise<boolean>;
31
+ token_expiring_soon(): Promise<boolean>;
32
+ check_auth(): Promise<boolean>;
33
+ attempt_refresh(attempt: number): Promise<boolean>;
34
+ auth_header(): Promise<string | null>;
35
+ list_devices(attempt?: number): Promise<object[]>;
36
+ get_devices(update?: boolean): Promise<SharkIqVacuum[]>;
37
+ }
38
+ export { AylaApi, get_ayla_api };
39
+ //# sourceMappingURL=ayla_api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ayla_api.d.ts","sourceRoot":"","sources":["../../src/sharkiq-js/ayla_api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAO1C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,EAAE,EAAE,OAAO,CAAA;CACZ;AAGD,iBAAS,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,OAAO,CAMlF;AAED,cAAM,OAAO;IACX,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,gBAAgB,EAAE,IAAI,GAAG,IAAI,CAAA;IAC7B,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,OAAO,CAAA;gBAGH,cAAc,KAAA,EAAE,MAAM,KAAA,EAAE,UAAU,KAAA,EAAE,GAAG,KAAA,EAAE,MAAM,UAAQ;IAanE,IAAI,kBAAkB,IAAI,MAAM,CAE/B;IAGK,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC;IAgCrH,gBAAgB,CAAC,YAAY,EAAE,QAAQ,GAAG,IAAI;IAUxC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAa3B,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAqCtC,IAAI,aAAa,IAAI,MAAM,CAE1B;IAGD,WAAW,IAAI,IAAI;IASb,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAWzB,eAAe,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAcvC,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAUjC,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC;IAUvC,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAmB9B,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBlD,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUrC,YAAY,CAAC,OAAO,SAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAmC5C,WAAW,CAAC,MAAM,UAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAkB3D;AAED,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAA"}