@homebridge-plugins/homebridge-sharkiq 2.0.0-beta.12 → 2.0.0-beta.13

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.
@@ -1,48 +0,0 @@
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 readonly enhancedVacuumMode;
12
- private dockedDelay;
13
- private service;
14
- private dockedStatusService;
15
- private vacuumPausedService;
16
- private isNativeVacuumServiceAvailable;
17
- constructor(platform: SharkIQPlatform, accessory: PlatformAccessory, device: SharkIqVacuum, UUIDGen: typeof uuid, log: Logger, invertDockedStatus: boolean, dockedUpdateInterval: number, enhancedVacuumMode?: boolean, dockedDelay?: number);
18
- /**
19
- * Convert this accessory to a MatterAccessory-like plain object.
20
- * Uses the provided `api.matter` if available. This returns a minimal
21
- * RoboticVacuumCleaner configuration with handlers bound to this instance.
22
- */
23
- toMatterAccessory(api: any): any;
24
- private matterHandleStart;
25
- private matterHandleStop;
26
- private matterHandlePause;
27
- private matterHandleResume;
28
- private matterHandleGoHome;
29
- private matterHandleChangeRunMode;
30
- private matterHandleChangeCleanMode;
31
- private matterHandleSelectAreas;
32
- private matterHandleSkipArea;
33
- private checkForNativeVacuumService;
34
- private calculateDockedStatus;
35
- retrieveVacuumStateInterval(): Promise<void>;
36
- retrieveDockedStatus(): Promise<boolean>;
37
- retrieveOperatingMode(): Promise<void>;
38
- retrievePowerMode(): Promise<void>;
39
- retrieveVacuumStates(): Promise<void>;
40
- updateStates(): void;
41
- getPaused(): Promise<boolean>;
42
- setPaused(value: CharacteristicValue): Promise<void>;
43
- getVacuumActive(): Promise<boolean>;
44
- setVacuumActive(value: CharacteristicValue): Promise<void>;
45
- getFanSpeed(): Promise<number>;
46
- setFanSpeed(value: CharacteristicValue): Promise<void>;
47
- }
48
- //# sourceMappingURL=platformAccessory.d.ts.map
@@ -1 +0,0 @@
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;AAM5D,qBAAa,gBAAgB;IAOzB,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,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,WAAW;IAdrB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,8BAA8B,CAAS;gBAG5B,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,EAC5B,kBAAkB,GAAE,OAAc,EAC3C,WAAW,GAAE,MAAU;IA8EjC;;;;OAIG;IACI,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;YAmFzB,iBAAiB;YAWjB,gBAAgB;YAUhB,iBAAiB;YAUjB,kBAAkB;YAUlB,kBAAkB;YAWlB,yBAAyB;YAgBzB,2BAA2B;YAM3B,uBAAuB;YAavB,oBAAoB;IAOlC,OAAO,CAAC,2BAA2B;IAqBnC,OAAO,CAAC,qBAAqB;IASvB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5C,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IAWxC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAStC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IASlC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiD3C,YAAY,IAAI,IAAI;IAgBd,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAc7B,SAAS,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBpD,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAYnC,eAAe,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAa1D,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC;IAkC9B,WAAW,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;CAkE7D"}
@@ -1,560 +0,0 @@
1
- import { TIMEOUTS, VACUUM_SPEEDS } from './constants.js';
2
- import { createPromiseRejectionHandler } from './errorHandling.js';
3
- import { OperatingModes, PowerModes, Properties } from './sharkiq-js/sharkiq.js';
4
- export class SharkIQAccessory {
5
- platform;
6
- accessory;
7
- device;
8
- log;
9
- invertDockedStatus;
10
- dockedUpdateInterval;
11
- enhancedVacuumMode;
12
- dockedDelay;
13
- service;
14
- dockedStatusService;
15
- vacuumPausedService;
16
- isNativeVacuumServiceAvailable;
17
- constructor(platform, accessory, device, UUIDGen, log, invertDockedStatus, dockedUpdateInterval, enhancedVacuumMode = true, dockedDelay = 0) {
18
- this.platform = platform;
19
- this.accessory = accessory;
20
- this.device = device;
21
- this.log = log;
22
- this.invertDockedStatus = invertDockedStatus;
23
- this.dockedUpdateInterval = dockedUpdateInterval;
24
- this.enhancedVacuumMode = enhancedVacuumMode;
25
- this.dockedDelay = dockedDelay;
26
- // Check if native robot vacuum service is available
27
- this.isNativeVacuumServiceAvailable = this.checkForNativeVacuumService();
28
- // Get device serial number
29
- const serial_number = device._dsn;
30
- const vacuumUUID = UUIDGen.generate(`${serial_number}-vacuum`);
31
- // Use FanV2 service as no native robot vacuum service is available in current HomeKit framework
32
- // This provides the best vacuum-like experience with enhanced power level mappings
33
- this.service = this.accessory.getService('Vacuum')
34
- || this.accessory.addService(this.platform.Service.Fanv2, 'Vacuum', vacuumUUID);
35
- // Vacuum Name - Default is device name
36
- this.service.setCharacteristic(this.platform.Characteristic.Name, device._name.toString());
37
- // Log the vacuum mode being used
38
- this.log.info(`${device._name.toString()} configured with ${this.enhancedVacuumMode ? 'Enhanced' : 'Legacy'} vacuum mode`);
39
- // // Vacuum Active
40
- this.service.getCharacteristic(this.platform.Characteristic.Active)
41
- .onSet(this.setVacuumActive.bind(this))
42
- .onGet(this.getVacuumActive.bind(this));
43
- // Vacuum Power (Off, Eco, Normal, Max)
44
- // Using RotationSpeed as a power level indicator until native vacuum service is available
45
- // Power levels: 0=Off, 25=Eco, 50=Normal, 100=Max (enhanced mode) or 0=Off, 30=Eco, 60=Normal, 90=Max (legacy mode)
46
- if (this.enhancedVacuumMode) {
47
- this.service.getCharacteristic(this.platform.Characteristic.RotationSpeed)
48
- .setProps({
49
- minStep: VACUUM_SPEEDS.ECO || 25,
50
- minValue: VACUUM_SPEEDS.OFF || 0,
51
- maxValue: VACUUM_SPEEDS.MAX || 100,
52
- validValues: [0, 25, 50, 75, 100], // Off, Eco, Normal, Max, Turbo
53
- })
54
- .onSet(this.setFanSpeed.bind(this))
55
- .onGet(this.getFanSpeed.bind(this));
56
- }
57
- else {
58
- // Legacy power level mappings for backward compatibility
59
- this.service.getCharacteristic(this.platform.Characteristic.RotationSpeed)
60
- .setProps({
61
- minStep: VACUUM_SPEEDS.ECO || 30,
62
- minValue: VACUUM_SPEEDS.OFF || 0,
63
- maxValue: VACUUM_SPEEDS.MAX || 90,
64
- })
65
- .onSet(this.setFanSpeed.bind(this))
66
- .onGet(this.getFanSpeed.bind(this));
67
- }
68
- // Vacuum Docked Status
69
- this.dockedStatusService = this.accessory.getService('Vacuum Docked')
70
- || this.accessory.addService(this.platform.Service.ContactSensor, 'Vacuum Docked', 'Docked');
71
- this.dockedStatusService.setCharacteristic(this.platform.Characteristic.Name, `${device._name.toString()} Docked`);
72
- this.dockedStatusService.getCharacteristic(this.platform.Characteristic.ContactSensorState)
73
- .onGet(this.retrieveDockedStatus.bind(this));
74
- // Vacuum Paused Status
75
- this.vacuumPausedService = this.accessory.getService('Vacuum Paused')
76
- || this.accessory.addService(this.platform.Service.Switch, 'Vacuum Paused', 'Paused');
77
- this.vacuumPausedService.setCharacteristic(this.platform.Characteristic.Name, `${device._name.toString()} Paused`);
78
- // Vacuum Paused getting and setting state
79
- this.vacuumPausedService.getCharacteristic(this.platform.Characteristic.On)
80
- .onSet(this.setPaused.bind(this))
81
- .onGet(this.getPaused.bind(this));
82
- this.updateStates();
83
- // Retrieve vacuum states
84
- this.retrieveVacuumStates().then(() => {
85
- this.retrieveVacuumStateInterval();
86
- }).catch(() => {
87
- createPromiseRejectionHandler(this.log, 'first interval update')();
88
- this.retrieveVacuumStateInterval();
89
- });
90
- }
91
- /**
92
- * Convert this accessory to a MatterAccessory-like plain object.
93
- * Uses the provided `api.matter` if available. This returns a minimal
94
- * RoboticVacuumCleaner configuration with handlers bound to this instance.
95
- */
96
- toMatterAccessory(api) {
97
- try {
98
- const serialNumber = this.device._dsn && this.device._dsn.toString ? this.device._dsn.toString() : String(this.device._dsn);
99
- const uuid = api.matter.uuid.generate(serialNumber);
100
- const deviceType = api.matter.deviceTypes.RoboticVacuumCleaner;
101
- const accessory = {
102
- uuid,
103
- displayName: this.device._name || `Robot Vacuum ${serialNumber}`,
104
- deviceType,
105
- serialNumber,
106
- manufacturer: 'Shark',
107
- model: this.device._vac_model_number || 'SharkIQ',
108
- firmwareRevision: this.device._firmware_version || '1.0.0',
109
- hardwareRevision: '1.0.0',
110
- // Minimal cluster state for Robotic Vacuum Cleaner
111
- clusters: {
112
- rvcRunMode: {
113
- supportedModes: [
114
- { label: 'Idle', mode: 0 },
115
- { label: 'Cleaning', mode: 1 },
116
- { label: 'Mapping', mode: 2 },
117
- ],
118
- currentMode: 0,
119
- },
120
- rvcCleanMode: {
121
- supportedModes: [
122
- { label: 'Vacuum', mode: 0 },
123
- { label: 'Mop', mode: 1 },
124
- { label: 'Vacuum & Mop', mode: 2 },
125
- ],
126
- currentMode: 0,
127
- },
128
- rvcOperationalState: {
129
- operationalStateList: [
130
- { operationalStateId: 0, operationalStateLabel: 'Stopped' },
131
- { operationalStateId: 1, operationalStateLabel: 'Running' },
132
- { operationalStateId: 2, operationalStateLabel: 'Paused' },
133
- { operationalStateId: 64, operationalStateLabel: 'Seeking Charger' },
134
- { operationalStateId: 65, operationalStateLabel: 'Charging' },
135
- { operationalStateId: 66, operationalStateLabel: 'Docked' },
136
- ],
137
- operationalState: 0,
138
- },
139
- serviceArea: {
140
- supportedMaps: [],
141
- supportedAreas: [],
142
- selectedAreas: [],
143
- currentArea: null,
144
- },
145
- },
146
- // Handlers: map Matter requests to class methods
147
- handlers: {
148
- rvcRunMode: {
149
- changeToMode: async (request) => this.matterHandleChangeRunMode(request),
150
- },
151
- rvcCleanMode: {
152
- changeToMode: async (request) => this.matterHandleChangeCleanMode(request),
153
- },
154
- rvcOperationalState: {
155
- start: async () => this.matterHandleStart(),
156
- stop: async () => this.matterHandleStop(),
157
- pause: async () => this.matterHandlePause(),
158
- resume: async () => this.matterHandleResume(),
159
- goHome: async () => this.matterHandleGoHome(),
160
- },
161
- serviceArea: {
162
- selectAreas: async (request) => this.matterHandleSelectAreas(request),
163
- skipArea: async (request) => this.matterHandleSkipArea(request),
164
- },
165
- },
166
- };
167
- return accessory;
168
- }
169
- catch (e) {
170
- this.log.debug('toMatterAccessory failed:', e);
171
- return null;
172
- }
173
- }
174
- // Minimal Matter handlers that delegate to existing device methods
175
- async matterHandleStart() {
176
- this.log.info('Matter -> Start requested');
177
- try {
178
- await this.device.clean_rooms([]);
179
- }
180
- catch (e) {
181
- this.log.debug('Error starting vacuum via Matter handler:', e);
182
- }
183
- // Sync HAP state
184
- await this.retrieveVacuumStates().catch(() => { });
185
- }
186
- async matterHandleStop() {
187
- this.log.info('Matter -> Stop requested');
188
- try {
189
- await this.device.cancel_clean();
190
- }
191
- catch (e) {
192
- this.log.debug('Error stopping vacuum via Matter handler:', e);
193
- }
194
- await this.retrieveVacuumStates().catch(() => { });
195
- }
196
- async matterHandlePause() {
197
- this.log.info('Matter -> Pause requested');
198
- try {
199
- await this.device.set_operating_mode(OperatingModes.STOP);
200
- }
201
- catch (e) {
202
- this.log.debug('Error pausing vacuum via Matter handler:', e);
203
- }
204
- await this.retrieveVacuumStates().catch(() => { });
205
- }
206
- async matterHandleResume() {
207
- this.log.info('Matter -> Resume requested');
208
- try {
209
- await this.device.set_operating_mode(OperatingModes.START);
210
- }
211
- catch (e) {
212
- this.log.debug('Error resuming vacuum via Matter handler:', e);
213
- }
214
- await this.retrieveVacuumStates().catch(() => { });
215
- }
216
- async matterHandleGoHome() {
217
- this.log.info('Matter -> GoHome requested');
218
- try {
219
- // Best-effort: cancel current clean and trigger return-to-dock sequence
220
- await this.device.cancel_clean();
221
- }
222
- catch (e) {
223
- this.log.debug('Error issuing goHome via Matter handler:', e);
224
- }
225
- await this.retrieveVacuumStates().catch(() => { });
226
- }
227
- async matterHandleChangeRunMode(request) {
228
- this.log.info('Matter -> Change Run Mode:', request);
229
- // request.newMode indicates Idle(0), Cleaning(1), Mapping(2)
230
- const newMode = request?.newMode;
231
- try {
232
- if (newMode === 1) {
233
- await this.device.clean_rooms([]);
234
- }
235
- else if (newMode === 0) {
236
- await this.device.cancel_clean();
237
- }
238
- }
239
- catch (e) {
240
- this.log.debug('Error changing run mode via Matter handler:', e);
241
- }
242
- await this.retrieveVacuumStates().catch(() => { });
243
- }
244
- async matterHandleChangeCleanMode(request) {
245
- this.log.info('Matter -> Change Clean Mode:', request);
246
- // request.newMode is an integer mapping to clean modes; best-effort: log it
247
- await Promise.resolve();
248
- }
249
- async matterHandleSelectAreas(request) {
250
- this.log.info('Matter -> Select Areas:', request);
251
- // request.newAreas is an array of area ids; delegate if device supports it
252
- const areas = request?.newAreas;
253
- if (Array.isArray(areas) && areas.length > 0) {
254
- try {
255
- await this.device.clean_rooms(areas);
256
- }
257
- catch (e) {
258
- this.log.debug('Error selecting areas via Matter handler:', e);
259
- }
260
- }
261
- }
262
- async matterHandleSkipArea(request) {
263
- this.log.info('Matter -> Skip Area:', request);
264
- // Best-effort: log request. Implement if Shark API supports skipping areas.
265
- await Promise.resolve();
266
- }
267
- // Check if native robot vacuum service is available in HomeKit
268
- checkForNativeVacuumService() {
269
- try {
270
- // As of Homebridge 2.0.0-alpha.28+, there are no native robot vacuum services available
271
- // in the HAP-NodeJS framework. The HomeKit protocol specification does not yet include
272
- // dedicated robot vacuum services. We check for potential future services:
273
- const potentialServices = ['RobotVacuum', 'VacuumCleaner', 'RoboticVacuum'];
274
- for (const serviceName of potentialServices) {
275
- if (this.platform.Service[serviceName]) {
276
- this.log.info(`Native vacuum service detected: ${serviceName}`);
277
- return true;
278
- }
279
- }
280
- this.log.debug('No native robot vacuum services available in current HomeKit framework, using enhanced FanV2 service');
281
- return false;
282
- }
283
- catch (error) {
284
- this.log.debug('Error checking for native vacuum service:', error);
285
- return false;
286
- }
287
- }
288
- // Helper method to calculate vacuum docked status based on inversion setting
289
- calculateDockedStatus(docked_status) {
290
- if (!this.invertDockedStatus) {
291
- return docked_status === 1;
292
- }
293
- else {
294
- return docked_status !== 1;
295
- }
296
- }
297
- // Retrieve vacuum states interval function
298
- async retrieveVacuumStateInterval() {
299
- setInterval(async () => {
300
- await this.retrieveVacuumStates()
301
- .catch(createPromiseRejectionHandler(this.log, 'interval update'));
302
- }, this.dockedUpdateInterval + this.dockedDelay);
303
- }
304
- // Retrieve docked status
305
- async retrieveDockedStatus() {
306
- this.log.debug('Triggering GET Docked Status');
307
- await this.device.update(Properties.DOCKED_STATUS);
308
- const docked_status = this.device.docked_status();
309
- const vacuumDocked = this.calculateDockedStatus(docked_status);
310
- return vacuumDocked;
311
- }
312
- // Retrieve operating mode
313
- async retrieveOperatingMode() {
314
- this.log.debug('Triggering GET Operating Mode');
315
- await this.device.update(Properties.OPERATING_MODE)
316
- .then((delay) => {
317
- this.dockedDelay = delay;
318
- });
319
- }
320
- // Retrieve power mode
321
- async retrievePowerMode() {
322
- this.log.debug('Triggering GET Power Mode');
323
- await this.device.update(Properties.POWER_MODE)
324
- .then((delay) => {
325
- this.dockedDelay = delay;
326
- });
327
- }
328
- // Monitor vacuum state function
329
- async retrieveVacuumStates() {
330
- this.log.debug('Triggering GET Vacuum States');
331
- let vacuumDocked = false;
332
- await this.device.update([Properties.DOCKED_STATUS, Properties.OPERATING_MODE, Properties.POWER_MODE])
333
- .then((delay) => {
334
- this.dockedDelay = delay;
335
- });
336
- const docked_status = this.device.docked_status();
337
- vacuumDocked = this.calculateDockedStatus(docked_status);
338
- const power_mode = this.device.power_mode();
339
- const mode = this.device.operating_mode();
340
- const vacuumActive = mode === OperatingModes.START || mode === OperatingModes.STOP;
341
- this.service.updateCharacteristic(this.platform.Characteristic.Active, vacuumActive);
342
- if (vacuumActive) {
343
- if (this.enhancedVacuumMode) {
344
- // Enhanced vacuum mode: 25=Eco, 50=Normal, 100=Max
345
- if (power_mode === PowerModes.MAX) {
346
- this.service.updateCharacteristic(this.platform.Characteristic.RotationSpeed, VACUUM_SPEEDS.MAX || 100);
347
- }
348
- else if (power_mode === PowerModes.ECO) {
349
- this.service.updateCharacteristic(this.platform.Characteristic.RotationSpeed, VACUUM_SPEEDS.ECO || 25);
350
- }
351
- else {
352
- this.service.updateCharacteristic(this.platform.Characteristic.RotationSpeed, VACUUM_SPEEDS.NORMAL || 50);
353
- }
354
- }
355
- else {
356
- // Legacy mode: 30=Eco, 60=Normal, 90=Max
357
- if (power_mode === PowerModes.MAX) {
358
- this.service.updateCharacteristic(this.platform.Characteristic.RotationSpeed, VACUUM_SPEEDS.MAX || 90);
359
- }
360
- else if (power_mode === PowerModes.ECO) {
361
- this.service.updateCharacteristic(this.platform.Characteristic.RotationSpeed, VACUUM_SPEEDS.ECO || 30);
362
- }
363
- else {
364
- this.service.updateCharacteristic(this.platform.Characteristic.RotationSpeed, VACUUM_SPEEDS.NORMAL || 60);
365
- }
366
- }
367
- if (mode === OperatingModes.STOP) {
368
- this.vacuumPausedService.updateCharacteristic(this.platform.Characteristic.On, true);
369
- }
370
- else {
371
- this.vacuumPausedService.updateCharacteristic(this.platform.Characteristic.On, false);
372
- }
373
- }
374
- else {
375
- this.service.updateCharacteristic(this.platform.Characteristic.RotationSpeed, VACUUM_SPEEDS.OFF);
376
- }
377
- this.dockedStatusService.updateCharacteristic(this.platform.Characteristic.ContactSensorState, vacuumDocked);
378
- this.log.debug('Vacuum Status - Docked:', vacuumDocked, 'Active:', vacuumActive, 'Power Mode:', power_mode === PowerModes.ECO ? 'ECO' : power_mode === PowerModes.MAX ? 'MAX' : 'NORMAL');
379
- }
380
- // Update paused and active state on switch
381
- updateStates() {
382
- const mode = this.device.operating_mode();
383
- if (mode === OperatingModes.START || mode === OperatingModes.STOP) {
384
- this.service.updateCharacteristic(this.platform.Characteristic.Active, this.platform.Characteristic.Active.ACTIVE);
385
- }
386
- else {
387
- this.service.updateCharacteristic(this.platform.Characteristic.Active, this.platform.Characteristic.Active.INACTIVE);
388
- }
389
- if (mode === OperatingModes.STOP) {
390
- this.vacuumPausedService.updateCharacteristic(this.platform.Characteristic.On, true);
391
- }
392
- else {
393
- this.vacuumPausedService.updateCharacteristic(this.platform.Characteristic.On, false);
394
- }
395
- }
396
- // Get paused state
397
- async getPaused() {
398
- this.log.debug('Triggering GET Paused');
399
- await this.retrieveOperatingMode();
400
- const mode = this.device.operating_mode();
401
- this.log.debug('State:', mode);
402
- if (mode === OperatingModes.STOP) {
403
- return true;
404
- }
405
- else {
406
- return false;
407
- }
408
- }
409
- // Set paused state
410
- async setPaused(value) {
411
- this.log.debug('Triggering SET Paused. Paused:', value);
412
- const mode = this.device.operating_mode();
413
- if (mode === OperatingModes.START || mode === OperatingModes.STOP) {
414
- if (value) {
415
- await this.device.set_operating_mode(OperatingModes.STOP)
416
- .catch(createPromiseRejectionHandler(this.log, 'setting operating mode'));
417
- }
418
- else {
419
- await this.device.set_operating_mode(OperatingModes.START)
420
- .catch(createPromiseRejectionHandler(this.log, 'setting operating mode'));
421
- }
422
- }
423
- else {
424
- setTimeout(() => {
425
- this.vacuumPausedService.updateCharacteristic(this.platform.Characteristic.On, false);
426
- }, TIMEOUTS.PAUSED_UPDATE_DELAY);
427
- }
428
- }
429
- // Check if the vacuum is active for UI
430
- async getVacuumActive() {
431
- this.log.debug('Triggering GET Vacuum Active');
432
- const mode = this.device.operating_mode();
433
- if (mode === OperatingModes.START || mode === OperatingModes.STOP) {
434
- return true;
435
- }
436
- else {
437
- return false;
438
- }
439
- }
440
- // Set the vacuum state by UI
441
- async setVacuumActive(value) {
442
- this.log.debug('Triggering SET Vacuum Active');
443
- if (!value) {
444
- const mode = this.device.operating_mode();
445
- if (mode === OperatingModes.START || mode === OperatingModes.STOP) {
446
- await this.setFanSpeed(0)
447
- .catch(createPromiseRejectionHandler(this.log, 'setting fan speed'));
448
- }
449
- }
450
- }
451
- // Get vacuum power for UI
452
- async getFanSpeed() {
453
- this.log.debug('Triggering GET Fan Speed');
454
- await this.retrievePowerMode();
455
- const mode = this.device.operating_mode();
456
- const vacuumActive = mode === OperatingModes.START || mode === OperatingModes.STOP;
457
- if (vacuumActive) {
458
- const power_mode = this.device.power_mode();
459
- if (this.enhancedVacuumMode) {
460
- // Enhanced vacuum mode: 0=Off, 25=Eco, 50=Normal, 100=Max
461
- if (power_mode === PowerModes.MAX) {
462
- return VACUUM_SPEEDS.MAX || 100; // Max power
463
- }
464
- else if (power_mode === PowerModes.ECO) {
465
- return VACUUM_SPEEDS.ECO || 25; // Eco mode
466
- }
467
- else {
468
- return VACUUM_SPEEDS.NORMAL || 50; // Normal mode
469
- }
470
- }
471
- else {
472
- // Legacy mode: 0=Off, 30=Eco, 60=Normal, 90=Max
473
- if (power_mode === PowerModes.MAX) {
474
- return VACUUM_SPEEDS.MAX || 90;
475
- }
476
- else if (power_mode === PowerModes.ECO) {
477
- return VACUUM_SPEEDS.ECO || 30;
478
- }
479
- else {
480
- return VACUUM_SPEEDS.NORMAL || 60;
481
- }
482
- }
483
- }
484
- else {
485
- return VACUUM_SPEEDS.OFF || 0; // Off
486
- }
487
- }
488
- // Set vacuum power from UI (and start/stop vacuum if needed)
489
- async setFanSpeed(value) {
490
- this.log.debug('Triggering SET Fan Speed. Value:', value);
491
- let power_mode = PowerModes.NORMAL;
492
- if (this.enhancedVacuumMode) {
493
- // Enhanced vacuum mode mappings
494
- if (value === (VACUUM_SPEEDS.ECO ?? 25)) {
495
- power_mode = PowerModes.ECO;
496
- this.log.debug('Setting vacuum to ECO mode');
497
- }
498
- else if (value === (VACUUM_SPEEDS.MAX ?? 100) || value === (VACUUM_SPEEDS.MAX ?? 75)) {
499
- power_mode = PowerModes.MAX;
500
- this.log.debug('Setting vacuum to MAX mode');
501
- }
502
- else if (value === (VACUUM_SPEEDS.NORMAL ?? 50)) {
503
- power_mode = PowerModes.NORMAL;
504
- this.log.debug('Setting vacuum to NORMAL mode');
505
- }
506
- else if (value === (VACUUM_SPEEDS.OFF ?? 0)) {
507
- this.log.debug('Stopping vacuum');
508
- await this.device.cancel_clean()
509
- .catch(() => {
510
- this.log.debug('Promise Rejected with cancel cleaning update.');
511
- });
512
- this.service.updateCharacteristic(this.platform.Characteristic.Active, this.platform.Characteristic.Active.INACTIVE);
513
- this.vacuumPausedService.updateCharacteristic(this.platform.Characteristic.On, false);
514
- return;
515
- }
516
- }
517
- else {
518
- // Legacy mode mappings
519
- if (value === (VACUUM_SPEEDS.ECO ?? 30)) {
520
- power_mode = PowerModes.ECO;
521
- this.log.debug('Setting vacuum to ECO mode (legacy)');
522
- }
523
- else if (value === (VACUUM_SPEEDS.MAX ?? 90)) {
524
- power_mode = PowerModes.MAX;
525
- this.log.debug('Setting vacuum to MAX mode (legacy)');
526
- }
527
- else if (value === (VACUUM_SPEEDS.OFF ?? 0)) {
528
- this.log.debug('Stopping vacuum');
529
- await this.device.cancel_clean()
530
- .catch(() => {
531
- this.log.debug('Promise Rejected with cancel cleaning update.');
532
- });
533
- this.service.updateCharacteristic(this.platform.Characteristic.Active, this.platform.Characteristic.Active.INACTIVE);
534
- this.vacuumPausedService.updateCharacteristic(this.platform.Characteristic.On, false);
535
- return;
536
- }
537
- else {
538
- power_mode = PowerModes.NORMAL;
539
- this.log.debug('Setting vacuum to NORMAL mode (legacy)');
540
- }
541
- }
542
- const isPaused = await this.getPaused();
543
- if (isPaused) {
544
- await this.device.set_operating_mode(OperatingModes.START)
545
- .catch(() => {
546
- this.log.debug('Promise Rejected with setting operating mode.');
547
- });
548
- this.vacuumPausedService.updateCharacteristic(this.platform.Characteristic.On, false);
549
- }
550
- await this.device.set_property_value(Properties.POWER_MODE, power_mode)
551
- .catch(createPromiseRejectionHandler(this.log, 'powermode update'));
552
- const mode = this.device.operating_mode();
553
- if (mode !== OperatingModes.START && mode !== OperatingModes.STOP) {
554
- this.service.updateCharacteristic(this.platform.Characteristic.Active, this.platform.Characteristic.Active.ACTIVE);
555
- await this.device.clean_rooms([])
556
- .catch(createPromiseRejectionHandler(this.log, 'start cleaning update'));
557
- }
558
- }
559
- }
560
- //# sourceMappingURL=platformAccessory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"platformAccessory.js","sourceRoot":"","sources":["../src/platformAccessory.ts"],"names":[],"mappings":"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"}