@homebridge-plugins/homebridge-sharkiq 2.0.0-beta.2 → 2.0.0-beta.20
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.
- package/CHANGELOG.md +19 -2
- package/README.md +41 -4
- package/config.schema.json +8 -26
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/devices/BaseMatterAccessory.d.ts +63 -0
- package/dist/devices/BaseMatterAccessory.d.ts.map +1 -0
- package/dist/devices/BaseMatterAccessory.js +100 -0
- package/dist/devices/BaseMatterAccessory.js.map +1 -0
- package/dist/devices/RoboticVacuumAccessory.d.ts +67 -0
- package/dist/devices/RoboticVacuumAccessory.d.ts.map +1 -0
- package/dist/devices/RoboticVacuumAccessory.js +649 -0
- package/dist/devices/RoboticVacuumAccessory.js.map +1 -0
- package/dist/devices/index.d.ts +9 -0
- package/dist/devices/index.d.ts.map +1 -0
- package/dist/devices/index.js +8 -0
- package/dist/devices/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/platform.d.ts +39 -16
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +195 -92
- package/dist/platform.js.map +1 -1
- package/dist/sharkiq-js/room_encoding.d.ts +8 -0
- package/dist/sharkiq-js/room_encoding.d.ts.map +1 -0
- package/dist/sharkiq-js/room_encoding.js +35 -0
- package/dist/sharkiq-js/room_encoding.js.map +1 -0
- package/dist/sharkiq-js/sharkiq.d.ts.map +1 -1
- package/dist/sharkiq-js/sharkiq.js +2 -20
- package/dist/sharkiq-js/sharkiq.js.map +1 -1
- package/docs/assets/highlight.css +9 -2
- package/docs/index.html +35 -3
- package/docs/variables/default.html +2 -1
- package/package.json +3 -3
- package/test/context.spec.ts +33 -0
- package/test/encodeRoomList.spec.ts +25 -0
- package/test/polling.spec.ts +74 -0
- package/dist/errorHandling.d.ts +0 -19
- package/dist/errorHandling.d.ts.map +0 -1
- package/dist/errorHandling.js +0 -27
- package/dist/errorHandling.js.map +0 -1
- package/dist/platformAccessory.d.ts +0 -33
- package/dist/platformAccessory.d.ts.map +0 -1
- package/dist/platformAccessory.js +0 -384
- 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 @@
|
|
|
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
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
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
|
|
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"}
|
package/dist/platform.d.ts
CHANGED
|
@@ -1,21 +1,44 @@
|
|
|
1
|
-
import type { API,
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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:
|
|
9
|
+
readonly log: Logging;
|
|
10
10
|
readonly config: PlatformConfig;
|
|
11
11
|
readonly api: API;
|
|
12
|
-
readonly
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
package/dist/platform.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
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 {
|
|
2
|
+
import { RoboticVacuumAccessory, } from './devices/index.js';
|
|
3
3
|
import { Login } from './login.js';
|
|
4
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
//
|
|
16
|
-
|
|
17
|
-
//
|
|
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
|
-
//
|
|
27
|
-
this.api.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
|
|
34
|
-
this.log.
|
|
35
|
-
|
|
36
|
-
|
|
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
|
-
|
|
72
|
+
throw new Error('Password must be present in the config if email is provided.');
|
|
71
73
|
}
|
|
72
74
|
else if (email === '' && password !== '') {
|
|
73
|
-
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
|
|
84
|
-
|
|
97
|
+
else {
|
|
98
|
+
this.log.info(`Discovered ${this.vacuumDevices.length} Shark device(s) from your account.`);
|
|
85
99
|
}
|
|
86
100
|
};
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
|
107
|
-
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
package/dist/platform.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EACL,sBAAsB,GACvB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAEnD;;;;;GAKG;AACH,MAAM,OAAO,eAAe;IAYR;IACA;IACA;IAblB,6EAA6E;IAC7E,8EAA8E;IAC9E,0EAA0E;IAE1E,2CAA2C;IAC3C,oGAAoG;IACpF,iBAAiB,GAA6D,IAAI,GAAG,EAAE,CAAA;IACvG,4EAA4E;IACrE,aAAa,GAAU,EAAE,CAAA;IAEhC,YACkB,GAAY,EACZ,MAAsB,EACtB,GAAQ;QAFR,QAAG,GAAH,GAAG,CAAS;QACZ,WAAM,GAAN,MAAM,CAAgB;QACtB,QAAG,GAAH,GAAG,CAAK;QAExB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iCAAiC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAEnE,6EAA6E;QAC7E,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qGAAqG,CAAC,CAAA;QACtH,CAAC;QAED,oDAAoD;QACpD,kIAAkI;QAClI,uIAAuI;QACvI,+FAA+F;QAC/F,6IAA6I;QAC7I,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0GAA0G,CAAC,CAAA;YACzH,OAAM;QACR,CAAC;QAED,qEAAqE;QACrE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;YAC3C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAA;YACtD,IAAI,CAAC;gBACH,iEAAiE;gBACjE,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;YACpB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAA;YACzD,CAAC;YAED,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAA;QACxC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,sCAAsC;IACtC,KAAK,GAAG,KAAK,IAAmB,EAAE;QAChC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;QACzC,4EAA4E;QAC5E,MAAM,aAAa,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,CAAA;QACjF,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAA;QAC5F,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAA;QAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,CAAA;QACrD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAA;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAA;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAA;QAE3C,IAAI,KAAK,KAAK,EAAE,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAA;QACjF,CAAC;aAAM,IAAI,KAAK,KAAK,EAAE,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAA;QACjF,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAC5F,MAAM,KAAK,CAAC,UAAU,EAAE,CAAA;QACxB,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAC1D,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAA;QACxB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAA;QAE5C,qFAAqF;QACrF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAA;YACpC,IAAI,aAAa,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACnF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;YACrC,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,IAAI,aAAa,EAAE,CAAC;gBAClB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAA;YAC/D,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAA;YACnF,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,aAAa,CAAC,MAAM,qCAAqC,CAAC,CAAA;QAC7F,CAAC;IACH,CAAC,CAAA;IAED;;;OAGG;IACH,kBAAkB,EAAC,kCAAkC;QACnD,sFAAsF;QACtF,iFAAiF;QACjF,kDAAkD;IACpD,CAAC;IAED;;;;;OAKG;IACH,wBAAwB,CAAC,SAAoC;QAC3D,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kCAAkC,EAAE,SAAS,CAAC,WAAW,CAAC,CAAA;QACzE,sGAAsG;QACtG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACvD,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,yBAAyB;QACrC,iDAAiD;QACjD,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAA;QAEtC,oDAAoD;QACpD,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAA;QAErC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAA;IAC3D,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,yBAAyB;QACrC,MAAM,SAAS,GAAG;YAChB,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE;SAC7H,CAAA;QAED,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,SAAS,EAAE,CAAC;YAChD,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;gBACtB,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;gBAC1D,IAAI,iBAAiB,EAAE,CAAC;oBACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,IAAI,wBAAwB,CAAC,CAAA;oBAClE,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,6BAA6B,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC,iBAA+C,CAAC,CAAC,CAAA;oBAClI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,wBAAwB;QACpC,MAAM,WAAW,GAAsB,EAAE,CAAA;QAEzC,mDAAmD;QACnD,MAAM,eAAe,GAAG,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAA;QACpG,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,CAAA;QAEtE,eAAe;QACf,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,KAAK,KAAK,EAAE,CAAC;YAC5C,0CAA0C;YAC1C,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;gBACtD,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBAC7F,CAAC,CAAC,EAAE,CAAA;YAEN,gGAAgG;YAChG,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBAC7C,MAAM,GAAG,GAAG,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,aAAa,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;oBAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,qBAAqB,CAAC,CAAA;oBAE1F,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC3C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,qBAAqB,GAAG,0DAA0D,CAAC,CAAA;wBAClG,SAAQ;oBACV,CAAC;oBAED,MAAM,MAAM,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,cAAc,CAAC,CAAA;oBAC1F,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;oBACtC,4EAA4E;oBAC5E,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;gBACjD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,iEAAiE;gBACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;gBAC5D,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1C,MAAM,MAAM,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,cAAc,CAAC,CAAA;oBACxF,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;oBACtC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;gBACjD,CAAC;YACH,CAAC;QACH,CAAC;QAED,2FAA2F;QAC3F,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;gBACtF,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBAC7F,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YAE/E,MAAM,YAAY,GAAgC,EAAE,CAAA;YACpD,KAAK,MAAM,CAAC,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACpD,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,UAAuC,CAAA;oBACnD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,YAAY,IAAI,GAAG,CAAC,OAAO,EAAE,YAAY,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,CAAA;oBAC5F,IAAI,MAAM,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;wBAC9E,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;oBACxB,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,oCAAoC;gBACtC,CAAC;YACH,CAAC;YAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,YAAY,CAAC,MAAM,mEAAmE,CAAC,CAAA;gBACjH,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,6BAA6B,CAAC,WAAW,EAAE,aAAa,EAAE,YAA4C,CAAC,CAAA;gBAC7H,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;oBAC/B,4EAA4E;oBAC5E,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAQ,CAAA;wBAC3D,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;4BACzD,OAAO,CAAC,WAAW,EAAE,CAAA;wBACvB,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,SAAS;oBACX,CAAC;oBACD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;gBACzC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,8CAA8C,EAAE,CAAC,CAAC,CAAA;QACnE,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,WAAW,CAAC,MAAM,yBAAyB,CAAC,CAAA;YAC1E,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,WAAW,4CAA4C,CAAC,CAAA;YACnF,CAAC;YACD,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,2BAA2B,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAA;QAC5F,CAAC;IACH,CAAC;CACF"}
|
|
@@ -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
|