@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
@@ -1,5 +1,5 @@
1
1
  import "node:crypto";
2
- //#region ../types/dist/event-category-hdMR7CTW.mjs
2
+ //#region ../types/dist/event-category-DmZDPDf_.mjs
3
3
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4
4
  EventCategory["SystemBoot"] = "system.boot";
5
5
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -626,7 +626,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
626
626
  * (a track was promoted to a stationary-registry entry) or departs (the
627
627
  * object moved / was removed). Telemetry (D8): lossy, drives a UI refresh of
628
628
  * the dedicated "Stationary" section — never the live event feed. Payload:
629
- * `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp }`.
629
+ * `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp, observedAt, zones }`.
630
630
  */
631
631
  EventCategory["PipelineAnalyticsStationaryChanged"] = "pipeline-analytics.stationary-changed";
632
632
  /**
@@ -5580,7 +5580,7 @@ var ZodIssueCode = {
5580
5580
  var ZodFirstPartyTypeKind;
5581
5581
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5582
5582
  //#endregion
5583
- //#region ../types/dist/sleep-BHjNez61.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-CZImLpOI.mjs
11149
11145
  /**
11150
11146
  * The ffmpeg build every CamStack node downloads, per platform and arch.
11151
11147
  *
@@ -15683,6 +15679,14 @@ var AutomationConditionLeafSchema = object({
15683
15679
  array(union([string(), number()]))
15684
15680
  ])
15685
15681
  });
15682
+ var AutomationConditionStationaryPresentSchema = object({
15683
+ kind: literal("stationary-present"),
15684
+ deviceId: number().int().nonnegative(),
15685
+ /** Class names; a macro class matches every raw class that maps to it. */
15686
+ classes: array(string().min(1)).min(1).optional(),
15687
+ /** The parked object must be in at least one of these zones. */
15688
+ zones: array(string().min(1)).min(1).optional()
15689
+ });
15686
15690
  /**
15687
15691
  * The expression leaf, declared as a plain object rather than an intersection
15688
15692
  * with {@link ExpressionSourceSchema}: a discriminated union has to be able to
@@ -15716,7 +15720,8 @@ var AutomationConditionSchema = lazy(() => discriminatedUnion("kind", [
15716
15720
  child: AutomationConditionSchema
15717
15721
  }),
15718
15722
  AutomationConditionLeafSchema,
15719
- AutomationConditionExpressionSchema
15723
+ AutomationConditionExpressionSchema,
15724
+ AutomationConditionStationaryPresentSchema
15720
15725
  ]));
15721
15726
  /**
15722
15727
  * What starts a run.
@@ -15770,6 +15775,17 @@ var AutomationTriggerSchema = discriminatedUnion("kind", [
15770
15775
  /** Best-so-far confidence the track must reach. */
15771
15776
  minScore: number().min(0).max(1).optional()
15772
15777
  }),
15778
+ object({
15779
+ kind: literal("stationary"),
15780
+ deviceIds: array(number().int().nonnegative()).min(1),
15781
+ /** Class names; a macro class matches like the detection trigger. */
15782
+ classes: array(string().min(1)).min(1).optional(),
15783
+ /** The parked object must be in at least one of these zones. */
15784
+ zones: array(string().min(1)).min(1).optional(),
15785
+ /** `appeared`: it became parked. `departed`: the registry retired it.
15786
+ * The vocabulary of `PipelineAnalyticsStationaryChanged`. */
15787
+ phase: _enum(["appeared", "departed"])
15788
+ }),
15773
15789
  object({
15774
15790
  kind: literal("interval"),
15775
15791
  minutes: number().int().min(1).max(1440)
@@ -15979,7 +15995,8 @@ var AutomationConditionTraceNodeSchema = object({
15979
15995
  "any",
15980
15996
  "not",
15981
15997
  "condition",
15982
- "expression"
15998
+ "expression",
15999
+ "stationary-present"
15983
16000
  ]),
15984
16001
  outcome: TraceNodeOutcomeSchema,
15985
16002
  reason: string(),
@@ -18789,7 +18806,7 @@ var CompositionEventPlanSchema = object({
18789
18806
  stateField: string(),
18790
18807
  fieldKey: string()
18791
18808
  });
18792
- /** 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`. */
18793
18810
  var CompositionProblemSchema = object({
18794
18811
  code: _enum([
18795
18812
  "reserved-variant",
@@ -19108,7 +19125,7 @@ var GROUP_TEMPLATES = [
19108
19125
  summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
19109
19126
  role: DeviceRole.TemperatureSensor,
19110
19127
  outputCap: "temperature-sensor",
19111
- outputField: "celsius",
19128
+ outputField: "temperature",
19112
19129
  quantity: "temperature",
19113
19130
  defaultAggregate: "mean",
19114
19131
  empty: "null",
@@ -19119,7 +19136,7 @@ var GROUP_TEMPLATES = [
19119
19136
  summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
19120
19137
  role: DeviceRole.HumiditySensor,
19121
19138
  outputCap: "humidity-sensor",
19122
- outputField: "percent",
19139
+ outputField: "humidity",
19123
19140
  quantity: "humidity",
19124
19141
  defaultAggregate: "mean",
19125
19142
  empty: "null",
@@ -19130,7 +19147,7 @@ var GROUP_TEMPLATES = [
19130
19147
  summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
19131
19148
  role: DeviceRole.PressureSensor,
19132
19149
  outputCap: "pressure-sensor",
19133
- outputField: "hpa",
19150
+ outputField: "pressure",
19134
19151
  quantity: "pressure",
19135
19152
  defaultAggregate: "mean",
19136
19153
  empty: "null",
@@ -19141,7 +19158,7 @@ var GROUP_TEMPLATES = [
19141
19158
  summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
19142
19159
  role: DeviceRole.AmbientLightSensor,
19143
19160
  outputCap: "ambient-light-sensor",
19144
- outputField: "lux",
19161
+ outputField: "illuminance",
19145
19162
  quantity: "illuminance",
19146
19163
  defaultAggregate: "mean",
19147
19164
  empty: "null",
@@ -19152,7 +19169,7 @@ var GROUP_TEMPLATES = [
19152
19169
  summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
19153
19170
  role: DeviceRole.PowerSensor,
19154
19171
  outputCap: "power-meter",
19155
- outputField: "watts",
19172
+ outputField: "power",
19156
19173
  quantity: "power",
19157
19174
  defaultAggregate: "sum",
19158
19175
  empty: "omit",
@@ -19163,7 +19180,7 @@ var GROUP_TEMPLATES = [
19163
19180
  summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
19164
19181
  role: DeviceRole.EnergySensor,
19165
19182
  outputCap: "power-meter",
19166
- outputField: "kwhTotal",
19183
+ outputField: "energy",
19167
19184
  quantity: "energy",
19168
19185
  defaultAggregate: "sum",
19169
19186
  empty: "omit",
@@ -19174,7 +19191,7 @@ var GROUP_TEMPLATES = [
19174
19191
  summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
19175
19192
  role: DeviceRole.BatterySensor,
19176
19193
  outputCap: "battery",
19177
- outputField: "percentage",
19194
+ outputField: "level",
19178
19195
  quantity: "percentage",
19179
19196
  defaultAggregate: "mean",
19180
19197
  empty: "null",
@@ -57292,9 +57309,9 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
57292
57309
  }), LogStreamEntrySchema, { kind: "subscription" });
57293
57310
  object({
57294
57311
  /** Carbon dioxide concentration in ppm. */
57295
- co2Ppm: number().min(0).optional().meta(readingMeta("concentration-volume")),
57312
+ co2: number().min(0).optional().meta(readingMeta("concentration-volume")),
57296
57313
  /** Total volatile organic compounds in ppb. */
57297
- vocPpb: number().min(0).optional().meta(readingMeta("concentration-ppb")),
57314
+ voc: number().min(0).optional().meta(readingMeta("concentration-ppb")),
57298
57315
  /** Particulate matter ≤ 2.5 μm in µg/m³. */
57299
57316
  pm25: number().min(0).optional().meta(readingMeta("concentration-mass")),
57300
57317
  /** Particulate matter ≤ 10 μm in µg/m³. */
@@ -57307,7 +57324,7 @@ object({
57307
57324
  DeviceType.Sensor;
57308
57325
  object({
57309
57326
  /** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
57310
- lux: number().min(0).nullable().meta(readingMeta("illuminance", {
57327
+ illuminance: number().min(0).nullable().meta(readingMeta("illuminance", {
57311
57328
  precision: 0,
57312
57329
  label: "Illuminance"
57313
57330
  })),
@@ -57535,7 +57552,7 @@ var BatteryStatusSchema = object({
57535
57552
  * Consumers must SKIP a null rather than coerce it — `battery-band` already
57536
57553
  * declines to band a non-finite reading, which is the correct shape.
57537
57554
  */
57538
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
57555
+ level: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
57539
57556
  /**
57540
57557
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
57541
57558
  * Reolink-specific for the Solar Panel 2 accessory (will become
@@ -57545,7 +57562,7 @@ var BatteryStatusSchema = object({
57545
57562
  * `'unknown'` is the absence of an answer: the provider has not read the
57546
57563
  * power fields yet, or the firmware reported neither. Before it existed,
57547
57564
  * two unreadable fields produced `'none'`, and a camera nobody had reached
57548
- * was drawn "on battery alone" — the same D315 defect `percentage` closed
57565
+ * was drawn "on battery alone" — the same D315 defect `level` closed
57549
57566
  * by going nullable. Consumers SKIP it (no charger state published, no
57550
57567
  * glyph, no HomeKit ChargingState) rather than coerce it either way.
57551
57568
  */
@@ -57569,7 +57586,7 @@ var BatteryStatusSchema = object({
57569
57586
  * that only report charge. A second reading on this cap, not a second
57570
57587
  * `numeric-sensor` on the same device.
57571
57588
  */
57572
- volts: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
57589
+ voltage: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
57573
57590
  /**
57574
57591
  * Ms epoch of the last time the device PROVED it was reachable — a
57575
57592
  * completed firmware round-trip, an observed wake, or an inbound push
@@ -57603,7 +57620,7 @@ var BatteryStatusSchema = object({
57603
57620
  /**
57604
57621
  * True when the source is a BINARY low-battery indicator (HA
57605
57622
  * `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
57606
- * charge level — `percentage` is then a coarse stand-in (100 = normal,
57623
+ * charge level — `level` is then a coarse stand-in (100 = normal,
57607
57624
  * sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
57608
57625
  * misleading exact percentage. Absent/false → genuine 0–100 % reading.
57609
57626
  */
@@ -57629,19 +57646,19 @@ object({
57629
57646
  DeviceType.Sensor;
57630
57647
  object({
57631
57648
  /** Current level as 0..100 inclusive. Firmware-reported. */
57632
- percentage: number().min(0).max(100).meta(readingMeta("percentage")),
57649
+ level: number().min(0).max(100).meta(readingMeta("percentage")),
57633
57650
  /** Ms epoch of the last operator-driven change. Useful for UI freshness. */
57634
57651
  lastChangedAt: number()
57635
57652
  });
57636
57653
  DeviceType.Light, method(object({
57637
57654
  deviceId: number().int().nonnegative(),
57638
- percentage: number().min(0).max(100)
57655
+ level: number().min(0).max(100)
57639
57656
  }), _void(), {
57640
57657
  kind: "mutation",
57641
57658
  auth: "protected"
57642
57659
  }), object({
57643
57660
  deviceId: number(),
57644
- percentage: number().min(0).max(100),
57661
+ level: number().min(0).max(100),
57645
57662
  lastChangedAt: number()
57646
57663
  });
57647
57664
  DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
@@ -58142,11 +58159,11 @@ var ColorInputSchema = discriminatedUnion("mode", [
58142
58159
  }),
58143
58160
  object({
58144
58161
  mode: literal("mired"),
58145
- mireds: number().int().min(50).max(1e3)
58162
+ colorTemperature: number().int().min(50).max(1e3)
58146
58163
  })
58147
58164
  ]);
58148
58165
  object({
58149
- /** Active color mode — which of `rgb` / `hsv` / `mireds` reflects
58166
+ /** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
58150
58167
  * the bulb's current state. */
58151
58168
  mode: _enum([
58152
58169
  "rgb",
@@ -58158,7 +58175,7 @@ object({
58158
58175
  /** Populated when `mode === 'hsv'`. */
58159
58176
  hsv: HsvTripletSchema.optional(),
58160
58177
  /** Populated when `mode === 'mired'`. */
58161
- mireds: number().int().optional().meta(readingMeta("colour-temperature")),
58178
+ colorTemperature: number().int().optional().meta(readingMeta("colour-temperature")),
58162
58179
  /** Ms epoch of the last operator-driven change. */
58163
58180
  lastChangedAt: number()
58164
58181
  });
@@ -58177,7 +58194,7 @@ DeviceType.Light, method(object({
58177
58194
  ]),
58178
58195
  rgb: RgbTripletSchema.optional(),
58179
58196
  hsv: HsvTripletSchema.optional(),
58180
- mireds: number().int().optional(),
58197
+ colorTemperature: number().int().optional(),
58181
58198
  lastChangedAt: number()
58182
58199
  });
58183
58200
  var ConnectionTestOutcomeSchema = discriminatedUnion("outcome", [
@@ -58603,11 +58620,11 @@ object({
58603
58620
  /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
58604
58621
  availablePrograms: array(string()),
58605
58622
  /** Seconds remaining on the active cycle, or null when not running / not known. */
58606
- remainingSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58623
+ remaining: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58607
58624
  /** Seconds the delayed start is set to (time until the cycle starts), or null. */
58608
- delayedStartSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58625
+ delayedStart: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58609
58626
  /** Cycle completion 0..100, or null when not applicable. */
58610
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58627
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58611
58628
  /** True when the door is reported open; null when the door state is not known. */
58612
58629
  doorOpen: boolean().nullable(),
58613
58630
  /** True when the door is latched (locked) during a cycle; null when not reported. */
@@ -59225,7 +59242,7 @@ var FanDirectionSchema = _enum(["forward", "reverse"]);
59225
59242
  object({
59226
59243
  /** Active speed as 0..100 inclusive. Null when the device has no
59227
59244
  * speed surface (single-speed fan). */
59228
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59245
+ speed: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59229
59246
  /** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
59230
59247
  * a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
59231
59248
  percentageStep: number().positive().optional().meta(readingMeta("percentage")),
@@ -59245,7 +59262,7 @@ object({
59245
59262
  });
59246
59263
  DeviceType.Fan, method(object({
59247
59264
  deviceId: number().int().nonnegative(),
59248
- percentage: number().min(0).max(100)
59265
+ speed: number().min(0).max(100)
59249
59266
  }), _void(), {
59250
59267
  kind: "mutation",
59251
59268
  auth: "protected"
@@ -59428,7 +59445,7 @@ DeviceType.Humidifier, method(object({
59428
59445
  });
59429
59446
  object({
59430
59447
  /** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
59431
- percent: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
59448
+ humidity: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
59432
59449
  precision: 0,
59433
59450
  label: "Humidity"
59434
59451
  })),
@@ -59871,7 +59888,7 @@ object({
59871
59888
  batteryLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59872
59889
  /** 0..100 mowing-completion percentage of the current task, or null when no
59873
59890
  * task is active / progress is unavailable. */
59874
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59891
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59875
59892
  /** Current device/event code (dynamic — mostly status, sometimes an error),
59876
59893
  * or null when unknown. */
59877
59894
  currentCode: number().nullable().meta(readingMeta("none")),
@@ -60361,10 +60378,10 @@ object({
60361
60378
  currentMedia: MediaInfoSchema.nullable(),
60362
60379
  /** Current playback position in ms. Null when not seekable or
60363
60380
  * nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
60364
- positionMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60381
+ position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60365
60382
  /** Total duration of the current media in ms. Null when unknown
60366
60383
  * (live stream) or nothing is playing. */
60367
- durationMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60384
+ duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60368
60385
  /** Shuffle toggle. Null when no shuffle surface.
60369
60386
  * Pair with `DeviceFeature.MediaPlayerShuffle`. */
60370
60387
  shuffle: boolean().nullable(),
@@ -60391,7 +60408,7 @@ DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }
60391
60408
  auth: "protected"
60392
60409
  }), method(object({
60393
60410
  deviceId: number().int().nonnegative(),
60394
- positionMs: number().int().nonnegative()
60411
+ position: number().int().nonnegative()
60395
60412
  }), _void(), {
60396
60413
  kind: "mutation",
60397
60414
  auth: "protected"
@@ -61064,9 +61081,9 @@ var NetworkLinkStatusSchema = object({
61064
61081
  * one whose reading has not landed must not be drawn at 0 %. Consumers
61065
61082
  * SKIP a null rather than coerce it.
61066
61083
  */
61067
- signalPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61084
+ signal: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61068
61085
  /** Raw received signal strength in dBm, when the firmware reports one. */
61069
- rssiDbm: number().optional().meta(readingMeta("signal-level")),
61086
+ rssi: number().optional().meta(readingMeta("signal-level")),
61070
61087
  /** Network name of a wireless link, when the firmware reports it. */
61071
61088
  ssid: string().optional(),
61072
61089
  /** Ms epoch of the last observation. Lets consumers reason about freshness. */
@@ -62216,16 +62233,16 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
62216
62233
  auth: "admin"
62217
62234
  });
62218
62235
  object({
62219
- /** Instantaneous power draw in watts. */
62220
- watts: number().optional().meta(readingMeta("power", { label: "Power" })),
62236
+ /** Instantaneous power draw (watts). */
62237
+ power: number().optional().meta(readingMeta("power", { label: "Power" })),
62221
62238
  /** Cumulative energy in kilowatt-hours since the meter was reset. */
62222
- kwhTotal: number().optional().meta(readingMeta("energy", { label: "Energy" })),
62223
- /** Voltage in volts. */
62224
- volts: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
62239
+ energy: number().optional().meta(readingMeta("energy", { label: "Energy" })),
62240
+ /** Voltage (volts). */
62241
+ voltage: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
62225
62242
  /** Current in amperes. */
62226
- amps: number().optional().meta(readingMeta("current", { label: "Current" })),
62243
+ current: number().optional().meta(readingMeta("current", { label: "Current" })),
62227
62244
  /** Apparent power in volt-amperes. */
62228
- va: number().optional().meta(readingMeta("apparent-power")),
62245
+ apparentPower: number().optional().meta(readingMeta("apparent-power")),
62229
62246
  /** Power factor (0..1) if reported. */
62230
62247
  powerFactor: number().min(0).max(1).optional().meta(readingMeta("ratio")),
62231
62248
  /** Ms epoch when the slice was last updated. */
@@ -62280,16 +62297,13 @@ object({
62280
62297
  location: string().nullable(),
62281
62298
  /** GPS coordinates when available. Null otherwise. */
62282
62299
  gps: GpsLocationSchema.nullable(),
62283
- /** Optional battery level of the tracking device (0..100). Null
62284
- * when not reported. */
62285
- batteryPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
62286
62300
  /** Ms epoch when the slice was last updated. */
62287
62301
  lastChangedAt: number()
62288
62302
  });
62289
62303
  DeviceType.Presence;
62290
62304
  object({
62291
62305
  /** Current pressure in hPa. `null` when the sample was refused (D393). */
62292
- hpa: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
62306
+ pressure: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
62293
62307
  /** Ms epoch when the slice was last updated. */
62294
62308
  lastFetchedAt: number()
62295
62309
  });
@@ -65292,7 +65306,7 @@ object({
65292
65306
  DeviceType.Sensor;
65293
65307
  object({
65294
65308
  /** Current temperature in Celsius. `null` when the sample was refused (D393). */
65295
- celsius: number().nullable().meta(readingMeta("temperature", {
65309
+ temperature: number().nullable().meta(readingMeta("temperature", {
65296
65310
  precision: 1,
65297
65311
  label: "Temperature"
65298
65312
  })),
@@ -65556,7 +65570,7 @@ object({
65556
65570
  /** Speed tokens the hardware accepts — drives the UI selector. */
65557
65571
  availableFanSpeeds: array(string()),
65558
65572
  /** 0..100 cleaning-completion percentage of the current task, or null. */
65559
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65573
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65560
65574
  /** Current error code (0 / null = no error). */
65561
65575
  errorCode: number().nullable().meta(readingMeta("none")),
65562
65576
  /** Human label for {@link errorCode}, or null when none / undecodable. */
@@ -76628,7 +76642,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76628
76642
  label: t("Full brightness", "Luminosità massima"),
76629
76643
  phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
76630
76644
  icon: "sun",
76631
- args: { percentage: 100 }
76645
+ args: { level: 100 }
76632
76646
  },
76633
76647
  {
76634
76648
  id: "brightness.half",
@@ -76636,7 +76650,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76636
76650
  label: t("Half brightness", "Luminosità a metà"),
76637
76651
  phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
76638
76652
  icon: "sun-dim",
76639
- args: { percentage: 50 }
76653
+ args: { level: 50 }
76640
76654
  },
76641
76655
  {
76642
76656
  id: "brightness.off",
@@ -76644,16 +76658,16 @@ var ACTUATOR_CAP_VOCABULARY = {
76644
76658
  label: t("Brightness off", "Luminosità a zero"),
76645
76659
  phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
76646
76660
  icon: "lightbulb-off",
76647
- args: { percentage: 0 }
76661
+ args: { level: 0 }
76648
76662
  },
76649
76663
  {
76650
76664
  id: "brightness.set",
76651
76665
  method: "setBrightness",
76652
76666
  label: t("Set brightness", "Imposta la luminosità"),
76653
- phrase: t("Set the brightness of {device} to {percentage}", "Imposta la luminosità di {device} a {percentage}"),
76667
+ phrase: t("Set the brightness of {device} to {level}", "Imposta la luminosità di {device} a {level}"),
76654
76668
  icon: "sun-medium",
76655
76669
  openArgs: [{
76656
- key: "percentage",
76670
+ key: "level",
76657
76671
  label: PERCENT,
76658
76672
  offer: {
76659
76673
  kind: "number",
@@ -76667,13 +76681,13 @@ var ACTUATOR_CAP_VOCABULARY = {
76667
76681
  ],
76668
76682
  state: [{
76669
76683
  kind: "numeric",
76670
- field: "percentage",
76684
+ field: "level",
76671
76685
  quantity: t("the brightness", "la luminosità"),
76672
76686
  label: t("Brightness", "Luminosità"),
76673
76687
  unit: "%",
76674
76688
  icon: "sun"
76675
76689
  }],
76676
- events: { onBrightnessChanged: { notOperatorFacing: "the `percentage` state trigger reads the same change" } }
76690
+ events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
76677
76691
  },
76678
76692
  color: {
76679
76693
  scope: "device",
@@ -76687,7 +76701,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76687
76701
  icon: "sun",
76688
76702
  args: { color: {
76689
76703
  mode: "mired",
76690
- mireds: 370
76704
+ colorTemperature: 370
76691
76705
  } }
76692
76706
  },
76693
76707
  {
@@ -76698,7 +76712,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76698
76712
  icon: "snowflake",
76699
76713
  args: { color: {
76700
76714
  mode: "mired",
76701
- mireds: 200
76715
+ colorTemperature: 200
76702
76716
  } }
76703
76717
  },
76704
76718
  {
@@ -77312,7 +77326,7 @@ var ACTUATOR_CAP_VOCABULARY = {
77312
77326
  label: t("Fan off", "Ventilatore spento"),
77313
77327
  phrase: t("Stop {device}", "Ferma {device}"),
77314
77328
  icon: "power-off",
77315
- args: { percentage: 0 }
77329
+ args: { speed: 0 }
77316
77330
  },
77317
77331
  {
77318
77332
  id: "fan.full",
@@ -77320,16 +77334,16 @@ var ACTUATOR_CAP_VOCABULARY = {
77320
77334
  label: t("Fan full", "Ventilatore al massimo"),
77321
77335
  phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
77322
77336
  icon: "fan",
77323
- args: { percentage: 100 }
77337
+ args: { speed: 100 }
77324
77338
  },
77325
77339
  {
77326
77340
  id: "fan.speed",
77327
77341
  method: "setPercentage",
77328
77342
  label: t("Set speed", "Imposta la velocità"),
77329
- phrase: t("Set the speed of {device} to {percentage}", "Imposta la velocità di {device} al {percentage}"),
77343
+ phrase: t("Set the speed of {device} to {speed}", "Imposta la velocità di {device} al {speed}"),
77330
77344
  icon: "fan",
77331
77345
  openArgs: [{
77332
- key: "percentage",
77346
+ key: "speed",
77333
77347
  label: t("Speed", "Velocità"),
77334
77348
  offer: {
77335
77349
  kind: "number",
@@ -77391,7 +77405,7 @@ var ACTUATOR_CAP_VOCABULARY = {
77391
77405
  ],
77392
77406
  state: [{
77393
77407
  kind: "numeric",
77394
- field: "percentage",
77408
+ field: "speed",
77395
77409
  quantity: t("the speed", "la velocità"),
77396
77410
  label: t("Speed", "Velocità"),
77397
77411
  unit: "%",
@@ -78189,7 +78203,7 @@ var APPLIANCE_CAP_VOCABULARY = {
78189
78203
  },
78190
78204
  {
78191
78205
  kind: "numeric",
78192
- field: "progressPercent",
78206
+ field: "progress",
78193
78207
  quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
78194
78208
  label: t("Progress", "Avanzamento"),
78195
78209
  unit: "%",
@@ -78547,10 +78561,10 @@ var APPLIANCE_CAP_VOCABULARY = {
78547
78561
  id: "media.seek",
78548
78562
  method: "seek",
78549
78563
  label: t("Seek", "Vai al punto"),
78550
- phrase: t("Move {device} to {positionMs}", "Porta {device} al punto {positionMs}"),
78564
+ phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
78551
78565
  icon: "fast-forward",
78552
78566
  openArgs: [{
78553
- key: "positionMs",
78567
+ key: "position",
78554
78568
  label: t("Position", "Posizione"),
78555
78569
  offer: {
78556
78570
  kind: "number",
@@ -79599,7 +79613,7 @@ var SENSOR_CAP_VOCABULARY = {
79599
79613
  state: [
79600
79614
  {
79601
79615
  kind: "numeric",
79602
- field: "co2Ppm",
79616
+ field: "co2",
79603
79617
  quantity: t("the CO₂", "la CO₂"),
79604
79618
  label: t("CO₂", "CO₂"),
79605
79619
  unit: "ppm",
@@ -79607,7 +79621,7 @@ var SENSOR_CAP_VOCABULARY = {
79607
79621
  },
79608
79622
  {
79609
79623
  kind: "numeric",
79610
- field: "vocPpb",
79624
+ field: "voc",
79611
79625
  quantity: t("the VOC level", "il livello di COV"),
79612
79626
  label: t("VOC", "COV"),
79613
79627
  unit: "ppb",
@@ -79643,7 +79657,7 @@ var SENSOR_CAP_VOCABULARY = {
79643
79657
  noun: t("Light level", "Luminosità ambiente"),
79644
79658
  state: [{
79645
79659
  kind: "numeric",
79646
- field: "lux",
79660
+ field: "illuminance",
79647
79661
  quantity: t("the light level", "la luminosità"),
79648
79662
  label: t("Illuminance", "Illuminamento"),
79649
79663
  unit: "lx",
@@ -79846,7 +79860,7 @@ var SENSOR_CAP_VOCABULARY = {
79846
79860
  noun: t("Humidity", "Umidità"),
79847
79861
  state: [{
79848
79862
  kind: "numeric",
79849
- field: "percent",
79863
+ field: "humidity",
79850
79864
  quantity: t("the humidity", "l’umidità"),
79851
79865
  label: t("Humidity", "Umidità"),
79852
79866
  unit: "%",
@@ -79894,7 +79908,7 @@ var SENSOR_CAP_VOCABULARY = {
79894
79908
  state: [
79895
79909
  {
79896
79910
  kind: "numeric",
79897
- field: "watts",
79911
+ field: "power",
79898
79912
  quantity: t("the power draw", "il consumo"),
79899
79913
  label: t("Power", "Potenza"),
79900
79914
  unit: "W",
@@ -79902,7 +79916,7 @@ var SENSOR_CAP_VOCABULARY = {
79902
79916
  },
79903
79917
  {
79904
79918
  kind: "numeric",
79905
- field: "kwhTotal",
79919
+ field: "energy",
79906
79920
  quantity: t("the energy used", "l’energia consumata"),
79907
79921
  label: t("Energy", "Energia"),
79908
79922
  unit: "kWh",
@@ -79910,7 +79924,7 @@ var SENSOR_CAP_VOCABULARY = {
79910
79924
  },
79911
79925
  {
79912
79926
  kind: "numeric",
79913
- field: "volts",
79927
+ field: "voltage",
79914
79928
  quantity: t("the voltage", "la tensione"),
79915
79929
  label: t("Voltage", "Tensione"),
79916
79930
  unit: "V",
@@ -79918,7 +79932,7 @@ var SENSOR_CAP_VOCABULARY = {
79918
79932
  },
79919
79933
  {
79920
79934
  kind: "numeric",
79921
- field: "amps",
79935
+ field: "current",
79922
79936
  quantity: t("the current", "la corrente"),
79923
79937
  label: t("Current", "Corrente"),
79924
79938
  unit: "A",
@@ -79935,13 +79949,6 @@ var SENSOR_CAP_VOCABULARY = {
79935
79949
  label: t("Where", "Posizione"),
79936
79950
  phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
79937
79951
  icon: "map-pin"
79938
- }, {
79939
- kind: "numeric",
79940
- field: "batteryPercent",
79941
- quantity: t("the phone battery", "la batteria del telefono"),
79942
- label: t("Battery", "Batteria"),
79943
- unit: "%",
79944
- icon: "battery"
79945
79952
  }]
79946
79953
  },
79947
79954
  "pressure-sensor": {
@@ -79949,7 +79956,7 @@ var SENSOR_CAP_VOCABULARY = {
79949
79956
  noun: t("Pressure", "Pressione"),
79950
79957
  state: [{
79951
79958
  kind: "numeric",
79952
- field: "hpa",
79959
+ field: "pressure",
79953
79960
  quantity: t("the pressure", "la pressione"),
79954
79961
  label: t("Pressure", "Pressione"),
79955
79962
  unit: "hPa",
@@ -79985,7 +79992,7 @@ var SENSOR_CAP_VOCABULARY = {
79985
79992
  noun: t("Temperature", "Temperatura"),
79986
79993
  state: [{
79987
79994
  kind: "numeric",
79988
- field: "celsius",
79995
+ field: "temperature",
79989
79996
  quantity: t("the temperature", "la temperatura"),
79990
79997
  label: t("Temperature", "Temperatura"),
79991
79998
  unit: "°C",
@@ -80056,7 +80063,7 @@ var SENSOR_CAP_VOCABULARY = {
80056
80063
  state: [
80057
80064
  {
80058
80065
  kind: "numeric",
80059
- field: "percentage",
80066
+ field: "level",
80060
80067
  quantity: t("the battery level", "il livello della batteria"),
80061
80068
  label: t("Battery", "Batteria"),
80062
80069
  unit: "%",
@@ -80098,7 +80105,7 @@ var SENSOR_CAP_VOCABULARY = {
80098
80105
  icon: "battery-charging"
80099
80106
  }
80100
80107
  ],
80101
- events: { onStatusChanged: { notOperatorFacing: "the percentage / sleeping / charging state triggers each read one field of this change" } },
80108
+ events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
80102
80109
  extraEvents: [{
80103
80110
  category: EventCategory.DeviceAwake,
80104
80111
  label: t("Woke up", "Risvegliato"),
@@ -80116,7 +80123,7 @@ var SENSOR_CAP_VOCABULARY = {
80116
80123
  noun: t("Network link", "Collegamento di rete"),
80117
80124
  state: [{
80118
80125
  kind: "numeric",
80119
- field: "signalPercent",
80126
+ field: "signal",
80120
80127
  quantity: t("the signal strength", "l’intensità del segnale"),
80121
80128
  label: t("Signal", "Segnale"),
80122
80129
  unit: "%",