@homebridge-plugins/homebridge-ecovacs 8.0.0-beta.0 → 8.0.0-beta.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.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,8 @@ All notable changes to `@homebridge-plugins/homebridge-ecovacs` will be document
4
4
 
5
5
  ## v8.0.0 (Pending Release)
6
6
 
7
+ Many thanks to @tainguyen2512 for working on the Matter and Typescript integrations 🎉
8
+
7
9
  ### ⚠️ Breaking Changes
8
10
 
9
11
  - Refactor device representation to align with HomeKit vacuum behavior
@@ -0,0 +1,84 @@
1
+ import type { PlatformConfig } from 'homebridge';
2
+ export type AreaType = 'spotArea' | 'customArea';
3
+ export type AirDryingSwitch = 'presetting' | 'yes' | 'no';
4
+ export interface DeviceConfig {
5
+ label?: string;
6
+ deviceId?: string;
7
+ ignoreDevice?: boolean;
8
+ pollInterval?: number;
9
+ hideMotionSensor?: boolean;
10
+ motionDuration?: number;
11
+ lowBattThreshold?: number;
12
+ showMotionLowBatt?: boolean;
13
+ showBattHumidity?: boolean;
14
+ showAirDryingSwitch?: AirDryingSwitch;
15
+ supportTrueDetect?: boolean;
16
+ areaType1?: AreaType;
17
+ spotAreaIDs1?: string;
18
+ customAreaCoordinates1?: string;
19
+ areaNote1?: string;
20
+ areaType2?: AreaType;
21
+ spotAreaIDs2?: string;
22
+ customAreaCoordinates2?: string;
23
+ areaNote2?: string;
24
+ areaType3?: AreaType;
25
+ spotAreaIDs3?: string;
26
+ customAreaCoordinates3?: string;
27
+ areaNote3?: string;
28
+ areaType4?: AreaType;
29
+ spotAreaIDs4?: string;
30
+ customAreaCoordinates4?: string;
31
+ areaNote4?: string;
32
+ areaType5?: AreaType;
33
+ spotAreaIDs5?: string;
34
+ customAreaCoordinates5?: string;
35
+ areaNote5?: string;
36
+ areaType6?: AreaType;
37
+ spotAreaIDs6?: string;
38
+ customAreaCoordinates6?: string;
39
+ areaNote6?: string;
40
+ areaType7?: AreaType;
41
+ spotAreaIDs7?: string;
42
+ customAreaCoordinates7?: string;
43
+ areaNote7?: string;
44
+ areaType8?: AreaType;
45
+ spotAreaIDs8?: string;
46
+ customAreaCoordinates8?: string;
47
+ areaNote8?: string;
48
+ areaType9?: AreaType;
49
+ spotAreaIDs9?: string;
50
+ customAreaCoordinates9?: string;
51
+ areaNote9?: string;
52
+ areaType10?: AreaType;
53
+ spotAreaIDs10?: string;
54
+ customAreaCoordinates10?: string;
55
+ areaNote10?: string;
56
+ areaType11?: AreaType;
57
+ spotAreaIDs11?: string;
58
+ customAreaCoordinates11?: string;
59
+ areaNote11?: string;
60
+ areaType12?: AreaType;
61
+ spotAreaIDs12?: string;
62
+ customAreaCoordinates12?: string;
63
+ areaNote12?: string;
64
+ areaType13?: AreaType;
65
+ spotAreaIDs13?: string;
66
+ customAreaCoordinates13?: string;
67
+ areaNote13?: string;
68
+ areaType14?: AreaType;
69
+ spotAreaIDs14?: string;
70
+ customAreaCoordinates14?: string;
71
+ areaNote14?: string;
72
+ areaType15?: AreaType;
73
+ spotAreaIDs15?: string;
74
+ customAreaCoordinates15?: string;
75
+ areaNote15?: string;
76
+ }
77
+ export interface EcovacsConfig extends PlatformConfig {
78
+ useYeedi?: boolean;
79
+ countryCode: string;
80
+ username: string;
81
+ password: string;
82
+ disableDeviceLogging?: boolean;
83
+ devices?: DeviceConfig[];
84
+ }
package/dist/config.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":""}
@@ -40,8 +40,10 @@ export declare abstract class BaseMatterAccessory implements MatterAccessory {
40
40
  protected readonly log: Logger;
41
41
  /** Set to true once the accessory has been registered with the Matter server. */
42
42
  private _registered;
43
+ /** Queued state updates received before registration completes. */
44
+ private _pendingUpdates;
43
45
  /** Call after api.matter.registerPlatformAccessories() resolves for this accessory. */
44
- markRegistered(): void;
46
+ markRegistered(): Promise<void>;
45
47
  protected constructor(api: API, log: Logger, config: BaseMatterAccessoryConfig);
46
48
  /**
47
49
  * Update cluster state attributes.
@@ -49,10 +51,9 @@ export declare abstract class BaseMatterAccessory implements MatterAccessory {
49
51
  protected updateState<K extends keyof ClusterStateMap>(cluster: K, attributes: Partial<ClusterStateMap[K]>, partId?: string): Promise<void>;
50
52
  protected updateState(cluster: string, attributes: Record<string, unknown>, partId?: string): Promise<void>;
51
53
  /**
52
- * Read current cluster state.
54
+ * Read the current cluster state.
53
55
  */
54
56
  protected readState<K extends keyof ClusterStateMap>(cluster: K, partId?: string): Promise<Partial<ClusterStateMap[K]> | undefined>;
55
- protected readState(cluster: string, partId?: string): Promise<Record<string, unknown> | undefined>;
56
57
  protected logInfo(message: string, ...args: unknown[]): void;
57
58
  protected logError(message: string, ...args: unknown[]): void;
58
59
  protected logDebug(message: string, ...args: unknown[]): void;
@@ -25,9 +25,22 @@ export class BaseMatterAccessory {
25
25
  log;
26
26
  /** Set to true once the accessory has been registered with the Matter server. */
27
27
  _registered = false;
28
+ /** Queued state updates received before registration completes. */
29
+ _pendingUpdates = [];
28
30
  /** Call after api.matter.registerPlatformAccessories() resolves for this accessory. */
29
- markRegistered() {
31
+ async markRegistered() {
30
32
  this._registered = true;
33
+ // Flush any state updates that arrived before registration
34
+ for (const pending of this._pendingUpdates) {
35
+ try {
36
+ await this.api.matter.updateAccessoryState(this.UUID, pending.cluster, pending.attributes, pending.partId);
37
+ this.log.debug(`[${this.displayName}] Flushed queued ${pending.cluster} state:`, pending.attributes);
38
+ }
39
+ catch (err) {
40
+ this.log.error(`[${this.displayName}] Failed to flush queued ${pending.cluster} state: ${err instanceof Error ? err.message : err}`);
41
+ }
42
+ }
43
+ this._pendingUpdates = [];
31
44
  }
32
45
  constructor(api, log, config) {
33
46
  this.api = api;
@@ -54,14 +67,26 @@ export class BaseMatterAccessory {
54
67
  }
55
68
  async updateState(cluster, attributes, partId) {
56
69
  if (!this._registered) {
57
- this.log.debug(`[${this.displayName}] Skipping ${cluster} state update — not yet registered with Matter server.`);
70
+ this.log.debug(`[${this.displayName}] Queuing ${cluster} state update — not yet registered with Matter server.`);
71
+ this._pendingUpdates.push({ cluster, attributes, partId });
58
72
  return;
59
73
  }
60
- await this.api.matter.updateAccessoryState(this.UUID, cluster, attributes, partId);
61
- this.log.debug(`[${this.displayName}] Updated ${cluster} state:`, attributes);
74
+ try {
75
+ await this.api.matter.updateAccessoryState(this.UUID, cluster, attributes, partId);
76
+ this.log.debug(`[${this.displayName}] Updated ${cluster} state:`, attributes);
77
+ }
78
+ catch (err) {
79
+ this.log.error(`[${this.displayName}] Failed to update ${cluster} state: ${err instanceof Error ? err.message : err}`);
80
+ }
62
81
  }
63
82
  async readState(cluster, partId) {
64
- return await this.api.matter.getAccessoryState(this.UUID, cluster, partId);
83
+ try {
84
+ return await this.api.matter.getAccessoryState(this.UUID, cluster, partId);
85
+ }
86
+ catch (err) {
87
+ this.log.error(`[${this.displayName}] Failed to read ${cluster} state: ${err instanceof Error ? err.message : err}`);
88
+ return undefined;
89
+ }
65
90
  }
66
91
  logInfo(message, ...args) {
67
92
  this.log.info(`[${this.displayName}] ${message}`, ...args);
@@ -1 +1 @@
1
- {"version":3,"file":"BaseMatterAccessory.js","sourceRoot":"","sources":["../../src/devices/BaseMatterAccessory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseMatterAccessory.js","sourceRoot":"","sources":["../../src/devices/BaseMatterAccessory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmBH;;;GAGG;AACH,MAAM,OAAgB,mBAAmB;IACvB,IAAI,CAAQ;IACZ,WAAW,CAAQ;IACnB,UAAU,CAAc;IACxB,YAAY,CAAQ;IACpB,YAAY,CAAQ;IACpB,KAAK,CAAQ;IACb,gBAAgB,CAAQ;IACxB,gBAAgB,CAAQ;IACxB,OAAO,CAAyB;IAChC,QAAQ,CAA8B;IACtC,QAAQ,CAA8B;IACtC,KAAK,CAA2B;IAE7B,GAAG,CAAK;IACR,GAAG,CAAQ;IAE9B,iFAAiF;IACzE,WAAW,GAAG,KAAK,CAAA;IAE3B,mEAAmE;IAC3D,eAAe,GAAqF,EAAE,CAAA;IAE9G,uFAAuF;IAChF,KAAK,CAAC,cAAc;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QACvB,2DAA2D;QAC3D,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC3C,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;gBAC1G,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,oBAAoB,OAAO,CAAC,OAAO,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;YACtG,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,4BAA4B,OAAO,CAAC,OAAO,WAAW,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;YACtI,CAAC;QACH,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,EAAE,CAAA;IAC3B,CAAC;IAED,YACE,GAAQ,EACR,GAAW,EACX,MAAiC;QAEjC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QAEd,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;QACvB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAA;QACrC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;QACnC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAA;QACvC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAA;QACvC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;QACzB,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAA;QAC/C,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAA;QAC/C,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;QAC/B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;QAC/B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;QAEzB,IAAI,CAAC,OAAO,GAAG;YACb,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,GAAG,MAAM,CAAC,OAAO;SAClB,CAAA;IACH,CAAC;IAiBS,KAAK,CAAC,WAAW,CACzB,OAAe,EACf,UAAmC,EACnC,MAAe;QAEf,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,aAAa,OAAO,wDAAwD,CAAC,CAAA;YAChH,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;YAC1D,OAAM;QACR,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;YAClF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,aAAa,OAAO,SAAS,EAAE,UAAU,CAAC,CAAA;QAC/E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,sBAAsB,OAAO,WAAW,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;QACxH,CAAC;IACH,CAAC;IAUS,KAAK,CAAC,SAAS,CACvB,OAAe,EACf,MAAe;QAEf,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QAC5E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,oBAAoB,OAAO,WAAW,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;YACpH,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC;IAES,OAAO,CAAC,OAAe,EAAE,GAAG,IAAe;QACnD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAA;IAC5D,CAAC;IAES,QAAQ,CAAC,OAAe,EAAE,GAAG,IAAe;QACpD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAA;IAC7D,CAAC;IAES,QAAQ,CAAC,OAAe,EAAE,GAAG,IAAe;QACpD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAA;IAC7D,CAAC;IAES,OAAO,CAAC,OAAe,EAAE,GAAG,IAAe;QACnD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAA;IAC5D,CAAC;IAED;;OAEG;IACI,WAAW;QAChB,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAA;IACH,CAAC;CACF"}
@@ -6,23 +6,23 @@
6
6
  * Apple Home and other Matter ecosystems.
7
7
  *
8
8
  * Cluster mapping:
9
- * rvcRunMode ← CleanReport events (Idle / Cleaning / Mapping)
9
+ * rvcRunMode ← CleanReport events (Idle / Cleaning / Mapping)
10
10
  * rvcOperationalState ← ChargeState events (Stopped / Running / Paused /
11
11
  * SeekingCharger / Charging / Docked)
12
- * rvcCleanMode ← CleanSpeed events (Vacuum / Max Clean)
13
- * serviceArea ← configured spot-area IDs in plugin config
12
+ * rvcCleanMode ← CleanSpeed events (Vacuum / Max Clean)
13
+ * serviceArea ← configured spot-area IDs in plugin config
14
14
  *
15
15
  * Handler mapping (Matter → Ecovacs commands):
16
- * rvcRunMode.changeToMode(1=Cleaning) → run('Clean' | 'Clean_V2')
17
- * rvcRunMode.changeToMode(0=Idle) → run('Charge')
18
- * rvcOperationalState.pause → run('Pause')
19
- * rvcOperationalState.resume → run('Clean' | 'Clean_V2')
20
- * rvcOperationalState.goHome → run('Charge')
16
+ * rvcRunMode.changeToMode (1=Cleaning) → run('Clean' | 'Clean_V2')
17
+ * rvcRunMode.changeToMode (0=Idle) → run('Charge')
18
+ * rvcOperationalState.pause → run('Pause')
19
+ * rvcOperationalState.resume → run('Clean' | 'Clean_V2')
20
+ * rvcOperationalState.goHome → run('Charge')
21
21
  */
22
22
  import type { API, Logger } from 'homebridge';
23
23
  import { BaseMatterAccessory } from './BaseMatterAccessory.js';
24
24
  export interface EcovacsDeviceInfo {
25
- /** Unique device ID (used for UUID generation & serial number). */
25
+ /** Unique device ID (used for UUID generation and serial number). */
26
26
  did: string;
27
27
  /** Device display name / nickname. */
28
28
  nick: string;
@@ -74,5 +74,7 @@ export declare class EcovacsRoboticVacuumAccessory extends BaseMatterAccessory {
74
74
  updateRunMode(mode: number): Promise<void>;
75
75
  /** Push the current map/area data into the Matter serviceArea cluster. */
76
76
  private flushServiceAreas;
77
+ /** Disconnect the underlying device control (called during plugin shutdown). */
78
+ disconnect(): void;
77
79
  private isDeviceReady;
78
80
  }
@@ -6,18 +6,18 @@
6
6
  * Apple Home and other Matter ecosystems.
7
7
  *
8
8
  * Cluster mapping:
9
- * rvcRunMode ← CleanReport events (Idle / Cleaning / Mapping)
9
+ * rvcRunMode ← CleanReport events (Idle / Cleaning / Mapping)
10
10
  * rvcOperationalState ← ChargeState events (Stopped / Running / Paused /
11
11
  * SeekingCharger / Charging / Docked)
12
- * rvcCleanMode ← CleanSpeed events (Vacuum / Max Clean)
13
- * serviceArea ← configured spot-area IDs in plugin config
12
+ * rvcCleanMode ← CleanSpeed events (Vacuum / Max Clean)
13
+ * serviceArea ← configured spot-area IDs in plugin config
14
14
  *
15
15
  * Handler mapping (Matter → Ecovacs commands):
16
- * rvcRunMode.changeToMode(1=Cleaning) → run('Clean' | 'Clean_V2')
17
- * rvcRunMode.changeToMode(0=Idle) → run('Charge')
18
- * rvcOperationalState.pause → run('Pause')
19
- * rvcOperationalState.resume → run('Clean' | 'Clean_V2')
20
- * rvcOperationalState.goHome → run('Charge')
16
+ * rvcRunMode.changeToMode (1=Cleaning) → run('Clean' | 'Clean_V2')
17
+ * rvcRunMode.changeToMode (0=Idle) → run('Charge')
18
+ * rvcOperationalState.pause → run('Pause')
19
+ * rvcOperationalState.resume → run('Clean' | 'Clean_V2')
20
+ * rvcOperationalState.goHome → run('Charge')
21
21
  */
22
22
  import { BaseMatterAccessory } from './BaseMatterAccessory.js';
23
23
  /** Ecovacs clean-state values that indicate the vacuum is actively cleaning. */
@@ -53,7 +53,8 @@ export class EcovacsRoboticVacuumAccessory extends BaseMatterAccessory {
53
53
  const manufacturer = device.company || 'Ecovacs';
54
54
  const rawModel = device.model || 'Deebot';
55
55
  // Matter spec: productLabel (defaults to productName/model) must not include vendorName
56
- const model = rawModel.replace(new RegExp(manufacturer, 'i'), '').trim() || rawModel;
56
+ const escapedMfr = manufacturer.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
57
+ const model = rawModel.replace(new RegExp(escapedMfr, 'i'), '').trim() || rawModel;
57
58
  super(api, log, {
58
59
  UUID: api.matter.uuid.generate(`ecovacs-${serialNumber}`),
59
60
  displayName: device.nick || device.did,
@@ -75,11 +76,12 @@ export class EcovacsRoboticVacuumAccessory extends BaseMatterAccessory {
75
76
  currentMode: 0,
76
77
  },
77
78
  // ── Clean Mode ────────────────────────────────────────────────
79
+ // Only Vacuum (standard) and Max Clean (high power) are currently
80
+ // driven by Ecovacs CleanSpeed events. The device does not yet report
81
+ // Mop / Vacuum & Mop modes, so omitted to avoid a stale state.
78
82
  rvcCleanMode: {
79
83
  supportedModes: [
80
84
  { label: 'Vacuum', mode: 0, modeTags: [{ value: 16385 }] },
81
- { label: 'Mop', mode: 1, modeTags: [{ value: 16386 }] },
82
- { label: 'Vacuum & Mop', mode: 2, modeTags: [{ value: 16385 }, { value: 16386 }] },
83
85
  { label: 'Max Clean', mode: 3, modeTags: [{ value: 7 }, { value: 16385 }] },
84
86
  ],
85
87
  currentMode: 0,
@@ -97,6 +99,14 @@ export class EcovacsRoboticVacuumAccessory extends BaseMatterAccessory {
97
99
  ],
98
100
  operationalState: 66, // start docked
99
101
  },
102
+ // ── Power Source (battery) ────────────────────────────────────
103
+ powerSource: {
104
+ status: 0, // unknown until first BatteryInfo event
105
+ order: 0,
106
+ description: 'Battery',
107
+ batPercentRemaining: 0, // half-percent units (0-200)
108
+ batChargeLevel: 0, // 0 = OK, 1 = Warning, 2 = Critical
109
+ },
100
110
  // ── Service Area (populated from device config if available) ──
101
111
  serviceArea: {
102
112
  supportedMaps: [],
@@ -134,10 +144,33 @@ export class EcovacsRoboticVacuumAccessory extends BaseMatterAccessory {
134
144
  */
135
145
  connectControl(control) {
136
146
  this.control = control;
147
+ // ── Device ready: fetch initial state ────────────────────────────
148
+ control.on('ready', (event) => {
149
+ if (!event) {
150
+ return;
151
+ }
152
+ this.logDebug('Device ready — requesting initial state.');
153
+ control.run('GetBatteryState');
154
+ control.run('GetChargeState');
155
+ control.run(this.isV2 ? 'GetCleanState_V2' : 'GetCleanState');
156
+ control.run('GetCleanSpeed');
157
+ control.run('GetMaps');
158
+ });
137
159
  control.on('CleanReport', (newVal) => void this.onCleanReport(newVal));
138
160
  control.on('ChargeState', (newVal) => void this.onChargeState(newVal));
139
161
  control.on('BatteryInfo', (newVal) => void this.onBatteryInfo(newVal));
140
162
  control.on('CleanSpeed', (newVal) => void this.onCleanSpeed(newVal));
163
+ // ── Error / offline detection ──────────────────────────────────
164
+ control.on('Error', (err) => {
165
+ if (err === 'NoError: Robot is operational') {
166
+ return;
167
+ }
168
+ this.logWarn(`Device error: ${err}`);
169
+ if (err === 'Recipient unavailable') {
170
+ this.logWarn('Device appears to be offline.');
171
+ }
172
+ void this.updateOperationalState(3); // Error
173
+ });
141
174
  // ── Service area discovery ──────────────────────────────────────
142
175
  control.on('Maps', (data) => {
143
176
  if (!data?.maps) {
@@ -145,7 +178,12 @@ export class EcovacsRoboticVacuumAccessory extends BaseMatterAccessory {
145
178
  }
146
179
  // Register each map and request its spot areas
147
180
  Object.values(data.maps).forEach((m) => {
148
- this.mapsById.set(Number(m.mapID), m.mapName || `Map ${m.mapID}`);
181
+ const mapId = Number(m.mapID);
182
+ if (Number.isNaN(mapId)) {
183
+ this.logWarn(`Ignoring map with invalid ID: ${m.mapID}`);
184
+ return;
185
+ }
186
+ this.mapsById.set(mapId, m.mapName || `Map ${m.mapID}`);
149
187
  control.run('GetSpotAreas', m.mapID);
150
188
  });
151
189
  });
@@ -164,6 +202,10 @@ export class EcovacsRoboticVacuumAccessory extends BaseMatterAccessory {
164
202
  }
165
203
  const areaId = Number(area.mapSpotAreaID);
166
204
  const mapId = Number(area.mapID);
205
+ if (Number.isNaN(areaId) || Number.isNaN(mapId)) {
206
+ this.logWarn(`Ignoring area with invalid IDs: area=${area.mapSpotAreaID}, map=${area.mapID}`);
207
+ return;
208
+ }
167
209
  const name = area.mapSpotAreaName || `Area ${area.mapSpotAreaID}`;
168
210
  this.areasById.set(areaId, { mapId, name });
169
211
  void this.flushServiceAreas();
@@ -177,6 +219,10 @@ export class EcovacsRoboticVacuumAccessory extends BaseMatterAccessory {
177
219
  // ──────────────────────────────────────────────────────────────────────────
178
220
  /** Maps Ecovacs CleanReport values to Matter rvcRunMode + rvcOperationalState. */
179
221
  async onCleanReport(newVal) {
222
+ if (!newVal) {
223
+ this.logDebug('CleanReport received with empty value, ignoring');
224
+ return;
225
+ }
180
226
  const normalized = newVal.toLowerCase().replace(/[^a-z0-9]+/g, '');
181
227
  if (CLEANING_STATES.has(normalized)) {
182
228
  await this.updateRunMode(1); // Cleaning
@@ -186,12 +232,16 @@ export class EcovacsRoboticVacuumAccessory extends BaseMatterAccessory {
186
232
  // idle / stop – operational state is driven by ChargeState going forward
187
233
  await this.updateRunMode(0); // Idle
188
234
  if (this.currentOperationalState === 1) {
189
- await this.updateOperationalState(0); // Stopped (only if was Running)
235
+ await this.updateOperationalState(0); // Stopped (only if it was running)
190
236
  }
191
237
  }
192
238
  }
193
239
  /** Maps Ecovacs ChargeState values to Matter rvcOperationalState. */
194
240
  async onChargeState(newVal) {
241
+ if (!newVal) {
242
+ this.logDebug('ChargeState received with empty value, ignoring');
243
+ return;
244
+ }
195
245
  switch (newVal.toLowerCase()) {
196
246
  case 'returning':
197
247
  await this.updateRunMode(0); // Idle
@@ -209,9 +259,19 @@ export class EcovacsRoboticVacuumAccessory extends BaseMatterAccessory {
209
259
  }
210
260
  }
211
261
  async onBatteryInfo(newVal) {
212
- // @TODO - implement - i commented this out for now
213
- // await this.updateBatteryPercentage(newVal)
214
- this.logDebug(`BatteryInfo update received: ${newVal}% (not yet implemented)`);
262
+ if (newVal == null || newVal < 0 || newVal > 100) {
263
+ this.logDebug(`BatteryInfo received with invalid value: ${newVal}`);
264
+ return;
265
+ }
266
+ // batPercentRemaining uses half-percent units (0-200)
267
+ const batPercentRemaining = newVal * 2;
268
+ // batChargeLevel: 0 = OK, 1 = Warning, 2 = Critical
269
+ const batChargeLevel = newVal <= 10 ? 2 : newVal <= 20 ? 1 : 0;
270
+ await this.updateState('powerSource', {
271
+ status: 1, // active
272
+ batPercentRemaining,
273
+ batChargeLevel,
274
+ });
215
275
  }
216
276
  /** Maps Ecovacs CleanSpeed to Matter rvcCleanMode. */
217
277
  async onCleanSpeed(newVal) {
@@ -243,12 +303,19 @@ export class EcovacsRoboticVacuumAccessory extends BaseMatterAccessory {
243
303
  }
244
304
  async handleChangeCleanMode(request) {
245
305
  this.logInfo(`rvcCleanMode.changeToMode → ${request.newMode}`);
246
- // Mode 3 = Max Clean → speed 3; others → speed 2 (standard)
247
306
  if (!this.isDeviceReady()) {
248
307
  return;
249
308
  }
250
- const speed = request.newMode === 3 ? 3 : 2;
251
- this.control.run('SetCleanSpeed', speed);
309
+ switch (request.newMode) {
310
+ case 0: // Vacuum (standard) speed 2
311
+ this.control.run('SetCleanSpeed', 2);
312
+ break;
313
+ case 3: // Max Clean → speed 3
314
+ this.control.run('SetCleanSpeed', 3);
315
+ break;
316
+ default:
317
+ this.logWarn(`unsupported clean mode: ${request.newMode}`);
318
+ }
252
319
  }
253
320
  async handlePause() {
254
321
  this.logInfo('rvcOperationalState.pause');
@@ -263,7 +330,7 @@ export class EcovacsRoboticVacuumAccessory extends BaseMatterAccessory {
263
330
  if (!this.isDeviceReady()) {
264
331
  return;
265
332
  }
266
- this.control.run(this.isV2 ? 'Clean_V2' : 'Clean');
333
+ this.control.run('Resume');
267
334
  await this.updateRunMode(1); // Cleaning
268
335
  await this.updateOperationalState(1); // Running
269
336
  }
@@ -277,14 +344,61 @@ export class EcovacsRoboticVacuumAccessory extends BaseMatterAccessory {
277
344
  await this.updateOperationalState(64); // SeekingCharger
278
345
  }
279
346
  async handleSelectAreas(request) {
280
- this.logInfo(`serviceArea.selectAreas → ${JSON.stringify(request)}`);
281
- // Area selection from Matter is noted but Ecovacs spot areas are
282
- // driven by the plugin config (spotAreaIDs). This callback is a no-op
283
- // until full dynamic map support is added.
347
+ this.logInfo(`serviceArea.selectAreas → ${JSON.stringify(request.newAreas)}`);
348
+ if (!this.isDeviceReady()) {
349
+ return;
350
+ }
351
+ // Empty array means clean everywhere (no area constraint)
352
+ if (!request.newAreas || request.newAreas.length === 0) {
353
+ this.logDebug('No areas selected — starting full auto clean.');
354
+ this.control.run(this.isV2 ? 'Clean_V2' : 'Clean');
355
+ await this.updateState('serviceArea', { selectedAreas: [] });
356
+ await this.updateRunMode(1); // Cleaning
357
+ await this.updateOperationalState(1); // Running
358
+ return;
359
+ }
360
+ // Validate that all requested areas are known
361
+ const validAreas = [];
362
+ for (const areaId of request.newAreas) {
363
+ if (this.areasById.has(areaId)) {
364
+ validAreas.push(areaId);
365
+ }
366
+ else {
367
+ this.logWarn(`selectAreas: unknown area ID ${areaId}, skipping`);
368
+ }
369
+ }
370
+ if (validAreas.length === 0) {
371
+ this.logWarn('selectAreas: no valid areas to clean');
372
+ return;
373
+ }
374
+ // Send SpotArea command with comma-separated area IDs
375
+ const areaCommand = validAreas.join(',');
376
+ this.logDebug(`Sending SpotArea command: ${areaCommand}`);
377
+ if (this.isV2) {
378
+ this.control.run('SpotArea_V2', areaCommand);
379
+ }
380
+ else {
381
+ this.control.run('SpotArea', 'start', areaCommand);
382
+ }
383
+ await this.updateState('serviceArea', { selectedAreas: validAreas });
384
+ await this.updateRunMode(1); // Cleaning
385
+ await this.updateOperationalState(1); // Running
284
386
  }
285
387
  async handleSkipArea(request) {
286
- this.logInfo(`serviceArea.skipArea → ${JSON.stringify(request)}`);
287
- // No-op until dynamic map support is added.
388
+ this.logInfo(`serviceArea.skipArea → area ${request.skippedArea}`);
389
+ if (!this.isDeviceReady()) {
390
+ return;
391
+ }
392
+ if (!this.areasById.has(request.skippedArea)) {
393
+ this.logWarn(`skipArea: unknown area ID ${request.skippedArea}`);
394
+ return;
395
+ }
396
+ // Read the current selected areas and remove the skipped one
397
+ const currentState = await this.readState('serviceArea');
398
+ const currentAreas = currentState?.selectedAreas ?? [];
399
+ const remaining = currentAreas.filter(id => id !== request.skippedArea);
400
+ this.logDebug(`Skipping area ${request.skippedArea}, remaining: [${remaining.join(', ')}]`);
401
+ await this.updateState('serviceArea', { selectedAreas: remaining });
288
402
  }
289
403
  // ──────────────────────────────────────────────────────────────────────────
290
404
  // Public update helpers (callable from the platform for immediate sync)
@@ -308,12 +422,15 @@ export class EcovacsRoboticVacuumAccessory extends BaseMatterAccessory {
308
422
  }));
309
423
  await this.updateState('serviceArea', { supportedMaps, supportedAreas });
310
424
  }
311
- // public async updateBatteryPercentage(_percentage: number): Promise<void> {
312
- // // powerSource cluster is not yet supported by the Homebridge Matter API
313
- // }
314
425
  // ──────────────────────────────────────────────────────────────────────────
315
426
  // Private helpers
316
427
  // ──────────────────────────────────────────────────────────────────────────
428
+ /** Disconnect the underlying device control (called during plugin shutdown). */
429
+ disconnect() {
430
+ if (this.control?.is_ready) {
431
+ this.control.disconnect();
432
+ }
433
+ }
317
434
  isDeviceReady() {
318
435
  if (!this.control) {
319
436
  this.logWarn('command ignored – device not yet connected');
@@ -1 +1 @@
1
- {"version":3,"file":"EcovacsRoboticVacuumAccessory.js","sourceRoot":"","sources":["../../src/devices/EcovacsRoboticVacuumAccessory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EcovacsRoboticVacuumAccessory.js","sourceRoot":"","sources":["../../src/devices/EcovacsRoboticVacuumAccessory.ts"],"names":[],"mappings":"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"}
@@ -285,8 +285,13 @@
285
285
  document.getElementById("pageSupport").style.display = "none";
286
286
  document.getElementById("pageDevices").style.display = "block";
287
287
 
288
- const cfg = (currentConfig && currentConfig[0]) || {};
289
- const useMatter = !!cfg.useMatter;
288
+ let useMatter = false;
289
+ try {
290
+ const matterStatus = await homebridge.request("/isMatterActive");
291
+ useMatter = matterStatus && matterStatus.active;
292
+ } catch {
293
+ // Fall back to HAP view if the check fails
294
+ }
290
295
 
291
296
  if (useMatter) {
292
297
  // ── Matter mode ────────────────────────────────────────────────