@camstack/addon-training 0.1.98 → 0.1.100

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 (21) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/{MotionZonesSettings-CY7KH2hI.mjs → MotionZonesSettings-DBC9oNEy.mjs} +2 -2
  3. package/dist/{PrivacyMaskSettings-DV1svTCi.mjs → PrivacyMaskSettings-MPmxoEGa.mjs} +2 -2
  4. package/dist/{SceneMonitorEditor-DgLi7gqv.mjs → SceneMonitorEditor-q8rm9EAO.mjs} +2 -2
  5. package/dist/_stub.js +924 -918
  6. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-BvCLzm-x.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-BLf4IX1e.mjs} +3 -3
  7. package/dist/{_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-C-7qylfi.mjs → _virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-4mdhpGoW.mjs} +1 -1
  8. package/dist/{dist-DGkGciMs.mjs → dist-5otxE_9_.mjs} +126 -119
  9. package/dist/{dist-e6MHQz3v.js → dist-BHRYlf1o.js} +126 -119
  10. package/dist/{hostInit-Cg67dw8H.mjs → hostInit-B98SkU6O.mjs} +2 -2
  11. package/dist/index.js +1 -1
  12. package/dist/orchestrator/training.addon.js +1 -1
  13. package/dist/orchestrator/training.addon.mjs +1 -1
  14. package/dist/{player-overlays-BWU5_rIA.mjs → player-overlays-aX4eEmgd.mjs} +1 -1
  15. package/dist/providers/modal/training-modal.addon.js +1 -1
  16. package/dist/providers/modal/training-modal.addon.mjs +1 -1
  17. package/dist/remoteEntry.js +1 -1
  18. package/dist/{responsive-DjL0yeaY.mjs → responsive-D9ViDal5.mjs} +1 -1
  19. package/dist/{scene-monitor-copy-CgXdiyRs.mjs → scene-monitor-copy-B7FtvYkD.mjs} +1 -1
  20. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-rl5UntyG.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-4OWl-Jop.mjs} +1 -1
  21. package/package.json +1 -1
@@ -32,7 +32,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
32
32
  }) : target, mod));
33
33
  var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
34
34
  require("node:crypto");
35
- //#region ../types/dist/event-category-hdMR7CTW.mjs
35
+ //#region ../types/dist/event-category-DmZDPDf_.mjs
36
36
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
37
37
  EventCategory["SystemBoot"] = "system.boot";
38
38
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -659,7 +659,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
659
659
  * (a track was promoted to a stationary-registry entry) or departs (the
660
660
  * object moved / was removed). Telemetry (D8): lossy, drives a UI refresh of
661
661
  * the dedicated "Stationary" section — never the live event feed. Payload:
662
- * `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp }`.
662
+ * `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp, observedAt, zones }`.
663
663
  */
664
664
  EventCategory["PipelineAnalyticsStationaryChanged"] = "pipeline-analytics.stationary-changed";
665
665
  /**
@@ -5613,7 +5613,7 @@ var ZodIssueCode = {
5613
5613
  var ZodFirstPartyTypeKind;
5614
5614
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5615
5615
  //#endregion
5616
- //#region ../types/dist/sleep-BHjNez61.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-CZImLpOI.mjs
11182
11178
  /**
11183
11179
  * The ffmpeg build every CamStack node downloads, per platform and arch.
11184
11180
  *
@@ -15716,6 +15712,14 @@ var AutomationConditionLeafSchema = object({
15716
15712
  array(union([string(), number()]))
15717
15713
  ])
15718
15714
  });
15715
+ var AutomationConditionStationaryPresentSchema = object({
15716
+ kind: literal("stationary-present"),
15717
+ deviceId: number().int().nonnegative(),
15718
+ /** Class names; a macro class matches every raw class that maps to it. */
15719
+ classes: array(string().min(1)).min(1).optional(),
15720
+ /** The parked object must be in at least one of these zones. */
15721
+ zones: array(string().min(1)).min(1).optional()
15722
+ });
15719
15723
  /**
15720
15724
  * The expression leaf, declared as a plain object rather than an intersection
15721
15725
  * with {@link ExpressionSourceSchema}: a discriminated union has to be able to
@@ -15749,7 +15753,8 @@ var AutomationConditionSchema = lazy(() => discriminatedUnion("kind", [
15749
15753
  child: AutomationConditionSchema
15750
15754
  }),
15751
15755
  AutomationConditionLeafSchema,
15752
- AutomationConditionExpressionSchema
15756
+ AutomationConditionExpressionSchema,
15757
+ AutomationConditionStationaryPresentSchema
15753
15758
  ]));
15754
15759
  /**
15755
15760
  * What starts a run.
@@ -15803,6 +15808,17 @@ var AutomationTriggerSchema = discriminatedUnion("kind", [
15803
15808
  /** Best-so-far confidence the track must reach. */
15804
15809
  minScore: number().min(0).max(1).optional()
15805
15810
  }),
15811
+ object({
15812
+ kind: literal("stationary"),
15813
+ deviceIds: array(number().int().nonnegative()).min(1),
15814
+ /** Class names; a macro class matches like the detection trigger. */
15815
+ classes: array(string().min(1)).min(1).optional(),
15816
+ /** The parked object must be in at least one of these zones. */
15817
+ zones: array(string().min(1)).min(1).optional(),
15818
+ /** `appeared`: it became parked. `departed`: the registry retired it.
15819
+ * The vocabulary of `PipelineAnalyticsStationaryChanged`. */
15820
+ phase: _enum(["appeared", "departed"])
15821
+ }),
15806
15822
  object({
15807
15823
  kind: literal("interval"),
15808
15824
  minutes: number().int().min(1).max(1440)
@@ -16012,7 +16028,8 @@ var AutomationConditionTraceNodeSchema = object({
16012
16028
  "any",
16013
16029
  "not",
16014
16030
  "condition",
16015
- "expression"
16031
+ "expression",
16032
+ "stationary-present"
16016
16033
  ]),
16017
16034
  outcome: TraceNodeOutcomeSchema,
16018
16035
  reason: string(),
@@ -18822,7 +18839,7 @@ var CompositionEventPlanSchema = object({
18822
18839
  stateField: string(),
18823
18840
  fieldKey: string()
18824
18841
  });
18825
- /** 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`. */
18826
18843
  var CompositionProblemSchema = object({
18827
18844
  code: _enum([
18828
18845
  "reserved-variant",
@@ -19141,7 +19158,7 @@ var GROUP_TEMPLATES = [
19141
19158
  summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
19142
19159
  role: DeviceRole.TemperatureSensor,
19143
19160
  outputCap: "temperature-sensor",
19144
- outputField: "celsius",
19161
+ outputField: "temperature",
19145
19162
  quantity: "temperature",
19146
19163
  defaultAggregate: "mean",
19147
19164
  empty: "null",
@@ -19152,7 +19169,7 @@ var GROUP_TEMPLATES = [
19152
19169
  summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
19153
19170
  role: DeviceRole.HumiditySensor,
19154
19171
  outputCap: "humidity-sensor",
19155
- outputField: "percent",
19172
+ outputField: "humidity",
19156
19173
  quantity: "humidity",
19157
19174
  defaultAggregate: "mean",
19158
19175
  empty: "null",
@@ -19163,7 +19180,7 @@ var GROUP_TEMPLATES = [
19163
19180
  summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
19164
19181
  role: DeviceRole.PressureSensor,
19165
19182
  outputCap: "pressure-sensor",
19166
- outputField: "hpa",
19183
+ outputField: "pressure",
19167
19184
  quantity: "pressure",
19168
19185
  defaultAggregate: "mean",
19169
19186
  empty: "null",
@@ -19174,7 +19191,7 @@ var GROUP_TEMPLATES = [
19174
19191
  summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
19175
19192
  role: DeviceRole.AmbientLightSensor,
19176
19193
  outputCap: "ambient-light-sensor",
19177
- outputField: "lux",
19194
+ outputField: "illuminance",
19178
19195
  quantity: "illuminance",
19179
19196
  defaultAggregate: "mean",
19180
19197
  empty: "null",
@@ -19185,7 +19202,7 @@ var GROUP_TEMPLATES = [
19185
19202
  summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
19186
19203
  role: DeviceRole.PowerSensor,
19187
19204
  outputCap: "power-meter",
19188
- outputField: "watts",
19205
+ outputField: "power",
19189
19206
  quantity: "power",
19190
19207
  defaultAggregate: "sum",
19191
19208
  empty: "omit",
@@ -19196,7 +19213,7 @@ var GROUP_TEMPLATES = [
19196
19213
  summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
19197
19214
  role: DeviceRole.EnergySensor,
19198
19215
  outputCap: "power-meter",
19199
- outputField: "kwhTotal",
19216
+ outputField: "energy",
19200
19217
  quantity: "energy",
19201
19218
  defaultAggregate: "sum",
19202
19219
  empty: "omit",
@@ -19207,7 +19224,7 @@ var GROUP_TEMPLATES = [
19207
19224
  summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
19208
19225
  role: DeviceRole.BatterySensor,
19209
19226
  outputCap: "battery",
19210
- outputField: "percentage",
19227
+ outputField: "level",
19211
19228
  quantity: "percentage",
19212
19229
  defaultAggregate: "mean",
19213
19230
  empty: "null",
@@ -57325,9 +57342,9 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
57325
57342
  }), LogStreamEntrySchema, { kind: "subscription" });
57326
57343
  object({
57327
57344
  /** Carbon dioxide concentration in ppm. */
57328
- co2Ppm: number().min(0).optional().meta(readingMeta("concentration-volume")),
57345
+ co2: number().min(0).optional().meta(readingMeta("concentration-volume")),
57329
57346
  /** Total volatile organic compounds in ppb. */
57330
- vocPpb: number().min(0).optional().meta(readingMeta("concentration-ppb")),
57347
+ voc: number().min(0).optional().meta(readingMeta("concentration-ppb")),
57331
57348
  /** Particulate matter ≤ 2.5 μm in µg/m³. */
57332
57349
  pm25: number().min(0).optional().meta(readingMeta("concentration-mass")),
57333
57350
  /** Particulate matter ≤ 10 μm in µg/m³. */
@@ -57340,7 +57357,7 @@ object({
57340
57357
  DeviceType.Sensor;
57341
57358
  object({
57342
57359
  /** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
57343
- lux: number().min(0).nullable().meta(readingMeta("illuminance", {
57360
+ illuminance: number().min(0).nullable().meta(readingMeta("illuminance", {
57344
57361
  precision: 0,
57345
57362
  label: "Illuminance"
57346
57363
  })),
@@ -57568,7 +57585,7 @@ var BatteryStatusSchema = object({
57568
57585
  * Consumers must SKIP a null rather than coerce it — `battery-band` already
57569
57586
  * declines to band a non-finite reading, which is the correct shape.
57570
57587
  */
57571
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
57588
+ level: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
57572
57589
  /**
57573
57590
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
57574
57591
  * Reolink-specific for the Solar Panel 2 accessory (will become
@@ -57578,7 +57595,7 @@ var BatteryStatusSchema = object({
57578
57595
  * `'unknown'` is the absence of an answer: the provider has not read the
57579
57596
  * power fields yet, or the firmware reported neither. Before it existed,
57580
57597
  * two unreadable fields produced `'none'`, and a camera nobody had reached
57581
- * was drawn "on battery alone" — the same D315 defect `percentage` closed
57598
+ * was drawn "on battery alone" — the same D315 defect `level` closed
57582
57599
  * by going nullable. Consumers SKIP it (no charger state published, no
57583
57600
  * glyph, no HomeKit ChargingState) rather than coerce it either way.
57584
57601
  */
@@ -57602,7 +57619,7 @@ var BatteryStatusSchema = object({
57602
57619
  * that only report charge. A second reading on this cap, not a second
57603
57620
  * `numeric-sensor` on the same device.
57604
57621
  */
57605
- volts: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
57622
+ voltage: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
57606
57623
  /**
57607
57624
  * Ms epoch of the last time the device PROVED it was reachable — a
57608
57625
  * completed firmware round-trip, an observed wake, or an inbound push
@@ -57636,7 +57653,7 @@ var BatteryStatusSchema = object({
57636
57653
  /**
57637
57654
  * True when the source is a BINARY low-battery indicator (HA
57638
57655
  * `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
57639
- * charge level — `percentage` is then a coarse stand-in (100 = normal,
57656
+ * charge level — `level` is then a coarse stand-in (100 = normal,
57640
57657
  * sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
57641
57658
  * misleading exact percentage. Absent/false → genuine 0–100 % reading.
57642
57659
  */
@@ -57662,19 +57679,19 @@ object({
57662
57679
  DeviceType.Sensor;
57663
57680
  object({
57664
57681
  /** Current level as 0..100 inclusive. Firmware-reported. */
57665
- percentage: number().min(0).max(100).meta(readingMeta("percentage")),
57682
+ level: number().min(0).max(100).meta(readingMeta("percentage")),
57666
57683
  /** Ms epoch of the last operator-driven change. Useful for UI freshness. */
57667
57684
  lastChangedAt: number()
57668
57685
  });
57669
57686
  DeviceType.Light, method(object({
57670
57687
  deviceId: number().int().nonnegative(),
57671
- percentage: number().min(0).max(100)
57688
+ level: number().min(0).max(100)
57672
57689
  }), _void(), {
57673
57690
  kind: "mutation",
57674
57691
  auth: "protected"
57675
57692
  }), object({
57676
57693
  deviceId: number(),
57677
- percentage: number().min(0).max(100),
57694
+ level: number().min(0).max(100),
57678
57695
  lastChangedAt: number()
57679
57696
  });
57680
57697
  DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
@@ -58175,11 +58192,11 @@ var ColorInputSchema = discriminatedUnion("mode", [
58175
58192
  }),
58176
58193
  object({
58177
58194
  mode: literal("mired"),
58178
- mireds: number().int().min(50).max(1e3)
58195
+ colorTemperature: number().int().min(50).max(1e3)
58179
58196
  })
58180
58197
  ]);
58181
58198
  object({
58182
- /** Active color mode — which of `rgb` / `hsv` / `mireds` reflects
58199
+ /** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
58183
58200
  * the bulb's current state. */
58184
58201
  mode: _enum([
58185
58202
  "rgb",
@@ -58191,7 +58208,7 @@ object({
58191
58208
  /** Populated when `mode === 'hsv'`. */
58192
58209
  hsv: HsvTripletSchema.optional(),
58193
58210
  /** Populated when `mode === 'mired'`. */
58194
- mireds: number().int().optional().meta(readingMeta("colour-temperature")),
58211
+ colorTemperature: number().int().optional().meta(readingMeta("colour-temperature")),
58195
58212
  /** Ms epoch of the last operator-driven change. */
58196
58213
  lastChangedAt: number()
58197
58214
  });
@@ -58210,7 +58227,7 @@ DeviceType.Light, method(object({
58210
58227
  ]),
58211
58228
  rgb: RgbTripletSchema.optional(),
58212
58229
  hsv: HsvTripletSchema.optional(),
58213
- mireds: number().int().optional(),
58230
+ colorTemperature: number().int().optional(),
58214
58231
  lastChangedAt: number()
58215
58232
  });
58216
58233
  var ConnectionTestOutcomeSchema = discriminatedUnion("outcome", [
@@ -58636,11 +58653,11 @@ object({
58636
58653
  /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
58637
58654
  availablePrograms: array(string()),
58638
58655
  /** Seconds remaining on the active cycle, or null when not running / not known. */
58639
- remainingSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58656
+ remaining: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58640
58657
  /** Seconds the delayed start is set to (time until the cycle starts), or null. */
58641
- delayedStartSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58658
+ delayedStart: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58642
58659
  /** Cycle completion 0..100, or null when not applicable. */
58643
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58660
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58644
58661
  /** True when the door is reported open; null when the door state is not known. */
58645
58662
  doorOpen: boolean().nullable(),
58646
58663
  /** True when the door is latched (locked) during a cycle; null when not reported. */
@@ -59258,7 +59275,7 @@ var FanDirectionSchema = _enum(["forward", "reverse"]);
59258
59275
  object({
59259
59276
  /** Active speed as 0..100 inclusive. Null when the device has no
59260
59277
  * speed surface (single-speed fan). */
59261
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59278
+ speed: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59262
59279
  /** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
59263
59280
  * a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
59264
59281
  percentageStep: number().positive().optional().meta(readingMeta("percentage")),
@@ -59278,7 +59295,7 @@ object({
59278
59295
  });
59279
59296
  DeviceType.Fan, method(object({
59280
59297
  deviceId: number().int().nonnegative(),
59281
- percentage: number().min(0).max(100)
59298
+ speed: number().min(0).max(100)
59282
59299
  }), _void(), {
59283
59300
  kind: "mutation",
59284
59301
  auth: "protected"
@@ -59461,7 +59478,7 @@ DeviceType.Humidifier, method(object({
59461
59478
  });
59462
59479
  object({
59463
59480
  /** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
59464
- percent: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
59481
+ humidity: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
59465
59482
  precision: 0,
59466
59483
  label: "Humidity"
59467
59484
  })),
@@ -59904,7 +59921,7 @@ object({
59904
59921
  batteryLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59905
59922
  /** 0..100 mowing-completion percentage of the current task, or null when no
59906
59923
  * task is active / progress is unavailable. */
59907
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59924
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59908
59925
  /** Current device/event code (dynamic — mostly status, sometimes an error),
59909
59926
  * or null when unknown. */
59910
59927
  currentCode: number().nullable().meta(readingMeta("none")),
@@ -60394,10 +60411,10 @@ object({
60394
60411
  currentMedia: MediaInfoSchema.nullable(),
60395
60412
  /** Current playback position in ms. Null when not seekable or
60396
60413
  * nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
60397
- positionMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60414
+ position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60398
60415
  /** Total duration of the current media in ms. Null when unknown
60399
60416
  * (live stream) or nothing is playing. */
60400
- durationMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60417
+ duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60401
60418
  /** Shuffle toggle. Null when no shuffle surface.
60402
60419
  * Pair with `DeviceFeature.MediaPlayerShuffle`. */
60403
60420
  shuffle: boolean().nullable(),
@@ -60424,7 +60441,7 @@ DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }
60424
60441
  auth: "protected"
60425
60442
  }), method(object({
60426
60443
  deviceId: number().int().nonnegative(),
60427
- positionMs: number().int().nonnegative()
60444
+ position: number().int().nonnegative()
60428
60445
  }), _void(), {
60429
60446
  kind: "mutation",
60430
60447
  auth: "protected"
@@ -61097,9 +61114,9 @@ var NetworkLinkStatusSchema = object({
61097
61114
  * one whose reading has not landed must not be drawn at 0 %. Consumers
61098
61115
  * SKIP a null rather than coerce it.
61099
61116
  */
61100
- signalPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61117
+ signal: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61101
61118
  /** Raw received signal strength in dBm, when the firmware reports one. */
61102
- rssiDbm: number().optional().meta(readingMeta("signal-level")),
61119
+ rssi: number().optional().meta(readingMeta("signal-level")),
61103
61120
  /** Network name of a wireless link, when the firmware reports it. */
61104
61121
  ssid: string().optional(),
61105
61122
  /** Ms epoch of the last observation. Lets consumers reason about freshness. */
@@ -62249,16 +62266,16 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
62249
62266
  auth: "admin"
62250
62267
  });
62251
62268
  object({
62252
- /** Instantaneous power draw in watts. */
62253
- watts: number().optional().meta(readingMeta("power", { label: "Power" })),
62269
+ /** Instantaneous power draw (watts). */
62270
+ power: number().optional().meta(readingMeta("power", { label: "Power" })),
62254
62271
  /** Cumulative energy in kilowatt-hours since the meter was reset. */
62255
- kwhTotal: number().optional().meta(readingMeta("energy", { label: "Energy" })),
62256
- /** Voltage in volts. */
62257
- volts: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
62272
+ energy: number().optional().meta(readingMeta("energy", { label: "Energy" })),
62273
+ /** Voltage (volts). */
62274
+ voltage: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
62258
62275
  /** Current in amperes. */
62259
- amps: number().optional().meta(readingMeta("current", { label: "Current" })),
62276
+ current: number().optional().meta(readingMeta("current", { label: "Current" })),
62260
62277
  /** Apparent power in volt-amperes. */
62261
- va: number().optional().meta(readingMeta("apparent-power")),
62278
+ apparentPower: number().optional().meta(readingMeta("apparent-power")),
62262
62279
  /** Power factor (0..1) if reported. */
62263
62280
  powerFactor: number().min(0).max(1).optional().meta(readingMeta("ratio")),
62264
62281
  /** Ms epoch when the slice was last updated. */
@@ -62313,16 +62330,13 @@ object({
62313
62330
  location: string().nullable(),
62314
62331
  /** GPS coordinates when available. Null otherwise. */
62315
62332
  gps: GpsLocationSchema.nullable(),
62316
- /** Optional battery level of the tracking device (0..100). Null
62317
- * when not reported. */
62318
- batteryPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
62319
62333
  /** Ms epoch when the slice was last updated. */
62320
62334
  lastChangedAt: number()
62321
62335
  });
62322
62336
  DeviceType.Presence;
62323
62337
  object({
62324
62338
  /** Current pressure in hPa. `null` when the sample was refused (D393). */
62325
- hpa: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
62339
+ pressure: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
62326
62340
  /** Ms epoch when the slice was last updated. */
62327
62341
  lastFetchedAt: number()
62328
62342
  });
@@ -65325,7 +65339,7 @@ object({
65325
65339
  DeviceType.Sensor;
65326
65340
  object({
65327
65341
  /** Current temperature in Celsius. `null` when the sample was refused (D393). */
65328
- celsius: number().nullable().meta(readingMeta("temperature", {
65342
+ temperature: number().nullable().meta(readingMeta("temperature", {
65329
65343
  precision: 1,
65330
65344
  label: "Temperature"
65331
65345
  })),
@@ -65589,7 +65603,7 @@ object({
65589
65603
  /** Speed tokens the hardware accepts — drives the UI selector. */
65590
65604
  availableFanSpeeds: array(string()),
65591
65605
  /** 0..100 cleaning-completion percentage of the current task, or null. */
65592
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65606
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65593
65607
  /** Current error code (0 / null = no error). */
65594
65608
  errorCode: number().nullable().meta(readingMeta("none")),
65595
65609
  /** Human label for {@link errorCode}, or null when none / undecodable. */
@@ -76661,7 +76675,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76661
76675
  label: t("Full brightness", "Luminosità massima"),
76662
76676
  phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
76663
76677
  icon: "sun",
76664
- args: { percentage: 100 }
76678
+ args: { level: 100 }
76665
76679
  },
76666
76680
  {
76667
76681
  id: "brightness.half",
@@ -76669,7 +76683,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76669
76683
  label: t("Half brightness", "Luminosità a metà"),
76670
76684
  phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
76671
76685
  icon: "sun-dim",
76672
- args: { percentage: 50 }
76686
+ args: { level: 50 }
76673
76687
  },
76674
76688
  {
76675
76689
  id: "brightness.off",
@@ -76677,16 +76691,16 @@ var ACTUATOR_CAP_VOCABULARY = {
76677
76691
  label: t("Brightness off", "Luminosità a zero"),
76678
76692
  phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
76679
76693
  icon: "lightbulb-off",
76680
- args: { percentage: 0 }
76694
+ args: { level: 0 }
76681
76695
  },
76682
76696
  {
76683
76697
  id: "brightness.set",
76684
76698
  method: "setBrightness",
76685
76699
  label: t("Set brightness", "Imposta la luminosità"),
76686
- phrase: t("Set the brightness of {device} to {percentage}", "Imposta la luminosità di {device} a {percentage}"),
76700
+ phrase: t("Set the brightness of {device} to {level}", "Imposta la luminosità di {device} a {level}"),
76687
76701
  icon: "sun-medium",
76688
76702
  openArgs: [{
76689
- key: "percentage",
76703
+ key: "level",
76690
76704
  label: PERCENT,
76691
76705
  offer: {
76692
76706
  kind: "number",
@@ -76700,13 +76714,13 @@ var ACTUATOR_CAP_VOCABULARY = {
76700
76714
  ],
76701
76715
  state: [{
76702
76716
  kind: "numeric",
76703
- field: "percentage",
76717
+ field: "level",
76704
76718
  quantity: t("the brightness", "la luminosità"),
76705
76719
  label: t("Brightness", "Luminosità"),
76706
76720
  unit: "%",
76707
76721
  icon: "sun"
76708
76722
  }],
76709
- events: { onBrightnessChanged: { notOperatorFacing: "the `percentage` state trigger reads the same change" } }
76723
+ events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
76710
76724
  },
76711
76725
  color: {
76712
76726
  scope: "device",
@@ -76720,7 +76734,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76720
76734
  icon: "sun",
76721
76735
  args: { color: {
76722
76736
  mode: "mired",
76723
- mireds: 370
76737
+ colorTemperature: 370
76724
76738
  } }
76725
76739
  },
76726
76740
  {
@@ -76731,7 +76745,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76731
76745
  icon: "snowflake",
76732
76746
  args: { color: {
76733
76747
  mode: "mired",
76734
- mireds: 200
76748
+ colorTemperature: 200
76735
76749
  } }
76736
76750
  },
76737
76751
  {
@@ -77345,7 +77359,7 @@ var ACTUATOR_CAP_VOCABULARY = {
77345
77359
  label: t("Fan off", "Ventilatore spento"),
77346
77360
  phrase: t("Stop {device}", "Ferma {device}"),
77347
77361
  icon: "power-off",
77348
- args: { percentage: 0 }
77362
+ args: { speed: 0 }
77349
77363
  },
77350
77364
  {
77351
77365
  id: "fan.full",
@@ -77353,16 +77367,16 @@ var ACTUATOR_CAP_VOCABULARY = {
77353
77367
  label: t("Fan full", "Ventilatore al massimo"),
77354
77368
  phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
77355
77369
  icon: "fan",
77356
- args: { percentage: 100 }
77370
+ args: { speed: 100 }
77357
77371
  },
77358
77372
  {
77359
77373
  id: "fan.speed",
77360
77374
  method: "setPercentage",
77361
77375
  label: t("Set speed", "Imposta la velocità"),
77362
- phrase: t("Set the speed of {device} to {percentage}", "Imposta la velocità di {device} al {percentage}"),
77376
+ phrase: t("Set the speed of {device} to {speed}", "Imposta la velocità di {device} al {speed}"),
77363
77377
  icon: "fan",
77364
77378
  openArgs: [{
77365
- key: "percentage",
77379
+ key: "speed",
77366
77380
  label: t("Speed", "Velocità"),
77367
77381
  offer: {
77368
77382
  kind: "number",
@@ -77424,7 +77438,7 @@ var ACTUATOR_CAP_VOCABULARY = {
77424
77438
  ],
77425
77439
  state: [{
77426
77440
  kind: "numeric",
77427
- field: "percentage",
77441
+ field: "speed",
77428
77442
  quantity: t("the speed", "la velocità"),
77429
77443
  label: t("Speed", "Velocità"),
77430
77444
  unit: "%",
@@ -78222,7 +78236,7 @@ var APPLIANCE_CAP_VOCABULARY = {
78222
78236
  },
78223
78237
  {
78224
78238
  kind: "numeric",
78225
- field: "progressPercent",
78239
+ field: "progress",
78226
78240
  quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
78227
78241
  label: t("Progress", "Avanzamento"),
78228
78242
  unit: "%",
@@ -78580,10 +78594,10 @@ var APPLIANCE_CAP_VOCABULARY = {
78580
78594
  id: "media.seek",
78581
78595
  method: "seek",
78582
78596
  label: t("Seek", "Vai al punto"),
78583
- phrase: t("Move {device} to {positionMs}", "Porta {device} al punto {positionMs}"),
78597
+ phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
78584
78598
  icon: "fast-forward",
78585
78599
  openArgs: [{
78586
- key: "positionMs",
78600
+ key: "position",
78587
78601
  label: t("Position", "Posizione"),
78588
78602
  offer: {
78589
78603
  kind: "number",
@@ -79632,7 +79646,7 @@ var SENSOR_CAP_VOCABULARY = {
79632
79646
  state: [
79633
79647
  {
79634
79648
  kind: "numeric",
79635
- field: "co2Ppm",
79649
+ field: "co2",
79636
79650
  quantity: t("the CO₂", "la CO₂"),
79637
79651
  label: t("CO₂", "CO₂"),
79638
79652
  unit: "ppm",
@@ -79640,7 +79654,7 @@ var SENSOR_CAP_VOCABULARY = {
79640
79654
  },
79641
79655
  {
79642
79656
  kind: "numeric",
79643
- field: "vocPpb",
79657
+ field: "voc",
79644
79658
  quantity: t("the VOC level", "il livello di COV"),
79645
79659
  label: t("VOC", "COV"),
79646
79660
  unit: "ppb",
@@ -79676,7 +79690,7 @@ var SENSOR_CAP_VOCABULARY = {
79676
79690
  noun: t("Light level", "Luminosità ambiente"),
79677
79691
  state: [{
79678
79692
  kind: "numeric",
79679
- field: "lux",
79693
+ field: "illuminance",
79680
79694
  quantity: t("the light level", "la luminosità"),
79681
79695
  label: t("Illuminance", "Illuminamento"),
79682
79696
  unit: "lx",
@@ -79879,7 +79893,7 @@ var SENSOR_CAP_VOCABULARY = {
79879
79893
  noun: t("Humidity", "Umidità"),
79880
79894
  state: [{
79881
79895
  kind: "numeric",
79882
- field: "percent",
79896
+ field: "humidity",
79883
79897
  quantity: t("the humidity", "l’umidità"),
79884
79898
  label: t("Humidity", "Umidità"),
79885
79899
  unit: "%",
@@ -79927,7 +79941,7 @@ var SENSOR_CAP_VOCABULARY = {
79927
79941
  state: [
79928
79942
  {
79929
79943
  kind: "numeric",
79930
- field: "watts",
79944
+ field: "power",
79931
79945
  quantity: t("the power draw", "il consumo"),
79932
79946
  label: t("Power", "Potenza"),
79933
79947
  unit: "W",
@@ -79935,7 +79949,7 @@ var SENSOR_CAP_VOCABULARY = {
79935
79949
  },
79936
79950
  {
79937
79951
  kind: "numeric",
79938
- field: "kwhTotal",
79952
+ field: "energy",
79939
79953
  quantity: t("the energy used", "l’energia consumata"),
79940
79954
  label: t("Energy", "Energia"),
79941
79955
  unit: "kWh",
@@ -79943,7 +79957,7 @@ var SENSOR_CAP_VOCABULARY = {
79943
79957
  },
79944
79958
  {
79945
79959
  kind: "numeric",
79946
- field: "volts",
79960
+ field: "voltage",
79947
79961
  quantity: t("the voltage", "la tensione"),
79948
79962
  label: t("Voltage", "Tensione"),
79949
79963
  unit: "V",
@@ -79951,7 +79965,7 @@ var SENSOR_CAP_VOCABULARY = {
79951
79965
  },
79952
79966
  {
79953
79967
  kind: "numeric",
79954
- field: "amps",
79968
+ field: "current",
79955
79969
  quantity: t("the current", "la corrente"),
79956
79970
  label: t("Current", "Corrente"),
79957
79971
  unit: "A",
@@ -79968,13 +79982,6 @@ var SENSOR_CAP_VOCABULARY = {
79968
79982
  label: t("Where", "Posizione"),
79969
79983
  phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
79970
79984
  icon: "map-pin"
79971
- }, {
79972
- kind: "numeric",
79973
- field: "batteryPercent",
79974
- quantity: t("the phone battery", "la batteria del telefono"),
79975
- label: t("Battery", "Batteria"),
79976
- unit: "%",
79977
- icon: "battery"
79978
79985
  }]
79979
79986
  },
79980
79987
  "pressure-sensor": {
@@ -79982,7 +79989,7 @@ var SENSOR_CAP_VOCABULARY = {
79982
79989
  noun: t("Pressure", "Pressione"),
79983
79990
  state: [{
79984
79991
  kind: "numeric",
79985
- field: "hpa",
79992
+ field: "pressure",
79986
79993
  quantity: t("the pressure", "la pressione"),
79987
79994
  label: t("Pressure", "Pressione"),
79988
79995
  unit: "hPa",
@@ -80018,7 +80025,7 @@ var SENSOR_CAP_VOCABULARY = {
80018
80025
  noun: t("Temperature", "Temperatura"),
80019
80026
  state: [{
80020
80027
  kind: "numeric",
80021
- field: "celsius",
80028
+ field: "temperature",
80022
80029
  quantity: t("the temperature", "la temperatura"),
80023
80030
  label: t("Temperature", "Temperatura"),
80024
80031
  unit: "°C",
@@ -80089,7 +80096,7 @@ var SENSOR_CAP_VOCABULARY = {
80089
80096
  state: [
80090
80097
  {
80091
80098
  kind: "numeric",
80092
- field: "percentage",
80099
+ field: "level",
80093
80100
  quantity: t("the battery level", "il livello della batteria"),
80094
80101
  label: t("Battery", "Batteria"),
80095
80102
  unit: "%",
@@ -80131,7 +80138,7 @@ var SENSOR_CAP_VOCABULARY = {
80131
80138
  icon: "battery-charging"
80132
80139
  }
80133
80140
  ],
80134
- events: { onStatusChanged: { notOperatorFacing: "the percentage / sleeping / charging state triggers each read one field of this change" } },
80141
+ events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
80135
80142
  extraEvents: [{
80136
80143
  category: EventCategory.DeviceAwake,
80137
80144
  label: t("Woke up", "Risvegliato"),
@@ -80149,7 +80156,7 @@ var SENSOR_CAP_VOCABULARY = {
80149
80156
  noun: t("Network link", "Collegamento di rete"),
80150
80157
  state: [{
80151
80158
  kind: "numeric",
80152
- field: "signalPercent",
80159
+ field: "signal",
80153
80160
  quantity: t("the signal strength", "l’intensità del segnale"),
80154
80161
  label: t("Signal", "Segnale"),
80155
80162
  unit: "%",