@camstack/addon-training 0.1.99 → 0.1.101

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 (23) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/{MotionZonesSettings-DBC9oNEy.mjs → MotionZonesSettings-BJesO_kB.mjs} +2 -2
  3. package/dist/{PrivacyMaskSettings-MPmxoEGa.mjs → PrivacyMaskSettings-BdPxtLGP.mjs} +2 -2
  4. package/dist/{SceneMonitorEditor-q8rm9EAO.mjs → SceneMonitorEditor-DZPmgWAn.mjs} +2 -2
  5. package/dist/_stub.js +5673 -5485
  6. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-DgVZ6skW.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-1Dc2a8Cs.mjs} +3 -3
  7. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BEP4kcPJ.mjs +26 -0
  8. package/dist/addon-training.css +1 -1
  9. package/dist/{dist-DNGtQV92.mjs → dist-Bfob1jSz.mjs} +174 -122
  10. package/dist/{dist-D0sqORzx.js → dist-DjTcrGXt.js} +174 -122
  11. package/dist/{hostInit-DA4zjIvT.mjs → hostInit-2grmKwjr.mjs} +2 -2
  12. package/dist/index.js +1 -1
  13. package/dist/orchestrator/training.addon.js +1 -1
  14. package/dist/orchestrator/training.addon.mjs +1 -1
  15. package/dist/{player-overlays-aX4eEmgd.mjs → player-overlays-CTRTi-rS.mjs} +1 -1
  16. package/dist/providers/modal/training-modal.addon.js +1 -1
  17. package/dist/providers/modal/training-modal.addon.mjs +1 -1
  18. package/dist/remoteEntry.js +1 -1
  19. package/dist/{responsive-D9ViDal5.mjs → responsive-BcjqJDUO.mjs} +1 -1
  20. package/dist/{scene-monitor-copy-B7FtvYkD.mjs → scene-monitor-copy-BIGdNSLV.mjs} +1 -1
  21. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-aLdhRRQr.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-DNBqRVkn.mjs} +1 -1
  22. package/package.json +1 -1
  23. package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-4mdhpGoW.mjs +0 -26
@@ -5580,7 +5580,7 @@ var ZodIssueCode = {
5580
5580
  var ZodFirstPartyTypeKind;
5581
5581
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5582
5582
  //#endregion
5583
- //#region ../types/dist/sleep-DFaVPxfm.mjs
5583
+ //#region ../types/dist/sleep-Crlmu_tO.mjs
5584
5584
  /**
5585
5585
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5586
5586
  * window to float samples (D455).
@@ -9067,11 +9067,11 @@ var CAP_NAMES = Object.freeze([
9067
9067
  Object.freeze({
9068
9068
  "air-quality-sensor": [
9069
9069
  {
9070
- "path": "co2Ppm",
9070
+ "path": "co2",
9071
9071
  "valueType": "number"
9072
9072
  },
9073
9073
  {
9074
- "path": "vocPpb",
9074
+ "path": "voc",
9075
9075
  "valueType": "number"
9076
9076
  },
9077
9077
  {
@@ -9121,7 +9121,7 @@ Object.freeze({
9121
9121
  }
9122
9122
  ],
9123
9123
  "ambient-light-sensor": [{
9124
- "path": "lux",
9124
+ "path": "illuminance",
9125
9125
  "valueType": "number"
9126
9126
  }],
9127
9127
  "audio-metrics": [
@@ -9182,7 +9182,7 @@ Object.freeze({
9182
9182
  ],
9183
9183
  "battery": [
9184
9184
  {
9185
- "path": "percentage",
9185
+ "path": "level",
9186
9186
  "valueType": "number"
9187
9187
  },
9188
9188
  {
@@ -9204,7 +9204,7 @@ Object.freeze({
9204
9204
  "valueType": "number"
9205
9205
  },
9206
9206
  {
9207
- "path": "volts",
9207
+ "path": "voltage",
9208
9208
  "valueType": "number"
9209
9209
  },
9210
9210
  {
@@ -9225,7 +9225,7 @@ Object.freeze({
9225
9225
  "valueType": "boolean"
9226
9226
  }],
9227
9227
  "brightness": [{
9228
- "path": "percentage",
9228
+ "path": "level",
9229
9229
  "valueType": "number"
9230
9230
  }],
9231
9231
  "broker": [{
@@ -9426,7 +9426,7 @@ Object.freeze({
9426
9426
  "valueType": "number"
9427
9427
  },
9428
9428
  {
9429
- "path": "mireds",
9429
+ "path": "colorTemperature",
9430
9430
  "valueType": "number"
9431
9431
  }
9432
9432
  ],
@@ -9605,15 +9605,15 @@ Object.freeze({
9605
9605
  "valueType": "string"
9606
9606
  },
9607
9607
  {
9608
- "path": "remainingSeconds",
9608
+ "path": "remaining",
9609
9609
  "valueType": "number"
9610
9610
  },
9611
9611
  {
9612
- "path": "delayedStartSeconds",
9612
+ "path": "delayedStart",
9613
9613
  "valueType": "number"
9614
9614
  },
9615
9615
  {
9616
- "path": "progressPercent",
9616
+ "path": "progress",
9617
9617
  "valueType": "number"
9618
9618
  },
9619
9619
  {
@@ -9727,7 +9727,7 @@ Object.freeze({
9727
9727
  ],
9728
9728
  "fan-control": [
9729
9729
  {
9730
- "path": "percentage",
9730
+ "path": "speed",
9731
9731
  "valueType": "number"
9732
9732
  },
9733
9733
  {
@@ -9827,7 +9827,7 @@ Object.freeze({
9827
9827
  }
9828
9828
  ],
9829
9829
  "humidity-sensor": [{
9830
- "path": "percent",
9830
+ "path": "humidity",
9831
9831
  "valueType": "number"
9832
9832
  }],
9833
9833
  "image": [{
@@ -9937,7 +9937,7 @@ Object.freeze({
9937
9937
  "valueType": "number"
9938
9938
  },
9939
9939
  {
9940
- "path": "progressPercent",
9940
+ "path": "progress",
9941
9941
  "valueType": "number"
9942
9942
  },
9943
9943
  {
@@ -10016,11 +10016,11 @@ Object.freeze({
10016
10016
  "valueType": "string"
10017
10017
  },
10018
10018
  {
10019
- "path": "positionMs",
10019
+ "path": "position",
10020
10020
  "valueType": "number"
10021
10021
  },
10022
10022
  {
10023
- "path": "durationMs",
10023
+ "path": "duration",
10024
10024
  "valueType": "number"
10025
10025
  },
10026
10026
  {
@@ -10122,11 +10122,11 @@ Object.freeze({
10122
10122
  ]
10123
10123
  },
10124
10124
  {
10125
- "path": "signalPercent",
10125
+ "path": "signal",
10126
10126
  "valueType": "number"
10127
10127
  },
10128
10128
  {
10129
- "path": "rssiDbm",
10129
+ "path": "rssi",
10130
10130
  "valueType": "number"
10131
10131
  },
10132
10132
  {
@@ -10257,23 +10257,23 @@ Object.freeze({
10257
10257
  ],
10258
10258
  "power-meter": [
10259
10259
  {
10260
- "path": "watts",
10260
+ "path": "power",
10261
10261
  "valueType": "number"
10262
10262
  },
10263
10263
  {
10264
- "path": "kwhTotal",
10264
+ "path": "energy",
10265
10265
  "valueType": "number"
10266
10266
  },
10267
10267
  {
10268
- "path": "volts",
10268
+ "path": "voltage",
10269
10269
  "valueType": "number"
10270
10270
  },
10271
10271
  {
10272
- "path": "amps",
10272
+ "path": "current",
10273
10273
  "valueType": "number"
10274
10274
  },
10275
10275
  {
10276
- "path": "va",
10276
+ "path": "apparentPower",
10277
10277
  "valueType": "number"
10278
10278
  },
10279
10279
  {
@@ -10301,14 +10301,10 @@ Object.freeze({
10301
10301
  {
10302
10302
  "path": "gps.accuracyMeters",
10303
10303
  "valueType": "number"
10304
- },
10305
- {
10306
- "path": "batteryPercent",
10307
- "valueType": "number"
10308
10304
  }
10309
10305
  ],
10310
10306
  "pressure-sensor": [{
10311
- "path": "hpa",
10307
+ "path": "pressure",
10312
10308
  "valueType": "number"
10313
10309
  }],
10314
10310
  "privacy-mask": [{
@@ -10622,7 +10618,7 @@ Object.freeze({
10622
10618
  "valueType": "boolean"
10623
10619
  }],
10624
10620
  "temperature-sensor": [{
10625
- "path": "celsius",
10621
+ "path": "temperature",
10626
10622
  "valueType": "number"
10627
10623
  }],
10628
10624
  "update": [
@@ -10670,7 +10666,7 @@ Object.freeze({
10670
10666
  "valueType": "string"
10671
10667
  },
10672
10668
  {
10673
- "path": "progressPercent",
10669
+ "path": "progress",
10674
10670
  "valueType": "number"
10675
10671
  },
10676
10672
  {
@@ -11145,7 +11141,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
11145
11141
  return DeviceRole;
11146
11142
  }({});
11147
11143
  //#endregion
11148
- //#region ../types/dist/composition-Bb8iwHEJ.mjs
11144
+ //#region ../types/dist/composition-DwA0uVW5.mjs
11149
11145
  /**
11150
11146
  * The ffmpeg build every CamStack node downloads, per platform and arch.
11151
11147
  *
@@ -18810,7 +18806,7 @@ var CompositionEventPlanSchema = object({
18810
18806
  stateField: string(),
18811
18807
  fieldKey: string()
18812
18808
  });
18813
- /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.celsius`. */
18809
+ /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.temperature`. */
18814
18810
  var CompositionProblemSchema = object({
18815
18811
  code: _enum([
18816
18812
  "reserved-variant",
@@ -19092,12 +19088,13 @@ var CHANGED = {
19092
19088
  expr: "now"
19093
19089
  };
19094
19090
  function numeric(input) {
19091
+ const { alsoFrom, ...base } = input;
19095
19092
  return {
19096
- ...input,
19093
+ ...base,
19097
19094
  family: "numeric",
19098
19095
  deviceType: DeviceType.Sensor,
19099
19096
  memberDeviceType: DeviceType.Sensor,
19100
- memberDeviceTypes: [DeviceType.Sensor],
19097
+ memberDeviceTypes: [DeviceType.Sensor, ...alsoFrom?.deviceTypes ?? []],
19101
19098
  activeWhen: void 0,
19102
19099
  commandCaps: [],
19103
19100
  baseUnit: baseUnitOf(input.quantity),
@@ -19105,9 +19102,10 @@ function numeric(input) {
19105
19102
  accept: [{
19106
19103
  cap: input.outputCap,
19107
19104
  fieldPath: input.outputField
19108
- }]
19105
+ }, ...alsoFrom === void 0 ? [] : [alsoFrom.accept]]
19109
19106
  };
19110
19107
  }
19108
+ var CLIMATE_DEVICES = [DeviceType.Thermostat, DeviceType.Climate];
19111
19109
  function binary(input) {
19112
19110
  return {
19113
19111
  ...input,
@@ -19129,29 +19127,43 @@ var GROUP_TEMPLATES = [
19129
19127
  summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
19130
19128
  role: DeviceRole.TemperatureSensor,
19131
19129
  outputCap: "temperature-sensor",
19132
- outputField: "celsius",
19130
+ outputField: "temperature",
19133
19131
  quantity: "temperature",
19134
19132
  defaultAggregate: "mean",
19135
19133
  empty: "null",
19136
- companions: [NOW$2]
19134
+ companions: [NOW$2],
19135
+ alsoFrom: {
19136
+ deviceTypes: CLIMATE_DEVICES,
19137
+ accept: {
19138
+ cap: "climate-control",
19139
+ fieldPath: "currentTemp"
19140
+ }
19141
+ }
19137
19142
  }),
19138
19143
  numeric({
19139
19144
  id: "humidity",
19140
19145
  summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
19141
19146
  role: DeviceRole.HumiditySensor,
19142
19147
  outputCap: "humidity-sensor",
19143
- outputField: "percent",
19148
+ outputField: "humidity",
19144
19149
  quantity: "humidity",
19145
19150
  defaultAggregate: "mean",
19146
19151
  empty: "null",
19147
- companions: [NOW$2]
19152
+ companions: [NOW$2],
19153
+ alsoFrom: {
19154
+ deviceTypes: CLIMATE_DEVICES,
19155
+ accept: {
19156
+ cap: "climate-control",
19157
+ fieldPath: "currentHumidity"
19158
+ }
19159
+ }
19148
19160
  }),
19149
19161
  numeric({
19150
19162
  id: "pressure",
19151
19163
  summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
19152
19164
  role: DeviceRole.PressureSensor,
19153
19165
  outputCap: "pressure-sensor",
19154
- outputField: "hpa",
19166
+ outputField: "pressure",
19155
19167
  quantity: "pressure",
19156
19168
  defaultAggregate: "mean",
19157
19169
  empty: "null",
@@ -19162,7 +19174,7 @@ var GROUP_TEMPLATES = [
19162
19174
  summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
19163
19175
  role: DeviceRole.AmbientLightSensor,
19164
19176
  outputCap: "ambient-light-sensor",
19165
- outputField: "lux",
19177
+ outputField: "illuminance",
19166
19178
  quantity: "illuminance",
19167
19179
  defaultAggregate: "mean",
19168
19180
  empty: "null",
@@ -19173,7 +19185,7 @@ var GROUP_TEMPLATES = [
19173
19185
  summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
19174
19186
  role: DeviceRole.PowerSensor,
19175
19187
  outputCap: "power-meter",
19176
- outputField: "watts",
19188
+ outputField: "power",
19177
19189
  quantity: "power",
19178
19190
  defaultAggregate: "sum",
19179
19191
  empty: "omit",
@@ -19184,7 +19196,7 @@ var GROUP_TEMPLATES = [
19184
19196
  summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
19185
19197
  role: DeviceRole.EnergySensor,
19186
19198
  outputCap: "power-meter",
19187
- outputField: "kwhTotal",
19199
+ outputField: "energy",
19188
19200
  quantity: "energy",
19189
19201
  defaultAggregate: "sum",
19190
19202
  empty: "omit",
@@ -19195,7 +19207,7 @@ var GROUP_TEMPLATES = [
19195
19207
  summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
19196
19208
  role: DeviceRole.BatterySensor,
19197
19209
  outputCap: "battery",
19198
- outputField: "percentage",
19210
+ outputField: "level",
19199
19211
  quantity: "percentage",
19200
19212
  defaultAggregate: "mean",
19201
19213
  empty: "null",
@@ -44650,6 +44662,43 @@ var NotificationActionSchema = object({
44650
44662
  */
44651
44663
  mode: _enum(["navigate", "background"]).optional()
44652
44664
  });
44665
+ /** A delivery parameter value: what a notifier declared it takes. */
44666
+ var DeliveryParamValueSchema = union([
44667
+ string(),
44668
+ number(),
44669
+ boolean()
44670
+ ]);
44671
+ /**
44672
+ * One extra delivery parameter a notifier KIND declares (D938). A rule that
44673
+ * addresses a target of that kind may set it; a kind that declares nothing is
44674
+ * never handed one. The admin UI derives its control from this descriptor —
44675
+ * no editor knows a service by name.
44676
+ *
44677
+ * Optional fields are `.optional()`, never `.default()` (a Zod default does not
44678
+ * run on the addon cap path).
44679
+ */
44680
+ var DeliveryParamSchema = object({
44681
+ key: string().min(1),
44682
+ label: string(),
44683
+ /** i18n key of the label, resolved by the declaring addon's namespace. */
44684
+ labelKey: string().optional(),
44685
+ type: _enum([
44686
+ "enum",
44687
+ "number",
44688
+ "boolean",
44689
+ "string"
44690
+ ]),
44691
+ /** `enum` only: the closed set of accepted values. */
44692
+ options: array(object({
44693
+ value: string(),
44694
+ label: string()
44695
+ })).optional(),
44696
+ /** `number` only. */
44697
+ min: number().optional(),
44698
+ max: number().optional(),
44699
+ /** What the notifier does when the rule sets nothing; shown as the placeholder. */
44700
+ default: DeliveryParamValueSchema.optional()
44701
+ });
44653
44702
  /**
44654
44703
  * The canonical notification. `body` is the only hard field (Apprise model).
44655
44704
  * `priority` is a 5-level ORDINAL (1=lowest … 3=normal(default) … 5=urgent),
@@ -44672,7 +44721,13 @@ var NotificationSchema = object({
44672
44721
  tag: string().optional(),
44673
44722
  deviceId: number().optional(),
44674
44723
  eventId: string().optional(),
44675
- metadata: record(string(), unknown()).optional()
44724
+ metadata: record(string(), unknown()).optional(),
44725
+ /**
44726
+ * Values for the parameters the target's kind DECLARES in
44727
+ * {@link TargetKindSchema} `deliveryParams`. Already validated against the
44728
+ * declaration by the sender; a notifier reads only the keys it declared.
44729
+ */
44730
+ delivery: record(string(), DeliveryParamValueSchema).optional()
44676
44731
  });
44677
44732
  /** One declared native severity/priority level for a kind. */
44678
44733
  var TargetKindLevelSchema = object({
@@ -44778,6 +44833,11 @@ var TargetKindSchema = object({
44778
44833
  */
44779
44834
  destinationKeys: array(string()).optional(),
44780
44835
  supportsDiscovery: boolean(),
44836
+ /**
44837
+ * Extra delivery parameters a rule may set for a target of this kind (D938).
44838
+ * Absent = none; the rule editor then offers nothing.
44839
+ */
44840
+ deliveryParams: array(DeliveryParamSchema).optional(),
44781
44841
  caps: TargetKindCapsSchema
44782
44842
  });
44783
44843
  /**
@@ -56948,7 +57008,9 @@ var ManifestShapeSchema = object({
56948
57008
  icon: string().optional()
56949
57009
  }).optional(),
56950
57010
  protected: boolean().optional(),
56951
- removable: boolean().optional()
57011
+ removable: boolean().optional(),
57012
+ /** Declared Integrations-page block (mirror of `AddonDeclaration.integrationSection`). */
57013
+ integrationSection: _enum(["system", "providers"]).optional()
56952
57014
  });
56953
57015
  var AddonProcessSchema = object({
56954
57016
  pid: number().optional(),
@@ -57313,9 +57375,9 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
57313
57375
  }), LogStreamEntrySchema, { kind: "subscription" });
57314
57376
  object({
57315
57377
  /** Carbon dioxide concentration in ppm. */
57316
- co2Ppm: number().min(0).optional().meta(readingMeta("concentration-volume")),
57378
+ co2: number().min(0).optional().meta(readingMeta("concentration-volume")),
57317
57379
  /** Total volatile organic compounds in ppb. */
57318
- vocPpb: number().min(0).optional().meta(readingMeta("concentration-ppb")),
57380
+ voc: number().min(0).optional().meta(readingMeta("concentration-ppb")),
57319
57381
  /** Particulate matter ≤ 2.5 μm in µg/m³. */
57320
57382
  pm25: number().min(0).optional().meta(readingMeta("concentration-mass")),
57321
57383
  /** Particulate matter ≤ 10 μm in µg/m³. */
@@ -57328,7 +57390,7 @@ object({
57328
57390
  DeviceType.Sensor;
57329
57391
  object({
57330
57392
  /** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
57331
- lux: number().min(0).nullable().meta(readingMeta("illuminance", {
57393
+ illuminance: number().min(0).nullable().meta(readingMeta("illuminance", {
57332
57394
  precision: 0,
57333
57395
  label: "Illuminance"
57334
57396
  })),
@@ -57556,7 +57618,7 @@ var BatteryStatusSchema = object({
57556
57618
  * Consumers must SKIP a null rather than coerce it — `battery-band` already
57557
57619
  * declines to band a non-finite reading, which is the correct shape.
57558
57620
  */
57559
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
57621
+ level: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
57560
57622
  /**
57561
57623
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
57562
57624
  * Reolink-specific for the Solar Panel 2 accessory (will become
@@ -57566,7 +57628,7 @@ var BatteryStatusSchema = object({
57566
57628
  * `'unknown'` is the absence of an answer: the provider has not read the
57567
57629
  * power fields yet, or the firmware reported neither. Before it existed,
57568
57630
  * two unreadable fields produced `'none'`, and a camera nobody had reached
57569
- * was drawn "on battery alone" — the same D315 defect `percentage` closed
57631
+ * was drawn "on battery alone" — the same D315 defect `level` closed
57570
57632
  * by going nullable. Consumers SKIP it (no charger state published, no
57571
57633
  * glyph, no HomeKit ChargingState) rather than coerce it either way.
57572
57634
  */
@@ -57590,7 +57652,7 @@ var BatteryStatusSchema = object({
57590
57652
  * that only report charge. A second reading on this cap, not a second
57591
57653
  * `numeric-sensor` on the same device.
57592
57654
  */
57593
- volts: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
57655
+ voltage: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
57594
57656
  /**
57595
57657
  * Ms epoch of the last time the device PROVED it was reachable — a
57596
57658
  * completed firmware round-trip, an observed wake, or an inbound push
@@ -57624,7 +57686,7 @@ var BatteryStatusSchema = object({
57624
57686
  /**
57625
57687
  * True when the source is a BINARY low-battery indicator (HA
57626
57688
  * `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
57627
- * charge level — `percentage` is then a coarse stand-in (100 = normal,
57689
+ * charge level — `level` is then a coarse stand-in (100 = normal,
57628
57690
  * sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
57629
57691
  * misleading exact percentage. Absent/false → genuine 0–100 % reading.
57630
57692
  */
@@ -57650,19 +57712,19 @@ object({
57650
57712
  DeviceType.Sensor;
57651
57713
  object({
57652
57714
  /** Current level as 0..100 inclusive. Firmware-reported. */
57653
- percentage: number().min(0).max(100).meta(readingMeta("percentage")),
57715
+ level: number().min(0).max(100).meta(readingMeta("percentage")),
57654
57716
  /** Ms epoch of the last operator-driven change. Useful for UI freshness. */
57655
57717
  lastChangedAt: number()
57656
57718
  });
57657
57719
  DeviceType.Light, method(object({
57658
57720
  deviceId: number().int().nonnegative(),
57659
- percentage: number().min(0).max(100)
57721
+ level: number().min(0).max(100)
57660
57722
  }), _void(), {
57661
57723
  kind: "mutation",
57662
57724
  auth: "protected"
57663
57725
  }), object({
57664
57726
  deviceId: number(),
57665
- percentage: number().min(0).max(100),
57727
+ level: number().min(0).max(100),
57666
57728
  lastChangedAt: number()
57667
57729
  });
57668
57730
  DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
@@ -58163,11 +58225,11 @@ var ColorInputSchema = discriminatedUnion("mode", [
58163
58225
  }),
58164
58226
  object({
58165
58227
  mode: literal("mired"),
58166
- mireds: number().int().min(50).max(1e3)
58228
+ colorTemperature: number().int().min(50).max(1e3)
58167
58229
  })
58168
58230
  ]);
58169
58231
  object({
58170
- /** Active color mode — which of `rgb` / `hsv` / `mireds` reflects
58232
+ /** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
58171
58233
  * the bulb's current state. */
58172
58234
  mode: _enum([
58173
58235
  "rgb",
@@ -58179,7 +58241,7 @@ object({
58179
58241
  /** Populated when `mode === 'hsv'`. */
58180
58242
  hsv: HsvTripletSchema.optional(),
58181
58243
  /** Populated when `mode === 'mired'`. */
58182
- mireds: number().int().optional().meta(readingMeta("colour-temperature")),
58244
+ colorTemperature: number().int().optional().meta(readingMeta("colour-temperature")),
58183
58245
  /** Ms epoch of the last operator-driven change. */
58184
58246
  lastChangedAt: number()
58185
58247
  });
@@ -58198,7 +58260,7 @@ DeviceType.Light, method(object({
58198
58260
  ]),
58199
58261
  rgb: RgbTripletSchema.optional(),
58200
58262
  hsv: HsvTripletSchema.optional(),
58201
- mireds: number().int().optional(),
58263
+ colorTemperature: number().int().optional(),
58202
58264
  lastChangedAt: number()
58203
58265
  });
58204
58266
  var ConnectionTestOutcomeSchema = discriminatedUnion("outcome", [
@@ -58624,11 +58686,11 @@ object({
58624
58686
  /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
58625
58687
  availablePrograms: array(string()),
58626
58688
  /** Seconds remaining on the active cycle, or null when not running / not known. */
58627
- remainingSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58689
+ remaining: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58628
58690
  /** Seconds the delayed start is set to (time until the cycle starts), or null. */
58629
- delayedStartSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58691
+ delayedStart: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58630
58692
  /** Cycle completion 0..100, or null when not applicable. */
58631
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58693
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58632
58694
  /** True when the door is reported open; null when the door state is not known. */
58633
58695
  doorOpen: boolean().nullable(),
58634
58696
  /** True when the door is latched (locked) during a cycle; null when not reported. */
@@ -59246,7 +59308,7 @@ var FanDirectionSchema = _enum(["forward", "reverse"]);
59246
59308
  object({
59247
59309
  /** Active speed as 0..100 inclusive. Null when the device has no
59248
59310
  * speed surface (single-speed fan). */
59249
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59311
+ speed: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59250
59312
  /** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
59251
59313
  * a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
59252
59314
  percentageStep: number().positive().optional().meta(readingMeta("percentage")),
@@ -59266,7 +59328,7 @@ object({
59266
59328
  });
59267
59329
  DeviceType.Fan, method(object({
59268
59330
  deviceId: number().int().nonnegative(),
59269
- percentage: number().min(0).max(100)
59331
+ speed: number().min(0).max(100)
59270
59332
  }), _void(), {
59271
59333
  kind: "mutation",
59272
59334
  auth: "protected"
@@ -59449,7 +59511,7 @@ DeviceType.Humidifier, method(object({
59449
59511
  });
59450
59512
  object({
59451
59513
  /** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
59452
- percent: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
59514
+ humidity: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
59453
59515
  precision: 0,
59454
59516
  label: "Humidity"
59455
59517
  })),
@@ -59892,7 +59954,7 @@ object({
59892
59954
  batteryLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59893
59955
  /** 0..100 mowing-completion percentage of the current task, or null when no
59894
59956
  * task is active / progress is unavailable. */
59895
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59957
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59896
59958
  /** Current device/event code (dynamic — mostly status, sometimes an error),
59897
59959
  * or null when unknown. */
59898
59960
  currentCode: number().nullable().meta(readingMeta("none")),
@@ -60382,10 +60444,10 @@ object({
60382
60444
  currentMedia: MediaInfoSchema.nullable(),
60383
60445
  /** Current playback position in ms. Null when not seekable or
60384
60446
  * nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
60385
- positionMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60447
+ position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60386
60448
  /** Total duration of the current media in ms. Null when unknown
60387
60449
  * (live stream) or nothing is playing. */
60388
- durationMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60450
+ duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60389
60451
  /** Shuffle toggle. Null when no shuffle surface.
60390
60452
  * Pair with `DeviceFeature.MediaPlayerShuffle`. */
60391
60453
  shuffle: boolean().nullable(),
@@ -60412,7 +60474,7 @@ DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }
60412
60474
  auth: "protected"
60413
60475
  }), method(object({
60414
60476
  deviceId: number().int().nonnegative(),
60415
- positionMs: number().int().nonnegative()
60477
+ position: number().int().nonnegative()
60416
60478
  }), _void(), {
60417
60479
  kind: "mutation",
60418
60480
  auth: "protected"
@@ -61085,9 +61147,9 @@ var NetworkLinkStatusSchema = object({
61085
61147
  * one whose reading has not landed must not be drawn at 0 %. Consumers
61086
61148
  * SKIP a null rather than coerce it.
61087
61149
  */
61088
- signalPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61150
+ signal: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61089
61151
  /** Raw received signal strength in dBm, when the firmware reports one. */
61090
- rssiDbm: number().optional().meta(readingMeta("signal-level")),
61152
+ rssi: number().optional().meta(readingMeta("signal-level")),
61091
61153
  /** Network name of a wireless link, when the firmware reports it. */
61092
61154
  ssid: string().optional(),
61093
61155
  /** Ms epoch of the last observation. Lets consumers reason about freshness. */
@@ -62237,16 +62299,16 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
62237
62299
  auth: "admin"
62238
62300
  });
62239
62301
  object({
62240
- /** Instantaneous power draw in watts. */
62241
- watts: number().optional().meta(readingMeta("power", { label: "Power" })),
62302
+ /** Instantaneous power draw (watts). */
62303
+ power: number().optional().meta(readingMeta("power", { label: "Power" })),
62242
62304
  /** Cumulative energy in kilowatt-hours since the meter was reset. */
62243
- kwhTotal: number().optional().meta(readingMeta("energy", { label: "Energy" })),
62244
- /** Voltage in volts. */
62245
- volts: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
62305
+ energy: number().optional().meta(readingMeta("energy", { label: "Energy" })),
62306
+ /** Voltage (volts). */
62307
+ voltage: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
62246
62308
  /** Current in amperes. */
62247
- amps: number().optional().meta(readingMeta("current", { label: "Current" })),
62309
+ current: number().optional().meta(readingMeta("current", { label: "Current" })),
62248
62310
  /** Apparent power in volt-amperes. */
62249
- va: number().optional().meta(readingMeta("apparent-power")),
62311
+ apparentPower: number().optional().meta(readingMeta("apparent-power")),
62250
62312
  /** Power factor (0..1) if reported. */
62251
62313
  powerFactor: number().min(0).max(1).optional().meta(readingMeta("ratio")),
62252
62314
  /** Ms epoch when the slice was last updated. */
@@ -62301,16 +62363,13 @@ object({
62301
62363
  location: string().nullable(),
62302
62364
  /** GPS coordinates when available. Null otherwise. */
62303
62365
  gps: GpsLocationSchema.nullable(),
62304
- /** Optional battery level of the tracking device (0..100). Null
62305
- * when not reported. */
62306
- batteryPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
62307
62366
  /** Ms epoch when the slice was last updated. */
62308
62367
  lastChangedAt: number()
62309
62368
  });
62310
62369
  DeviceType.Presence;
62311
62370
  object({
62312
62371
  /** Current pressure in hPa. `null` when the sample was refused (D393). */
62313
- hpa: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
62372
+ pressure: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
62314
62373
  /** Ms epoch when the slice was last updated. */
62315
62374
  lastFetchedAt: number()
62316
62375
  });
@@ -65313,7 +65372,7 @@ object({
65313
65372
  DeviceType.Sensor;
65314
65373
  object({
65315
65374
  /** Current temperature in Celsius. `null` when the sample was refused (D393). */
65316
- celsius: number().nullable().meta(readingMeta("temperature", {
65375
+ temperature: number().nullable().meta(readingMeta("temperature", {
65317
65376
  precision: 1,
65318
65377
  label: "Temperature"
65319
65378
  })),
@@ -65577,7 +65636,7 @@ object({
65577
65636
  /** Speed tokens the hardware accepts — drives the UI selector. */
65578
65637
  availableFanSpeeds: array(string()),
65579
65638
  /** 0..100 cleaning-completion percentage of the current task, or null. */
65580
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65639
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65581
65640
  /** Current error code (0 / null = no error). */
65582
65641
  errorCode: number().nullable().meta(readingMeta("none")),
65583
65642
  /** Human label for {@link errorCode}, or null when none / undecodable. */
@@ -76649,7 +76708,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76649
76708
  label: t("Full brightness", "Luminosità massima"),
76650
76709
  phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
76651
76710
  icon: "sun",
76652
- args: { percentage: 100 }
76711
+ args: { level: 100 }
76653
76712
  },
76654
76713
  {
76655
76714
  id: "brightness.half",
@@ -76657,7 +76716,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76657
76716
  label: t("Half brightness", "Luminosità a metà"),
76658
76717
  phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
76659
76718
  icon: "sun-dim",
76660
- args: { percentage: 50 }
76719
+ args: { level: 50 }
76661
76720
  },
76662
76721
  {
76663
76722
  id: "brightness.off",
@@ -76665,16 +76724,16 @@ var ACTUATOR_CAP_VOCABULARY = {
76665
76724
  label: t("Brightness off", "Luminosità a zero"),
76666
76725
  phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
76667
76726
  icon: "lightbulb-off",
76668
- args: { percentage: 0 }
76727
+ args: { level: 0 }
76669
76728
  },
76670
76729
  {
76671
76730
  id: "brightness.set",
76672
76731
  method: "setBrightness",
76673
76732
  label: t("Set brightness", "Imposta la luminosità"),
76674
- phrase: t("Set the brightness of {device} to {percentage}", "Imposta la luminosità di {device} a {percentage}"),
76733
+ phrase: t("Set the brightness of {device} to {level}", "Imposta la luminosità di {device} a {level}"),
76675
76734
  icon: "sun-medium",
76676
76735
  openArgs: [{
76677
- key: "percentage",
76736
+ key: "level",
76678
76737
  label: PERCENT,
76679
76738
  offer: {
76680
76739
  kind: "number",
@@ -76688,13 +76747,13 @@ var ACTUATOR_CAP_VOCABULARY = {
76688
76747
  ],
76689
76748
  state: [{
76690
76749
  kind: "numeric",
76691
- field: "percentage",
76750
+ field: "level",
76692
76751
  quantity: t("the brightness", "la luminosità"),
76693
76752
  label: t("Brightness", "Luminosità"),
76694
76753
  unit: "%",
76695
76754
  icon: "sun"
76696
76755
  }],
76697
- events: { onBrightnessChanged: { notOperatorFacing: "the `percentage` state trigger reads the same change" } }
76756
+ events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
76698
76757
  },
76699
76758
  color: {
76700
76759
  scope: "device",
@@ -76708,7 +76767,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76708
76767
  icon: "sun",
76709
76768
  args: { color: {
76710
76769
  mode: "mired",
76711
- mireds: 370
76770
+ colorTemperature: 370
76712
76771
  } }
76713
76772
  },
76714
76773
  {
@@ -76719,7 +76778,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76719
76778
  icon: "snowflake",
76720
76779
  args: { color: {
76721
76780
  mode: "mired",
76722
- mireds: 200
76781
+ colorTemperature: 200
76723
76782
  } }
76724
76783
  },
76725
76784
  {
@@ -77333,7 +77392,7 @@ var ACTUATOR_CAP_VOCABULARY = {
77333
77392
  label: t("Fan off", "Ventilatore spento"),
77334
77393
  phrase: t("Stop {device}", "Ferma {device}"),
77335
77394
  icon: "power-off",
77336
- args: { percentage: 0 }
77395
+ args: { speed: 0 }
77337
77396
  },
77338
77397
  {
77339
77398
  id: "fan.full",
@@ -77341,16 +77400,16 @@ var ACTUATOR_CAP_VOCABULARY = {
77341
77400
  label: t("Fan full", "Ventilatore al massimo"),
77342
77401
  phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
77343
77402
  icon: "fan",
77344
- args: { percentage: 100 }
77403
+ args: { speed: 100 }
77345
77404
  },
77346
77405
  {
77347
77406
  id: "fan.speed",
77348
77407
  method: "setPercentage",
77349
77408
  label: t("Set speed", "Imposta la velocità"),
77350
- phrase: t("Set the speed of {device} to {percentage}", "Imposta la velocità di {device} al {percentage}"),
77409
+ phrase: t("Set the speed of {device} to {speed}", "Imposta la velocità di {device} al {speed}"),
77351
77410
  icon: "fan",
77352
77411
  openArgs: [{
77353
- key: "percentage",
77412
+ key: "speed",
77354
77413
  label: t("Speed", "Velocità"),
77355
77414
  offer: {
77356
77415
  kind: "number",
@@ -77412,7 +77471,7 @@ var ACTUATOR_CAP_VOCABULARY = {
77412
77471
  ],
77413
77472
  state: [{
77414
77473
  kind: "numeric",
77415
- field: "percentage",
77474
+ field: "speed",
77416
77475
  quantity: t("the speed", "la velocità"),
77417
77476
  label: t("Speed", "Velocità"),
77418
77477
  unit: "%",
@@ -78210,7 +78269,7 @@ var APPLIANCE_CAP_VOCABULARY = {
78210
78269
  },
78211
78270
  {
78212
78271
  kind: "numeric",
78213
- field: "progressPercent",
78272
+ field: "progress",
78214
78273
  quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
78215
78274
  label: t("Progress", "Avanzamento"),
78216
78275
  unit: "%",
@@ -78568,10 +78627,10 @@ var APPLIANCE_CAP_VOCABULARY = {
78568
78627
  id: "media.seek",
78569
78628
  method: "seek",
78570
78629
  label: t("Seek", "Vai al punto"),
78571
- phrase: t("Move {device} to {positionMs}", "Porta {device} al punto {positionMs}"),
78630
+ phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
78572
78631
  icon: "fast-forward",
78573
78632
  openArgs: [{
78574
- key: "positionMs",
78633
+ key: "position",
78575
78634
  label: t("Position", "Posizione"),
78576
78635
  offer: {
78577
78636
  kind: "number",
@@ -79620,7 +79679,7 @@ var SENSOR_CAP_VOCABULARY = {
79620
79679
  state: [
79621
79680
  {
79622
79681
  kind: "numeric",
79623
- field: "co2Ppm",
79682
+ field: "co2",
79624
79683
  quantity: t("the CO₂", "la CO₂"),
79625
79684
  label: t("CO₂", "CO₂"),
79626
79685
  unit: "ppm",
@@ -79628,7 +79687,7 @@ var SENSOR_CAP_VOCABULARY = {
79628
79687
  },
79629
79688
  {
79630
79689
  kind: "numeric",
79631
- field: "vocPpb",
79690
+ field: "voc",
79632
79691
  quantity: t("the VOC level", "il livello di COV"),
79633
79692
  label: t("VOC", "COV"),
79634
79693
  unit: "ppb",
@@ -79664,7 +79723,7 @@ var SENSOR_CAP_VOCABULARY = {
79664
79723
  noun: t("Light level", "Luminosità ambiente"),
79665
79724
  state: [{
79666
79725
  kind: "numeric",
79667
- field: "lux",
79726
+ field: "illuminance",
79668
79727
  quantity: t("the light level", "la luminosità"),
79669
79728
  label: t("Illuminance", "Illuminamento"),
79670
79729
  unit: "lx",
@@ -79867,7 +79926,7 @@ var SENSOR_CAP_VOCABULARY = {
79867
79926
  noun: t("Humidity", "Umidità"),
79868
79927
  state: [{
79869
79928
  kind: "numeric",
79870
- field: "percent",
79929
+ field: "humidity",
79871
79930
  quantity: t("the humidity", "l’umidità"),
79872
79931
  label: t("Humidity", "Umidità"),
79873
79932
  unit: "%",
@@ -79915,7 +79974,7 @@ var SENSOR_CAP_VOCABULARY = {
79915
79974
  state: [
79916
79975
  {
79917
79976
  kind: "numeric",
79918
- field: "watts",
79977
+ field: "power",
79919
79978
  quantity: t("the power draw", "il consumo"),
79920
79979
  label: t("Power", "Potenza"),
79921
79980
  unit: "W",
@@ -79923,7 +79982,7 @@ var SENSOR_CAP_VOCABULARY = {
79923
79982
  },
79924
79983
  {
79925
79984
  kind: "numeric",
79926
- field: "kwhTotal",
79985
+ field: "energy",
79927
79986
  quantity: t("the energy used", "l’energia consumata"),
79928
79987
  label: t("Energy", "Energia"),
79929
79988
  unit: "kWh",
@@ -79931,7 +79990,7 @@ var SENSOR_CAP_VOCABULARY = {
79931
79990
  },
79932
79991
  {
79933
79992
  kind: "numeric",
79934
- field: "volts",
79993
+ field: "voltage",
79935
79994
  quantity: t("the voltage", "la tensione"),
79936
79995
  label: t("Voltage", "Tensione"),
79937
79996
  unit: "V",
@@ -79939,7 +79998,7 @@ var SENSOR_CAP_VOCABULARY = {
79939
79998
  },
79940
79999
  {
79941
80000
  kind: "numeric",
79942
- field: "amps",
80001
+ field: "current",
79943
80002
  quantity: t("the current", "la corrente"),
79944
80003
  label: t("Current", "Corrente"),
79945
80004
  unit: "A",
@@ -79956,13 +80015,6 @@ var SENSOR_CAP_VOCABULARY = {
79956
80015
  label: t("Where", "Posizione"),
79957
80016
  phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
79958
80017
  icon: "map-pin"
79959
- }, {
79960
- kind: "numeric",
79961
- field: "batteryPercent",
79962
- quantity: t("the phone battery", "la batteria del telefono"),
79963
- label: t("Battery", "Batteria"),
79964
- unit: "%",
79965
- icon: "battery"
79966
80018
  }]
79967
80019
  },
79968
80020
  "pressure-sensor": {
@@ -79970,7 +80022,7 @@ var SENSOR_CAP_VOCABULARY = {
79970
80022
  noun: t("Pressure", "Pressione"),
79971
80023
  state: [{
79972
80024
  kind: "numeric",
79973
- field: "hpa",
80025
+ field: "pressure",
79974
80026
  quantity: t("the pressure", "la pressione"),
79975
80027
  label: t("Pressure", "Pressione"),
79976
80028
  unit: "hPa",
@@ -80006,7 +80058,7 @@ var SENSOR_CAP_VOCABULARY = {
80006
80058
  noun: t("Temperature", "Temperatura"),
80007
80059
  state: [{
80008
80060
  kind: "numeric",
80009
- field: "celsius",
80061
+ field: "temperature",
80010
80062
  quantity: t("the temperature", "la temperatura"),
80011
80063
  label: t("Temperature", "Temperatura"),
80012
80064
  unit: "°C",
@@ -80077,7 +80129,7 @@ var SENSOR_CAP_VOCABULARY = {
80077
80129
  state: [
80078
80130
  {
80079
80131
  kind: "numeric",
80080
- field: "percentage",
80132
+ field: "level",
80081
80133
  quantity: t("the battery level", "il livello della batteria"),
80082
80134
  label: t("Battery", "Batteria"),
80083
80135
  unit: "%",
@@ -80119,7 +80171,7 @@ var SENSOR_CAP_VOCABULARY = {
80119
80171
  icon: "battery-charging"
80120
80172
  }
80121
80173
  ],
80122
- events: { onStatusChanged: { notOperatorFacing: "the percentage / sleeping / charging state triggers each read one field of this change" } },
80174
+ events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
80123
80175
  extraEvents: [{
80124
80176
  category: EventCategory.DeviceAwake,
80125
80177
  label: t("Woke up", "Risvegliato"),
@@ -80137,7 +80189,7 @@ var SENSOR_CAP_VOCABULARY = {
80137
80189
  noun: t("Network link", "Collegamento di rete"),
80138
80190
  state: [{
80139
80191
  kind: "numeric",
80140
- field: "signalPercent",
80192
+ field: "signal",
80141
80193
  quantity: t("the signal strength", "l’intensità del segnale"),
80142
80194
  label: t("Signal", "Segnale"),
80143
80195
  unit: "%",