@camstack/addon-import-alexa 0.2.160 → 0.2.162

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 (18) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/{MotionZonesSettings-TwgbETGR.mjs → MotionZonesSettings-ByDKuk5o.mjs} +2 -2
  3. package/dist/{PrivacyMaskSettings-BoNkDD5o.mjs → PrivacyMaskSettings-Cn-_9Syv.mjs} +4 -4
  4. package/dist/{SceneMonitorEditor-4TxlnJK0.mjs → SceneMonitorEditor-jDMtE1yg.mjs} +3 -3
  5. package/dist/_stub.js +51 -51
  6. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_import_alexa_page-CZPqws-b.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_import_alexa_page-Ck3EMdmv.mjs} +3 -3
  7. package/dist/{_virtual_mf___mfe_internal__addon_import_alexa_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Bj2TfHO6.mjs → _virtual_mf___mfe_internal__addon_import_alexa_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DE1dtKjc.mjs} +1 -1
  8. package/dist/addon.js +173 -173
  9. package/dist/addon.mjs +173 -173
  10. package/dist/{hostInit-Datq9hsz.mjs → hostInit-CoSVGWK6.mjs} +2 -2
  11. package/dist/{player-overlays-VaUrkkRt.mjs → player-overlays-CcdvNfxc.mjs} +1 -1
  12. package/dist/remoteEntry.js +1 -1
  13. package/dist/{responsive-D9B1kcZz.mjs → responsive-BmleF5y2.mjs} +1 -1
  14. package/dist/{scene-monitor-copy-CunyuMVK.mjs → scene-monitor-copy-BEZSY5WG.mjs} +1 -1
  15. package/dist/{square-CuVo4SNm.mjs → square-DZHhUhzl.mjs} +1 -1
  16. package/dist/{trash-2-Bjze04-b.mjs → trash-2-BVrrPiKB.mjs} +1 -1
  17. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_import_alexa_page__remoteEntry_js-BY9vB6pT.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_import_alexa_page__remoteEntry_js-BA8fy0_J.mjs} +1 -1
  18. package/package.json +1 -1
package/dist/addon.js CHANGED
@@ -46,7 +46,7 @@ node_os = __toESM(node_os, 1);
46
46
  let node_child_process = require("node:child_process");
47
47
  require("node:zlib");
48
48
  let node_url = require("node:url");
49
- //#region ../types/dist/event-category-hdMR7CTW.mjs
49
+ //#region ../types/dist/event-category-DmZDPDf_.mjs
50
50
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
51
51
  EventCategory["SystemBoot"] = "system.boot";
52
52
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -673,7 +673,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
673
673
  * (a track was promoted to a stationary-registry entry) or departs (the
674
674
  * object moved / was removed). Telemetry (D8): lossy, drives a UI refresh of
675
675
  * the dedicated "Stationary" section — never the live event feed. Payload:
676
- * `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp }`.
676
+ * `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp, observedAt, zones }`.
677
677
  */
678
678
  EventCategory["PipelineAnalyticsStationaryChanged"] = "pipeline-analytics.stationary-changed";
679
679
  /**
@@ -5627,7 +5627,7 @@ var ZodIssueCode = {
5627
5627
  var ZodFirstPartyTypeKind;
5628
5628
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5629
5629
  //#endregion
5630
- //#region ../types/dist/sleep-BHjNez61.mjs
5630
+ //#region ../types/dist/sleep-Crlmu_tO.mjs
5631
5631
  /**
5632
5632
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5633
5633
  * window to float samples (D455).
@@ -9147,11 +9147,11 @@ var CAP_NAMES = Object.freeze([
9147
9147
  Object.freeze({
9148
9148
  "air-quality-sensor": [
9149
9149
  {
9150
- "path": "co2Ppm",
9150
+ "path": "co2",
9151
9151
  "valueType": "number"
9152
9152
  },
9153
9153
  {
9154
- "path": "vocPpb",
9154
+ "path": "voc",
9155
9155
  "valueType": "number"
9156
9156
  },
9157
9157
  {
@@ -9201,7 +9201,7 @@ Object.freeze({
9201
9201
  }
9202
9202
  ],
9203
9203
  "ambient-light-sensor": [{
9204
- "path": "lux",
9204
+ "path": "illuminance",
9205
9205
  "valueType": "number"
9206
9206
  }],
9207
9207
  "audio-metrics": [
@@ -9262,7 +9262,7 @@ Object.freeze({
9262
9262
  ],
9263
9263
  "battery": [
9264
9264
  {
9265
- "path": "percentage",
9265
+ "path": "level",
9266
9266
  "valueType": "number"
9267
9267
  },
9268
9268
  {
@@ -9284,7 +9284,7 @@ Object.freeze({
9284
9284
  "valueType": "number"
9285
9285
  },
9286
9286
  {
9287
- "path": "volts",
9287
+ "path": "voltage",
9288
9288
  "valueType": "number"
9289
9289
  },
9290
9290
  {
@@ -9305,7 +9305,7 @@ Object.freeze({
9305
9305
  "valueType": "boolean"
9306
9306
  }],
9307
9307
  "brightness": [{
9308
- "path": "percentage",
9308
+ "path": "level",
9309
9309
  "valueType": "number"
9310
9310
  }],
9311
9311
  "broker": [{
@@ -9506,7 +9506,7 @@ Object.freeze({
9506
9506
  "valueType": "number"
9507
9507
  },
9508
9508
  {
9509
- "path": "mireds",
9509
+ "path": "colorTemperature",
9510
9510
  "valueType": "number"
9511
9511
  }
9512
9512
  ],
@@ -9685,15 +9685,15 @@ Object.freeze({
9685
9685
  "valueType": "string"
9686
9686
  },
9687
9687
  {
9688
- "path": "remainingSeconds",
9688
+ "path": "remaining",
9689
9689
  "valueType": "number"
9690
9690
  },
9691
9691
  {
9692
- "path": "delayedStartSeconds",
9692
+ "path": "delayedStart",
9693
9693
  "valueType": "number"
9694
9694
  },
9695
9695
  {
9696
- "path": "progressPercent",
9696
+ "path": "progress",
9697
9697
  "valueType": "number"
9698
9698
  },
9699
9699
  {
@@ -9807,7 +9807,7 @@ Object.freeze({
9807
9807
  ],
9808
9808
  "fan-control": [
9809
9809
  {
9810
- "path": "percentage",
9810
+ "path": "speed",
9811
9811
  "valueType": "number"
9812
9812
  },
9813
9813
  {
@@ -9907,7 +9907,7 @@ Object.freeze({
9907
9907
  }
9908
9908
  ],
9909
9909
  "humidity-sensor": [{
9910
- "path": "percent",
9910
+ "path": "humidity",
9911
9911
  "valueType": "number"
9912
9912
  }],
9913
9913
  "image": [{
@@ -10017,7 +10017,7 @@ Object.freeze({
10017
10017
  "valueType": "number"
10018
10018
  },
10019
10019
  {
10020
- "path": "progressPercent",
10020
+ "path": "progress",
10021
10021
  "valueType": "number"
10022
10022
  },
10023
10023
  {
@@ -10096,11 +10096,11 @@ Object.freeze({
10096
10096
  "valueType": "string"
10097
10097
  },
10098
10098
  {
10099
- "path": "positionMs",
10099
+ "path": "position",
10100
10100
  "valueType": "number"
10101
10101
  },
10102
10102
  {
10103
- "path": "durationMs",
10103
+ "path": "duration",
10104
10104
  "valueType": "number"
10105
10105
  },
10106
10106
  {
@@ -10202,11 +10202,11 @@ Object.freeze({
10202
10202
  ]
10203
10203
  },
10204
10204
  {
10205
- "path": "signalPercent",
10205
+ "path": "signal",
10206
10206
  "valueType": "number"
10207
10207
  },
10208
10208
  {
10209
- "path": "rssiDbm",
10209
+ "path": "rssi",
10210
10210
  "valueType": "number"
10211
10211
  },
10212
10212
  {
@@ -10337,23 +10337,23 @@ Object.freeze({
10337
10337
  ],
10338
10338
  "power-meter": [
10339
10339
  {
10340
- "path": "watts",
10340
+ "path": "power",
10341
10341
  "valueType": "number"
10342
10342
  },
10343
10343
  {
10344
- "path": "kwhTotal",
10344
+ "path": "energy",
10345
10345
  "valueType": "number"
10346
10346
  },
10347
10347
  {
10348
- "path": "volts",
10348
+ "path": "voltage",
10349
10349
  "valueType": "number"
10350
10350
  },
10351
10351
  {
10352
- "path": "amps",
10352
+ "path": "current",
10353
10353
  "valueType": "number"
10354
10354
  },
10355
10355
  {
10356
- "path": "va",
10356
+ "path": "apparentPower",
10357
10357
  "valueType": "number"
10358
10358
  },
10359
10359
  {
@@ -10381,14 +10381,10 @@ Object.freeze({
10381
10381
  {
10382
10382
  "path": "gps.accuracyMeters",
10383
10383
  "valueType": "number"
10384
- },
10385
- {
10386
- "path": "batteryPercent",
10387
- "valueType": "number"
10388
10384
  }
10389
10385
  ],
10390
10386
  "pressure-sensor": [{
10391
- "path": "hpa",
10387
+ "path": "pressure",
10392
10388
  "valueType": "number"
10393
10389
  }],
10394
10390
  "privacy-mask": [{
@@ -10702,7 +10698,7 @@ Object.freeze({
10702
10698
  "valueType": "boolean"
10703
10699
  }],
10704
10700
  "temperature-sensor": [{
10705
- "path": "celsius",
10701
+ "path": "temperature",
10706
10702
  "valueType": "number"
10707
10703
  }],
10708
10704
  "update": [
@@ -10750,7 +10746,7 @@ Object.freeze({
10750
10746
  "valueType": "string"
10751
10747
  },
10752
10748
  {
10753
- "path": "progressPercent",
10749
+ "path": "progress",
10754
10750
  "valueType": "number"
10755
10751
  },
10756
10752
  {
@@ -11235,7 +11231,7 @@ function errMsg(err) {
11235
11231
  return String(err);
11236
11232
  }
11237
11233
  //#endregion
11238
- //#region ../types/dist/composition-Bb8iwHEJ.mjs
11234
+ //#region ../types/dist/composition-CZImLpOI.mjs
11239
11235
  /**
11240
11236
  * The ffmpeg build every CamStack node downloads, per platform and arch.
11241
11237
  *
@@ -15872,6 +15868,14 @@ var AutomationConditionLeafSchema = object({
15872
15868
  array(union([string(), number()]))
15873
15869
  ])
15874
15870
  });
15871
+ var AutomationConditionStationaryPresentSchema = object({
15872
+ kind: literal("stationary-present"),
15873
+ deviceId: number().int().nonnegative(),
15874
+ /** Class names; a macro class matches every raw class that maps to it. */
15875
+ classes: array(string().min(1)).min(1).optional(),
15876
+ /** The parked object must be in at least one of these zones. */
15877
+ zones: array(string().min(1)).min(1).optional()
15878
+ });
15875
15879
  /**
15876
15880
  * The expression leaf, declared as a plain object rather than an intersection
15877
15881
  * with {@link ExpressionSourceSchema}: a discriminated union has to be able to
@@ -15905,7 +15909,8 @@ var AutomationConditionSchema = lazy(() => discriminatedUnion("kind", [
15905
15909
  child: AutomationConditionSchema
15906
15910
  }),
15907
15911
  AutomationConditionLeafSchema,
15908
- AutomationConditionExpressionSchema
15912
+ AutomationConditionExpressionSchema,
15913
+ AutomationConditionStationaryPresentSchema
15909
15914
  ]));
15910
15915
  /**
15911
15916
  * What starts a run.
@@ -15959,6 +15964,17 @@ var AutomationTriggerSchema = discriminatedUnion("kind", [
15959
15964
  /** Best-so-far confidence the track must reach. */
15960
15965
  minScore: number().min(0).max(1).optional()
15961
15966
  }),
15967
+ object({
15968
+ kind: literal("stationary"),
15969
+ deviceIds: array(number().int().nonnegative()).min(1),
15970
+ /** Class names; a macro class matches like the detection trigger. */
15971
+ classes: array(string().min(1)).min(1).optional(),
15972
+ /** The parked object must be in at least one of these zones. */
15973
+ zones: array(string().min(1)).min(1).optional(),
15974
+ /** `appeared`: it became parked. `departed`: the registry retired it.
15975
+ * The vocabulary of `PipelineAnalyticsStationaryChanged`. */
15976
+ phase: _enum(["appeared", "departed"])
15977
+ }),
15962
15978
  object({
15963
15979
  kind: literal("interval"),
15964
15980
  minutes: number().int().min(1).max(1440)
@@ -16168,7 +16184,8 @@ var AutomationConditionTraceNodeSchema = object({
16168
16184
  "any",
16169
16185
  "not",
16170
16186
  "condition",
16171
- "expression"
16187
+ "expression",
16188
+ "stationary-present"
16172
16189
  ]),
16173
16190
  outcome: TraceNodeOutcomeSchema,
16174
16191
  reason: string(),
@@ -19152,7 +19169,7 @@ var CompositionEventPlanSchema = object({
19152
19169
  stateField: string(),
19153
19170
  fieldKey: string()
19154
19171
  });
19155
- /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.celsius`. */
19172
+ /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.temperature`. */
19156
19173
  var CompositionProblemSchema = object({
19157
19174
  code: _enum([
19158
19175
  "reserved-variant",
@@ -19471,7 +19488,7 @@ var GROUP_TEMPLATES = [
19471
19488
  summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
19472
19489
  role: DeviceRole.TemperatureSensor,
19473
19490
  outputCap: "temperature-sensor",
19474
- outputField: "celsius",
19491
+ outputField: "temperature",
19475
19492
  quantity: "temperature",
19476
19493
  defaultAggregate: "mean",
19477
19494
  empty: "null",
@@ -19482,7 +19499,7 @@ var GROUP_TEMPLATES = [
19482
19499
  summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
19483
19500
  role: DeviceRole.HumiditySensor,
19484
19501
  outputCap: "humidity-sensor",
19485
- outputField: "percent",
19502
+ outputField: "humidity",
19486
19503
  quantity: "humidity",
19487
19504
  defaultAggregate: "mean",
19488
19505
  empty: "null",
@@ -19493,7 +19510,7 @@ var GROUP_TEMPLATES = [
19493
19510
  summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
19494
19511
  role: DeviceRole.PressureSensor,
19495
19512
  outputCap: "pressure-sensor",
19496
- outputField: "hpa",
19513
+ outputField: "pressure",
19497
19514
  quantity: "pressure",
19498
19515
  defaultAggregate: "mean",
19499
19516
  empty: "null",
@@ -19504,7 +19521,7 @@ var GROUP_TEMPLATES = [
19504
19521
  summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
19505
19522
  role: DeviceRole.AmbientLightSensor,
19506
19523
  outputCap: "ambient-light-sensor",
19507
- outputField: "lux",
19524
+ outputField: "illuminance",
19508
19525
  quantity: "illuminance",
19509
19526
  defaultAggregate: "mean",
19510
19527
  empty: "null",
@@ -19515,7 +19532,7 @@ var GROUP_TEMPLATES = [
19515
19532
  summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
19516
19533
  role: DeviceRole.PowerSensor,
19517
19534
  outputCap: "power-meter",
19518
- outputField: "watts",
19535
+ outputField: "power",
19519
19536
  quantity: "power",
19520
19537
  defaultAggregate: "sum",
19521
19538
  empty: "omit",
@@ -19526,7 +19543,7 @@ var GROUP_TEMPLATES = [
19526
19543
  summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
19527
19544
  role: DeviceRole.EnergySensor,
19528
19545
  outputCap: "power-meter",
19529
- outputField: "kwhTotal",
19546
+ outputField: "energy",
19530
19547
  quantity: "energy",
19531
19548
  defaultAggregate: "sum",
19532
19549
  empty: "omit",
@@ -19537,7 +19554,7 @@ var GROUP_TEMPLATES = [
19537
19554
  summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
19538
19555
  role: DeviceRole.BatterySensor,
19539
19556
  outputCap: "battery",
19540
- outputField: "percentage",
19557
+ outputField: "level",
19541
19558
  quantity: "percentage",
19542
19559
  defaultAggregate: "mean",
19543
19560
  empty: "null",
@@ -58016,9 +58033,9 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
58016
58033
  */
58017
58034
  var AirQualitySensorStatusSchema = object({
58018
58035
  /** Carbon dioxide concentration in ppm. */
58019
- co2Ppm: number().min(0).optional().meta(readingMeta("concentration-volume")),
58036
+ co2: number().min(0).optional().meta(readingMeta("concentration-volume")),
58020
58037
  /** Total volatile organic compounds in ppb. */
58021
- vocPpb: number().min(0).optional().meta(readingMeta("concentration-ppb")),
58038
+ voc: number().min(0).optional().meta(readingMeta("concentration-ppb")),
58022
58039
  /** Particulate matter ≤ 2.5 μm in µg/m³. */
58023
58040
  pm25: number().min(0).optional().meta(readingMeta("concentration-mass")),
58024
58041
  /** Particulate matter ≤ 10 μm in µg/m³. */
@@ -58051,12 +58068,12 @@ var airQualitySensorCapability = {
58051
58068
  * History (D850): recorded series.
58052
58069
  */
58053
58070
  history: { fields: {
58054
- co2Ppm: {
58071
+ co2: {
58055
58072
  kind: "gauge",
58056
58073
  unit: "ppm",
58057
58074
  deadband: 5
58058
58075
  },
58059
- vocPpb: {
58076
+ voc: {
58060
58077
  kind: "gauge",
58061
58078
  unit: "ppb",
58062
58079
  deadband: 5
@@ -58087,7 +58104,7 @@ var airQualitySensorCapability = {
58087
58104
  */
58088
58105
  var AmbientLightSensorStatusSchema = object({
58089
58106
  /** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
58090
- lux: number().min(0).nullable().meta(readingMeta("illuminance", {
58107
+ illuminance: number().min(0).nullable().meta(readingMeta("illuminance", {
58091
58108
  precision: 0,
58092
58109
  label: "Illuminance"
58093
58110
  })),
@@ -58116,7 +58133,7 @@ var ambientLightSensorCapability = {
58116
58133
  /**
58117
58134
  * History (D850): recorded series. Wide range, so a RELATIVE deadband (10 %).
58118
58135
  */
58119
- history: { fields: { lux: {
58136
+ history: { fields: { illuminance: {
58120
58137
  kind: "gauge",
58121
58138
  unit: "lx",
58122
58139
  deadbandPct: 10,
@@ -58429,7 +58446,7 @@ var BatteryStatusSchema = object({
58429
58446
  * Consumers must SKIP a null rather than coerce it — `battery-band` already
58430
58447
  * declines to band a non-finite reading, which is the correct shape.
58431
58448
  */
58432
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
58449
+ level: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
58433
58450
  /**
58434
58451
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
58435
58452
  * Reolink-specific for the Solar Panel 2 accessory (will become
@@ -58439,7 +58456,7 @@ var BatteryStatusSchema = object({
58439
58456
  * `'unknown'` is the absence of an answer: the provider has not read the
58440
58457
  * power fields yet, or the firmware reported neither. Before it existed,
58441
58458
  * two unreadable fields produced `'none'`, and a camera nobody had reached
58442
- * was drawn "on battery alone" — the same D315 defect `percentage` closed
58459
+ * was drawn "on battery alone" — the same D315 defect `level` closed
58443
58460
  * by going nullable. Consumers SKIP it (no charger state published, no
58444
58461
  * glyph, no HomeKit ChargingState) rather than coerce it either way.
58445
58462
  */
@@ -58463,7 +58480,7 @@ var BatteryStatusSchema = object({
58463
58480
  * that only report charge. A second reading on this cap, not a second
58464
58481
  * `numeric-sensor` on the same device.
58465
58482
  */
58466
- volts: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
58483
+ voltage: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
58467
58484
  /**
58468
58485
  * Ms epoch of the last time the device PROVED it was reachable — a
58469
58486
  * completed firmware round-trip, an observed wake, or an inbound push
@@ -58497,7 +58514,7 @@ var BatteryStatusSchema = object({
58497
58514
  /**
58498
58515
  * True when the source is a BINARY low-battery indicator (HA
58499
58516
  * `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
58500
- * charge level — `percentage` is then a coarse stand-in (100 = normal,
58517
+ * charge level — `level` is then a coarse stand-in (100 = normal,
58501
58518
  * sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
58502
58519
  * misleading exact percentage. Absent/false → genuine 0–100 % reading.
58503
58520
  */
@@ -58517,15 +58534,15 @@ var BATTERY_DEVICE_TYPES = [
58517
58534
  var batteryCustomize = {
58518
58535
  version: 1,
58519
58536
  targets: [{
58520
- id: "percentage",
58537
+ id: "level",
58521
58538
  cardinality: "scalar",
58522
58539
  vocabulary: {
58523
58540
  cap: "battery",
58524
- stateField: "percentage"
58541
+ stateField: "level"
58525
58542
  },
58526
58543
  deviceTypes: BATTERY_DEVICE_TYPES,
58527
58544
  apply: "add",
58528
- path: "percentage",
58545
+ path: "level",
58529
58546
  sources: [{
58530
58547
  kind: "field",
58531
58548
  valueKinds: ["number", "string"],
@@ -58619,7 +58636,7 @@ onStatusChanged: { data: object({
58619
58636
  schema: BatteryStatusSchema,
58620
58637
  kind: "push",
58621
58638
  empty: {
58622
- percentage: null,
58639
+ level: null,
58623
58640
  charging: "unknown",
58624
58641
  sleeping: false,
58625
58642
  lastUpdated: 0
@@ -58646,11 +58663,11 @@ onStatusChanged: { data: object({
58646
58663
  * History (D850): recorded series. The generic capture replaces the `battery` series of `pipeline-analytics:stats-5m`.
58647
58664
  */
58648
58665
  history: { fields: {
58649
- percentage: {
58666
+ level: {
58650
58667
  kind: "gauge",
58651
58668
  unit: "%"
58652
58669
  },
58653
- volts: {
58670
+ voltage: {
58654
58671
  kind: "gauge",
58655
58672
  unit: "V"
58656
58673
  }
@@ -58710,14 +58727,14 @@ var binaryCapability = {
58710
58727
  * controls to this single-method surface.
58711
58728
  *
58712
58729
  * The cap is intentionally minimal: a single `setBrightness({deviceId,
58713
- * percentage})` mutation plus the auto-injected `getStatus`. Drivers
58730
+ * level})` mutation plus the auto-injected `getStatus`. Drivers
58714
58731
  * that expose richer controls (color temperature, scenes, schedules)
58715
58732
  * should surface those via the device's `getSettingsUISchema()`
58716
58733
  * instead of bloating this cap.
58717
58734
  */
58718
58735
  var BrightnessStatusSchema = object({
58719
58736
  /** Current level as 0..100 inclusive. Firmware-reported. */
58720
- percentage: number().min(0).max(100).meta(readingMeta("percentage")),
58737
+ level: number().min(0).max(100).meta(readingMeta("percentage")),
58721
58738
  /** Ms epoch of the last operator-driven change. Useful for UI freshness. */
58722
58739
  lastChangedAt: number()
58723
58740
  });
@@ -58729,7 +58746,7 @@ var brightnessCapability = {
58729
58746
  deviceTypes: [DeviceType.Light],
58730
58747
  methods: { setBrightness: method(object({
58731
58748
  deviceId: number().int().nonnegative(),
58732
- percentage: number().min(0).max(100)
58749
+ level: number().min(0).max(100)
58733
58750
  }), _void(), {
58734
58751
  kind: "mutation",
58735
58752
  auth: "protected"
@@ -58742,7 +58759,7 @@ var brightnessCapability = {
58742
58759
  */
58743
58760
  onBrightnessChanged: { data: object({
58744
58761
  deviceId: number(),
58745
- percentage: number().min(0).max(100),
58762
+ level: number().min(0).max(100),
58746
58763
  lastChangedAt: number()
58747
58764
  }) } },
58748
58765
  status: {
@@ -58765,7 +58782,7 @@ onBrightnessChanged: { data: object({
58765
58782
  /**
58766
58783
  * History (D850): recorded series. Actuator tier: level keeps every change.
58767
58784
  */
58768
- history: { fields: { percentage: {
58785
+ history: { fields: { level: {
58769
58786
  kind: "gauge",
58770
58787
  unit: "%",
58771
58788
  minIntervalMs: 0
@@ -59379,11 +59396,11 @@ var ColorInputSchema = discriminatedUnion("mode", [
59379
59396
  }),
59380
59397
  object({
59381
59398
  mode: literal("mired"),
59382
- mireds: number().int().min(50).max(1e3)
59399
+ colorTemperature: number().int().min(50).max(1e3)
59383
59400
  })
59384
59401
  ]);
59385
59402
  var ColorStatusSchema = object({
59386
- /** Active color mode — which of `rgb` / `hsv` / `mireds` reflects
59403
+ /** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
59387
59404
  * the bulb's current state. */
59388
59405
  mode: _enum([
59389
59406
  "rgb",
@@ -59395,7 +59412,7 @@ var ColorStatusSchema = object({
59395
59412
  /** Populated when `mode === 'hsv'`. */
59396
59413
  hsv: HsvTripletSchema.optional(),
59397
59414
  /** Populated when `mode === 'mired'`. */
59398
- mireds: number().int().optional().meta(readingMeta("colour-temperature")),
59415
+ colorTemperature: number().int().optional().meta(readingMeta("colour-temperature")),
59399
59416
  /** Ms epoch of the last operator-driven change. */
59400
59417
  lastChangedAt: number()
59401
59418
  });
@@ -59427,7 +59444,7 @@ onColorChanged: { data: object({
59427
59444
  ]),
59428
59445
  rgb: RgbTripletSchema.optional(),
59429
59446
  hsv: HsvTripletSchema.optional(),
59430
- mireds: number().int().optional(),
59447
+ colorTemperature: number().int().optional(),
59431
59448
  lastChangedAt: number()
59432
59449
  }) } },
59433
59450
  status: {
@@ -60304,11 +60321,11 @@ var DishwasherStatusSchema = object({
60304
60321
  /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
60305
60322
  availablePrograms: array(string()),
60306
60323
  /** Seconds remaining on the active cycle, or null when not running / not known. */
60307
- remainingSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
60324
+ remaining: number().int().nonnegative().nullable().meta(readingMeta("duration")),
60308
60325
  /** Seconds the delayed start is set to (time until the cycle starts), or null. */
60309
- delayedStartSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
60326
+ delayedStart: number().int().nonnegative().nullable().meta(readingMeta("duration")),
60310
60327
  /** Cycle completion 0..100, or null when not applicable. */
60311
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
60328
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
60312
60329
  /** True when the door is reported open; null when the door state is not known. */
60313
60330
  doorOpen: boolean().nullable(),
60314
60331
  /** True when the door is latched (locked) during a cycle; null when not reported. */
@@ -60527,14 +60544,14 @@ var dishwasherCapability = {
60527
60544
  runtimeState: DishwasherStatusSchema,
60528
60545
  durability: "session",
60529
60546
  history: { fields: {
60530
- progressPercent: {
60547
+ progress: {
60531
60548
  kind: "gauge",
60532
60549
  unit: "%",
60533
60550
  deadband: 2
60534
60551
  },
60535
60552
  state: { kind: "enum" },
60536
60553
  operationState: { kind: "enum" },
60537
- remainingSeconds: {
60554
+ remaining: {
60538
60555
  kind: "gauge",
60539
60556
  unit: "s",
60540
60557
  minIntervalMs: 6e4
@@ -61125,7 +61142,7 @@ var FanDirectionSchema = _enum(["forward", "reverse"]);
61125
61142
  var FanControlStatusSchema = object({
61126
61143
  /** Active speed as 0..100 inclusive. Null when the device has no
61127
61144
  * speed surface (single-speed fan). */
61128
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61145
+ speed: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61129
61146
  /** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
61130
61147
  * a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
61131
61148
  percentageStep: number().positive().optional().meta(readingMeta("percentage")),
@@ -61152,7 +61169,7 @@ var fanControlCapability = {
61152
61169
  methods: {
61153
61170
  setPercentage: method(object({
61154
61171
  deviceId: number().int().nonnegative(),
61155
- percentage: number().min(0).max(100)
61172
+ speed: number().min(0).max(100)
61156
61173
  }), _void(), {
61157
61174
  kind: "mutation",
61158
61175
  auth: "protected"
@@ -61185,7 +61202,7 @@ var fanControlCapability = {
61185
61202
  },
61186
61203
  /**
61187
61204
  * Runtime-state slice — mirrored by the kernel. UI fan speed
61188
- * sliders read `percentage` for live updates.
61205
+ * sliders read `speed` for live updates.
61189
61206
  */
61190
61207
  runtimeState: FanControlStatusSchema,
61191
61208
  /**
@@ -61199,7 +61216,7 @@ var fanControlCapability = {
61199
61216
  * History (D850): recorded series. Actuator tier: speed keeps every change.
61200
61217
  */
61201
61218
  history: { fields: {
61202
- percentage: {
61219
+ speed: {
61203
61220
  kind: "gauge",
61204
61221
  unit: "%",
61205
61222
  minIntervalMs: 0
@@ -61644,7 +61661,7 @@ var humidifierCapability = {
61644
61661
  */
61645
61662
  var HumiditySensorStatusSchema = object({
61646
61663
  /** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
61647
- percent: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
61664
+ humidity: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
61648
61665
  precision: 0,
61649
61666
  label: "Humidity"
61650
61667
  })),
@@ -61673,7 +61690,7 @@ var humiditySensorCapability = {
61673
61690
  /**
61674
61691
  * History (D850): recorded series.
61675
61692
  */
61676
- history: { fields: { percent: {
61693
+ history: { fields: { humidity: {
61677
61694
  kind: "gauge",
61678
61695
  unit: "%",
61679
61696
  deadband: .5
@@ -62313,7 +62330,7 @@ var LawnMowerControlStatusSchema = object({
62313
62330
  batteryLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
62314
62331
  /** 0..100 mowing-completion percentage of the current task, or null when no
62315
62332
  * task is active / progress is unavailable. */
62316
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
62333
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
62317
62334
  /** Current device/event code (dynamic — mostly status, sometimes an error),
62318
62335
  * or null when unknown. */
62319
62336
  currentCode: number().nullable().meta(readingMeta("none")),
@@ -62813,7 +62830,7 @@ var lockControlCapability = {
62813
62830
  volatileStateFields: ["lastChangedAt"]
62814
62831
  };
62815
62832
  /**
62816
- * A monotonic total between resets (D944). Energy uses `power-meter.kwhTotal`
62833
+ * A monotonic total between resets (D944). Energy uses `power-meter.energy`
62817
62834
  * so dashboards keep one series; every other instantaneous reading lands here.
62818
62835
  * `value` is the time integral in the source quantity's accumulated base
62819
62836
  * (base-unit seconds, or kWh on the power meter). `null` is a gap, never zero.
@@ -62907,10 +62924,10 @@ var MediaPlayerStatusSchema = object({
62907
62924
  currentMedia: MediaInfoSchema.nullable(),
62908
62925
  /** Current playback position in ms. Null when not seekable or
62909
62926
  * nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
62910
- positionMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
62927
+ position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
62911
62928
  /** Total duration of the current media in ms. Null when unknown
62912
62929
  * (live stream) or nothing is playing. */
62913
- durationMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
62930
+ duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
62914
62931
  /** Shuffle toggle. Null when no shuffle surface.
62915
62932
  * Pair with `DeviceFeature.MediaPlayerShuffle`. */
62916
62933
  shuffle: boolean().nullable(),
@@ -62949,7 +62966,7 @@ var mediaPlayerCapability = {
62949
62966
  }),
62950
62967
  seek: method(object({
62951
62968
  deviceId: number().int().nonnegative(),
62952
- positionMs: number().int().nonnegative()
62969
+ position: number().int().nonnegative()
62953
62970
  }), _void(), {
62954
62971
  kind: "mutation",
62955
62972
  auth: "protected"
@@ -63021,7 +63038,7 @@ var mediaPlayerCapability = {
63021
63038
  /**
63022
63039
  * History (D850): volume (a level an operator or an automation sets; the
63023
63040
  * default 10 s floor folds a slider drag into its end value) and mute.
63024
- * `positionMs` is not recorded: it moves continuously while playing.
63041
+ * `position` is not recorded: it moves continuously while playing.
63025
63042
  */
63026
63043
  history: { fields: {
63027
63044
  volumeLevel: {
@@ -63983,9 +64000,9 @@ var NetworkLinkStatusSchema = object({
63983
64000
  * one whose reading has not landed must not be drawn at 0 %. Consumers
63984
64001
  * SKIP a null rather than coerce it.
63985
64002
  */
63986
- signalPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
64003
+ signal: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
63987
64004
  /** Raw received signal strength in dBm, when the firmware reports one. */
63988
- rssiDbm: number().optional().meta(readingMeta("signal-level")),
64005
+ rssi: number().optional().meta(readingMeta("signal-level")),
63989
64006
  /** Network name of a wireless link, when the firmware reports it. */
63990
64007
  ssid: string().optional(),
63991
64008
  /** Ms epoch of the last observation. Lets consumers reason about freshness. */
@@ -64021,7 +64038,7 @@ onStatusChanged: { data: object({
64021
64038
  kind: "push",
64022
64039
  empty: {
64023
64040
  type: "unknown",
64024
- signalPercent: null,
64041
+ signal: null,
64025
64042
  lastUpdated: 0
64026
64043
  }
64027
64044
  },
@@ -64044,13 +64061,13 @@ onStatusChanged: { data: object({
64044
64061
  * History (D850): recorded series.
64045
64062
  */
64046
64063
  history: { fields: {
64047
- signalPercent: {
64064
+ signal: {
64048
64065
  kind: "gauge",
64049
64066
  unit: "%",
64050
64067
  deadband: 3,
64051
64068
  minIntervalMs: 6e4
64052
64069
  },
64053
- rssiDbm: {
64070
+ rssi: {
64054
64071
  kind: "gauge",
64055
64072
  unit: "dBm",
64056
64073
  deadband: 2,
@@ -65370,16 +65387,16 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
65370
65387
  * in real-world devices.
65371
65388
  */
65372
65389
  var PowerMeterStatusSchema = object({
65373
- /** Instantaneous power draw in watts. */
65374
- watts: number().optional().meta(readingMeta("power", { label: "Power" })),
65390
+ /** Instantaneous power draw (watts). */
65391
+ power: number().optional().meta(readingMeta("power", { label: "Power" })),
65375
65392
  /** Cumulative energy in kilowatt-hours since the meter was reset. */
65376
- kwhTotal: number().optional().meta(readingMeta("energy", { label: "Energy" })),
65377
- /** Voltage in volts. */
65378
- volts: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
65393
+ energy: number().optional().meta(readingMeta("energy", { label: "Energy" })),
65394
+ /** Voltage (volts). */
65395
+ voltage: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
65379
65396
  /** Current in amperes. */
65380
- amps: number().optional().meta(readingMeta("current", { label: "Current" })),
65397
+ current: number().optional().meta(readingMeta("current", { label: "Current" })),
65381
65398
  /** Apparent power in volt-amperes. */
65382
- va: number().optional().meta(readingMeta("apparent-power")),
65399
+ apparentPower: number().optional().meta(readingMeta("apparent-power")),
65383
65400
  /** Power factor (0..1) if reported. */
65384
65401
  powerFactor: number().min(0).max(1).optional().meta(readingMeta("ratio")),
65385
65402
  /** Ms epoch when the slice was last updated. */
@@ -65437,14 +65454,14 @@ function powerTarget(id, unit) {
65437
65454
  advancedExpression: true
65438
65455
  };
65439
65456
  }
65440
- /** "Power and energy" extension: watts, energy, voltage and current from other devices (D951). */
65457
+ /** "Power and energy" extension: power, energy, voltage and current from other devices (D951). */
65441
65458
  var powerMeterCustomize = {
65442
65459
  version: 1,
65443
65460
  targets: [
65444
- powerTarget("watts", "W"),
65445
- powerTarget("kwhTotal", "kWh"),
65446
- powerTarget("volts", "V"),
65447
- powerTarget("amps", "A")
65461
+ powerTarget("power", "W"),
65462
+ powerTarget("energy", "kWh"),
65463
+ powerTarget("voltage", "V"),
65464
+ powerTarget("current", "A")
65448
65465
  ]
65449
65466
  };
65450
65467
  var powerMeterCapability = {
@@ -65460,41 +65477,41 @@ var powerMeterCapability = {
65460
65477
  },
65461
65478
  runtimeState: PowerMeterStatusSchema,
65462
65479
  /**
65463
- * Runtime-state durability: **restored** — as `numeric-sensor`; `kwhTotal` is an accumulator whose restored value is the baseline.
65480
+ * Runtime-state durability: **restored** — as `numeric-sensor`; `energy` is an accumulator whose restored value is the baseline.
65464
65481
  *
65465
65482
  * See `RuntimeStateDurability`. Enforced by
65466
65483
  * `scripts/check-runtime-state-durability.ts`.
65467
65484
  */
65468
65485
  durability: "restored",
65469
65486
  /**
65470
- * History (D850): recorded series. Gauges are floored at 30 s; `kwhTotal` is the one monotonic meter (counter).
65487
+ * History (D850): recorded series. Gauges are floored at 30 s; `energy` is the one monotonic meter (counter).
65471
65488
  */
65472
65489
  history: { fields: {
65473
- watts: {
65490
+ power: {
65474
65491
  kind: "gauge",
65475
65492
  unit: "W",
65476
65493
  deadband: 1,
65477
65494
  minIntervalMs: 3e4
65478
65495
  },
65479
- kwhTotal: {
65496
+ energy: {
65480
65497
  kind: "counter",
65481
65498
  unit: "kWh",
65482
65499
  deadband: .01,
65483
65500
  minIntervalMs: 6e4
65484
65501
  },
65485
- volts: {
65502
+ voltage: {
65486
65503
  kind: "gauge",
65487
65504
  unit: "V",
65488
65505
  deadband: 1,
65489
65506
  minIntervalMs: 3e4
65490
65507
  },
65491
- amps: {
65508
+ current: {
65492
65509
  kind: "gauge",
65493
65510
  unit: "A",
65494
65511
  deadband: .05,
65495
65512
  minIntervalMs: 3e4
65496
65513
  },
65497
- va: {
65514
+ apparentPower: {
65498
65515
  kind: "gauge",
65499
65516
  unit: "VA",
65500
65517
  deadband: 1,
@@ -65544,9 +65561,6 @@ var PresenceStatusSchema = object({
65544
65561
  location: string().nullable(),
65545
65562
  /** GPS coordinates when available. Null otherwise. */
65546
65563
  gps: GpsLocationSchema.nullable(),
65547
- /** Optional battery level of the tracking device (0..100). Null
65548
- * when not reported. */
65549
- batteryPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65550
65564
  /** Ms epoch when the slice was last updated. */
65551
65565
  lastChangedAt: number()
65552
65566
  });
@@ -65575,14 +65589,7 @@ var presenceCapability = {
65575
65589
  * `scripts/check-runtime-state-durability.ts`.
65576
65590
  */
65577
65591
  durability: "restored",
65578
- /**
65579
- * History (D850): recorded series.
65580
- */
65581
- history: { fields: { batteryPercent: {
65582
- kind: "gauge",
65583
- unit: "%",
65584
- deadband: 1
65585
- } } },
65592
+ history: "none",
65586
65593
  /** Clock fields: written, but excluded from the compare that decides
65587
65594
  * whether persisting is worth a SQLite commit. */
65588
65595
  volatileStateFields: ["lastChangedAt"]
@@ -65597,7 +65604,7 @@ var presenceCapability = {
65597
65604
  */
65598
65605
  var PressureSensorStatusSchema = object({
65599
65606
  /** Current pressure in hPa. `null` when the sample was refused (D393). */
65600
- hpa: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
65607
+ pressure: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
65601
65608
  /** Ms epoch when the slice was last updated. */
65602
65609
  lastFetchedAt: number()
65603
65610
  });
@@ -65623,7 +65630,7 @@ var pressureSensorCapability = {
65623
65630
  /**
65624
65631
  * History (D850): recorded series.
65625
65632
  */
65626
- history: { fields: { hpa: {
65633
+ history: { fields: { pressure: {
65627
65634
  kind: "gauge",
65628
65635
  unit: "hPa",
65629
65636
  deadband: .1
@@ -69322,7 +69329,7 @@ var tamperCapability = {
69322
69329
  */
69323
69330
  var TemperatureSensorStatusSchema = object({
69324
69331
  /** Current temperature in Celsius. `null` when the sample was refused (D393). */
69325
- celsius: number().nullable().meta(readingMeta("temperature", {
69332
+ temperature: number().nullable().meta(readingMeta("temperature", {
69326
69333
  precision: 1,
69327
69334
  label: "Temperature"
69328
69335
  })),
@@ -69351,7 +69358,7 @@ var temperatureSensorCapability = {
69351
69358
  /**
69352
69359
  * History (D850): recorded series.
69353
69360
  */
69354
- history: { fields: { celsius: {
69361
+ history: { fields: { temperature: {
69355
69362
  kind: "gauge",
69356
69363
  unit: "°C",
69357
69364
  deadband: .1
@@ -69648,7 +69655,7 @@ var VacuumControlStatusSchema = object({
69648
69655
  /** Speed tokens the hardware accepts — drives the UI selector. */
69649
69656
  availableFanSpeeds: array(string()),
69650
69657
  /** 0..100 cleaning-completion percentage of the current task, or null. */
69651
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
69658
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
69652
69659
  /** Current error code (0 / null = no error). */
69653
69660
  errorCode: number().nullable().meta(readingMeta("none")),
69654
69661
  /** Human label for {@link errorCode}, or null when none / undecodable. */
@@ -71302,7 +71309,7 @@ var BaseDevice = class {
71302
71309
  * `device-local-state.ts`. Drivers access via:
71303
71310
  *
71304
71311
  * `this.state.battery.sleeping = true` // patches the battery slice
71305
- * `const pct = this.state.battery.percentage` // reads the battery slice
71312
+ * `const pct = this.state.battery.level` // reads the battery slice
71306
71313
  * `this.state.deviceStatus.online = true` // mirrors `markOnline(true)`
71307
71314
  *
71308
71315
  * Adding a new cap with `runtimeState:` automatically extends this
@@ -71342,7 +71349,7 @@ var BaseDevice = class {
71342
71349
  * shape; drivers don't redeclare it, they just write through.
71343
71350
  *
71344
71351
  * Read: `this.runtimeState.getCapState('battery')` →
71345
- * `{percentage, charging, sleeping, lastUpdated}` for any
71352
+ * `{level, charging, sleeping, lastUpdated}` for any
71346
71353
  * provider that registers `batteryCapability`.
71347
71354
  * Write: `this.runtimeState.setCapState('battery', { … })`.
71348
71355
  *
@@ -82545,7 +82552,7 @@ var ACTUATOR_CAP_VOCABULARY = {
82545
82552
  label: t("Full brightness", "Luminosità massima"),
82546
82553
  phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
82547
82554
  icon: "sun",
82548
- args: { percentage: 100 }
82555
+ args: { level: 100 }
82549
82556
  },
82550
82557
  {
82551
82558
  id: "brightness.half",
@@ -82553,7 +82560,7 @@ var ACTUATOR_CAP_VOCABULARY = {
82553
82560
  label: t("Half brightness", "Luminosità a metà"),
82554
82561
  phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
82555
82562
  icon: "sun-dim",
82556
- args: { percentage: 50 }
82563
+ args: { level: 50 }
82557
82564
  },
82558
82565
  {
82559
82566
  id: "brightness.off",
@@ -82561,16 +82568,16 @@ var ACTUATOR_CAP_VOCABULARY = {
82561
82568
  label: t("Brightness off", "Luminosità a zero"),
82562
82569
  phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
82563
82570
  icon: "lightbulb-off",
82564
- args: { percentage: 0 }
82571
+ args: { level: 0 }
82565
82572
  },
82566
82573
  {
82567
82574
  id: "brightness.set",
82568
82575
  method: "setBrightness",
82569
82576
  label: t("Set brightness", "Imposta la luminosità"),
82570
- phrase: t("Set the brightness of {device} to {percentage}", "Imposta la luminosità di {device} a {percentage}"),
82577
+ phrase: t("Set the brightness of {device} to {level}", "Imposta la luminosità di {device} a {level}"),
82571
82578
  icon: "sun-medium",
82572
82579
  openArgs: [{
82573
- key: "percentage",
82580
+ key: "level",
82574
82581
  label: PERCENT,
82575
82582
  offer: {
82576
82583
  kind: "number",
@@ -82584,13 +82591,13 @@ var ACTUATOR_CAP_VOCABULARY = {
82584
82591
  ],
82585
82592
  state: [{
82586
82593
  kind: "numeric",
82587
- field: "percentage",
82594
+ field: "level",
82588
82595
  quantity: t("the brightness", "la luminosità"),
82589
82596
  label: t("Brightness", "Luminosità"),
82590
82597
  unit: "%",
82591
82598
  icon: "sun"
82592
82599
  }],
82593
- events: { onBrightnessChanged: { notOperatorFacing: "the `percentage` state trigger reads the same change" } }
82600
+ events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
82594
82601
  },
82595
82602
  color: {
82596
82603
  scope: "device",
@@ -82604,7 +82611,7 @@ var ACTUATOR_CAP_VOCABULARY = {
82604
82611
  icon: "sun",
82605
82612
  args: { color: {
82606
82613
  mode: "mired",
82607
- mireds: 370
82614
+ colorTemperature: 370
82608
82615
  } }
82609
82616
  },
82610
82617
  {
@@ -82615,7 +82622,7 @@ var ACTUATOR_CAP_VOCABULARY = {
82615
82622
  icon: "snowflake",
82616
82623
  args: { color: {
82617
82624
  mode: "mired",
82618
- mireds: 200
82625
+ colorTemperature: 200
82619
82626
  } }
82620
82627
  },
82621
82628
  {
@@ -83229,7 +83236,7 @@ var ACTUATOR_CAP_VOCABULARY = {
83229
83236
  label: t("Fan off", "Ventilatore spento"),
83230
83237
  phrase: t("Stop {device}", "Ferma {device}"),
83231
83238
  icon: "power-off",
83232
- args: { percentage: 0 }
83239
+ args: { speed: 0 }
83233
83240
  },
83234
83241
  {
83235
83242
  id: "fan.full",
@@ -83237,16 +83244,16 @@ var ACTUATOR_CAP_VOCABULARY = {
83237
83244
  label: t("Fan full", "Ventilatore al massimo"),
83238
83245
  phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
83239
83246
  icon: "fan",
83240
- args: { percentage: 100 }
83247
+ args: { speed: 100 }
83241
83248
  },
83242
83249
  {
83243
83250
  id: "fan.speed",
83244
83251
  method: "setPercentage",
83245
83252
  label: t("Set speed", "Imposta la velocità"),
83246
- phrase: t("Set the speed of {device} to {percentage}", "Imposta la velocità di {device} al {percentage}"),
83253
+ phrase: t("Set the speed of {device} to {speed}", "Imposta la velocità di {device} al {speed}"),
83247
83254
  icon: "fan",
83248
83255
  openArgs: [{
83249
- key: "percentage",
83256
+ key: "speed",
83250
83257
  label: t("Speed", "Velocità"),
83251
83258
  offer: {
83252
83259
  kind: "number",
@@ -83308,7 +83315,7 @@ var ACTUATOR_CAP_VOCABULARY = {
83308
83315
  ],
83309
83316
  state: [{
83310
83317
  kind: "numeric",
83311
- field: "percentage",
83318
+ field: "speed",
83312
83319
  quantity: t("the speed", "la velocità"),
83313
83320
  label: t("Speed", "Velocità"),
83314
83321
  unit: "%",
@@ -84106,7 +84113,7 @@ var APPLIANCE_CAP_VOCABULARY = {
84106
84113
  },
84107
84114
  {
84108
84115
  kind: "numeric",
84109
- field: "progressPercent",
84116
+ field: "progress",
84110
84117
  quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
84111
84118
  label: t("Progress", "Avanzamento"),
84112
84119
  unit: "%",
@@ -84464,10 +84471,10 @@ var APPLIANCE_CAP_VOCABULARY = {
84464
84471
  id: "media.seek",
84465
84472
  method: "seek",
84466
84473
  label: t("Seek", "Vai al punto"),
84467
- phrase: t("Move {device} to {positionMs}", "Porta {device} al punto {positionMs}"),
84474
+ phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
84468
84475
  icon: "fast-forward",
84469
84476
  openArgs: [{
84470
- key: "positionMs",
84477
+ key: "position",
84471
84478
  label: t("Position", "Posizione"),
84472
84479
  offer: {
84473
84480
  kind: "number",
@@ -85516,7 +85523,7 @@ var SENSOR_CAP_VOCABULARY = {
85516
85523
  state: [
85517
85524
  {
85518
85525
  kind: "numeric",
85519
- field: "co2Ppm",
85526
+ field: "co2",
85520
85527
  quantity: t("the CO₂", "la CO₂"),
85521
85528
  label: t("CO₂", "CO₂"),
85522
85529
  unit: "ppm",
@@ -85524,7 +85531,7 @@ var SENSOR_CAP_VOCABULARY = {
85524
85531
  },
85525
85532
  {
85526
85533
  kind: "numeric",
85527
- field: "vocPpb",
85534
+ field: "voc",
85528
85535
  quantity: t("the VOC level", "il livello di COV"),
85529
85536
  label: t("VOC", "COV"),
85530
85537
  unit: "ppb",
@@ -85560,7 +85567,7 @@ var SENSOR_CAP_VOCABULARY = {
85560
85567
  noun: t("Light level", "Luminosità ambiente"),
85561
85568
  state: [{
85562
85569
  kind: "numeric",
85563
- field: "lux",
85570
+ field: "illuminance",
85564
85571
  quantity: t("the light level", "la luminosità"),
85565
85572
  label: t("Illuminance", "Illuminamento"),
85566
85573
  unit: "lx",
@@ -85763,7 +85770,7 @@ var SENSOR_CAP_VOCABULARY = {
85763
85770
  noun: t("Humidity", "Umidità"),
85764
85771
  state: [{
85765
85772
  kind: "numeric",
85766
- field: "percent",
85773
+ field: "humidity",
85767
85774
  quantity: t("the humidity", "l’umidità"),
85768
85775
  label: t("Humidity", "Umidità"),
85769
85776
  unit: "%",
@@ -85811,7 +85818,7 @@ var SENSOR_CAP_VOCABULARY = {
85811
85818
  state: [
85812
85819
  {
85813
85820
  kind: "numeric",
85814
- field: "watts",
85821
+ field: "power",
85815
85822
  quantity: t("the power draw", "il consumo"),
85816
85823
  label: t("Power", "Potenza"),
85817
85824
  unit: "W",
@@ -85819,7 +85826,7 @@ var SENSOR_CAP_VOCABULARY = {
85819
85826
  },
85820
85827
  {
85821
85828
  kind: "numeric",
85822
- field: "kwhTotal",
85829
+ field: "energy",
85823
85830
  quantity: t("the energy used", "l’energia consumata"),
85824
85831
  label: t("Energy", "Energia"),
85825
85832
  unit: "kWh",
@@ -85827,7 +85834,7 @@ var SENSOR_CAP_VOCABULARY = {
85827
85834
  },
85828
85835
  {
85829
85836
  kind: "numeric",
85830
- field: "volts",
85837
+ field: "voltage",
85831
85838
  quantity: t("the voltage", "la tensione"),
85832
85839
  label: t("Voltage", "Tensione"),
85833
85840
  unit: "V",
@@ -85835,7 +85842,7 @@ var SENSOR_CAP_VOCABULARY = {
85835
85842
  },
85836
85843
  {
85837
85844
  kind: "numeric",
85838
- field: "amps",
85845
+ field: "current",
85839
85846
  quantity: t("the current", "la corrente"),
85840
85847
  label: t("Current", "Corrente"),
85841
85848
  unit: "A",
@@ -85852,13 +85859,6 @@ var SENSOR_CAP_VOCABULARY = {
85852
85859
  label: t("Where", "Posizione"),
85853
85860
  phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
85854
85861
  icon: "map-pin"
85855
- }, {
85856
- kind: "numeric",
85857
- field: "batteryPercent",
85858
- quantity: t("the phone battery", "la batteria del telefono"),
85859
- label: t("Battery", "Batteria"),
85860
- unit: "%",
85861
- icon: "battery"
85862
85862
  }]
85863
85863
  },
85864
85864
  "pressure-sensor": {
@@ -85866,7 +85866,7 @@ var SENSOR_CAP_VOCABULARY = {
85866
85866
  noun: t("Pressure", "Pressione"),
85867
85867
  state: [{
85868
85868
  kind: "numeric",
85869
- field: "hpa",
85869
+ field: "pressure",
85870
85870
  quantity: t("the pressure", "la pressione"),
85871
85871
  label: t("Pressure", "Pressione"),
85872
85872
  unit: "hPa",
@@ -85902,7 +85902,7 @@ var SENSOR_CAP_VOCABULARY = {
85902
85902
  noun: t("Temperature", "Temperatura"),
85903
85903
  state: [{
85904
85904
  kind: "numeric",
85905
- field: "celsius",
85905
+ field: "temperature",
85906
85906
  quantity: t("the temperature", "la temperatura"),
85907
85907
  label: t("Temperature", "Temperatura"),
85908
85908
  unit: "°C",
@@ -85973,7 +85973,7 @@ var SENSOR_CAP_VOCABULARY = {
85973
85973
  state: [
85974
85974
  {
85975
85975
  kind: "numeric",
85976
- field: "percentage",
85976
+ field: "level",
85977
85977
  quantity: t("the battery level", "il livello della batteria"),
85978
85978
  label: t("Battery", "Batteria"),
85979
85979
  unit: "%",
@@ -86015,7 +86015,7 @@ var SENSOR_CAP_VOCABULARY = {
86015
86015
  icon: "battery-charging"
86016
86016
  }
86017
86017
  ],
86018
- events: { onStatusChanged: { notOperatorFacing: "the percentage / sleeping / charging state triggers each read one field of this change" } },
86018
+ events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
86019
86019
  extraEvents: [{
86020
86020
  category: EventCategory.DeviceAwake,
86021
86021
  label: t("Woke up", "Risvegliato"),
@@ -86033,7 +86033,7 @@ var SENSOR_CAP_VOCABULARY = {
86033
86033
  noun: t("Network link", "Collegamento di rete"),
86034
86034
  state: [{
86035
86035
  kind: "numeric",
86036
- field: "signalPercent",
86036
+ field: "signal",
86037
86037
  quantity: t("the signal strength", "l’intensità del segnale"),
86038
86038
  label: t("Signal", "Segnale"),
86039
86039
  unit: "%",
@@ -134748,7 +134748,7 @@ var KNOWN_CAPS = new Set([
134748
134748
  * {@link alexaAccounts}; each `getStatus` prefers the latest decoded live value
134749
134749
  * (via `alexa-state-to-cap`) and falls back to the runtime/cold slice when a
134750
134750
  * property hasn't been polled yet — e.g. PowerController.powerState 'ON' →
134751
- * switch.on, BrightnessController.brightness 0..100 → brightness.percentage,
134751
+ * switch.on, BrightnessController.brightness 0..100 → brightness.level,
134752
134752
  * ContactSensor.detectionState 'DETECTED' → contact.entryOpen.
134753
134753
  *
134754
134754
  * TODO(caps): 'climate-control' (ThermostatController), 'control'
@@ -134832,7 +134832,7 @@ var AlexaDevice = class extends BaseDevice {
134832
134832
  }
134833
134833
  registerBrightness() {
134834
134834
  const COLD = {
134835
- percentage: 0,
134835
+ level: 0,
134836
134836
  lastChangedAt: 0
134837
134837
  };
134838
134838
  this.ctx.registerNativeCap(brightnessCapability, {
@@ -134841,14 +134841,14 @@ var AlexaDevice = class extends BaseDevice {
134841
134841
  const live = decodePercentage(this.liveState("Alexa.BrightnessController", "brightness"));
134842
134842
  return live === null ? cached : {
134843
134843
  ...cached,
134844
- percentage: live
134844
+ level: live
134845
134845
  };
134846
134846
  },
134847
- setBrightness: async ({ percentage }) => {
134847
+ setBrightness: async ({ level: percentage }) => {
134848
134848
  const brightness = Math.round(Math.max(0, Math.min(100, percentage)));
134849
134849
  await this.command("Alexa.BrightnessController", "SetBrightness", { brightness });
134850
134850
  this.runtimeState.setCapState("brightness", {
134851
- percentage,
134851
+ level: percentage,
134852
134852
  lastChangedAt: Date.now()
134853
134853
  });
134854
134854
  }
@@ -135002,7 +135002,7 @@ var AlexaDevice = class extends BaseDevice {
135002
135002
  }
135003
135003
  registerTemperatureSensor() {
135004
135004
  const COLD = {
135005
- celsius: 0,
135005
+ temperature: 0,
135006
135006
  lastFetchedAt: 0
135007
135007
  };
135008
135008
  this.ctx.registerNativeCap(temperatureSensorCapability, { getStatus: async () => {
@@ -135010,14 +135010,14 @@ var AlexaDevice = class extends BaseDevice {
135010
135010
  const live = decodeTemperatureCelsius(this.liveState("Alexa.TemperatureSensor", "temperature"));
135011
135011
  return live === null ? cached : {
135012
135012
  ...cached,
135013
- celsius: live
135013
+ temperature: live
135014
135014
  };
135015
135015
  } });
135016
135016
  this.runtimeState.setCapState("temperature-sensor", COLD);
135017
135017
  }
135018
135018
  registerHumiditySensor() {
135019
135019
  const COLD = {
135020
- percent: 0,
135020
+ humidity: 0,
135021
135021
  lastFetchedAt: 0
135022
135022
  };
135023
135023
  this.ctx.registerNativeCap(humiditySensorCapability, { getStatus: async () => {
@@ -135025,7 +135025,7 @@ var AlexaDevice = class extends BaseDevice {
135025
135025
  const live = decodeHumidityPercent(this.liveState("Alexa.HumiditySensor", "humidity"));
135026
135026
  return live === null ? cached : {
135027
135027
  ...cached,
135028
- percent: live
135028
+ humidity: live
135029
135029
  };
135030
135030
  } });
135031
135031
  this.runtimeState.setCapState("humidity-sensor", COLD);