@camstack/addon-provider-homeassistant 1.1.7 → 1.1.9

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 (3) hide show
  1. package/dist/addon.js +128 -26
  2. package/dist/addon.mjs +128 -26
  3. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -10109,15 +10109,18 @@ var humiditySensorCapability = {
10109
10109
  runtimeState: HumiditySensorStatusSchema
10110
10110
  };
10111
10111
  /**
10112
- * Image display cap. Models HA `image.*` entities a single still image
10113
- * exposed by an integration (a snapshot, a chart, a generated picture).
10114
- *
10115
- * Read-only: there are no setters. The provider resolves the HA
10116
- * `entity_picture` (a relative, signed-token path) into an ABSOLUTE URL
10117
- * the browser loads directly the token stays in the query string so no
10118
- * auth header is required. The slice carries that URL plus the upstream
10119
- * last-updated timestamp; the image changes when the entity state (a
10120
- * timestamp) changes.
10112
+ * Image display cap. Models a single still image exposed by an integration
10113
+ * a snapshot, a chart, a generated picture, or a robot's cleaning-map render.
10114
+ *
10115
+ * Read-only: there are no setters. The provider resolves whatever upstream
10116
+ * source it has into an ABSOLUTE URL the browser loads directly:
10117
+ * - HA `image.*` entities the `entity_picture` signed-token path
10118
+ * (token stays in the query string, so no auth header is needed);
10119
+ * - a Dreame/robot map the cloud/OSS map-image URL (or an addon
10120
+ * data-plane URL serving the rendered map bytes), exposed as its own
10121
+ * Image child device grouped under the robot's container.
10122
+ * The slice carries that URL plus the upstream last-updated timestamp; the
10123
+ * image changes when the source's last-updated marker changes.
10121
10124
  */
10122
10125
  var ImageStatusSchema = object({
10123
10126
  /** Absolute signed URL the browser loads directly. Null when the
@@ -10143,18 +10146,47 @@ var imageCapability = {
10143
10146
  */
10144
10147
  runtimeState: ImageStatusSchema
10145
10148
  };
10149
+ /**
10150
+ * Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
10151
+ * with a mowing lifecycle plus a dock action.
10152
+ *
10153
+ * Activity follows HA's canonical lawn-mower lifecycle: `idle` /
10154
+ * `mowing` / `paused` / `docked` / `error`. `batteryLevel` (0..100) is
10155
+ * nullable — some mowers don't report a battery percentage.
10156
+ *
10157
+ * `startMowing` begins a mowing run, `pause` halts it in place, and
10158
+ * `dock` sends the mower back to its charging station.
10159
+ */
10160
+ var LawnMowerActivitySchema = _enum([
10161
+ "idle",
10162
+ "mowing",
10163
+ "paused",
10164
+ "docked",
10165
+ "error"
10166
+ ]);
10167
+ /** Severity of the current device/error code — info (status), warning, error. */
10168
+ var DeviceCodeSeveritySchema = _enum([
10169
+ "info",
10170
+ "warning",
10171
+ "error"
10172
+ ]);
10146
10173
  var LawnMowerControlStatusSchema = object({
10147
10174
  /** Lifecycle activity of the mower. */
10148
- activity: _enum([
10149
- "idle",
10150
- "mowing",
10151
- "paused",
10152
- "docked",
10153
- "error"
10154
- ]),
10175
+ activity: LawnMowerActivitySchema,
10155
10176
  /** 0..100 battery percentage. Null when the device has no battery
10156
10177
  * reading. */
10157
10178
  batteryLevel: number().min(0).max(100).nullable(),
10179
+ /** 0..100 mowing-completion percentage of the current task, or null when no
10180
+ * task is active / progress is unavailable. */
10181
+ progressPercent: number().min(0).max(100).nullable(),
10182
+ /** Current device/event code (dynamic — mostly status, sometimes an error),
10183
+ * or null when unknown. */
10184
+ currentCode: number().nullable(),
10185
+ /** Human label for {@link currentCode}, or null when undecodable. */
10186
+ currentCodeLabel: string().nullable(),
10187
+ /** Severity of {@link currentCode}. `error` (and often `warning`) warrants UI
10188
+ * attention; `info` is normal status. */
10189
+ severity: DeviceCodeSeveritySchema,
10158
10190
  /** Ms epoch when the slice was last updated. */
10159
10191
  lastChangedAt: number()
10160
10192
  });
@@ -12380,6 +12412,7 @@ var VacuumStateSchema = _enum([
12380
12412
  "paused",
12381
12413
  "returning",
12382
12414
  "docked",
12415
+ "drying",
12383
12416
  "error"
12384
12417
  ]);
12385
12418
  /**
@@ -12418,6 +12451,12 @@ var VacuumControlStatusSchema = object({
12418
12451
  detergent: TankStatusSchema.nullable(),
12419
12452
  /** Dust bin. Null when the hardware has no dust bin. */
12420
12453
  dustBin: TankStatusSchema.nullable(),
12454
+ /** 0..100 cleaning-completion percentage of the current task, or null. */
12455
+ progressPercent: number().min(0).max(100).nullable(),
12456
+ /** Current error code (0 / null = no error). */
12457
+ errorCode: number().nullable(),
12458
+ /** Human label for {@link errorCode}, or null when none / undecodable. */
12459
+ errorLabel: string().nullable(),
12421
12460
  /** Ms epoch when the slice was last updated. */
12422
12461
  lastChangedAt: number()
12423
12462
  });
@@ -13384,9 +13423,29 @@ var BaseDevice = class {
13384
13423
  * is open (Reolink writes `hasPtz/hasIntercom`, Hikvision writes
13385
13424
  * `hasSupplementalLight/hasAlarmIo`, etc).
13386
13425
  *
13387
- * Default: no-op (driver had no probe to run).
13388
- */
13389
- async onProbe() {}
13426
+ * Default: nothing to probe mark the device PROBED (set `lastProbedAt`) so
13427
+ * the kernel treats it as ready immediately. A device that derives its shape
13428
+ * from a spec (a container, or an accessory sensor) rather than from a
13429
+ * hardware probe has no probe to "complete"; without stamping `lastProbedAt`
13430
+ * it would look perpetually un-probed — logging "Initial probe did not
13431
+ * complete" on every boot and spinning a pointless retry chain. Drivers that
13432
+ * DO probe override this and write their own `feature-probe` slice (including
13433
+ * `lastProbedAt`) once their probe actually succeeds.
13434
+ */
13435
+ async onProbe() {
13436
+ const base = this.runtimeState.getCapState("feature-probe") ?? {
13437
+ flags: {},
13438
+ deviceType: null,
13439
+ model: null,
13440
+ channelCount: null,
13441
+ lastProbedAt: 0,
13442
+ lastFetchedAt: 0
13443
+ };
13444
+ this.runtimeState.setCapState("feature-probe", {
13445
+ ...base,
13446
+ lastProbedAt: Date.now()
13447
+ });
13448
+ }
13390
13449
  /**
13391
13450
  * Phase 5 — fired after the device + its accessories are registered.
13392
13451
  * Drivers publish streams to the broker, kick off background tasks,
@@ -14848,17 +14907,32 @@ var ReleaseInputSchema = object({
14848
14907
  * the parent cascades into every accessory. */
14849
14908
  camDeviceId: number().int().nonnegative()
14850
14909
  });
14851
- var ResyncInputSchema = object({
14852
- /** Parent CamStack device id of an adopted device. The provider resolves its
14853
- * source (integration/broker + native id) and re-aligns the device's
14854
- * structural spec (type/role/capabilities/units) with the live mapping,
14855
- * rebuilding any child whose class changed while preserving operator edits. */
14856
- camDeviceId: number().int().nonnegative() });
14910
+ var ResyncInputSchema = object({
14911
+ /** Parent CamStack device id of an adopted device. The provider resolves its
14912
+ * source (integration/broker + native id) and re-aligns the device's
14913
+ * structural spec (type/role/capabilities/units) with the live mapping,
14914
+ * rebuilding any child whose class changed while preserving operator edits. */
14915
+ camDeviceId: number().int().nonnegative(),
14916
+ /** "Resync from zero" (#19). When true, the kernel PURGES every accessory
14917
+ * child of `camDeviceId` BEFORE the provider re-derives the device, so the
14918
+ * children are rebuilt fresh from source — correct names, coords, and units —
14919
+ * instead of being preserved by the incremental reconcile. Use to recover from
14920
+ * legacy generic/placeholder names that the normal name-precedence keeps frozen
14921
+ * (the operator's explicit reset). Push-driven integrations (no-op resync)
14922
+ * rebuild on their next snapshot; pull/command integrations rebuild in `resync`.
14923
+ * Operator edits on the PARENT (its name, layout, primary-child pick) survive —
14924
+ * only the children are torn down. Omitted/false ⇒ the normal incremental
14925
+ * re-sync that preserves children. */
14926
+ resetToSource: boolean().optional()
14927
+ });
14857
14928
  var ResyncResultSchema = object({
14858
14929
  /** True when the persisted spec actually changed (children may have been rebuilt). */
14859
14930
  changed: boolean(),
14860
14931
  /** Number of child devices rebuilt into a new class by this re-sync. */
14861
- rebuiltChildren: number().int().nonnegative()
14932
+ rebuiltChildren: number().int().nonnegative(),
14933
+ /** Number of accessory children torn down by a `resetToSource` purge before the
14934
+ * provider re-derived the device. 0/absent for a normal incremental re-sync. */
14935
+ removedChildren: number().int().nonnegative().optional()
14862
14936
  });
14863
14937
  var deviceAdoptionCapability = {
14864
14938
  name: "device-adoption",
@@ -16623,6 +16697,11 @@ var DeviceMetaSchema = object({
16623
16697
  addonId: string(),
16624
16698
  type: string(),
16625
16699
  name: string(),
16700
+ /** True once an operator explicitly renamed the device via `setName`. Drives
16701
+ * reconcile name-precedence (preserve operator name vs adopt fresh provider
16702
+ * name). Absent ⇒ treated as user-named (PRESERVE) for legacy rows. See
16703
+ * `DeviceMeta.userNamed`. */
16704
+ userNamed: boolean().optional(),
16626
16705
  location: string().nullable(),
16627
16706
  disabled: boolean(),
16628
16707
  parentDeviceId: number().nullable(),
@@ -16933,6 +17012,9 @@ method(object({
16933
17012
  }), method(ReleaseInputSchema.extend({ addonId: string() }), _void(), {
16934
17013
  kind: "mutation",
16935
17014
  auth: "admin"
17015
+ }), method(ResyncInputSchema, ResyncResultSchema, {
17016
+ kind: "mutation",
17017
+ auth: "admin"
16936
17018
  }), method(object({
16937
17019
  deviceId: number(),
16938
17020
  key: string(),
@@ -20784,6 +20866,12 @@ Object.freeze({
20784
20866
  addonId: null,
20785
20867
  access: "create"
20786
20868
  },
20869
+ "deviceManager.adoptionResync": {
20870
+ capName: "device-manager",
20871
+ capScope: "system",
20872
+ addonId: null,
20873
+ access: "create"
20874
+ },
20787
20875
  "deviceManager.allocateDeviceId": {
20788
20876
  capName: "device-manager",
20789
20877
  capScope: "system",
@@ -27481,6 +27569,9 @@ var COLD_START$12 = {
27481
27569
  dirtyWater: null,
27482
27570
  detergent: null,
27483
27571
  dustBin: null,
27572
+ progressPercent: null,
27573
+ errorCode: null,
27574
+ errorLabel: null,
27484
27575
  lastChangedAt: 0
27485
27576
  };
27486
27577
  /**
@@ -27517,6 +27608,9 @@ var HaVacuumDevice = class extends HaBaseChildDevice {
27517
27608
  dirtyWater: null,
27518
27609
  detergent: null,
27519
27610
  dustBin: null,
27611
+ progressPercent: null,
27612
+ errorCode: null,
27613
+ errorLabel: lifecycleState === "error" ? readStringAttr$3(state.attributes, "error") : null,
27520
27614
  lastChangedAt
27521
27615
  });
27522
27616
  }
@@ -27573,6 +27667,10 @@ function readStringArrayAttr(attrs, key) {
27573
27667
  var COLD_START$11 = {
27574
27668
  activity: "idle",
27575
27669
  batteryLevel: null,
27670
+ progressPercent: null,
27671
+ currentCode: null,
27672
+ currentCodeLabel: null,
27673
+ severity: "info",
27576
27674
  lastChangedAt: 0
27577
27675
  };
27578
27676
  /**
@@ -27598,6 +27696,10 @@ var HaLawnMowerDevice = class extends HaBaseChildDevice {
27598
27696
  this.runtimeState.setCapState("lawn-mower-control", {
27599
27697
  activity,
27600
27698
  batteryLevel,
27699
+ progressPercent: readNumericAttr$1(state.attributes, "mowing_progress"),
27700
+ currentCode: null,
27701
+ currentCodeLabel: null,
27702
+ severity: activity === "error" ? "error" : "info",
27601
27703
  lastChangedAt
27602
27704
  });
27603
27705
  }
package/dist/addon.mjs CHANGED
@@ -10108,15 +10108,18 @@ var humiditySensorCapability = {
10108
10108
  runtimeState: HumiditySensorStatusSchema
10109
10109
  };
10110
10110
  /**
10111
- * Image display cap. Models HA `image.*` entities a single still image
10112
- * exposed by an integration (a snapshot, a chart, a generated picture).
10113
- *
10114
- * Read-only: there are no setters. The provider resolves the HA
10115
- * `entity_picture` (a relative, signed-token path) into an ABSOLUTE URL
10116
- * the browser loads directly the token stays in the query string so no
10117
- * auth header is required. The slice carries that URL plus the upstream
10118
- * last-updated timestamp; the image changes when the entity state (a
10119
- * timestamp) changes.
10111
+ * Image display cap. Models a single still image exposed by an integration
10112
+ * a snapshot, a chart, a generated picture, or a robot's cleaning-map render.
10113
+ *
10114
+ * Read-only: there are no setters. The provider resolves whatever upstream
10115
+ * source it has into an ABSOLUTE URL the browser loads directly:
10116
+ * - HA `image.*` entities the `entity_picture` signed-token path
10117
+ * (token stays in the query string, so no auth header is needed);
10118
+ * - a Dreame/robot map the cloud/OSS map-image URL (or an addon
10119
+ * data-plane URL serving the rendered map bytes), exposed as its own
10120
+ * Image child device grouped under the robot's container.
10121
+ * The slice carries that URL plus the upstream last-updated timestamp; the
10122
+ * image changes when the source's last-updated marker changes.
10120
10123
  */
10121
10124
  var ImageStatusSchema = object({
10122
10125
  /** Absolute signed URL the browser loads directly. Null when the
@@ -10142,18 +10145,47 @@ var imageCapability = {
10142
10145
  */
10143
10146
  runtimeState: ImageStatusSchema
10144
10147
  };
10148
+ /**
10149
+ * Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
10150
+ * with a mowing lifecycle plus a dock action.
10151
+ *
10152
+ * Activity follows HA's canonical lawn-mower lifecycle: `idle` /
10153
+ * `mowing` / `paused` / `docked` / `error`. `batteryLevel` (0..100) is
10154
+ * nullable — some mowers don't report a battery percentage.
10155
+ *
10156
+ * `startMowing` begins a mowing run, `pause` halts it in place, and
10157
+ * `dock` sends the mower back to its charging station.
10158
+ */
10159
+ var LawnMowerActivitySchema = _enum([
10160
+ "idle",
10161
+ "mowing",
10162
+ "paused",
10163
+ "docked",
10164
+ "error"
10165
+ ]);
10166
+ /** Severity of the current device/error code — info (status), warning, error. */
10167
+ var DeviceCodeSeveritySchema = _enum([
10168
+ "info",
10169
+ "warning",
10170
+ "error"
10171
+ ]);
10145
10172
  var LawnMowerControlStatusSchema = object({
10146
10173
  /** Lifecycle activity of the mower. */
10147
- activity: _enum([
10148
- "idle",
10149
- "mowing",
10150
- "paused",
10151
- "docked",
10152
- "error"
10153
- ]),
10174
+ activity: LawnMowerActivitySchema,
10154
10175
  /** 0..100 battery percentage. Null when the device has no battery
10155
10176
  * reading. */
10156
10177
  batteryLevel: number().min(0).max(100).nullable(),
10178
+ /** 0..100 mowing-completion percentage of the current task, or null when no
10179
+ * task is active / progress is unavailable. */
10180
+ progressPercent: number().min(0).max(100).nullable(),
10181
+ /** Current device/event code (dynamic — mostly status, sometimes an error),
10182
+ * or null when unknown. */
10183
+ currentCode: number().nullable(),
10184
+ /** Human label for {@link currentCode}, or null when undecodable. */
10185
+ currentCodeLabel: string().nullable(),
10186
+ /** Severity of {@link currentCode}. `error` (and often `warning`) warrants UI
10187
+ * attention; `info` is normal status. */
10188
+ severity: DeviceCodeSeveritySchema,
10157
10189
  /** Ms epoch when the slice was last updated. */
10158
10190
  lastChangedAt: number()
10159
10191
  });
@@ -12379,6 +12411,7 @@ var VacuumStateSchema = _enum([
12379
12411
  "paused",
12380
12412
  "returning",
12381
12413
  "docked",
12414
+ "drying",
12382
12415
  "error"
12383
12416
  ]);
12384
12417
  /**
@@ -12417,6 +12450,12 @@ var VacuumControlStatusSchema = object({
12417
12450
  detergent: TankStatusSchema.nullable(),
12418
12451
  /** Dust bin. Null when the hardware has no dust bin. */
12419
12452
  dustBin: TankStatusSchema.nullable(),
12453
+ /** 0..100 cleaning-completion percentage of the current task, or null. */
12454
+ progressPercent: number().min(0).max(100).nullable(),
12455
+ /** Current error code (0 / null = no error). */
12456
+ errorCode: number().nullable(),
12457
+ /** Human label for {@link errorCode}, or null when none / undecodable. */
12458
+ errorLabel: string().nullable(),
12420
12459
  /** Ms epoch when the slice was last updated. */
12421
12460
  lastChangedAt: number()
12422
12461
  });
@@ -13383,9 +13422,29 @@ var BaseDevice = class {
13383
13422
  * is open (Reolink writes `hasPtz/hasIntercom`, Hikvision writes
13384
13423
  * `hasSupplementalLight/hasAlarmIo`, etc).
13385
13424
  *
13386
- * Default: no-op (driver had no probe to run).
13387
- */
13388
- async onProbe() {}
13425
+ * Default: nothing to probe mark the device PROBED (set `lastProbedAt`) so
13426
+ * the kernel treats it as ready immediately. A device that derives its shape
13427
+ * from a spec (a container, or an accessory sensor) rather than from a
13428
+ * hardware probe has no probe to "complete"; without stamping `lastProbedAt`
13429
+ * it would look perpetually un-probed — logging "Initial probe did not
13430
+ * complete" on every boot and spinning a pointless retry chain. Drivers that
13431
+ * DO probe override this and write their own `feature-probe` slice (including
13432
+ * `lastProbedAt`) once their probe actually succeeds.
13433
+ */
13434
+ async onProbe() {
13435
+ const base = this.runtimeState.getCapState("feature-probe") ?? {
13436
+ flags: {},
13437
+ deviceType: null,
13438
+ model: null,
13439
+ channelCount: null,
13440
+ lastProbedAt: 0,
13441
+ lastFetchedAt: 0
13442
+ };
13443
+ this.runtimeState.setCapState("feature-probe", {
13444
+ ...base,
13445
+ lastProbedAt: Date.now()
13446
+ });
13447
+ }
13389
13448
  /**
13390
13449
  * Phase 5 — fired after the device + its accessories are registered.
13391
13450
  * Drivers publish streams to the broker, kick off background tasks,
@@ -14847,17 +14906,32 @@ var ReleaseInputSchema = object({
14847
14906
  * the parent cascades into every accessory. */
14848
14907
  camDeviceId: number().int().nonnegative()
14849
14908
  });
14850
- var ResyncInputSchema = object({
14851
- /** Parent CamStack device id of an adopted device. The provider resolves its
14852
- * source (integration/broker + native id) and re-aligns the device's
14853
- * structural spec (type/role/capabilities/units) with the live mapping,
14854
- * rebuilding any child whose class changed while preserving operator edits. */
14855
- camDeviceId: number().int().nonnegative() });
14909
+ var ResyncInputSchema = object({
14910
+ /** Parent CamStack device id of an adopted device. The provider resolves its
14911
+ * source (integration/broker + native id) and re-aligns the device's
14912
+ * structural spec (type/role/capabilities/units) with the live mapping,
14913
+ * rebuilding any child whose class changed while preserving operator edits. */
14914
+ camDeviceId: number().int().nonnegative(),
14915
+ /** "Resync from zero" (#19). When true, the kernel PURGES every accessory
14916
+ * child of `camDeviceId` BEFORE the provider re-derives the device, so the
14917
+ * children are rebuilt fresh from source — correct names, coords, and units —
14918
+ * instead of being preserved by the incremental reconcile. Use to recover from
14919
+ * legacy generic/placeholder names that the normal name-precedence keeps frozen
14920
+ * (the operator's explicit reset). Push-driven integrations (no-op resync)
14921
+ * rebuild on their next snapshot; pull/command integrations rebuild in `resync`.
14922
+ * Operator edits on the PARENT (its name, layout, primary-child pick) survive —
14923
+ * only the children are torn down. Omitted/false ⇒ the normal incremental
14924
+ * re-sync that preserves children. */
14925
+ resetToSource: boolean().optional()
14926
+ });
14856
14927
  var ResyncResultSchema = object({
14857
14928
  /** True when the persisted spec actually changed (children may have been rebuilt). */
14858
14929
  changed: boolean(),
14859
14930
  /** Number of child devices rebuilt into a new class by this re-sync. */
14860
- rebuiltChildren: number().int().nonnegative()
14931
+ rebuiltChildren: number().int().nonnegative(),
14932
+ /** Number of accessory children torn down by a `resetToSource` purge before the
14933
+ * provider re-derived the device. 0/absent for a normal incremental re-sync. */
14934
+ removedChildren: number().int().nonnegative().optional()
14861
14935
  });
14862
14936
  var deviceAdoptionCapability = {
14863
14937
  name: "device-adoption",
@@ -16622,6 +16696,11 @@ var DeviceMetaSchema = object({
16622
16696
  addonId: string(),
16623
16697
  type: string(),
16624
16698
  name: string(),
16699
+ /** True once an operator explicitly renamed the device via `setName`. Drives
16700
+ * reconcile name-precedence (preserve operator name vs adopt fresh provider
16701
+ * name). Absent ⇒ treated as user-named (PRESERVE) for legacy rows. See
16702
+ * `DeviceMeta.userNamed`. */
16703
+ userNamed: boolean().optional(),
16625
16704
  location: string().nullable(),
16626
16705
  disabled: boolean(),
16627
16706
  parentDeviceId: number().nullable(),
@@ -16932,6 +17011,9 @@ method(object({
16932
17011
  }), method(ReleaseInputSchema.extend({ addonId: string() }), _void(), {
16933
17012
  kind: "mutation",
16934
17013
  auth: "admin"
17014
+ }), method(ResyncInputSchema, ResyncResultSchema, {
17015
+ kind: "mutation",
17016
+ auth: "admin"
16935
17017
  }), method(object({
16936
17018
  deviceId: number(),
16937
17019
  key: string(),
@@ -20783,6 +20865,12 @@ Object.freeze({
20783
20865
  addonId: null,
20784
20866
  access: "create"
20785
20867
  },
20868
+ "deviceManager.adoptionResync": {
20869
+ capName: "device-manager",
20870
+ capScope: "system",
20871
+ addonId: null,
20872
+ access: "create"
20873
+ },
20786
20874
  "deviceManager.allocateDeviceId": {
20787
20875
  capName: "device-manager",
20788
20876
  capScope: "system",
@@ -27480,6 +27568,9 @@ var COLD_START$12 = {
27480
27568
  dirtyWater: null,
27481
27569
  detergent: null,
27482
27570
  dustBin: null,
27571
+ progressPercent: null,
27572
+ errorCode: null,
27573
+ errorLabel: null,
27483
27574
  lastChangedAt: 0
27484
27575
  };
27485
27576
  /**
@@ -27516,6 +27607,9 @@ var HaVacuumDevice = class extends HaBaseChildDevice {
27516
27607
  dirtyWater: null,
27517
27608
  detergent: null,
27518
27609
  dustBin: null,
27610
+ progressPercent: null,
27611
+ errorCode: null,
27612
+ errorLabel: lifecycleState === "error" ? readStringAttr$3(state.attributes, "error") : null,
27519
27613
  lastChangedAt
27520
27614
  });
27521
27615
  }
@@ -27572,6 +27666,10 @@ function readStringArrayAttr(attrs, key) {
27572
27666
  var COLD_START$11 = {
27573
27667
  activity: "idle",
27574
27668
  batteryLevel: null,
27669
+ progressPercent: null,
27670
+ currentCode: null,
27671
+ currentCodeLabel: null,
27672
+ severity: "info",
27575
27673
  lastChangedAt: 0
27576
27674
  };
27577
27675
  /**
@@ -27597,6 +27695,10 @@ var HaLawnMowerDevice = class extends HaBaseChildDevice {
27597
27695
  this.runtimeState.setCapState("lawn-mower-control", {
27598
27696
  activity,
27599
27697
  batteryLevel,
27698
+ progressPercent: readNumericAttr$1(state.attributes, "mowing_progress"),
27699
+ currentCode: null,
27700
+ currentCodeLabel: null,
27701
+ severity: activity === "error" ? "error" : "info",
27600
27702
  lastChangedAt
27601
27703
  });
27602
27704
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-homeassistant",
3
- "version": "1.1.7",
3
+ "version": "1.1.9",
4
4
  "description": "Home Assistant device provider addon for CamStack",
5
5
  "keywords": [
6
6
  "camstack",