@homebridge-plugins/homebridge-sharkiq 2.0.0-beta.2 → 2.0.0-beta.21

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 (47) hide show
  1. package/CHANGELOG.md +19 -2
  2. package/README.md +41 -4
  3. package/config.schema.json +8 -26
  4. package/dist/constants.d.ts.map +1 -1
  5. package/dist/constants.js.map +1 -1
  6. package/dist/devices/BaseMatterAccessory.d.ts +67 -0
  7. package/dist/devices/BaseMatterAccessory.d.ts.map +1 -0
  8. package/dist/devices/BaseMatterAccessory.js +153 -0
  9. package/dist/devices/BaseMatterAccessory.js.map +1 -0
  10. package/dist/devices/RoboticVacuumAccessory.d.ts +67 -0
  11. package/dist/devices/RoboticVacuumAccessory.d.ts.map +1 -0
  12. package/dist/devices/RoboticVacuumAccessory.js +645 -0
  13. package/dist/devices/RoboticVacuumAccessory.js.map +1 -0
  14. package/dist/devices/index.d.ts +9 -0
  15. package/dist/devices/index.d.ts.map +1 -0
  16. package/dist/devices/index.js +8 -0
  17. package/dist/devices/index.js.map +1 -0
  18. package/dist/index.d.ts +3 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +3 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/platform.d.ts +39 -16
  23. package/dist/platform.d.ts.map +1 -1
  24. package/dist/platform.js +195 -92
  25. package/dist/platform.js.map +1 -1
  26. package/dist/sharkiq-js/room_encoding.d.ts +8 -0
  27. package/dist/sharkiq-js/room_encoding.d.ts.map +1 -0
  28. package/dist/sharkiq-js/room_encoding.js +35 -0
  29. package/dist/sharkiq-js/room_encoding.js.map +1 -0
  30. package/dist/sharkiq-js/sharkiq.d.ts.map +1 -1
  31. package/dist/sharkiq-js/sharkiq.js +2 -20
  32. package/dist/sharkiq-js/sharkiq.js.map +1 -1
  33. package/docs/assets/highlight.css +9 -2
  34. package/docs/index.html +35 -3
  35. package/docs/variables/default.html +2 -1
  36. package/package.json +3 -3
  37. package/test/context.spec.ts +33 -0
  38. package/test/encodeRoomList.spec.ts +25 -0
  39. package/test/polling.spec.ts +74 -0
  40. package/dist/errorHandling.d.ts +0 -19
  41. package/dist/errorHandling.d.ts.map +0 -1
  42. package/dist/errorHandling.js +0 -27
  43. package/dist/errorHandling.js.map +0 -1
  44. package/dist/platformAccessory.d.ts +0 -33
  45. package/dist/platformAccessory.d.ts.map +0 -1
  46. package/dist/platformAccessory.js +0 -384
  47. package/dist/platformAccessory.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoboticVacuumAccessory.js","sourceRoot":"","sources":["../../src/devices/RoboticVacuumAccessory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Base Device Classes
3
+ *
4
+ * Export all base classes and device implementations
5
+ */
6
+ export { BaseMatterAccessory } from './BaseMatterAccessory.js';
7
+ export type { BaseMatterAccessoryConfig } from './BaseMatterAccessory.js';
8
+ export { RoboticVacuumAccessory } from './RoboticVacuumAccessory.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/devices/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,YAAY,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Base Device Classes
3
+ *
4
+ * Export all base classes and device implementations
5
+ */
6
+ export { BaseMatterAccessory } from './BaseMatterAccessory.js';
7
+ export { RoboticVacuumAccessory } from './RoboticVacuumAccessory.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/devices/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,7 @@
1
1
  import type { API } from 'homebridge';
2
+ /**
3
+ * This method registers the platform with Homebridge
4
+ */
2
5
  declare const _default: (api: API) => void;
3
6
  export default _default;
4
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;yBAMrB,KAAK,GAAG,KAAG,IAAI;AAA/B,wBAEC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAKrC;;GAEG;yBACa,KAAK,GAAG;AAAxB,wBAEC"}
package/dist/index.js CHANGED
@@ -1,6 +1,8 @@
1
1
  import { SharkIQPlatform } from './platform.js';
2
2
  import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
3
- // Register our platform with homebridge.
3
+ /**
4
+ * This method registers the platform with Homebridge
5
+ */
4
6
  export default (api) => {
5
7
  api.registerPlatform(PLUGIN_NAME, PLATFORM_NAME, SharkIQPlatform);
6
8
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE1D,yCAAyC;AACzC,eAAe,CAAC,GAAQ,EAAQ,EAAE;IAChC,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,aAAa,EAAE,eAAe,CAAC,CAAA;AACnE,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE1D;;GAEG;AACH,eAAe,CAAC,GAAQ,EAAE,EAAE;IAC1B,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,aAAa,EAAE,eAAe,CAAC,CAAA;AACnE,CAAC,CAAA"}
@@ -1,21 +1,44 @@
1
- import type { API, Characteristic, DynamicPlatformPlugin, Logger, PlatformAccessory, PlatformConfig, Service } from 'homebridge';
2
- import type { SharkIqVacuum } from './sharkiq-js/sharkiq';
3
- declare module 'homebridge' {
4
- interface API {
5
- publishMatterAccessories?: (pluginIdentifier: string, accessories: PlatformAccessory[]) => void;
6
- }
7
- }
1
+ import type { API, DynamicPlatformPlugin, Logging, MatterAccessory, PlatformConfig, SerializedMatterAccessory } from 'homebridge';
2
+ /**
3
+ * MatterPlatform
4
+ * Demonstrates all available Matter device types in Homebridge
5
+ *
6
+ * Organized by official Matter Specification v1.4.1 categories
7
+ */
8
8
  export declare class SharkIQPlatform implements DynamicPlatformPlugin {
9
- readonly log: Logger;
9
+ readonly log: Logging;
10
10
  readonly config: PlatformConfig;
11
11
  readonly api: API;
12
- readonly Service: typeof Service;
13
- readonly Characteristic: typeof Characteristic;
14
- readonly accessories: PlatformAccessory[];
15
- vacuumDevices: SharkIqVacuum[];
16
- constructor(log: Logger, config: PlatformConfig, api: API);
17
- login: () => Promise<SharkIqVacuum[]>;
18
- configureAccessory(accessory: PlatformAccessory): void;
19
- discoverDevices(): void;
12
+ readonly matterAccessories: Map<string, SerializedMatterAccessory | MatterAccessory>;
13
+ vacuumDevices: any[];
14
+ constructor(log: Logging, config: PlatformConfig, api: API);
15
+ login: () => Promise<void>;
16
+ /**
17
+ * Required for DynamicPlatformPlugin
18
+ * Called when homebridge restores cached accessories from disk at startup
19
+ */
20
+ configureAccessory(): void;
21
+ /**
22
+ * Called when homebridge restores cached Matter accessories from disk at startup.
23
+ *
24
+ * This is where you can access the `accessory.context` object to retrieve
25
+ * any custom data you stored when the accessory was originally registered.
26
+ */
27
+ configureMatterAccessory(accessory: SerializedMatterAccessory): void;
28
+ /**
29
+ * Register all Matter accessories
30
+ */
31
+ private registerMatterAccessories;
32
+ /**
33
+ * Remove accessories that are disabled in config
34
+ */
35
+ private removeDisabledAccessories;
36
+ /**
37
+ * Section 12: Robotic Devices (Matter Spec § 12)
38
+ * ⚠️ IMPORTANT: RVC devices use a DIFFERENT PROCESS (same code) than other devices!
39
+ * When this runs, you'll see separate commissioning codes in the logs for the robot vacuum.
40
+ * Use those codes to pair the vacuum as a separate bridge in your Home app.
41
+ */
42
+ private registerSection12Robotic;
20
43
  }
21
44
  //# sourceMappingURL=platform.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEhI,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAYzD,OAAO,QAAQ,YAAY,CAAC;IAC1B,UAAU,GAAG;QACX,wBAAwB,CAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,KAAK,IAAI,CAAA;KAChG;CACF;AAGD,qBAAa,eAAgB,YAAW,qBAAqB;aAUzC,GAAG,EAAE,MAAM;aACX,MAAM,EAAE,cAAc;aACtB,GAAG,EAAE,GAAG;IAX1B,SAAgB,OAAO,EAAE,OAAO,OAAO,CAAA;IACvC,SAAgB,cAAc,EAAE,OAAO,cAAc,CAAA;IAGrD,SAAgB,WAAW,EAAE,iBAAiB,EAAE,CAAK;IAE9C,aAAa,EAAE,aAAa,EAAE,CAAK;gBAGxB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,GAAG;IAiC1B,KAAK,QAAa,OAAO,CAAC,aAAa,EAAE,CAAC,CAgCzC;IAGD,kBAAkB,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAOtD,eAAe,IAAI,IAAI;CA+CxB"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,GAAG,EACH,qBAAqB,EACrB,OAAO,EACP,eAAe,EACf,cAAc,EACd,yBAAyB,EAC1B,MAAM,YAAY,CAAA;AAYnB;;;;;GAKG;AACH,qBAAa,eAAgB,YAAW,qBAAqB;aAYzC,GAAG,EAAE,OAAO;aACZ,MAAM,EAAE,cAAc;aACtB,GAAG,EAAE,GAAG;IAP1B,SAAgB,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,yBAAyB,GAAG,eAAe,CAAC,CAAY;IAEhG,aAAa,EAAE,GAAG,EAAE,CAAK;gBAGd,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,GAAG;IAkC1B,KAAK,QAAa,OAAO,CAAC,IAAI,CAAC,CA4C9B;IAED;;;OAGG;IACH,kBAAkB;IAMlB;;;;;OAKG;IACH,wBAAwB,CAAC,SAAS,EAAE,yBAAyB;IAM7D;;OAEG;YACW,yBAAyB;IAUvC;;OAEG;YACW,yBAAyB;IAiBvC;;;;;OAKG;YACW,wBAAwB;CAwFvC"}
package/dist/platform.js CHANGED
@@ -1,55 +1,66 @@
1
1
  import { join } from 'node:path';
2
- import { TIMEOUTS } from './constants.js';
2
+ import { RoboticVacuumAccessory, } from './devices/index.js';
3
3
  import { Login } from './login.js';
4
- import { SharkIQAccessory } from './platformAccessory.js';
5
- import { PLUGIN_NAME } from './settings.js';
4
+ import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
6
5
  import { get_ayla_api } from './sharkiq-js/ayla_api.js';
7
6
  import { global_vars } from './sharkiq-js/const.js';
8
- // SharkIQPlatform Main Class
7
+ /**
8
+ * MatterPlatform
9
+ * Demonstrates all available Matter device types in Homebridge
10
+ *
11
+ * Organized by official Matter Specification v1.4.1 categories
12
+ */
9
13
  export class SharkIQPlatform {
10
14
  log;
11
15
  config;
12
16
  api;
13
- Service;
14
- Characteristic;
15
- // this is used to track restored cached accessories
16
- accessories = [];
17
- // Device vacuums object array
17
+ // Track restored HAP cached accessories (required for DynamicPlatformPlugin)
18
+ // This is commented out here as this plugin does not have any HAP accessories
19
+ // public readonly accessories: Map<string, PlatformAccessory> = new Map()
20
+ // Track restored Matter cached accessories
21
+ // Can contain either the serialized object restored from disk or a runtime Platform/MatterAccessory
22
+ matterAccessories = new Map();
23
+ // Device vacuums object array (typed as any[] to avoid import-order issues)
18
24
  vacuumDevices = [];
19
25
  constructor(log, config, api) {
20
26
  this.log = log;
21
27
  this.config = config;
22
28
  this.api = api;
23
- this.Service = this.api.hap.Service;
24
- this.Characteristic = this.api.hap.Characteristic;
25
29
  this.log.debug('Finished initializing platform:', this.config.name);
26
- // Start plugin and attempt to login
27
- this.api.on('didFinishLaunching', () => {
28
- const serialNumbers = config.vacuums;
29
- if (!Array.isArray(serialNumbers) || serialNumbers.length === 0) {
30
- log.error('List of your vacuum DSNs you want to be added must be present in the config');
31
- return;
30
+ // Does the user have a version of Homebridge that is compatible with matter?
31
+ if (!this.api.isMatterAvailable?.()) {
32
+ this.log.warn('Matter is not available in this version of Homebridge. Please update Homebridge to use this plugin.');
33
+ }
34
+ // Check if the user has matter enabled, this means:
35
+ // - If the plugin is running on the main bridge, then the user must have enabled matter in the Homebridge settings page in the UI
36
+ // - If the plugin is running on a child bridge, then the user must have enabled matter on the plugin bridge settings section in the UI
37
+ // In reality, only the below check is needed, but they are both included here for completeness
38
+ // Remember to use a '?.' optional chaining operator in case the user is running an older version of Homebridge that does not have these APIs
39
+ if (!this.api.isMatterEnabled?.()) {
40
+ this.log.warn('Matter is not enabled in Homebridge. Please enable Matter in the Homebridge settings to use this plugin.');
41
+ return;
42
+ }
43
+ // Register Matter accessories when Homebridge has finished launching
44
+ this.api.on('didFinishLaunching', async () => {
45
+ this.log.debug('Executed didFinishLaunching callback');
46
+ try {
47
+ // Attempt to login and populate this.vacuumDevices if configured
48
+ await this.login();
32
49
  }
33
- this.login().then((devices) => {
34
- this.log.info(`Found ${devices.length} device(s) on your account.`);
35
- this.log.debug('Devices:', devices);
36
- for (let i = 0; i < devices.length; i++) {
37
- if (serialNumbers.includes(devices[i]._dsn)) {
38
- this.vacuumDevices.push(devices[i]);
39
- }
40
- }
41
- if (this.vacuumDevices.length === 0) {
42
- log.warn('None of the DSNs provided matched the vacuum(s) on your account.');
43
- }
44
- this.discoverDevices();
45
- }).catch((error) => {
46
- log.error('Error with login.');
47
- log.error(error);
48
- });
50
+ catch (error) {
51
+ this.log.error('Error logging in to Shark API:', error);
52
+ }
53
+ await this.registerMatterAccessories();
49
54
  });
50
55
  }
51
56
  // Attempt to login and fetch devices.
52
57
  login = async () => {
58
+ const serialNumbers = this.config.vacuums;
59
+ // If no DSNs provided, we'll dynamically use all devices from the Shark API
60
+ const useAllDevices = !Array.isArray(serialNumbers) || serialNumbers.length === 0;
61
+ if (useAllDevices) {
62
+ this.log.info('No DSNs provided in config — will add all Shark devices from your account');
63
+ }
53
64
  const europe = this.config.europe || false;
54
65
  const storagePath = this.api.user.storagePath();
55
66
  const auth_file = join(storagePath, global_vars.FILE);
@@ -57,80 +68,172 @@ export class SharkIQPlatform {
57
68
  const oAuthCode = this.config.oAuthCode || '';
58
69
  const email = this.config.email || '';
59
70
  const password = this.config.password || '';
60
- // Log which login method is being used based on user configuration
61
- // Email/password takes precedence if both are provided (matches Login class logic)
62
- if (email && typeof email === 'string' && email.trim() !== ''
63
- && password && typeof password === 'string' && password.trim() !== '') {
64
- this.log.info('Valid email and password present, using email and password login method.');
65
- }
66
- else if (oAuthCode && typeof oAuthCode === 'string' && oAuthCode.trim() !== '') {
67
- this.log.info('Valid OAuth code present, using OAuth login method.');
68
- }
69
71
  if (email !== '' && password === '') {
70
- return Promise.reject(new Error('Password must be present in the config if email is provided.'));
72
+ throw new Error('Password must be present in the config if email is provided.');
71
73
  }
72
74
  else if (email === '' && password !== '') {
73
- return Promise.reject(new Error('Email must be present in the config if password is provided.'));
75
+ throw new Error('Email must be present in the config if password is provided.');
74
76
  }
75
77
  const login = new Login(this.log, auth_file, oauth_file, email, password, oAuthCode, europe);
76
- try {
77
- await login.checkLogin();
78
- const ayla_api = get_ayla_api(auth_file, this.log, europe);
79
- await ayla_api.sign_in();
80
- const devices = await ayla_api.get_devices();
81
- return devices;
78
+ await login.checkLogin();
79
+ const ayla_api = get_ayla_api(auth_file, this.log, europe);
80
+ await ayla_api.sign_in();
81
+ const devices = await ayla_api.get_devices();
82
+ // Filter devices by DSNs provided in config, or take all devices when none specified
83
+ for (let i = 0; i < devices.length; i++) {
84
+ const dsn = devices[i].serial_number;
85
+ if (useAllDevices || (Array.isArray(serialNumbers) && serialNumbers.includes(dsn))) {
86
+ this.vacuumDevices.push(devices[i]);
87
+ }
88
+ }
89
+ if (this.vacuumDevices.length === 0) {
90
+ if (useAllDevices) {
91
+ this.log.warn('No Shark devices were found on your account.');
92
+ }
93
+ else {
94
+ this.log.warn('None of the DSNs provided matched the vacuum(s) on your account.');
95
+ }
82
96
  }
83
- catch (error) {
84
- return Promise.reject(error);
97
+ else {
98
+ this.log.info(`Discovered ${this.vacuumDevices.length} Shark device(s) from your account.`);
85
99
  }
86
100
  };
87
- // Restore accessory cache.
88
- configureAccessory(accessory) {
89
- this.log.info('Loading accessory from cache:', accessory.displayName);
90
- this.accessories.push(accessory);
101
+ /**
102
+ * Required for DynamicPlatformPlugin
103
+ * Called when homebridge restores cached accessories from disk at startup
104
+ */
105
+ configureAccessory( /* accessory: PlatformAccessory */) {
106
+ // Note this is not used for Matter accessories - use configureMatterAccessory instead
107
+ // This plugin does not have any hap accessories, so here we can comment this out
108
+ // this.accessories.set(accessory.UUID, accessory)
109
+ }
110
+ /**
111
+ * Called when homebridge restores cached Matter accessories from disk at startup.
112
+ *
113
+ * This is where you can access the `accessory.context` object to retrieve
114
+ * any custom data you stored when the accessory was originally registered.
115
+ */
116
+ configureMatterAccessory(accessory) {
117
+ this.log.debug('Loading cached Matter accessory:', accessory.displayName);
118
+ // store the serialized accessory; later code may replace this with a runtime MatterAccessory instance
119
+ this.matterAccessories.set(accessory.uuid, accessory);
120
+ }
121
+ /**
122
+ * Register all Matter accessories
123
+ */
124
+ async registerMatterAccessories() {
125
+ // Remove accessories that are disabled in config
126
+ await this.removeDisabledAccessories();
127
+ // Register devices by Matter specification sections
128
+ await this.registerSection12Robotic();
129
+ this.log.debug('Finished registering Matter accessories');
91
130
  }
92
- // Add vacuums to Homebridge.
93
- discoverDevices() {
94
- const devices = [];
95
- const unusedDeviceAccessories = this.accessories;
96
- const invertDockedStatus = this.config.invertDockedStatus || false;
97
- const dockedUpdateInterval = this.config.dockedUpdateInterval || TIMEOUTS.DEFAULT_DOCKED_UPDATE_INTERVAL;
98
- const enhancedVacuumMode = this.config.enhancedVacuumMode !== undefined ? this.config.enhancedVacuumMode : true;
99
- this.vacuumDevices.forEach((vacuumDevice) => {
100
- const uuid = this.api.hap.uuid.generate(vacuumDevice._dsn.toString());
101
- let accessory = unusedDeviceAccessories.find(accessory => accessory.UUID === uuid);
102
- if (accessory) {
103
- unusedDeviceAccessories.splice(unusedDeviceAccessories.indexOf(accessory), 1);
131
+ /**
132
+ * Remove accessories that are disabled in config
133
+ */
134
+ async removeDisabledAccessories() {
135
+ const configMap = [
136
+ { enabled: this.config.enableRobotVacuum, uuid: this.api.matter.uuid.generate('matter-robot-vacuum'), name: 'Robot Vacuum' },
137
+ ];
138
+ for (const { enabled, uuid, name } of configMap) {
139
+ if (enabled === false) {
140
+ const existingAccessory = this.matterAccessories.get(uuid);
141
+ if (existingAccessory) {
142
+ this.log.info(`Removing accessory '${name}' (disabled in config)`);
143
+ await this.api.matter.unregisterPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [existingAccessory]);
144
+ this.matterAccessories.delete(uuid);
145
+ }
146
+ }
147
+ }
148
+ }
149
+ /**
150
+ * Section 12: Robotic Devices (Matter Spec § 12)
151
+ * ⚠️ IMPORTANT: RVC devices use a DIFFERENT PROCESS (same code) than other devices!
152
+ * When this runs, you'll see separate commissioning codes in the logs for the robot vacuum.
153
+ * Use those codes to pair the vacuum as a separate bridge in your Home app.
154
+ */
155
+ async registerSection12Robotic() {
156
+ const accessories = [];
157
+ // Compute poll interval (ms) from config (seconds)
158
+ const pollIntervalSec = typeof this.config.pollInterval === 'number' ? this.config.pollInterval : 30;
159
+ const pollIntervalMs = Math.max(0, Math.floor(pollIntervalSec * 1000));
160
+ // Robot Vacuum
161
+ if (this.config.enableRobotVacuum !== false) {
162
+ // Determine DSNs we discovered (from API)
163
+ const discoveredDsns = Array.isArray(this.vacuumDevices)
164
+ ? this.vacuumDevices.map(d => (d && (d.serial_number || d._dsn))?.toString()).filter(Boolean)
165
+ : [];
166
+ // Register one accessory per discovered Shark device (skip registration if restored from cache)
167
+ if (discoveredDsns.length > 0) {
168
+ for (const sharkDevice of this.vacuumDevices) {
169
+ const dsn = (sharkDevice && (sharkDevice.serial_number || sharkDevice._dsn));
170
+ const deviceUuid = this.api.matter.uuid.generate(dsn?.toString() || 'matter-robot-vacuum');
171
+ if (this.matterAccessories.has(deviceUuid)) {
172
+ this.log.debug(`Accessory for DSN ${dsn} already restored from cache; skipping new registration.`);
173
+ continue;
174
+ }
175
+ const device = new RoboticVacuumAccessory(this.api, this.log, sharkDevice, pollIntervalMs);
176
+ accessories.push(device.toAccessory());
177
+ // Keep runtime instance so we can manage lifecycle (stop polling) if needed
178
+ this.matterAccessories.set(device.uuid, device);
179
+ }
104
180
  }
105
181
  else {
106
- accessory = new this.api.platformAccessory(vacuumDevice._name.toString(), uuid);
107
- devices.push(accessory);
182
+ // Fallback to demo accessory when no Shark devices are available
183
+ const demoUuid = this.api.matter.uuid.generate('VACUUM-001');
184
+ if (!this.matterAccessories.has(demoUuid)) {
185
+ const device = new RoboticVacuumAccessory(this.api, this.log, undefined, pollIntervalMs);
186
+ accessories.push(device.toAccessory());
187
+ this.matterAccessories.set(device.uuid, device);
188
+ }
108
189
  }
109
- let accessoryInformationService = accessory.getService(this.Service.AccessoryInformation);
110
- if (!accessoryInformationService) {
111
- accessoryInformationService = accessory.addService(this.Service.AccessoryInformation);
190
+ }
191
+ // Unregister cached accessories that are no longer present in discovered devices or config
192
+ try {
193
+ const allowedDsns = (Array.isArray(this.vacuumDevices) && this.vacuumDevices.length > 0)
194
+ ? this.vacuumDevices.map(d => (d && (d.serial_number || d._dsn))?.toString()).filter(Boolean)
195
+ : (Array.isArray(this.config.vacuums) ? this.config.vacuums.map(String) : []);
196
+ const toUnregister = [];
197
+ for (const [, serialized] of this.matterAccessories) {
198
+ try {
199
+ const ser = serialized;
200
+ const svrDsn = ser.context?.serialNumber || ser.context?.serialnumber || ser.context?.serial;
201
+ if (svrDsn && allowedDsns.length > 0 && !allowedDsns.includes(String(svrDsn))) {
202
+ toUnregister.push(ser);
203
+ }
204
+ }
205
+ catch {
206
+ // ignore malformed cached accessory
207
+ }
208
+ }
209
+ if (toUnregister.length > 0) {
210
+ this.log.info(`Removing ${toUnregister.length} cached Matter accessory(ies) that are not in the discovered list`);
211
+ await this.api.matter.unregisterPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, toUnregister);
212
+ for (const acc of toUnregister) {
213
+ // If we have a runtime instance, stop any polling or background tasks first
214
+ try {
215
+ const runtime = this.matterAccessories.get(acc.uuid);
216
+ if (runtime && typeof runtime.stopPolling === 'function') {
217
+ runtime.stopPolling();
218
+ }
219
+ }
220
+ catch {
221
+ // ignore
222
+ }
223
+ this.matterAccessories.delete(acc.uuid);
224
+ }
112
225
  }
113
- accessoryInformationService
114
- .setCharacteristic(this.Characteristic.Manufacturer, 'Shark')
115
- .setCharacteristic(this.Characteristic.Model, vacuumDevice._vac_model_number || 'Unknown')
116
- .setCharacteristic(this.Characteristic.SerialNumber, vacuumDevice._dsn);
117
- new SharkIQAccessory(this, accessory, vacuumDevice, this.api.hap.uuid, this.log, invertDockedStatus, dockedUpdateInterval, enhancedVacuumMode);
118
- });
119
- // Publish accessories as Matter accessories for native Matter support
120
- // Uses publishMatterAccessories for proper vacuum classification in Matter
121
- if (typeof this.api.publishMatterAccessories === 'function') {
122
- this.api.publishMatterAccessories(PLUGIN_NAME, devices);
123
226
  }
124
- else {
125
- // Fallback to external accessories for older Homebridge versions
126
- this.api.publishExternalAccessories(PLUGIN_NAME, devices);
227
+ catch (e) {
228
+ this.log.debug('Error while unregistering stale accessories:', e);
229
+ }
230
+ if (accessories.length > 0) {
231
+ this.log.info(`✓ Registered ${accessories.length} robot vacuum device(s)`);
232
+ for (const acc of accessories) {
233
+ this.log.info(` - ${acc.displayName} (standalone for Apple Home compatibility)`);
234
+ }
235
+ await this.api.matter.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, accessories);
127
236
  }
128
- unusedDeviceAccessories.forEach((unusedDeviceAccessory) => {
129
- this.log.info(`Removing unused accessory with name ${unusedDeviceAccessory.displayName}`);
130
- this.accessories.splice(this.accessories.indexOf(unusedDeviceAccessory), 1);
131
- });
132
- // Note: External accessories don't require explicit unregistration
133
- // They are managed differently than platform accessories
134
237
  }
135
238
  }
136
239
  //# sourceMappingURL=platform.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Encode a list of room names into the Shark/Ayla base64 payload used by SharkIQ
3
+ * devices. This mirrors the logic from the sharkiqlibs Python implementation so
4
+ * area-cleaning payloads are byte-identical.
5
+ */
6
+ export declare function encodeRoomList(rooms: string[] | null | undefined, identifier?: string): string;
7
+ export default encodeRoomList;
8
+ //# sourceMappingURL=room_encoding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room_encoding.d.ts","sourceRoot":"","sources":["../../src/sharkiq-js/room_encoding.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,EAAE,UAAU,SAAK,GAAG,MAAM,CAgC1F;AAED,eAAe,cAAc,CAAA"}
@@ -0,0 +1,35 @@
1
+ import { Buffer, transcode } from 'node:buffer';
2
+ /**
3
+ * Encode a list of room names into the Shark/Ayla base64 payload used by SharkIQ
4
+ * devices. This mirrors the logic from the sharkiqlibs Python implementation so
5
+ * area-cleaning payloads are byte-identical.
6
+ */
7
+ export function encodeRoomList(rooms, identifier = '') {
8
+ if (!rooms) {
9
+ return '*';
10
+ }
11
+ if (Array.isArray(rooms) && rooms.length === 0) {
12
+ return '*';
13
+ }
14
+ // Header bytes (control characters) used by the device
15
+ let header = '\x80\x01\x0B\xCA\x02';
16
+ // Build rooms section: for each room, prefix with a single byte length and
17
+ // separate entries with a newline (0x0A). This matches the Python impl.
18
+ let rooms_enc = '';
19
+ rooms.forEach((room) => {
20
+ rooms_enc += `${String.fromCharCode(room.length) + room}\n`;
21
+ });
22
+ rooms_enc = rooms_enc.replace(/\n$/, '');
23
+ // Footer: 0x1A followed by one-byte length of identifier and the identifier
24
+ const footer = `\x1A${String.fromCharCode(identifier.length)}${identifier}`;
25
+ // Length byte: remaining payload length (rooms + footer) plus one for newline
26
+ const header_byte = String.fromCharCode(0 + 1 + rooms_enc.length + footer.length);
27
+ header += header_byte;
28
+ header += '\n';
29
+ // Convert UTF-8 string to latin1 bytes then base64 encode the result. This
30
+ // mirrors Python's encode(..., 'latin1') behavior.
31
+ const latin1Buffer = transcode(Buffer.from(header + rooms_enc + footer), 'utf8', 'latin1');
32
+ return Buffer.from(latin1Buffer).toString('base64');
33
+ }
34
+ export default encodeRoomList;
35
+ //# sourceMappingURL=room_encoding.js.map