@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
@@ -5613,7 +5613,7 @@ var ZodIssueCode = {
5613
5613
  var ZodFirstPartyTypeKind;
5614
5614
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5615
5615
  //#endregion
5616
- //#region ../types/dist/sleep-DFaVPxfm.mjs
5616
+ //#region ../types/dist/sleep-Crlmu_tO.mjs
5617
5617
  /**
5618
5618
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5619
5619
  * window to float samples (D455).
@@ -9100,11 +9100,11 @@ var CAP_NAMES = Object.freeze([
9100
9100
  Object.freeze({
9101
9101
  "air-quality-sensor": [
9102
9102
  {
9103
- "path": "co2Ppm",
9103
+ "path": "co2",
9104
9104
  "valueType": "number"
9105
9105
  },
9106
9106
  {
9107
- "path": "vocPpb",
9107
+ "path": "voc",
9108
9108
  "valueType": "number"
9109
9109
  },
9110
9110
  {
@@ -9154,7 +9154,7 @@ Object.freeze({
9154
9154
  }
9155
9155
  ],
9156
9156
  "ambient-light-sensor": [{
9157
- "path": "lux",
9157
+ "path": "illuminance",
9158
9158
  "valueType": "number"
9159
9159
  }],
9160
9160
  "audio-metrics": [
@@ -9215,7 +9215,7 @@ Object.freeze({
9215
9215
  ],
9216
9216
  "battery": [
9217
9217
  {
9218
- "path": "percentage",
9218
+ "path": "level",
9219
9219
  "valueType": "number"
9220
9220
  },
9221
9221
  {
@@ -9237,7 +9237,7 @@ Object.freeze({
9237
9237
  "valueType": "number"
9238
9238
  },
9239
9239
  {
9240
- "path": "volts",
9240
+ "path": "voltage",
9241
9241
  "valueType": "number"
9242
9242
  },
9243
9243
  {
@@ -9258,7 +9258,7 @@ Object.freeze({
9258
9258
  "valueType": "boolean"
9259
9259
  }],
9260
9260
  "brightness": [{
9261
- "path": "percentage",
9261
+ "path": "level",
9262
9262
  "valueType": "number"
9263
9263
  }],
9264
9264
  "broker": [{
@@ -9459,7 +9459,7 @@ Object.freeze({
9459
9459
  "valueType": "number"
9460
9460
  },
9461
9461
  {
9462
- "path": "mireds",
9462
+ "path": "colorTemperature",
9463
9463
  "valueType": "number"
9464
9464
  }
9465
9465
  ],
@@ -9638,15 +9638,15 @@ Object.freeze({
9638
9638
  "valueType": "string"
9639
9639
  },
9640
9640
  {
9641
- "path": "remainingSeconds",
9641
+ "path": "remaining",
9642
9642
  "valueType": "number"
9643
9643
  },
9644
9644
  {
9645
- "path": "delayedStartSeconds",
9645
+ "path": "delayedStart",
9646
9646
  "valueType": "number"
9647
9647
  },
9648
9648
  {
9649
- "path": "progressPercent",
9649
+ "path": "progress",
9650
9650
  "valueType": "number"
9651
9651
  },
9652
9652
  {
@@ -9760,7 +9760,7 @@ Object.freeze({
9760
9760
  ],
9761
9761
  "fan-control": [
9762
9762
  {
9763
- "path": "percentage",
9763
+ "path": "speed",
9764
9764
  "valueType": "number"
9765
9765
  },
9766
9766
  {
@@ -9860,7 +9860,7 @@ Object.freeze({
9860
9860
  }
9861
9861
  ],
9862
9862
  "humidity-sensor": [{
9863
- "path": "percent",
9863
+ "path": "humidity",
9864
9864
  "valueType": "number"
9865
9865
  }],
9866
9866
  "image": [{
@@ -9970,7 +9970,7 @@ Object.freeze({
9970
9970
  "valueType": "number"
9971
9971
  },
9972
9972
  {
9973
- "path": "progressPercent",
9973
+ "path": "progress",
9974
9974
  "valueType": "number"
9975
9975
  },
9976
9976
  {
@@ -10049,11 +10049,11 @@ Object.freeze({
10049
10049
  "valueType": "string"
10050
10050
  },
10051
10051
  {
10052
- "path": "positionMs",
10052
+ "path": "position",
10053
10053
  "valueType": "number"
10054
10054
  },
10055
10055
  {
10056
- "path": "durationMs",
10056
+ "path": "duration",
10057
10057
  "valueType": "number"
10058
10058
  },
10059
10059
  {
@@ -10155,11 +10155,11 @@ Object.freeze({
10155
10155
  ]
10156
10156
  },
10157
10157
  {
10158
- "path": "signalPercent",
10158
+ "path": "signal",
10159
10159
  "valueType": "number"
10160
10160
  },
10161
10161
  {
10162
- "path": "rssiDbm",
10162
+ "path": "rssi",
10163
10163
  "valueType": "number"
10164
10164
  },
10165
10165
  {
@@ -10290,23 +10290,23 @@ Object.freeze({
10290
10290
  ],
10291
10291
  "power-meter": [
10292
10292
  {
10293
- "path": "watts",
10293
+ "path": "power",
10294
10294
  "valueType": "number"
10295
10295
  },
10296
10296
  {
10297
- "path": "kwhTotal",
10297
+ "path": "energy",
10298
10298
  "valueType": "number"
10299
10299
  },
10300
10300
  {
10301
- "path": "volts",
10301
+ "path": "voltage",
10302
10302
  "valueType": "number"
10303
10303
  },
10304
10304
  {
10305
- "path": "amps",
10305
+ "path": "current",
10306
10306
  "valueType": "number"
10307
10307
  },
10308
10308
  {
10309
- "path": "va",
10309
+ "path": "apparentPower",
10310
10310
  "valueType": "number"
10311
10311
  },
10312
10312
  {
@@ -10334,14 +10334,10 @@ Object.freeze({
10334
10334
  {
10335
10335
  "path": "gps.accuracyMeters",
10336
10336
  "valueType": "number"
10337
- },
10338
- {
10339
- "path": "batteryPercent",
10340
- "valueType": "number"
10341
10337
  }
10342
10338
  ],
10343
10339
  "pressure-sensor": [{
10344
- "path": "hpa",
10340
+ "path": "pressure",
10345
10341
  "valueType": "number"
10346
10342
  }],
10347
10343
  "privacy-mask": [{
@@ -10655,7 +10651,7 @@ Object.freeze({
10655
10651
  "valueType": "boolean"
10656
10652
  }],
10657
10653
  "temperature-sensor": [{
10658
- "path": "celsius",
10654
+ "path": "temperature",
10659
10655
  "valueType": "number"
10660
10656
  }],
10661
10657
  "update": [
@@ -10703,7 +10699,7 @@ Object.freeze({
10703
10699
  "valueType": "string"
10704
10700
  },
10705
10701
  {
10706
- "path": "progressPercent",
10702
+ "path": "progress",
10707
10703
  "valueType": "number"
10708
10704
  },
10709
10705
  {
@@ -11178,7 +11174,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
11178
11174
  return DeviceRole;
11179
11175
  }({});
11180
11176
  //#endregion
11181
- //#region ../types/dist/composition-Bb8iwHEJ.mjs
11177
+ //#region ../types/dist/composition-DwA0uVW5.mjs
11182
11178
  /**
11183
11179
  * The ffmpeg build every CamStack node downloads, per platform and arch.
11184
11180
  *
@@ -18843,7 +18839,7 @@ var CompositionEventPlanSchema = object({
18843
18839
  stateField: string(),
18844
18840
  fieldKey: string()
18845
18841
  });
18846
- /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.celsius`. */
18842
+ /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.temperature`. */
18847
18843
  var CompositionProblemSchema = object({
18848
18844
  code: _enum([
18849
18845
  "reserved-variant",
@@ -19125,12 +19121,13 @@ var CHANGED = {
19125
19121
  expr: "now"
19126
19122
  };
19127
19123
  function numeric(input) {
19124
+ const { alsoFrom, ...base } = input;
19128
19125
  return {
19129
- ...input,
19126
+ ...base,
19130
19127
  family: "numeric",
19131
19128
  deviceType: DeviceType.Sensor,
19132
19129
  memberDeviceType: DeviceType.Sensor,
19133
- memberDeviceTypes: [DeviceType.Sensor],
19130
+ memberDeviceTypes: [DeviceType.Sensor, ...alsoFrom?.deviceTypes ?? []],
19134
19131
  activeWhen: void 0,
19135
19132
  commandCaps: [],
19136
19133
  baseUnit: baseUnitOf(input.quantity),
@@ -19138,9 +19135,10 @@ function numeric(input) {
19138
19135
  accept: [{
19139
19136
  cap: input.outputCap,
19140
19137
  fieldPath: input.outputField
19141
- }]
19138
+ }, ...alsoFrom === void 0 ? [] : [alsoFrom.accept]]
19142
19139
  };
19143
19140
  }
19141
+ var CLIMATE_DEVICES = [DeviceType.Thermostat, DeviceType.Climate];
19144
19142
  function binary(input) {
19145
19143
  return {
19146
19144
  ...input,
@@ -19162,29 +19160,43 @@ var GROUP_TEMPLATES = [
19162
19160
  summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
19163
19161
  role: DeviceRole.TemperatureSensor,
19164
19162
  outputCap: "temperature-sensor",
19165
- outputField: "celsius",
19163
+ outputField: "temperature",
19166
19164
  quantity: "temperature",
19167
19165
  defaultAggregate: "mean",
19168
19166
  empty: "null",
19169
- companions: [NOW$2]
19167
+ companions: [NOW$2],
19168
+ alsoFrom: {
19169
+ deviceTypes: CLIMATE_DEVICES,
19170
+ accept: {
19171
+ cap: "climate-control",
19172
+ fieldPath: "currentTemp"
19173
+ }
19174
+ }
19170
19175
  }),
19171
19176
  numeric({
19172
19177
  id: "humidity",
19173
19178
  summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
19174
19179
  role: DeviceRole.HumiditySensor,
19175
19180
  outputCap: "humidity-sensor",
19176
- outputField: "percent",
19181
+ outputField: "humidity",
19177
19182
  quantity: "humidity",
19178
19183
  defaultAggregate: "mean",
19179
19184
  empty: "null",
19180
- companions: [NOW$2]
19185
+ companions: [NOW$2],
19186
+ alsoFrom: {
19187
+ deviceTypes: CLIMATE_DEVICES,
19188
+ accept: {
19189
+ cap: "climate-control",
19190
+ fieldPath: "currentHumidity"
19191
+ }
19192
+ }
19181
19193
  }),
19182
19194
  numeric({
19183
19195
  id: "pressure",
19184
19196
  summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
19185
19197
  role: DeviceRole.PressureSensor,
19186
19198
  outputCap: "pressure-sensor",
19187
- outputField: "hpa",
19199
+ outputField: "pressure",
19188
19200
  quantity: "pressure",
19189
19201
  defaultAggregate: "mean",
19190
19202
  empty: "null",
@@ -19195,7 +19207,7 @@ var GROUP_TEMPLATES = [
19195
19207
  summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
19196
19208
  role: DeviceRole.AmbientLightSensor,
19197
19209
  outputCap: "ambient-light-sensor",
19198
- outputField: "lux",
19210
+ outputField: "illuminance",
19199
19211
  quantity: "illuminance",
19200
19212
  defaultAggregate: "mean",
19201
19213
  empty: "null",
@@ -19206,7 +19218,7 @@ var GROUP_TEMPLATES = [
19206
19218
  summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
19207
19219
  role: DeviceRole.PowerSensor,
19208
19220
  outputCap: "power-meter",
19209
- outputField: "watts",
19221
+ outputField: "power",
19210
19222
  quantity: "power",
19211
19223
  defaultAggregate: "sum",
19212
19224
  empty: "omit",
@@ -19217,7 +19229,7 @@ var GROUP_TEMPLATES = [
19217
19229
  summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
19218
19230
  role: DeviceRole.EnergySensor,
19219
19231
  outputCap: "power-meter",
19220
- outputField: "kwhTotal",
19232
+ outputField: "energy",
19221
19233
  quantity: "energy",
19222
19234
  defaultAggregate: "sum",
19223
19235
  empty: "omit",
@@ -19228,7 +19240,7 @@ var GROUP_TEMPLATES = [
19228
19240
  summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
19229
19241
  role: DeviceRole.BatterySensor,
19230
19242
  outputCap: "battery",
19231
- outputField: "percentage",
19243
+ outputField: "level",
19232
19244
  quantity: "percentage",
19233
19245
  defaultAggregate: "mean",
19234
19246
  empty: "null",
@@ -44683,6 +44695,43 @@ var NotificationActionSchema = object({
44683
44695
  */
44684
44696
  mode: _enum(["navigate", "background"]).optional()
44685
44697
  });
44698
+ /** A delivery parameter value: what a notifier declared it takes. */
44699
+ var DeliveryParamValueSchema = union([
44700
+ string(),
44701
+ number(),
44702
+ boolean()
44703
+ ]);
44704
+ /**
44705
+ * One extra delivery parameter a notifier KIND declares (D938). A rule that
44706
+ * addresses a target of that kind may set it; a kind that declares nothing is
44707
+ * never handed one. The admin UI derives its control from this descriptor —
44708
+ * no editor knows a service by name.
44709
+ *
44710
+ * Optional fields are `.optional()`, never `.default()` (a Zod default does not
44711
+ * run on the addon cap path).
44712
+ */
44713
+ var DeliveryParamSchema = object({
44714
+ key: string().min(1),
44715
+ label: string(),
44716
+ /** i18n key of the label, resolved by the declaring addon's namespace. */
44717
+ labelKey: string().optional(),
44718
+ type: _enum([
44719
+ "enum",
44720
+ "number",
44721
+ "boolean",
44722
+ "string"
44723
+ ]),
44724
+ /** `enum` only: the closed set of accepted values. */
44725
+ options: array(object({
44726
+ value: string(),
44727
+ label: string()
44728
+ })).optional(),
44729
+ /** `number` only. */
44730
+ min: number().optional(),
44731
+ max: number().optional(),
44732
+ /** What the notifier does when the rule sets nothing; shown as the placeholder. */
44733
+ default: DeliveryParamValueSchema.optional()
44734
+ });
44686
44735
  /**
44687
44736
  * The canonical notification. `body` is the only hard field (Apprise model).
44688
44737
  * `priority` is a 5-level ORDINAL (1=lowest … 3=normal(default) … 5=urgent),
@@ -44705,7 +44754,13 @@ var NotificationSchema = object({
44705
44754
  tag: string().optional(),
44706
44755
  deviceId: number().optional(),
44707
44756
  eventId: string().optional(),
44708
- metadata: record(string(), unknown()).optional()
44757
+ metadata: record(string(), unknown()).optional(),
44758
+ /**
44759
+ * Values for the parameters the target's kind DECLARES in
44760
+ * {@link TargetKindSchema} `deliveryParams`. Already validated against the
44761
+ * declaration by the sender; a notifier reads only the keys it declared.
44762
+ */
44763
+ delivery: record(string(), DeliveryParamValueSchema).optional()
44709
44764
  });
44710
44765
  /** One declared native severity/priority level for a kind. */
44711
44766
  var TargetKindLevelSchema = object({
@@ -44811,6 +44866,11 @@ var TargetKindSchema = object({
44811
44866
  */
44812
44867
  destinationKeys: array(string()).optional(),
44813
44868
  supportsDiscovery: boolean(),
44869
+ /**
44870
+ * Extra delivery parameters a rule may set for a target of this kind (D938).
44871
+ * Absent = none; the rule editor then offers nothing.
44872
+ */
44873
+ deliveryParams: array(DeliveryParamSchema).optional(),
44814
44874
  caps: TargetKindCapsSchema
44815
44875
  });
44816
44876
  /**
@@ -56981,7 +57041,9 @@ var ManifestShapeSchema = object({
56981
57041
  icon: string().optional()
56982
57042
  }).optional(),
56983
57043
  protected: boolean().optional(),
56984
- removable: boolean().optional()
57044
+ removable: boolean().optional(),
57045
+ /** Declared Integrations-page block (mirror of `AddonDeclaration.integrationSection`). */
57046
+ integrationSection: _enum(["system", "providers"]).optional()
56985
57047
  });
56986
57048
  var AddonProcessSchema = object({
56987
57049
  pid: number().optional(),
@@ -57346,9 +57408,9 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
57346
57408
  }), LogStreamEntrySchema, { kind: "subscription" });
57347
57409
  object({
57348
57410
  /** Carbon dioxide concentration in ppm. */
57349
- co2Ppm: number().min(0).optional().meta(readingMeta("concentration-volume")),
57411
+ co2: number().min(0).optional().meta(readingMeta("concentration-volume")),
57350
57412
  /** Total volatile organic compounds in ppb. */
57351
- vocPpb: number().min(0).optional().meta(readingMeta("concentration-ppb")),
57413
+ voc: number().min(0).optional().meta(readingMeta("concentration-ppb")),
57352
57414
  /** Particulate matter ≤ 2.5 μm in µg/m³. */
57353
57415
  pm25: number().min(0).optional().meta(readingMeta("concentration-mass")),
57354
57416
  /** Particulate matter ≤ 10 μm in µg/m³. */
@@ -57361,7 +57423,7 @@ object({
57361
57423
  DeviceType.Sensor;
57362
57424
  object({
57363
57425
  /** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
57364
- lux: number().min(0).nullable().meta(readingMeta("illuminance", {
57426
+ illuminance: number().min(0).nullable().meta(readingMeta("illuminance", {
57365
57427
  precision: 0,
57366
57428
  label: "Illuminance"
57367
57429
  })),
@@ -57589,7 +57651,7 @@ var BatteryStatusSchema = object({
57589
57651
  * Consumers must SKIP a null rather than coerce it — `battery-band` already
57590
57652
  * declines to band a non-finite reading, which is the correct shape.
57591
57653
  */
57592
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
57654
+ level: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
57593
57655
  /**
57594
57656
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
57595
57657
  * Reolink-specific for the Solar Panel 2 accessory (will become
@@ -57599,7 +57661,7 @@ var BatteryStatusSchema = object({
57599
57661
  * `'unknown'` is the absence of an answer: the provider has not read the
57600
57662
  * power fields yet, or the firmware reported neither. Before it existed,
57601
57663
  * two unreadable fields produced `'none'`, and a camera nobody had reached
57602
- * was drawn "on battery alone" — the same D315 defect `percentage` closed
57664
+ * was drawn "on battery alone" — the same D315 defect `level` closed
57603
57665
  * by going nullable. Consumers SKIP it (no charger state published, no
57604
57666
  * glyph, no HomeKit ChargingState) rather than coerce it either way.
57605
57667
  */
@@ -57623,7 +57685,7 @@ var BatteryStatusSchema = object({
57623
57685
  * that only report charge. A second reading on this cap, not a second
57624
57686
  * `numeric-sensor` on the same device.
57625
57687
  */
57626
- volts: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
57688
+ voltage: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
57627
57689
  /**
57628
57690
  * Ms epoch of the last time the device PROVED it was reachable — a
57629
57691
  * completed firmware round-trip, an observed wake, or an inbound push
@@ -57657,7 +57719,7 @@ var BatteryStatusSchema = object({
57657
57719
  /**
57658
57720
  * True when the source is a BINARY low-battery indicator (HA
57659
57721
  * `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
57660
- * charge level — `percentage` is then a coarse stand-in (100 = normal,
57722
+ * charge level — `level` is then a coarse stand-in (100 = normal,
57661
57723
  * sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
57662
57724
  * misleading exact percentage. Absent/false → genuine 0–100 % reading.
57663
57725
  */
@@ -57683,19 +57745,19 @@ object({
57683
57745
  DeviceType.Sensor;
57684
57746
  object({
57685
57747
  /** Current level as 0..100 inclusive. Firmware-reported. */
57686
- percentage: number().min(0).max(100).meta(readingMeta("percentage")),
57748
+ level: number().min(0).max(100).meta(readingMeta("percentage")),
57687
57749
  /** Ms epoch of the last operator-driven change. Useful for UI freshness. */
57688
57750
  lastChangedAt: number()
57689
57751
  });
57690
57752
  DeviceType.Light, method(object({
57691
57753
  deviceId: number().int().nonnegative(),
57692
- percentage: number().min(0).max(100)
57754
+ level: number().min(0).max(100)
57693
57755
  }), _void(), {
57694
57756
  kind: "mutation",
57695
57757
  auth: "protected"
57696
57758
  }), object({
57697
57759
  deviceId: number(),
57698
- percentage: number().min(0).max(100),
57760
+ level: number().min(0).max(100),
57699
57761
  lastChangedAt: number()
57700
57762
  });
57701
57763
  DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
@@ -58196,11 +58258,11 @@ var ColorInputSchema = discriminatedUnion("mode", [
58196
58258
  }),
58197
58259
  object({
58198
58260
  mode: literal("mired"),
58199
- mireds: number().int().min(50).max(1e3)
58261
+ colorTemperature: number().int().min(50).max(1e3)
58200
58262
  })
58201
58263
  ]);
58202
58264
  object({
58203
- /** Active color mode — which of `rgb` / `hsv` / `mireds` reflects
58265
+ /** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
58204
58266
  * the bulb's current state. */
58205
58267
  mode: _enum([
58206
58268
  "rgb",
@@ -58212,7 +58274,7 @@ object({
58212
58274
  /** Populated when `mode === 'hsv'`. */
58213
58275
  hsv: HsvTripletSchema.optional(),
58214
58276
  /** Populated when `mode === 'mired'`. */
58215
- mireds: number().int().optional().meta(readingMeta("colour-temperature")),
58277
+ colorTemperature: number().int().optional().meta(readingMeta("colour-temperature")),
58216
58278
  /** Ms epoch of the last operator-driven change. */
58217
58279
  lastChangedAt: number()
58218
58280
  });
@@ -58231,7 +58293,7 @@ DeviceType.Light, method(object({
58231
58293
  ]),
58232
58294
  rgb: RgbTripletSchema.optional(),
58233
58295
  hsv: HsvTripletSchema.optional(),
58234
- mireds: number().int().optional(),
58296
+ colorTemperature: number().int().optional(),
58235
58297
  lastChangedAt: number()
58236
58298
  });
58237
58299
  var ConnectionTestOutcomeSchema = discriminatedUnion("outcome", [
@@ -58657,11 +58719,11 @@ object({
58657
58719
  /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
58658
58720
  availablePrograms: array(string()),
58659
58721
  /** Seconds remaining on the active cycle, or null when not running / not known. */
58660
- remainingSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58722
+ remaining: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58661
58723
  /** Seconds the delayed start is set to (time until the cycle starts), or null. */
58662
- delayedStartSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58724
+ delayedStart: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58663
58725
  /** Cycle completion 0..100, or null when not applicable. */
58664
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58726
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58665
58727
  /** True when the door is reported open; null when the door state is not known. */
58666
58728
  doorOpen: boolean().nullable(),
58667
58729
  /** True when the door is latched (locked) during a cycle; null when not reported. */
@@ -59279,7 +59341,7 @@ var FanDirectionSchema = _enum(["forward", "reverse"]);
59279
59341
  object({
59280
59342
  /** Active speed as 0..100 inclusive. Null when the device has no
59281
59343
  * speed surface (single-speed fan). */
59282
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59344
+ speed: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59283
59345
  /** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
59284
59346
  * a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
59285
59347
  percentageStep: number().positive().optional().meta(readingMeta("percentage")),
@@ -59299,7 +59361,7 @@ object({
59299
59361
  });
59300
59362
  DeviceType.Fan, method(object({
59301
59363
  deviceId: number().int().nonnegative(),
59302
- percentage: number().min(0).max(100)
59364
+ speed: number().min(0).max(100)
59303
59365
  }), _void(), {
59304
59366
  kind: "mutation",
59305
59367
  auth: "protected"
@@ -59482,7 +59544,7 @@ DeviceType.Humidifier, method(object({
59482
59544
  });
59483
59545
  object({
59484
59546
  /** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
59485
- percent: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
59547
+ humidity: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
59486
59548
  precision: 0,
59487
59549
  label: "Humidity"
59488
59550
  })),
@@ -59925,7 +59987,7 @@ object({
59925
59987
  batteryLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59926
59988
  /** 0..100 mowing-completion percentage of the current task, or null when no
59927
59989
  * task is active / progress is unavailable. */
59928
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59990
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59929
59991
  /** Current device/event code (dynamic — mostly status, sometimes an error),
59930
59992
  * or null when unknown. */
59931
59993
  currentCode: number().nullable().meta(readingMeta("none")),
@@ -60415,10 +60477,10 @@ object({
60415
60477
  currentMedia: MediaInfoSchema.nullable(),
60416
60478
  /** Current playback position in ms. Null when not seekable or
60417
60479
  * nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
60418
- positionMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60480
+ position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60419
60481
  /** Total duration of the current media in ms. Null when unknown
60420
60482
  * (live stream) or nothing is playing. */
60421
- durationMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60483
+ duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60422
60484
  /** Shuffle toggle. Null when no shuffle surface.
60423
60485
  * Pair with `DeviceFeature.MediaPlayerShuffle`. */
60424
60486
  shuffle: boolean().nullable(),
@@ -60445,7 +60507,7 @@ DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }
60445
60507
  auth: "protected"
60446
60508
  }), method(object({
60447
60509
  deviceId: number().int().nonnegative(),
60448
- positionMs: number().int().nonnegative()
60510
+ position: number().int().nonnegative()
60449
60511
  }), _void(), {
60450
60512
  kind: "mutation",
60451
60513
  auth: "protected"
@@ -61118,9 +61180,9 @@ var NetworkLinkStatusSchema = object({
61118
61180
  * one whose reading has not landed must not be drawn at 0 %. Consumers
61119
61181
  * SKIP a null rather than coerce it.
61120
61182
  */
61121
- signalPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61183
+ signal: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61122
61184
  /** Raw received signal strength in dBm, when the firmware reports one. */
61123
- rssiDbm: number().optional().meta(readingMeta("signal-level")),
61185
+ rssi: number().optional().meta(readingMeta("signal-level")),
61124
61186
  /** Network name of a wireless link, when the firmware reports it. */
61125
61187
  ssid: string().optional(),
61126
61188
  /** Ms epoch of the last observation. Lets consumers reason about freshness. */
@@ -62270,16 +62332,16 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
62270
62332
  auth: "admin"
62271
62333
  });
62272
62334
  object({
62273
- /** Instantaneous power draw in watts. */
62274
- watts: number().optional().meta(readingMeta("power", { label: "Power" })),
62335
+ /** Instantaneous power draw (watts). */
62336
+ power: number().optional().meta(readingMeta("power", { label: "Power" })),
62275
62337
  /** Cumulative energy in kilowatt-hours since the meter was reset. */
62276
- kwhTotal: number().optional().meta(readingMeta("energy", { label: "Energy" })),
62277
- /** Voltage in volts. */
62278
- volts: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
62338
+ energy: number().optional().meta(readingMeta("energy", { label: "Energy" })),
62339
+ /** Voltage (volts). */
62340
+ voltage: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
62279
62341
  /** Current in amperes. */
62280
- amps: number().optional().meta(readingMeta("current", { label: "Current" })),
62342
+ current: number().optional().meta(readingMeta("current", { label: "Current" })),
62281
62343
  /** Apparent power in volt-amperes. */
62282
- va: number().optional().meta(readingMeta("apparent-power")),
62344
+ apparentPower: number().optional().meta(readingMeta("apparent-power")),
62283
62345
  /** Power factor (0..1) if reported. */
62284
62346
  powerFactor: number().min(0).max(1).optional().meta(readingMeta("ratio")),
62285
62347
  /** Ms epoch when the slice was last updated. */
@@ -62334,16 +62396,13 @@ object({
62334
62396
  location: string().nullable(),
62335
62397
  /** GPS coordinates when available. Null otherwise. */
62336
62398
  gps: GpsLocationSchema.nullable(),
62337
- /** Optional battery level of the tracking device (0..100). Null
62338
- * when not reported. */
62339
- batteryPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
62340
62399
  /** Ms epoch when the slice was last updated. */
62341
62400
  lastChangedAt: number()
62342
62401
  });
62343
62402
  DeviceType.Presence;
62344
62403
  object({
62345
62404
  /** Current pressure in hPa. `null` when the sample was refused (D393). */
62346
- hpa: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
62405
+ pressure: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
62347
62406
  /** Ms epoch when the slice was last updated. */
62348
62407
  lastFetchedAt: number()
62349
62408
  });
@@ -65346,7 +65405,7 @@ object({
65346
65405
  DeviceType.Sensor;
65347
65406
  object({
65348
65407
  /** Current temperature in Celsius. `null` when the sample was refused (D393). */
65349
- celsius: number().nullable().meta(readingMeta("temperature", {
65408
+ temperature: number().nullable().meta(readingMeta("temperature", {
65350
65409
  precision: 1,
65351
65410
  label: "Temperature"
65352
65411
  })),
@@ -65610,7 +65669,7 @@ object({
65610
65669
  /** Speed tokens the hardware accepts — drives the UI selector. */
65611
65670
  availableFanSpeeds: array(string()),
65612
65671
  /** 0..100 cleaning-completion percentage of the current task, or null. */
65613
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65672
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65614
65673
  /** Current error code (0 / null = no error). */
65615
65674
  errorCode: number().nullable().meta(readingMeta("none")),
65616
65675
  /** Human label for {@link errorCode}, or null when none / undecodable. */
@@ -76682,7 +76741,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76682
76741
  label: t("Full brightness", "Luminosità massima"),
76683
76742
  phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
76684
76743
  icon: "sun",
76685
- args: { percentage: 100 }
76744
+ args: { level: 100 }
76686
76745
  },
76687
76746
  {
76688
76747
  id: "brightness.half",
@@ -76690,7 +76749,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76690
76749
  label: t("Half brightness", "Luminosità a metà"),
76691
76750
  phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
76692
76751
  icon: "sun-dim",
76693
- args: { percentage: 50 }
76752
+ args: { level: 50 }
76694
76753
  },
76695
76754
  {
76696
76755
  id: "brightness.off",
@@ -76698,16 +76757,16 @@ var ACTUATOR_CAP_VOCABULARY = {
76698
76757
  label: t("Brightness off", "Luminosità a zero"),
76699
76758
  phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
76700
76759
  icon: "lightbulb-off",
76701
- args: { percentage: 0 }
76760
+ args: { level: 0 }
76702
76761
  },
76703
76762
  {
76704
76763
  id: "brightness.set",
76705
76764
  method: "setBrightness",
76706
76765
  label: t("Set brightness", "Imposta la luminosità"),
76707
- phrase: t("Set the brightness of {device} to {percentage}", "Imposta la luminosità di {device} a {percentage}"),
76766
+ phrase: t("Set the brightness of {device} to {level}", "Imposta la luminosità di {device} a {level}"),
76708
76767
  icon: "sun-medium",
76709
76768
  openArgs: [{
76710
- key: "percentage",
76769
+ key: "level",
76711
76770
  label: PERCENT,
76712
76771
  offer: {
76713
76772
  kind: "number",
@@ -76721,13 +76780,13 @@ var ACTUATOR_CAP_VOCABULARY = {
76721
76780
  ],
76722
76781
  state: [{
76723
76782
  kind: "numeric",
76724
- field: "percentage",
76783
+ field: "level",
76725
76784
  quantity: t("the brightness", "la luminosità"),
76726
76785
  label: t("Brightness", "Luminosità"),
76727
76786
  unit: "%",
76728
76787
  icon: "sun"
76729
76788
  }],
76730
- events: { onBrightnessChanged: { notOperatorFacing: "the `percentage` state trigger reads the same change" } }
76789
+ events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
76731
76790
  },
76732
76791
  color: {
76733
76792
  scope: "device",
@@ -76741,7 +76800,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76741
76800
  icon: "sun",
76742
76801
  args: { color: {
76743
76802
  mode: "mired",
76744
- mireds: 370
76803
+ colorTemperature: 370
76745
76804
  } }
76746
76805
  },
76747
76806
  {
@@ -76752,7 +76811,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76752
76811
  icon: "snowflake",
76753
76812
  args: { color: {
76754
76813
  mode: "mired",
76755
- mireds: 200
76814
+ colorTemperature: 200
76756
76815
  } }
76757
76816
  },
76758
76817
  {
@@ -77366,7 +77425,7 @@ var ACTUATOR_CAP_VOCABULARY = {
77366
77425
  label: t("Fan off", "Ventilatore spento"),
77367
77426
  phrase: t("Stop {device}", "Ferma {device}"),
77368
77427
  icon: "power-off",
77369
- args: { percentage: 0 }
77428
+ args: { speed: 0 }
77370
77429
  },
77371
77430
  {
77372
77431
  id: "fan.full",
@@ -77374,16 +77433,16 @@ var ACTUATOR_CAP_VOCABULARY = {
77374
77433
  label: t("Fan full", "Ventilatore al massimo"),
77375
77434
  phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
77376
77435
  icon: "fan",
77377
- args: { percentage: 100 }
77436
+ args: { speed: 100 }
77378
77437
  },
77379
77438
  {
77380
77439
  id: "fan.speed",
77381
77440
  method: "setPercentage",
77382
77441
  label: t("Set speed", "Imposta la velocità"),
77383
- phrase: t("Set the speed of {device} to {percentage}", "Imposta la velocità di {device} al {percentage}"),
77442
+ phrase: t("Set the speed of {device} to {speed}", "Imposta la velocità di {device} al {speed}"),
77384
77443
  icon: "fan",
77385
77444
  openArgs: [{
77386
- key: "percentage",
77445
+ key: "speed",
77387
77446
  label: t("Speed", "Velocità"),
77388
77447
  offer: {
77389
77448
  kind: "number",
@@ -77445,7 +77504,7 @@ var ACTUATOR_CAP_VOCABULARY = {
77445
77504
  ],
77446
77505
  state: [{
77447
77506
  kind: "numeric",
77448
- field: "percentage",
77507
+ field: "speed",
77449
77508
  quantity: t("the speed", "la velocità"),
77450
77509
  label: t("Speed", "Velocità"),
77451
77510
  unit: "%",
@@ -78243,7 +78302,7 @@ var APPLIANCE_CAP_VOCABULARY = {
78243
78302
  },
78244
78303
  {
78245
78304
  kind: "numeric",
78246
- field: "progressPercent",
78305
+ field: "progress",
78247
78306
  quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
78248
78307
  label: t("Progress", "Avanzamento"),
78249
78308
  unit: "%",
@@ -78601,10 +78660,10 @@ var APPLIANCE_CAP_VOCABULARY = {
78601
78660
  id: "media.seek",
78602
78661
  method: "seek",
78603
78662
  label: t("Seek", "Vai al punto"),
78604
- phrase: t("Move {device} to {positionMs}", "Porta {device} al punto {positionMs}"),
78663
+ phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
78605
78664
  icon: "fast-forward",
78606
78665
  openArgs: [{
78607
- key: "positionMs",
78666
+ key: "position",
78608
78667
  label: t("Position", "Posizione"),
78609
78668
  offer: {
78610
78669
  kind: "number",
@@ -79653,7 +79712,7 @@ var SENSOR_CAP_VOCABULARY = {
79653
79712
  state: [
79654
79713
  {
79655
79714
  kind: "numeric",
79656
- field: "co2Ppm",
79715
+ field: "co2",
79657
79716
  quantity: t("the CO₂", "la CO₂"),
79658
79717
  label: t("CO₂", "CO₂"),
79659
79718
  unit: "ppm",
@@ -79661,7 +79720,7 @@ var SENSOR_CAP_VOCABULARY = {
79661
79720
  },
79662
79721
  {
79663
79722
  kind: "numeric",
79664
- field: "vocPpb",
79723
+ field: "voc",
79665
79724
  quantity: t("the VOC level", "il livello di COV"),
79666
79725
  label: t("VOC", "COV"),
79667
79726
  unit: "ppb",
@@ -79697,7 +79756,7 @@ var SENSOR_CAP_VOCABULARY = {
79697
79756
  noun: t("Light level", "Luminosità ambiente"),
79698
79757
  state: [{
79699
79758
  kind: "numeric",
79700
- field: "lux",
79759
+ field: "illuminance",
79701
79760
  quantity: t("the light level", "la luminosità"),
79702
79761
  label: t("Illuminance", "Illuminamento"),
79703
79762
  unit: "lx",
@@ -79900,7 +79959,7 @@ var SENSOR_CAP_VOCABULARY = {
79900
79959
  noun: t("Humidity", "Umidità"),
79901
79960
  state: [{
79902
79961
  kind: "numeric",
79903
- field: "percent",
79962
+ field: "humidity",
79904
79963
  quantity: t("the humidity", "l’umidità"),
79905
79964
  label: t("Humidity", "Umidità"),
79906
79965
  unit: "%",
@@ -79948,7 +80007,7 @@ var SENSOR_CAP_VOCABULARY = {
79948
80007
  state: [
79949
80008
  {
79950
80009
  kind: "numeric",
79951
- field: "watts",
80010
+ field: "power",
79952
80011
  quantity: t("the power draw", "il consumo"),
79953
80012
  label: t("Power", "Potenza"),
79954
80013
  unit: "W",
@@ -79956,7 +80015,7 @@ var SENSOR_CAP_VOCABULARY = {
79956
80015
  },
79957
80016
  {
79958
80017
  kind: "numeric",
79959
- field: "kwhTotal",
80018
+ field: "energy",
79960
80019
  quantity: t("the energy used", "l’energia consumata"),
79961
80020
  label: t("Energy", "Energia"),
79962
80021
  unit: "kWh",
@@ -79964,7 +80023,7 @@ var SENSOR_CAP_VOCABULARY = {
79964
80023
  },
79965
80024
  {
79966
80025
  kind: "numeric",
79967
- field: "volts",
80026
+ field: "voltage",
79968
80027
  quantity: t("the voltage", "la tensione"),
79969
80028
  label: t("Voltage", "Tensione"),
79970
80029
  unit: "V",
@@ -79972,7 +80031,7 @@ var SENSOR_CAP_VOCABULARY = {
79972
80031
  },
79973
80032
  {
79974
80033
  kind: "numeric",
79975
- field: "amps",
80034
+ field: "current",
79976
80035
  quantity: t("the current", "la corrente"),
79977
80036
  label: t("Current", "Corrente"),
79978
80037
  unit: "A",
@@ -79989,13 +80048,6 @@ var SENSOR_CAP_VOCABULARY = {
79989
80048
  label: t("Where", "Posizione"),
79990
80049
  phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
79991
80050
  icon: "map-pin"
79992
- }, {
79993
- kind: "numeric",
79994
- field: "batteryPercent",
79995
- quantity: t("the phone battery", "la batteria del telefono"),
79996
- label: t("Battery", "Batteria"),
79997
- unit: "%",
79998
- icon: "battery"
79999
80051
  }]
80000
80052
  },
80001
80053
  "pressure-sensor": {
@@ -80003,7 +80055,7 @@ var SENSOR_CAP_VOCABULARY = {
80003
80055
  noun: t("Pressure", "Pressione"),
80004
80056
  state: [{
80005
80057
  kind: "numeric",
80006
- field: "hpa",
80058
+ field: "pressure",
80007
80059
  quantity: t("the pressure", "la pressione"),
80008
80060
  label: t("Pressure", "Pressione"),
80009
80061
  unit: "hPa",
@@ -80039,7 +80091,7 @@ var SENSOR_CAP_VOCABULARY = {
80039
80091
  noun: t("Temperature", "Temperatura"),
80040
80092
  state: [{
80041
80093
  kind: "numeric",
80042
- field: "celsius",
80094
+ field: "temperature",
80043
80095
  quantity: t("the temperature", "la temperatura"),
80044
80096
  label: t("Temperature", "Temperatura"),
80045
80097
  unit: "°C",
@@ -80110,7 +80162,7 @@ var SENSOR_CAP_VOCABULARY = {
80110
80162
  state: [
80111
80163
  {
80112
80164
  kind: "numeric",
80113
- field: "percentage",
80165
+ field: "level",
80114
80166
  quantity: t("the battery level", "il livello della batteria"),
80115
80167
  label: t("Battery", "Batteria"),
80116
80168
  unit: "%",
@@ -80152,7 +80204,7 @@ var SENSOR_CAP_VOCABULARY = {
80152
80204
  icon: "battery-charging"
80153
80205
  }
80154
80206
  ],
80155
- events: { onStatusChanged: { notOperatorFacing: "the percentage / sleeping / charging state triggers each read one field of this change" } },
80207
+ events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
80156
80208
  extraEvents: [{
80157
80209
  category: EventCategory.DeviceAwake,
80158
80210
  label: t("Woke up", "Risvegliato"),
@@ -80170,7 +80222,7 @@ var SENSOR_CAP_VOCABULARY = {
80170
80222
  noun: t("Network link", "Collegamento di rete"),
80171
80223
  state: [{
80172
80224
  kind: "numeric",
80173
- field: "signalPercent",
80225
+ field: "signal",
80174
80226
  quantity: t("the signal strength", "l’intensità del segnale"),
80175
80227
  label: t("Signal", "Segnale"),
80176
80228
  unit: "%",