@camstack/addon-export-ha-mqtt 1.1.7 → 1.1.8

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.
@@ -9008,18 +9008,47 @@ object({
9008
9008
  lastUpdated: number$1().nullable()
9009
9009
  });
9010
9010
  DeviceType.Image;
9011
+ /**
9012
+ * Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
9013
+ * with a mowing lifecycle plus a dock action.
9014
+ *
9015
+ * Activity follows HA's canonical lawn-mower lifecycle: `idle` /
9016
+ * `mowing` / `paused` / `docked` / `error`. `batteryLevel` (0..100) is
9017
+ * nullable — some mowers don't report a battery percentage.
9018
+ *
9019
+ * `startMowing` begins a mowing run, `pause` halts it in place, and
9020
+ * `dock` sends the mower back to its charging station.
9021
+ */
9022
+ var LawnMowerActivitySchema = _enum([
9023
+ "idle",
9024
+ "mowing",
9025
+ "paused",
9026
+ "docked",
9027
+ "error"
9028
+ ]);
9029
+ /** Severity of the current device/error code — info (status), warning, error. */
9030
+ var DeviceCodeSeveritySchema = _enum([
9031
+ "info",
9032
+ "warning",
9033
+ "error"
9034
+ ]);
9011
9035
  object({
9012
9036
  /** Lifecycle activity of the mower. */
9013
- activity: _enum([
9014
- "idle",
9015
- "mowing",
9016
- "paused",
9017
- "docked",
9018
- "error"
9019
- ]),
9037
+ activity: LawnMowerActivitySchema,
9020
9038
  /** 0..100 battery percentage. Null when the device has no battery
9021
9039
  * reading. */
9022
9040
  batteryLevel: number$1().min(0).max(100).nullable(),
9041
+ /** 0..100 mowing-completion percentage of the current task, or null when no
9042
+ * task is active / progress is unavailable. */
9043
+ progressPercent: number$1().min(0).max(100).nullable(),
9044
+ /** Current device/event code (dynamic — mostly status, sometimes an error),
9045
+ * or null when unknown. */
9046
+ currentCode: number$1().nullable(),
9047
+ /** Human label for {@link currentCode}, or null when undecodable. */
9048
+ currentCodeLabel: string().nullable(),
9049
+ /** Severity of {@link currentCode}. `error` (and often `warning`) warrants UI
9050
+ * attention; `info` is normal status. */
9051
+ severity: DeviceCodeSeveritySchema,
9023
9052
  /** Ms epoch when the slice was last updated. */
9024
9053
  lastChangedAt: number$1()
9025
9054
  });
@@ -10594,6 +10623,7 @@ var VacuumStateSchema = _enum([
10594
10623
  "paused",
10595
10624
  "returning",
10596
10625
  "docked",
10626
+ "drying",
10597
10627
  "error"
10598
10628
  ]);
10599
10629
  /**
@@ -10632,6 +10662,12 @@ object({
10632
10662
  detergent: TankStatusSchema.nullable(),
10633
10663
  /** Dust bin. Null when the hardware has no dust bin. */
10634
10664
  dustBin: TankStatusSchema.nullable(),
10665
+ /** 0..100 cleaning-completion percentage of the current task, or null. */
10666
+ progressPercent: number$1().min(0).max(100).nullable(),
10667
+ /** Current error code (0 / null = no error). */
10668
+ errorCode: number$1().nullable(),
10669
+ /** Human label for {@link errorCode}, or null when none / undecodable. */
10670
+ errorLabel: string().nullable(),
10635
10671
  /** Ms epoch when the slice was last updated. */
10636
10672
  lastChangedAt: number$1()
10637
10673
  });
@@ -12073,17 +12109,32 @@ var ReleaseInputSchema = object({
12073
12109
  * the parent cascades into every accessory. */
12074
12110
  camDeviceId: number$1().int().nonnegative()
12075
12111
  });
12076
- var ResyncInputSchema = object({
12077
- /** Parent CamStack device id of an adopted device. The provider resolves its
12078
- * source (integration/broker + native id) and re-aligns the device's
12079
- * structural spec (type/role/capabilities/units) with the live mapping,
12080
- * rebuilding any child whose class changed while preserving operator edits. */
12081
- camDeviceId: number$1().int().nonnegative() });
12112
+ var ResyncInputSchema = object({
12113
+ /** Parent CamStack device id of an adopted device. The provider resolves its
12114
+ * source (integration/broker + native id) and re-aligns the device's
12115
+ * structural spec (type/role/capabilities/units) with the live mapping,
12116
+ * rebuilding any child whose class changed while preserving operator edits. */
12117
+ camDeviceId: number$1().int().nonnegative(),
12118
+ /** "Resync from zero" (#19). When true, the kernel PURGES every accessory
12119
+ * child of `camDeviceId` BEFORE the provider re-derives the device, so the
12120
+ * children are rebuilt fresh from source — correct names, coords, and units —
12121
+ * instead of being preserved by the incremental reconcile. Use to recover from
12122
+ * legacy generic/placeholder names that the normal name-precedence keeps frozen
12123
+ * (the operator's explicit reset). Push-driven integrations (no-op resync)
12124
+ * rebuild on their next snapshot; pull/command integrations rebuild in `resync`.
12125
+ * Operator edits on the PARENT (its name, layout, primary-child pick) survive —
12126
+ * only the children are torn down. Omitted/false ⇒ the normal incremental
12127
+ * re-sync that preserves children. */
12128
+ resetToSource: boolean().optional()
12129
+ });
12082
12130
  var ResyncResultSchema = object({
12083
12131
  /** True when the persisted spec actually changed (children may have been rebuilt). */
12084
12132
  changed: boolean(),
12085
12133
  /** Number of child devices rebuilt into a new class by this re-sync. */
12086
- rebuiltChildren: number$1().int().nonnegative()
12134
+ rebuiltChildren: number$1().int().nonnegative(),
12135
+ /** Number of accessory children torn down by a `resetToSource` purge before the
12136
+ * provider re-derived the device. 0/absent for a normal incremental re-sync. */
12137
+ removedChildren: number$1().int().nonnegative().optional()
12087
12138
  });
12088
12139
  method(object({ integrationId: string() }), object({ filters: array(AdoptionFilterSchema) }), { auth: "admin" }), method(ListCandidatesInputSchema, ListCandidatesOutputSchema, { auth: "admin" }), method(GetCandidateInputSchema, DiscoveredChildDeviceSchema.nullable(), { auth: "admin" }), method(object({ integrationId: string() }), AdoptionStatusSchema, {
12089
12140
  kind: "mutation",
@@ -13807,6 +13858,11 @@ var DeviceMetaSchema = object({
13807
13858
  addonId: string(),
13808
13859
  type: string(),
13809
13860
  name: string(),
13861
+ /** True once an operator explicitly renamed the device via `setName`. Drives
13862
+ * reconcile name-precedence (preserve operator name vs adopt fresh provider
13863
+ * name). Absent ⇒ treated as user-named (PRESERVE) for legacy rows. See
13864
+ * `DeviceMeta.userNamed`. */
13865
+ userNamed: boolean().optional(),
13810
13866
  location: string().nullable(),
13811
13867
  disabled: boolean(),
13812
13868
  parentDeviceId: number$1().nullable(),
@@ -14117,6 +14173,9 @@ method(object({
14117
14173
  }), method(ReleaseInputSchema.extend({ addonId: string() }), _void(), {
14118
14174
  kind: "mutation",
14119
14175
  auth: "admin"
14176
+ }), method(ResyncInputSchema, ResyncResultSchema, {
14177
+ kind: "mutation",
14178
+ auth: "admin"
14120
14179
  }), method(object({
14121
14180
  deviceId: number$1(),
14122
14181
  key: string(),
@@ -17879,6 +17938,12 @@ Object.freeze({
17879
17938
  addonId: null,
17880
17939
  access: "create"
17881
17940
  },
17941
+ "deviceManager.adoptionResync": {
17942
+ capName: "device-manager",
17943
+ capScope: "system",
17944
+ addonId: null,
17945
+ access: "create"
17946
+ },
17882
17947
  "deviceManager.allocateDeviceId": {
17883
17948
  capName: "device-manager",
17884
17949
  capScope: "system",
@@ -9006,18 +9006,47 @@ object({
9006
9006
  lastUpdated: number$1().nullable()
9007
9007
  });
9008
9008
  DeviceType.Image;
9009
+ /**
9010
+ * Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
9011
+ * with a mowing lifecycle plus a dock action.
9012
+ *
9013
+ * Activity follows HA's canonical lawn-mower lifecycle: `idle` /
9014
+ * `mowing` / `paused` / `docked` / `error`. `batteryLevel` (0..100) is
9015
+ * nullable — some mowers don't report a battery percentage.
9016
+ *
9017
+ * `startMowing` begins a mowing run, `pause` halts it in place, and
9018
+ * `dock` sends the mower back to its charging station.
9019
+ */
9020
+ var LawnMowerActivitySchema = _enum([
9021
+ "idle",
9022
+ "mowing",
9023
+ "paused",
9024
+ "docked",
9025
+ "error"
9026
+ ]);
9027
+ /** Severity of the current device/error code — info (status), warning, error. */
9028
+ var DeviceCodeSeveritySchema = _enum([
9029
+ "info",
9030
+ "warning",
9031
+ "error"
9032
+ ]);
9009
9033
  object({
9010
9034
  /** Lifecycle activity of the mower. */
9011
- activity: _enum([
9012
- "idle",
9013
- "mowing",
9014
- "paused",
9015
- "docked",
9016
- "error"
9017
- ]),
9035
+ activity: LawnMowerActivitySchema,
9018
9036
  /** 0..100 battery percentage. Null when the device has no battery
9019
9037
  * reading. */
9020
9038
  batteryLevel: number$1().min(0).max(100).nullable(),
9039
+ /** 0..100 mowing-completion percentage of the current task, or null when no
9040
+ * task is active / progress is unavailable. */
9041
+ progressPercent: number$1().min(0).max(100).nullable(),
9042
+ /** Current device/event code (dynamic — mostly status, sometimes an error),
9043
+ * or null when unknown. */
9044
+ currentCode: number$1().nullable(),
9045
+ /** Human label for {@link currentCode}, or null when undecodable. */
9046
+ currentCodeLabel: string().nullable(),
9047
+ /** Severity of {@link currentCode}. `error` (and often `warning`) warrants UI
9048
+ * attention; `info` is normal status. */
9049
+ severity: DeviceCodeSeveritySchema,
9021
9050
  /** Ms epoch when the slice was last updated. */
9022
9051
  lastChangedAt: number$1()
9023
9052
  });
@@ -10592,6 +10621,7 @@ var VacuumStateSchema = _enum([
10592
10621
  "paused",
10593
10622
  "returning",
10594
10623
  "docked",
10624
+ "drying",
10595
10625
  "error"
10596
10626
  ]);
10597
10627
  /**
@@ -10630,6 +10660,12 @@ object({
10630
10660
  detergent: TankStatusSchema.nullable(),
10631
10661
  /** Dust bin. Null when the hardware has no dust bin. */
10632
10662
  dustBin: TankStatusSchema.nullable(),
10663
+ /** 0..100 cleaning-completion percentage of the current task, or null. */
10664
+ progressPercent: number$1().min(0).max(100).nullable(),
10665
+ /** Current error code (0 / null = no error). */
10666
+ errorCode: number$1().nullable(),
10667
+ /** Human label for {@link errorCode}, or null when none / undecodable. */
10668
+ errorLabel: string().nullable(),
10633
10669
  /** Ms epoch when the slice was last updated. */
10634
10670
  lastChangedAt: number$1()
10635
10671
  });
@@ -12071,17 +12107,32 @@ var ReleaseInputSchema = object({
12071
12107
  * the parent cascades into every accessory. */
12072
12108
  camDeviceId: number$1().int().nonnegative()
12073
12109
  });
12074
- var ResyncInputSchema = object({
12075
- /** Parent CamStack device id of an adopted device. The provider resolves its
12076
- * source (integration/broker + native id) and re-aligns the device's
12077
- * structural spec (type/role/capabilities/units) with the live mapping,
12078
- * rebuilding any child whose class changed while preserving operator edits. */
12079
- camDeviceId: number$1().int().nonnegative() });
12110
+ var ResyncInputSchema = object({
12111
+ /** Parent CamStack device id of an adopted device. The provider resolves its
12112
+ * source (integration/broker + native id) and re-aligns the device's
12113
+ * structural spec (type/role/capabilities/units) with the live mapping,
12114
+ * rebuilding any child whose class changed while preserving operator edits. */
12115
+ camDeviceId: number$1().int().nonnegative(),
12116
+ /** "Resync from zero" (#19). When true, the kernel PURGES every accessory
12117
+ * child of `camDeviceId` BEFORE the provider re-derives the device, so the
12118
+ * children are rebuilt fresh from source — correct names, coords, and units —
12119
+ * instead of being preserved by the incremental reconcile. Use to recover from
12120
+ * legacy generic/placeholder names that the normal name-precedence keeps frozen
12121
+ * (the operator's explicit reset). Push-driven integrations (no-op resync)
12122
+ * rebuild on their next snapshot; pull/command integrations rebuild in `resync`.
12123
+ * Operator edits on the PARENT (its name, layout, primary-child pick) survive —
12124
+ * only the children are torn down. Omitted/false ⇒ the normal incremental
12125
+ * re-sync that preserves children. */
12126
+ resetToSource: boolean().optional()
12127
+ });
12080
12128
  var ResyncResultSchema = object({
12081
12129
  /** True when the persisted spec actually changed (children may have been rebuilt). */
12082
12130
  changed: boolean(),
12083
12131
  /** Number of child devices rebuilt into a new class by this re-sync. */
12084
- rebuiltChildren: number$1().int().nonnegative()
12132
+ rebuiltChildren: number$1().int().nonnegative(),
12133
+ /** Number of accessory children torn down by a `resetToSource` purge before the
12134
+ * provider re-derived the device. 0/absent for a normal incremental re-sync. */
12135
+ removedChildren: number$1().int().nonnegative().optional()
12085
12136
  });
12086
12137
  method(object({ integrationId: string() }), object({ filters: array(AdoptionFilterSchema) }), { auth: "admin" }), method(ListCandidatesInputSchema, ListCandidatesOutputSchema, { auth: "admin" }), method(GetCandidateInputSchema, DiscoveredChildDeviceSchema.nullable(), { auth: "admin" }), method(object({ integrationId: string() }), AdoptionStatusSchema, {
12087
12138
  kind: "mutation",
@@ -13805,6 +13856,11 @@ var DeviceMetaSchema = object({
13805
13856
  addonId: string(),
13806
13857
  type: string(),
13807
13858
  name: string(),
13859
+ /** True once an operator explicitly renamed the device via `setName`. Drives
13860
+ * reconcile name-precedence (preserve operator name vs adopt fresh provider
13861
+ * name). Absent ⇒ treated as user-named (PRESERVE) for legacy rows. See
13862
+ * `DeviceMeta.userNamed`. */
13863
+ userNamed: boolean().optional(),
13808
13864
  location: string().nullable(),
13809
13865
  disabled: boolean(),
13810
13866
  parentDeviceId: number$1().nullable(),
@@ -14115,6 +14171,9 @@ method(object({
14115
14171
  }), method(ReleaseInputSchema.extend({ addonId: string() }), _void(), {
14116
14172
  kind: "mutation",
14117
14173
  auth: "admin"
14174
+ }), method(ResyncInputSchema, ResyncResultSchema, {
14175
+ kind: "mutation",
14176
+ auth: "admin"
14118
14177
  }), method(object({
14119
14178
  deviceId: number$1(),
14120
14179
  key: string(),
@@ -17877,6 +17936,12 @@ Object.freeze({
17877
17936
  addonId: null,
17878
17937
  access: "create"
17879
17938
  },
17939
+ "deviceManager.adoptionResync": {
17940
+ capName: "device-manager",
17941
+ capScope: "system",
17942
+ addonId: null,
17943
+ access: "create"
17944
+ },
17880
17945
  "deviceManager.allocateDeviceId": {
17881
17946
  capName: "device-manager",
17882
17947
  capScope: "system",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-export-ha-mqtt",
3
- "version": "1.1.7",
3
+ "version": "1.1.8",
4
4
  "description": "HomeAssistant MQTT discovery exporter for CamStack devices. Publishes discovery topics so HA auto-creates entities for exposed cameras/switches/intercoms/sensors.",
5
5
  "keywords": [
6
6
  "camstack",