@camstack/addon-post-analysis 1.2.646 → 1.2.648

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.
@@ -1,5 +1,5 @@
1
1
  import { createHash } from "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
  /**
@@ -5645,7 +5645,7 @@ var ZodIssueCode = {
5645
5645
  var ZodFirstPartyTypeKind;
5646
5646
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5647
5647
  //#endregion
5648
- //#region ../types/dist/sleep-BHjNez61.mjs
5648
+ //#region ../types/dist/sleep-Crlmu_tO.mjs
5649
5649
  /**
5650
5650
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5651
5651
  * window to float samples (D455).
@@ -9183,11 +9183,11 @@ var CAP_NAMES = Object.freeze([
9183
9183
  Object.freeze({
9184
9184
  "air-quality-sensor": [
9185
9185
  {
9186
- "path": "co2Ppm",
9186
+ "path": "co2",
9187
9187
  "valueType": "number"
9188
9188
  },
9189
9189
  {
9190
- "path": "vocPpb",
9190
+ "path": "voc",
9191
9191
  "valueType": "number"
9192
9192
  },
9193
9193
  {
@@ -9237,7 +9237,7 @@ Object.freeze({
9237
9237
  }
9238
9238
  ],
9239
9239
  "ambient-light-sensor": [{
9240
- "path": "lux",
9240
+ "path": "illuminance",
9241
9241
  "valueType": "number"
9242
9242
  }],
9243
9243
  "audio-metrics": [
@@ -9298,7 +9298,7 @@ Object.freeze({
9298
9298
  ],
9299
9299
  "battery": [
9300
9300
  {
9301
- "path": "percentage",
9301
+ "path": "level",
9302
9302
  "valueType": "number"
9303
9303
  },
9304
9304
  {
@@ -9320,7 +9320,7 @@ Object.freeze({
9320
9320
  "valueType": "number"
9321
9321
  },
9322
9322
  {
9323
- "path": "volts",
9323
+ "path": "voltage",
9324
9324
  "valueType": "number"
9325
9325
  },
9326
9326
  {
@@ -9341,7 +9341,7 @@ Object.freeze({
9341
9341
  "valueType": "boolean"
9342
9342
  }],
9343
9343
  "brightness": [{
9344
- "path": "percentage",
9344
+ "path": "level",
9345
9345
  "valueType": "number"
9346
9346
  }],
9347
9347
  "broker": [{
@@ -9542,7 +9542,7 @@ Object.freeze({
9542
9542
  "valueType": "number"
9543
9543
  },
9544
9544
  {
9545
- "path": "mireds",
9545
+ "path": "colorTemperature",
9546
9546
  "valueType": "number"
9547
9547
  }
9548
9548
  ],
@@ -9721,15 +9721,15 @@ Object.freeze({
9721
9721
  "valueType": "string"
9722
9722
  },
9723
9723
  {
9724
- "path": "remainingSeconds",
9724
+ "path": "remaining",
9725
9725
  "valueType": "number"
9726
9726
  },
9727
9727
  {
9728
- "path": "delayedStartSeconds",
9728
+ "path": "delayedStart",
9729
9729
  "valueType": "number"
9730
9730
  },
9731
9731
  {
9732
- "path": "progressPercent",
9732
+ "path": "progress",
9733
9733
  "valueType": "number"
9734
9734
  },
9735
9735
  {
@@ -9843,7 +9843,7 @@ Object.freeze({
9843
9843
  ],
9844
9844
  "fan-control": [
9845
9845
  {
9846
- "path": "percentage",
9846
+ "path": "speed",
9847
9847
  "valueType": "number"
9848
9848
  },
9849
9849
  {
@@ -9943,7 +9943,7 @@ Object.freeze({
9943
9943
  }
9944
9944
  ],
9945
9945
  "humidity-sensor": [{
9946
- "path": "percent",
9946
+ "path": "humidity",
9947
9947
  "valueType": "number"
9948
9948
  }],
9949
9949
  "image": [{
@@ -10053,7 +10053,7 @@ Object.freeze({
10053
10053
  "valueType": "number"
10054
10054
  },
10055
10055
  {
10056
- "path": "progressPercent",
10056
+ "path": "progress",
10057
10057
  "valueType": "number"
10058
10058
  },
10059
10059
  {
@@ -10132,11 +10132,11 @@ Object.freeze({
10132
10132
  "valueType": "string"
10133
10133
  },
10134
10134
  {
10135
- "path": "positionMs",
10135
+ "path": "position",
10136
10136
  "valueType": "number"
10137
10137
  },
10138
10138
  {
10139
- "path": "durationMs",
10139
+ "path": "duration",
10140
10140
  "valueType": "number"
10141
10141
  },
10142
10142
  {
@@ -10238,11 +10238,11 @@ Object.freeze({
10238
10238
  ]
10239
10239
  },
10240
10240
  {
10241
- "path": "signalPercent",
10241
+ "path": "signal",
10242
10242
  "valueType": "number"
10243
10243
  },
10244
10244
  {
10245
- "path": "rssiDbm",
10245
+ "path": "rssi",
10246
10246
  "valueType": "number"
10247
10247
  },
10248
10248
  {
@@ -10373,23 +10373,23 @@ Object.freeze({
10373
10373
  ],
10374
10374
  "power-meter": [
10375
10375
  {
10376
- "path": "watts",
10376
+ "path": "power",
10377
10377
  "valueType": "number"
10378
10378
  },
10379
10379
  {
10380
- "path": "kwhTotal",
10380
+ "path": "energy",
10381
10381
  "valueType": "number"
10382
10382
  },
10383
10383
  {
10384
- "path": "volts",
10384
+ "path": "voltage",
10385
10385
  "valueType": "number"
10386
10386
  },
10387
10387
  {
10388
- "path": "amps",
10388
+ "path": "current",
10389
10389
  "valueType": "number"
10390
10390
  },
10391
10391
  {
10392
- "path": "va",
10392
+ "path": "apparentPower",
10393
10393
  "valueType": "number"
10394
10394
  },
10395
10395
  {
@@ -10417,14 +10417,10 @@ Object.freeze({
10417
10417
  {
10418
10418
  "path": "gps.accuracyMeters",
10419
10419
  "valueType": "number"
10420
- },
10421
- {
10422
- "path": "batteryPercent",
10423
- "valueType": "number"
10424
10420
  }
10425
10421
  ],
10426
10422
  "pressure-sensor": [{
10427
- "path": "hpa",
10423
+ "path": "pressure",
10428
10424
  "valueType": "number"
10429
10425
  }],
10430
10426
  "privacy-mask": [{
@@ -10738,7 +10734,7 @@ Object.freeze({
10738
10734
  "valueType": "boolean"
10739
10735
  }],
10740
10736
  "temperature-sensor": [{
10741
- "path": "celsius",
10737
+ "path": "temperature",
10742
10738
  "valueType": "number"
10743
10739
  }],
10744
10740
  "update": [
@@ -10786,7 +10782,7 @@ Object.freeze({
10786
10782
  "valueType": "string"
10787
10783
  },
10788
10784
  {
10789
- "path": "progressPercent",
10785
+ "path": "progress",
10790
10786
  "valueType": "number"
10791
10787
  },
10792
10788
  {
@@ -11416,7 +11412,7 @@ function errMsg(err) {
11416
11412
  return String(err);
11417
11413
  }
11418
11414
  //#endregion
11419
- //#region ../types/dist/composition-Bb8iwHEJ.mjs
11415
+ //#region ../types/dist/composition-CZImLpOI.mjs
11420
11416
  /**
11421
11417
  * Deterministic SHA-256 hash of an arbitrary serialisable value. The
11422
11418
  * canonical form sorts object keys alphabetically at every depth so two
@@ -16856,6 +16852,14 @@ var AutomationConditionLeafSchema = object({
16856
16852
  array(union([string(), number()]))
16857
16853
  ])
16858
16854
  });
16855
+ var AutomationConditionStationaryPresentSchema = object({
16856
+ kind: literal("stationary-present"),
16857
+ deviceId: number().int().nonnegative(),
16858
+ /** Class names; a macro class matches every raw class that maps to it. */
16859
+ classes: array(string().min(1)).min(1).optional(),
16860
+ /** The parked object must be in at least one of these zones. */
16861
+ zones: array(string().min(1)).min(1).optional()
16862
+ });
16859
16863
  /**
16860
16864
  * The expression leaf, declared as a plain object rather than an intersection
16861
16865
  * with {@link ExpressionSourceSchema}: a discriminated union has to be able to
@@ -16889,7 +16893,8 @@ var AutomationConditionSchema = lazy(() => discriminatedUnion("kind", [
16889
16893
  child: AutomationConditionSchema
16890
16894
  }),
16891
16895
  AutomationConditionLeafSchema,
16892
- AutomationConditionExpressionSchema
16896
+ AutomationConditionExpressionSchema,
16897
+ AutomationConditionStationaryPresentSchema
16893
16898
  ]));
16894
16899
  /**
16895
16900
  * What starts a run.
@@ -16943,6 +16948,17 @@ var AutomationTriggerSchema = discriminatedUnion("kind", [
16943
16948
  /** Best-so-far confidence the track must reach. */
16944
16949
  minScore: number().min(0).max(1).optional()
16945
16950
  }),
16951
+ object({
16952
+ kind: literal("stationary"),
16953
+ deviceIds: array(number().int().nonnegative()).min(1),
16954
+ /** Class names; a macro class matches like the detection trigger. */
16955
+ classes: array(string().min(1)).min(1).optional(),
16956
+ /** The parked object must be in at least one of these zones. */
16957
+ zones: array(string().min(1)).min(1).optional(),
16958
+ /** `appeared`: it became parked. `departed`: the registry retired it.
16959
+ * The vocabulary of `PipelineAnalyticsStationaryChanged`. */
16960
+ phase: _enum(["appeared", "departed"])
16961
+ }),
16946
16962
  object({
16947
16963
  kind: literal("interval"),
16948
16964
  minutes: number().int().min(1).max(1440)
@@ -17174,7 +17190,8 @@ var AutomationConditionTraceNodeSchema = object({
17174
17190
  "any",
17175
17191
  "not",
17176
17192
  "condition",
17177
- "expression"
17193
+ "expression",
17194
+ "stationary-present"
17178
17195
  ]),
17179
17196
  outcome: TraceNodeOutcomeSchema,
17180
17197
  reason: string(),
@@ -20096,7 +20113,7 @@ var CompositionEventPlanSchema = object({
20096
20113
  stateField: string(),
20097
20114
  fieldKey: string()
20098
20115
  });
20099
- /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.celsius`. */
20116
+ /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.temperature`. */
20100
20117
  var CompositionProblemSchema = object({
20101
20118
  code: _enum([
20102
20119
  "reserved-variant",
@@ -20415,7 +20432,7 @@ var GROUP_TEMPLATES = [
20415
20432
  summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
20416
20433
  role: DeviceRole.TemperatureSensor,
20417
20434
  outputCap: "temperature-sensor",
20418
- outputField: "celsius",
20435
+ outputField: "temperature",
20419
20436
  quantity: "temperature",
20420
20437
  defaultAggregate: "mean",
20421
20438
  empty: "null",
@@ -20426,7 +20443,7 @@ var GROUP_TEMPLATES = [
20426
20443
  summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
20427
20444
  role: DeviceRole.HumiditySensor,
20428
20445
  outputCap: "humidity-sensor",
20429
- outputField: "percent",
20446
+ outputField: "humidity",
20430
20447
  quantity: "humidity",
20431
20448
  defaultAggregate: "mean",
20432
20449
  empty: "null",
@@ -20437,7 +20454,7 @@ var GROUP_TEMPLATES = [
20437
20454
  summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
20438
20455
  role: DeviceRole.PressureSensor,
20439
20456
  outputCap: "pressure-sensor",
20440
- outputField: "hpa",
20457
+ outputField: "pressure",
20441
20458
  quantity: "pressure",
20442
20459
  defaultAggregate: "mean",
20443
20460
  empty: "null",
@@ -20448,7 +20465,7 @@ var GROUP_TEMPLATES = [
20448
20465
  summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
20449
20466
  role: DeviceRole.AmbientLightSensor,
20450
20467
  outputCap: "ambient-light-sensor",
20451
- outputField: "lux",
20468
+ outputField: "illuminance",
20452
20469
  quantity: "illuminance",
20453
20470
  defaultAggregate: "mean",
20454
20471
  empty: "null",
@@ -20459,7 +20476,7 @@ var GROUP_TEMPLATES = [
20459
20476
  summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
20460
20477
  role: DeviceRole.PowerSensor,
20461
20478
  outputCap: "power-meter",
20462
- outputField: "watts",
20479
+ outputField: "power",
20463
20480
  quantity: "power",
20464
20481
  defaultAggregate: "sum",
20465
20482
  empty: "omit",
@@ -20470,7 +20487,7 @@ var GROUP_TEMPLATES = [
20470
20487
  summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
20471
20488
  role: DeviceRole.EnergySensor,
20472
20489
  outputCap: "power-meter",
20473
- outputField: "kwhTotal",
20490
+ outputField: "energy",
20474
20491
  quantity: "energy",
20475
20492
  defaultAggregate: "sum",
20476
20493
  empty: "omit",
@@ -20481,7 +20498,7 @@ var GROUP_TEMPLATES = [
20481
20498
  summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
20482
20499
  role: DeviceRole.BatterySensor,
20483
20500
  outputCap: "battery",
20484
- outputField: "percentage",
20501
+ outputField: "level",
20485
20502
  quantity: "percentage",
20486
20503
  defaultAggregate: "mean",
20487
20504
  empty: "null",
@@ -60906,9 +60923,9 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
60906
60923
  */
60907
60924
  var AirQualitySensorStatusSchema = object({
60908
60925
  /** Carbon dioxide concentration in ppm. */
60909
- co2Ppm: number().min(0).optional().meta(readingMeta("concentration-volume")),
60926
+ co2: number().min(0).optional().meta(readingMeta("concentration-volume")),
60910
60927
  /** Total volatile organic compounds in ppb. */
60911
- vocPpb: number().min(0).optional().meta(readingMeta("concentration-ppb")),
60928
+ voc: number().min(0).optional().meta(readingMeta("concentration-ppb")),
60912
60929
  /** Particulate matter ≤ 2.5 μm in µg/m³. */
60913
60930
  pm25: number().min(0).optional().meta(readingMeta("concentration-mass")),
60914
60931
  /** Particulate matter ≤ 10 μm in µg/m³. */
@@ -60941,12 +60958,12 @@ var airQualitySensorCapability = {
60941
60958
  * History (D850): recorded series.
60942
60959
  */
60943
60960
  history: { fields: {
60944
- co2Ppm: {
60961
+ co2: {
60945
60962
  kind: "gauge",
60946
60963
  unit: "ppm",
60947
60964
  deadband: 5
60948
60965
  },
60949
- vocPpb: {
60966
+ voc: {
60950
60967
  kind: "gauge",
60951
60968
  unit: "ppb",
60952
60969
  deadband: 5
@@ -60977,7 +60994,7 @@ var airQualitySensorCapability = {
60977
60994
  */
60978
60995
  var AmbientLightSensorStatusSchema = object({
60979
60996
  /** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
60980
- lux: number().min(0).nullable().meta(readingMeta("illuminance", {
60997
+ illuminance: number().min(0).nullable().meta(readingMeta("illuminance", {
60981
60998
  precision: 0,
60982
60999
  label: "Illuminance"
60983
61000
  })),
@@ -61006,7 +61023,7 @@ var ambientLightSensorCapability = {
61006
61023
  /**
61007
61024
  * History (D850): recorded series. Wide range, so a RELATIVE deadband (10 %).
61008
61025
  */
61009
- history: { fields: { lux: {
61026
+ history: { fields: { illuminance: {
61010
61027
  kind: "gauge",
61011
61028
  unit: "lx",
61012
61029
  deadbandPct: 10,
@@ -61319,7 +61336,7 @@ var BatteryStatusSchema = object({
61319
61336
  * Consumers must SKIP a null rather than coerce it — `battery-band` already
61320
61337
  * declines to band a non-finite reading, which is the correct shape.
61321
61338
  */
61322
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
61339
+ level: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
61323
61340
  /**
61324
61341
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
61325
61342
  * Reolink-specific for the Solar Panel 2 accessory (will become
@@ -61329,7 +61346,7 @@ var BatteryStatusSchema = object({
61329
61346
  * `'unknown'` is the absence of an answer: the provider has not read the
61330
61347
  * power fields yet, or the firmware reported neither. Before it existed,
61331
61348
  * two unreadable fields produced `'none'`, and a camera nobody had reached
61332
- * was drawn "on battery alone" — the same D315 defect `percentage` closed
61349
+ * was drawn "on battery alone" — the same D315 defect `level` closed
61333
61350
  * by going nullable. Consumers SKIP it (no charger state published, no
61334
61351
  * glyph, no HomeKit ChargingState) rather than coerce it either way.
61335
61352
  */
@@ -61353,7 +61370,7 @@ var BatteryStatusSchema = object({
61353
61370
  * that only report charge. A second reading on this cap, not a second
61354
61371
  * `numeric-sensor` on the same device.
61355
61372
  */
61356
- volts: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
61373
+ voltage: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
61357
61374
  /**
61358
61375
  * Ms epoch of the last time the device PROVED it was reachable — a
61359
61376
  * completed firmware round-trip, an observed wake, or an inbound push
@@ -61387,7 +61404,7 @@ var BatteryStatusSchema = object({
61387
61404
  /**
61388
61405
  * True when the source is a BINARY low-battery indicator (HA
61389
61406
  * `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
61390
- * charge level — `percentage` is then a coarse stand-in (100 = normal,
61407
+ * charge level — `level` is then a coarse stand-in (100 = normal,
61391
61408
  * sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
61392
61409
  * misleading exact percentage. Absent/false → genuine 0–100 % reading.
61393
61410
  */
@@ -61407,15 +61424,15 @@ var BATTERY_DEVICE_TYPES = [
61407
61424
  var batteryCustomize = {
61408
61425
  version: 1,
61409
61426
  targets: [{
61410
- id: "percentage",
61427
+ id: "level",
61411
61428
  cardinality: "scalar",
61412
61429
  vocabulary: {
61413
61430
  cap: "battery",
61414
- stateField: "percentage"
61431
+ stateField: "level"
61415
61432
  },
61416
61433
  deviceTypes: BATTERY_DEVICE_TYPES,
61417
61434
  apply: "add",
61418
- path: "percentage",
61435
+ path: "level",
61419
61436
  sources: [{
61420
61437
  kind: "field",
61421
61438
  valueKinds: ["number", "string"],
@@ -61509,7 +61526,7 @@ onStatusChanged: { data: object({
61509
61526
  schema: BatteryStatusSchema,
61510
61527
  kind: "push",
61511
61528
  empty: {
61512
- percentage: null,
61529
+ level: null,
61513
61530
  charging: "unknown",
61514
61531
  sleeping: false,
61515
61532
  lastUpdated: 0
@@ -61536,11 +61553,11 @@ onStatusChanged: { data: object({
61536
61553
  * History (D850): recorded series. The generic capture replaces the `battery` series of `pipeline-analytics:stats-5m`.
61537
61554
  */
61538
61555
  history: { fields: {
61539
- percentage: {
61556
+ level: {
61540
61557
  kind: "gauge",
61541
61558
  unit: "%"
61542
61559
  },
61543
- volts: {
61560
+ voltage: {
61544
61561
  kind: "gauge",
61545
61562
  unit: "V"
61546
61563
  }
@@ -61600,14 +61617,14 @@ var binaryCapability = {
61600
61617
  * controls to this single-method surface.
61601
61618
  *
61602
61619
  * The cap is intentionally minimal: a single `setBrightness({deviceId,
61603
- * percentage})` mutation plus the auto-injected `getStatus`. Drivers
61620
+ * level})` mutation plus the auto-injected `getStatus`. Drivers
61604
61621
  * that expose richer controls (color temperature, scenes, schedules)
61605
61622
  * should surface those via the device's `getSettingsUISchema()`
61606
61623
  * instead of bloating this cap.
61607
61624
  */
61608
61625
  var BrightnessStatusSchema = object({
61609
61626
  /** Current level as 0..100 inclusive. Firmware-reported. */
61610
- percentage: number().min(0).max(100).meta(readingMeta("percentage")),
61627
+ level: number().min(0).max(100).meta(readingMeta("percentage")),
61611
61628
  /** Ms epoch of the last operator-driven change. Useful for UI freshness. */
61612
61629
  lastChangedAt: number()
61613
61630
  });
@@ -61619,7 +61636,7 @@ var brightnessCapability = {
61619
61636
  deviceTypes: [DeviceType.Light],
61620
61637
  methods: { setBrightness: method(object({
61621
61638
  deviceId: number().int().nonnegative(),
61622
- percentage: number().min(0).max(100)
61639
+ level: number().min(0).max(100)
61623
61640
  }), _void(), {
61624
61641
  kind: "mutation",
61625
61642
  auth: "protected"
@@ -61632,7 +61649,7 @@ var brightnessCapability = {
61632
61649
  */
61633
61650
  onBrightnessChanged: { data: object({
61634
61651
  deviceId: number(),
61635
- percentage: number().min(0).max(100),
61652
+ level: number().min(0).max(100),
61636
61653
  lastChangedAt: number()
61637
61654
  }) } },
61638
61655
  status: {
@@ -61655,7 +61672,7 @@ onBrightnessChanged: { data: object({
61655
61672
  /**
61656
61673
  * History (D850): recorded series. Actuator tier: level keeps every change.
61657
61674
  */
61658
- history: { fields: { percentage: {
61675
+ history: { fields: { level: {
61659
61676
  kind: "gauge",
61660
61677
  unit: "%",
61661
61678
  minIntervalMs: 0
@@ -62279,11 +62296,11 @@ var ColorInputSchema = discriminatedUnion("mode", [
62279
62296
  }),
62280
62297
  object({
62281
62298
  mode: literal("mired"),
62282
- mireds: number().int().min(50).max(1e3)
62299
+ colorTemperature: number().int().min(50).max(1e3)
62283
62300
  })
62284
62301
  ]);
62285
62302
  var ColorStatusSchema = object({
62286
- /** Active color mode — which of `rgb` / `hsv` / `mireds` reflects
62303
+ /** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
62287
62304
  * the bulb's current state. */
62288
62305
  mode: _enum([
62289
62306
  "rgb",
@@ -62295,7 +62312,7 @@ var ColorStatusSchema = object({
62295
62312
  /** Populated when `mode === 'hsv'`. */
62296
62313
  hsv: HsvTripletSchema.optional(),
62297
62314
  /** Populated when `mode === 'mired'`. */
62298
- mireds: number().int().optional().meta(readingMeta("colour-temperature")),
62315
+ colorTemperature: number().int().optional().meta(readingMeta("colour-temperature")),
62299
62316
  /** Ms epoch of the last operator-driven change. */
62300
62317
  lastChangedAt: number()
62301
62318
  });
@@ -62327,7 +62344,7 @@ onColorChanged: { data: object({
62327
62344
  ]),
62328
62345
  rgb: RgbTripletSchema.optional(),
62329
62346
  hsv: HsvTripletSchema.optional(),
62330
- mireds: number().int().optional(),
62347
+ colorTemperature: number().int().optional(),
62331
62348
  lastChangedAt: number()
62332
62349
  }) } },
62333
62350
  status: {
@@ -63240,11 +63257,11 @@ var DishwasherStatusSchema = object({
63240
63257
  /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
63241
63258
  availablePrograms: array(string()),
63242
63259
  /** Seconds remaining on the active cycle, or null when not running / not known. */
63243
- remainingSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
63260
+ remaining: number().int().nonnegative().nullable().meta(readingMeta("duration")),
63244
63261
  /** Seconds the delayed start is set to (time until the cycle starts), or null. */
63245
- delayedStartSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
63262
+ delayedStart: number().int().nonnegative().nullable().meta(readingMeta("duration")),
63246
63263
  /** Cycle completion 0..100, or null when not applicable. */
63247
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
63264
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
63248
63265
  /** True when the door is reported open; null when the door state is not known. */
63249
63266
  doorOpen: boolean().nullable(),
63250
63267
  /** True when the door is latched (locked) during a cycle; null when not reported. */
@@ -63463,14 +63480,14 @@ var dishwasherCapability = {
63463
63480
  runtimeState: DishwasherStatusSchema,
63464
63481
  durability: "session",
63465
63482
  history: { fields: {
63466
- progressPercent: {
63483
+ progress: {
63467
63484
  kind: "gauge",
63468
63485
  unit: "%",
63469
63486
  deadband: 2
63470
63487
  },
63471
63488
  state: { kind: "enum" },
63472
63489
  operationState: { kind: "enum" },
63473
- remainingSeconds: {
63490
+ remaining: {
63474
63491
  kind: "gauge",
63475
63492
  unit: "s",
63476
63493
  minIntervalMs: 6e4
@@ -64101,7 +64118,7 @@ var FanDirectionSchema = _enum(["forward", "reverse"]);
64101
64118
  var FanControlStatusSchema = object({
64102
64119
  /** Active speed as 0..100 inclusive. Null when the device has no
64103
64120
  * speed surface (single-speed fan). */
64104
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
64121
+ speed: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
64105
64122
  /** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
64106
64123
  * a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
64107
64124
  percentageStep: number().positive().optional().meta(readingMeta("percentage")),
@@ -64128,7 +64145,7 @@ var fanControlCapability = {
64128
64145
  methods: {
64129
64146
  setPercentage: method(object({
64130
64147
  deviceId: number().int().nonnegative(),
64131
- percentage: number().min(0).max(100)
64148
+ speed: number().min(0).max(100)
64132
64149
  }), _void(), {
64133
64150
  kind: "mutation",
64134
64151
  auth: "protected"
@@ -64161,7 +64178,7 @@ var fanControlCapability = {
64161
64178
  },
64162
64179
  /**
64163
64180
  * Runtime-state slice — mirrored by the kernel. UI fan speed
64164
- * sliders read `percentage` for live updates.
64181
+ * sliders read `speed` for live updates.
64165
64182
  */
64166
64183
  runtimeState: FanControlStatusSchema,
64167
64184
  /**
@@ -64175,7 +64192,7 @@ var fanControlCapability = {
64175
64192
  * History (D850): recorded series. Actuator tier: speed keeps every change.
64176
64193
  */
64177
64194
  history: { fields: {
64178
- percentage: {
64195
+ speed: {
64179
64196
  kind: "gauge",
64180
64197
  unit: "%",
64181
64198
  minIntervalMs: 0
@@ -64620,7 +64637,7 @@ var humidifierCapability = {
64620
64637
  */
64621
64638
  var HumiditySensorStatusSchema = object({
64622
64639
  /** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
64623
- percent: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
64640
+ humidity: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
64624
64641
  precision: 0,
64625
64642
  label: "Humidity"
64626
64643
  })),
@@ -64649,7 +64666,7 @@ var humiditySensorCapability = {
64649
64666
  /**
64650
64667
  * History (D850): recorded series.
64651
64668
  */
64652
- history: { fields: { percent: {
64669
+ history: { fields: { humidity: {
64653
64670
  kind: "gauge",
64654
64671
  unit: "%",
64655
64672
  deadband: .5
@@ -65289,7 +65306,7 @@ var LawnMowerControlStatusSchema = object({
65289
65306
  batteryLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65290
65307
  /** 0..100 mowing-completion percentage of the current task, or null when no
65291
65308
  * task is active / progress is unavailable. */
65292
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65309
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65293
65310
  /** Current device/event code (dynamic — mostly status, sometimes an error),
65294
65311
  * or null when unknown. */
65295
65312
  currentCode: number().nullable().meta(readingMeta("none")),
@@ -65810,7 +65827,7 @@ var lockControlCapability = {
65810
65827
  volatileStateFields: ["lastChangedAt"]
65811
65828
  };
65812
65829
  /**
65813
- * A monotonic total between resets (D944). Energy uses `power-meter.kwhTotal`
65830
+ * A monotonic total between resets (D944). Energy uses `power-meter.energy`
65814
65831
  * so dashboards keep one series; every other instantaneous reading lands here.
65815
65832
  * `value` is the time integral in the source quantity's accumulated base
65816
65833
  * (base-unit seconds, or kWh on the power meter). `null` is a gap, never zero.
@@ -65904,10 +65921,10 @@ var MediaPlayerStatusSchema = object({
65904
65921
  currentMedia: MediaInfoSchema.nullable(),
65905
65922
  /** Current playback position in ms. Null when not seekable or
65906
65923
  * nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
65907
- positionMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
65924
+ position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
65908
65925
  /** Total duration of the current media in ms. Null when unknown
65909
65926
  * (live stream) or nothing is playing. */
65910
- durationMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
65927
+ duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
65911
65928
  /** Shuffle toggle. Null when no shuffle surface.
65912
65929
  * Pair with `DeviceFeature.MediaPlayerShuffle`. */
65913
65930
  shuffle: boolean().nullable(),
@@ -65946,7 +65963,7 @@ var mediaPlayerCapability = {
65946
65963
  }),
65947
65964
  seek: method(object({
65948
65965
  deviceId: number().int().nonnegative(),
65949
- positionMs: number().int().nonnegative()
65966
+ position: number().int().nonnegative()
65950
65967
  }), _void(), {
65951
65968
  kind: "mutation",
65952
65969
  auth: "protected"
@@ -66018,7 +66035,7 @@ var mediaPlayerCapability = {
66018
66035
  /**
66019
66036
  * History (D850): volume (a level an operator or an automation sets; the
66020
66037
  * default 10 s floor folds a slider drag into its end value) and mute.
66021
- * `positionMs` is not recorded: it moves continuously while playing.
66038
+ * `position` is not recorded: it moves continuously while playing.
66022
66039
  */
66023
66040
  history: { fields: {
66024
66041
  volumeLevel: {
@@ -67005,9 +67022,9 @@ var NetworkLinkStatusSchema = object({
67005
67022
  * one whose reading has not landed must not be drawn at 0 %. Consumers
67006
67023
  * SKIP a null rather than coerce it.
67007
67024
  */
67008
- signalPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
67025
+ signal: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
67009
67026
  /** Raw received signal strength in dBm, when the firmware reports one. */
67010
- rssiDbm: number().optional().meta(readingMeta("signal-level")),
67027
+ rssi: number().optional().meta(readingMeta("signal-level")),
67011
67028
  /** Network name of a wireless link, when the firmware reports it. */
67012
67029
  ssid: string().optional(),
67013
67030
  /** Ms epoch of the last observation. Lets consumers reason about freshness. */
@@ -67043,7 +67060,7 @@ onStatusChanged: { data: object({
67043
67060
  kind: "push",
67044
67061
  empty: {
67045
67062
  type: "unknown",
67046
- signalPercent: null,
67063
+ signal: null,
67047
67064
  lastUpdated: 0
67048
67065
  }
67049
67066
  },
@@ -67066,13 +67083,13 @@ onStatusChanged: { data: object({
67066
67083
  * History (D850): recorded series.
67067
67084
  */
67068
67085
  history: { fields: {
67069
- signalPercent: {
67086
+ signal: {
67070
67087
  kind: "gauge",
67071
67088
  unit: "%",
67072
67089
  deadband: 3,
67073
67090
  minIntervalMs: 6e4
67074
67091
  },
67075
- rssiDbm: {
67092
+ rssi: {
67076
67093
  kind: "gauge",
67077
67094
  unit: "dBm",
67078
67095
  deadband: 2,
@@ -68427,16 +68444,16 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
68427
68444
  * in real-world devices.
68428
68445
  */
68429
68446
  var PowerMeterStatusSchema = object({
68430
- /** Instantaneous power draw in watts. */
68431
- watts: number().optional().meta(readingMeta("power", { label: "Power" })),
68447
+ /** Instantaneous power draw (watts). */
68448
+ power: number().optional().meta(readingMeta("power", { label: "Power" })),
68432
68449
  /** Cumulative energy in kilowatt-hours since the meter was reset. */
68433
- kwhTotal: number().optional().meta(readingMeta("energy", { label: "Energy" })),
68434
- /** Voltage in volts. */
68435
- volts: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
68450
+ energy: number().optional().meta(readingMeta("energy", { label: "Energy" })),
68451
+ /** Voltage (volts). */
68452
+ voltage: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
68436
68453
  /** Current in amperes. */
68437
- amps: number().optional().meta(readingMeta("current", { label: "Current" })),
68454
+ current: number().optional().meta(readingMeta("current", { label: "Current" })),
68438
68455
  /** Apparent power in volt-amperes. */
68439
- va: number().optional().meta(readingMeta("apparent-power")),
68456
+ apparentPower: number().optional().meta(readingMeta("apparent-power")),
68440
68457
  /** Power factor (0..1) if reported. */
68441
68458
  powerFactor: number().min(0).max(1).optional().meta(readingMeta("ratio")),
68442
68459
  /** Ms epoch when the slice was last updated. */
@@ -68494,14 +68511,14 @@ function powerTarget(id, unit) {
68494
68511
  advancedExpression: true
68495
68512
  };
68496
68513
  }
68497
- /** "Power and energy" extension: watts, energy, voltage and current from other devices (D951). */
68514
+ /** "Power and energy" extension: power, energy, voltage and current from other devices (D951). */
68498
68515
  var powerMeterCustomize = {
68499
68516
  version: 1,
68500
68517
  targets: [
68501
- powerTarget("watts", "W"),
68502
- powerTarget("kwhTotal", "kWh"),
68503
- powerTarget("volts", "V"),
68504
- powerTarget("amps", "A")
68518
+ powerTarget("power", "W"),
68519
+ powerTarget("energy", "kWh"),
68520
+ powerTarget("voltage", "V"),
68521
+ powerTarget("current", "A")
68505
68522
  ]
68506
68523
  };
68507
68524
  var powerMeterCapability = {
@@ -68517,41 +68534,41 @@ var powerMeterCapability = {
68517
68534
  },
68518
68535
  runtimeState: PowerMeterStatusSchema,
68519
68536
  /**
68520
- * Runtime-state durability: **restored** — as `numeric-sensor`; `kwhTotal` is an accumulator whose restored value is the baseline.
68537
+ * Runtime-state durability: **restored** — as `numeric-sensor`; `energy` is an accumulator whose restored value is the baseline.
68521
68538
  *
68522
68539
  * See `RuntimeStateDurability`. Enforced by
68523
68540
  * `scripts/check-runtime-state-durability.ts`.
68524
68541
  */
68525
68542
  durability: "restored",
68526
68543
  /**
68527
- * History (D850): recorded series. Gauges are floored at 30 s; `kwhTotal` is the one monotonic meter (counter).
68544
+ * History (D850): recorded series. Gauges are floored at 30 s; `energy` is the one monotonic meter (counter).
68528
68545
  */
68529
68546
  history: { fields: {
68530
- watts: {
68547
+ power: {
68531
68548
  kind: "gauge",
68532
68549
  unit: "W",
68533
68550
  deadband: 1,
68534
68551
  minIntervalMs: 3e4
68535
68552
  },
68536
- kwhTotal: {
68553
+ energy: {
68537
68554
  kind: "counter",
68538
68555
  unit: "kWh",
68539
68556
  deadband: .01,
68540
68557
  minIntervalMs: 6e4
68541
68558
  },
68542
- volts: {
68559
+ voltage: {
68543
68560
  kind: "gauge",
68544
68561
  unit: "V",
68545
68562
  deadband: 1,
68546
68563
  minIntervalMs: 3e4
68547
68564
  },
68548
- amps: {
68565
+ current: {
68549
68566
  kind: "gauge",
68550
68567
  unit: "A",
68551
68568
  deadband: .05,
68552
68569
  minIntervalMs: 3e4
68553
68570
  },
68554
- va: {
68571
+ apparentPower: {
68555
68572
  kind: "gauge",
68556
68573
  unit: "VA",
68557
68574
  deadband: 1,
@@ -68601,9 +68618,6 @@ var PresenceStatusSchema = object({
68601
68618
  location: string().nullable(),
68602
68619
  /** GPS coordinates when available. Null otherwise. */
68603
68620
  gps: GpsLocationSchema.nullable(),
68604
- /** Optional battery level of the tracking device (0..100). Null
68605
- * when not reported. */
68606
- batteryPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
68607
68621
  /** Ms epoch when the slice was last updated. */
68608
68622
  lastChangedAt: number()
68609
68623
  });
@@ -68632,14 +68646,7 @@ var presenceCapability = {
68632
68646
  * `scripts/check-runtime-state-durability.ts`.
68633
68647
  */
68634
68648
  durability: "restored",
68635
- /**
68636
- * History (D850): recorded series.
68637
- */
68638
- history: { fields: { batteryPercent: {
68639
- kind: "gauge",
68640
- unit: "%",
68641
- deadband: 1
68642
- } } },
68649
+ history: "none",
68643
68650
  /** Clock fields: written, but excluded from the compare that decides
68644
68651
  * whether persisting is worth a SQLite commit. */
68645
68652
  volatileStateFields: ["lastChangedAt"]
@@ -68654,7 +68661,7 @@ var presenceCapability = {
68654
68661
  */
68655
68662
  var PressureSensorStatusSchema = object({
68656
68663
  /** Current pressure in hPa. `null` when the sample was refused (D393). */
68657
- hpa: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
68664
+ pressure: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
68658
68665
  /** Ms epoch when the slice was last updated. */
68659
68666
  lastFetchedAt: number()
68660
68667
  });
@@ -68680,7 +68687,7 @@ var pressureSensorCapability = {
68680
68687
  /**
68681
68688
  * History (D850): recorded series.
68682
68689
  */
68683
- history: { fields: { hpa: {
68690
+ history: { fields: { pressure: {
68684
68691
  kind: "gauge",
68685
68692
  unit: "hPa",
68686
68693
  deadband: .1
@@ -72429,7 +72436,7 @@ var tamperCapability = {
72429
72436
  */
72430
72437
  var TemperatureSensorStatusSchema = object({
72431
72438
  /** Current temperature in Celsius. `null` when the sample was refused (D393). */
72432
- celsius: number().nullable().meta(readingMeta("temperature", {
72439
+ temperature: number().nullable().meta(readingMeta("temperature", {
72433
72440
  precision: 1,
72434
72441
  label: "Temperature"
72435
72442
  })),
@@ -72458,7 +72465,7 @@ var temperatureSensorCapability = {
72458
72465
  /**
72459
72466
  * History (D850): recorded series.
72460
72467
  */
72461
- history: { fields: { celsius: {
72468
+ history: { fields: { temperature: {
72462
72469
  kind: "gauge",
72463
72470
  unit: "°C",
72464
72471
  deadband: .1
@@ -72755,7 +72762,7 @@ var VacuumControlStatusSchema = object({
72755
72762
  /** Speed tokens the hardware accepts — drives the UI selector. */
72756
72763
  availableFanSpeeds: array(string()),
72757
72764
  /** 0..100 cleaning-completion percentage of the current task, or null. */
72758
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
72765
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
72759
72766
  /** Current error code (0 / null = no error). */
72760
72767
  errorCode: number().nullable().meta(readingMeta("none")),
72761
72768
  /** Human label for {@link errorCode}, or null when none / undecodable. */
@@ -74462,7 +74469,7 @@ var BaseDevice = class {
74462
74469
  * `device-local-state.ts`. Drivers access via:
74463
74470
  *
74464
74471
  * `this.state.battery.sleeping = true` // patches the battery slice
74465
- * `const pct = this.state.battery.percentage` // reads the battery slice
74472
+ * `const pct = this.state.battery.level` // reads the battery slice
74466
74473
  * `this.state.deviceStatus.online = true` // mirrors `markOnline(true)`
74467
74474
  *
74468
74475
  * Adding a new cap with `runtimeState:` automatically extends this
@@ -74502,7 +74509,7 @@ var BaseDevice = class {
74502
74509
  * shape; drivers don't redeclare it, they just write through.
74503
74510
  *
74504
74511
  * Read: `this.runtimeState.getCapState('battery')` →
74505
- * `{percentage, charging, sleeping, lastUpdated}` for any
74512
+ * `{level, charging, sleeping, lastUpdated}` for any
74506
74513
  * provider that registers `batteryCapability`.
74507
74514
  * Write: `this.runtimeState.setCapState('battery', { … })`.
74508
74515
  *
@@ -85222,7 +85229,7 @@ var ACTUATOR_CAP_VOCABULARY = {
85222
85229
  label: t("Full brightness", "Luminosità massima"),
85223
85230
  phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
85224
85231
  icon: "sun",
85225
- args: { percentage: 100 }
85232
+ args: { level: 100 }
85226
85233
  },
85227
85234
  {
85228
85235
  id: "brightness.half",
@@ -85230,7 +85237,7 @@ var ACTUATOR_CAP_VOCABULARY = {
85230
85237
  label: t("Half brightness", "Luminosità a metà"),
85231
85238
  phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
85232
85239
  icon: "sun-dim",
85233
- args: { percentage: 50 }
85240
+ args: { level: 50 }
85234
85241
  },
85235
85242
  {
85236
85243
  id: "brightness.off",
@@ -85238,16 +85245,16 @@ var ACTUATOR_CAP_VOCABULARY = {
85238
85245
  label: t("Brightness off", "Luminosità a zero"),
85239
85246
  phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
85240
85247
  icon: "lightbulb-off",
85241
- args: { percentage: 0 }
85248
+ args: { level: 0 }
85242
85249
  },
85243
85250
  {
85244
85251
  id: "brightness.set",
85245
85252
  method: "setBrightness",
85246
85253
  label: t("Set brightness", "Imposta la luminosità"),
85247
- phrase: t("Set the brightness of {device} to {percentage}", "Imposta la luminosità di {device} a {percentage}"),
85254
+ phrase: t("Set the brightness of {device} to {level}", "Imposta la luminosità di {device} a {level}"),
85248
85255
  icon: "sun-medium",
85249
85256
  openArgs: [{
85250
- key: "percentage",
85257
+ key: "level",
85251
85258
  label: PERCENT,
85252
85259
  offer: {
85253
85260
  kind: "number",
@@ -85261,13 +85268,13 @@ var ACTUATOR_CAP_VOCABULARY = {
85261
85268
  ],
85262
85269
  state: [{
85263
85270
  kind: "numeric",
85264
- field: "percentage",
85271
+ field: "level",
85265
85272
  quantity: t("the brightness", "la luminosità"),
85266
85273
  label: t("Brightness", "Luminosità"),
85267
85274
  unit: "%",
85268
85275
  icon: "sun"
85269
85276
  }],
85270
- events: { onBrightnessChanged: { notOperatorFacing: "the `percentage` state trigger reads the same change" } }
85277
+ events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
85271
85278
  },
85272
85279
  color: {
85273
85280
  scope: "device",
@@ -85281,7 +85288,7 @@ var ACTUATOR_CAP_VOCABULARY = {
85281
85288
  icon: "sun",
85282
85289
  args: { color: {
85283
85290
  mode: "mired",
85284
- mireds: 370
85291
+ colorTemperature: 370
85285
85292
  } }
85286
85293
  },
85287
85294
  {
@@ -85292,7 +85299,7 @@ var ACTUATOR_CAP_VOCABULARY = {
85292
85299
  icon: "snowflake",
85293
85300
  args: { color: {
85294
85301
  mode: "mired",
85295
- mireds: 200
85302
+ colorTemperature: 200
85296
85303
  } }
85297
85304
  },
85298
85305
  {
@@ -85906,7 +85913,7 @@ var ACTUATOR_CAP_VOCABULARY = {
85906
85913
  label: t("Fan off", "Ventilatore spento"),
85907
85914
  phrase: t("Stop {device}", "Ferma {device}"),
85908
85915
  icon: "power-off",
85909
- args: { percentage: 0 }
85916
+ args: { speed: 0 }
85910
85917
  },
85911
85918
  {
85912
85919
  id: "fan.full",
@@ -85914,16 +85921,16 @@ var ACTUATOR_CAP_VOCABULARY = {
85914
85921
  label: t("Fan full", "Ventilatore al massimo"),
85915
85922
  phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
85916
85923
  icon: "fan",
85917
- args: { percentage: 100 }
85924
+ args: { speed: 100 }
85918
85925
  },
85919
85926
  {
85920
85927
  id: "fan.speed",
85921
85928
  method: "setPercentage",
85922
85929
  label: t("Set speed", "Imposta la velocità"),
85923
- phrase: t("Set the speed of {device} to {percentage}", "Imposta la velocità di {device} al {percentage}"),
85930
+ phrase: t("Set the speed of {device} to {speed}", "Imposta la velocità di {device} al {speed}"),
85924
85931
  icon: "fan",
85925
85932
  openArgs: [{
85926
- key: "percentage",
85933
+ key: "speed",
85927
85934
  label: t("Speed", "Velocità"),
85928
85935
  offer: {
85929
85936
  kind: "number",
@@ -85985,7 +85992,7 @@ var ACTUATOR_CAP_VOCABULARY = {
85985
85992
  ],
85986
85993
  state: [{
85987
85994
  kind: "numeric",
85988
- field: "percentage",
85995
+ field: "speed",
85989
85996
  quantity: t("the speed", "la velocità"),
85990
85997
  label: t("Speed", "Velocità"),
85991
85998
  unit: "%",
@@ -86783,7 +86790,7 @@ var APPLIANCE_CAP_VOCABULARY = {
86783
86790
  },
86784
86791
  {
86785
86792
  kind: "numeric",
86786
- field: "progressPercent",
86793
+ field: "progress",
86787
86794
  quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
86788
86795
  label: t("Progress", "Avanzamento"),
86789
86796
  unit: "%",
@@ -87141,10 +87148,10 @@ var APPLIANCE_CAP_VOCABULARY = {
87141
87148
  id: "media.seek",
87142
87149
  method: "seek",
87143
87150
  label: t("Seek", "Vai al punto"),
87144
- phrase: t("Move {device} to {positionMs}", "Porta {device} al punto {positionMs}"),
87151
+ phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
87145
87152
  icon: "fast-forward",
87146
87153
  openArgs: [{
87147
- key: "positionMs",
87154
+ key: "position",
87148
87155
  label: t("Position", "Posizione"),
87149
87156
  offer: {
87150
87157
  kind: "number",
@@ -88193,7 +88200,7 @@ var SENSOR_CAP_VOCABULARY = {
88193
88200
  state: [
88194
88201
  {
88195
88202
  kind: "numeric",
88196
- field: "co2Ppm",
88203
+ field: "co2",
88197
88204
  quantity: t("the CO₂", "la CO₂"),
88198
88205
  label: t("CO₂", "CO₂"),
88199
88206
  unit: "ppm",
@@ -88201,7 +88208,7 @@ var SENSOR_CAP_VOCABULARY = {
88201
88208
  },
88202
88209
  {
88203
88210
  kind: "numeric",
88204
- field: "vocPpb",
88211
+ field: "voc",
88205
88212
  quantity: t("the VOC level", "il livello di COV"),
88206
88213
  label: t("VOC", "COV"),
88207
88214
  unit: "ppb",
@@ -88237,7 +88244,7 @@ var SENSOR_CAP_VOCABULARY = {
88237
88244
  noun: t("Light level", "Luminosità ambiente"),
88238
88245
  state: [{
88239
88246
  kind: "numeric",
88240
- field: "lux",
88247
+ field: "illuminance",
88241
88248
  quantity: t("the light level", "la luminosità"),
88242
88249
  label: t("Illuminance", "Illuminamento"),
88243
88250
  unit: "lx",
@@ -88440,7 +88447,7 @@ var SENSOR_CAP_VOCABULARY = {
88440
88447
  noun: t("Humidity", "Umidità"),
88441
88448
  state: [{
88442
88449
  kind: "numeric",
88443
- field: "percent",
88450
+ field: "humidity",
88444
88451
  quantity: t("the humidity", "l’umidità"),
88445
88452
  label: t("Humidity", "Umidità"),
88446
88453
  unit: "%",
@@ -88488,7 +88495,7 @@ var SENSOR_CAP_VOCABULARY = {
88488
88495
  state: [
88489
88496
  {
88490
88497
  kind: "numeric",
88491
- field: "watts",
88498
+ field: "power",
88492
88499
  quantity: t("the power draw", "il consumo"),
88493
88500
  label: t("Power", "Potenza"),
88494
88501
  unit: "W",
@@ -88496,7 +88503,7 @@ var SENSOR_CAP_VOCABULARY = {
88496
88503
  },
88497
88504
  {
88498
88505
  kind: "numeric",
88499
- field: "kwhTotal",
88506
+ field: "energy",
88500
88507
  quantity: t("the energy used", "l’energia consumata"),
88501
88508
  label: t("Energy", "Energia"),
88502
88509
  unit: "kWh",
@@ -88504,7 +88511,7 @@ var SENSOR_CAP_VOCABULARY = {
88504
88511
  },
88505
88512
  {
88506
88513
  kind: "numeric",
88507
- field: "volts",
88514
+ field: "voltage",
88508
88515
  quantity: t("the voltage", "la tensione"),
88509
88516
  label: t("Voltage", "Tensione"),
88510
88517
  unit: "V",
@@ -88512,7 +88519,7 @@ var SENSOR_CAP_VOCABULARY = {
88512
88519
  },
88513
88520
  {
88514
88521
  kind: "numeric",
88515
- field: "amps",
88522
+ field: "current",
88516
88523
  quantity: t("the current", "la corrente"),
88517
88524
  label: t("Current", "Corrente"),
88518
88525
  unit: "A",
@@ -88529,13 +88536,6 @@ var SENSOR_CAP_VOCABULARY = {
88529
88536
  label: t("Where", "Posizione"),
88530
88537
  phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
88531
88538
  icon: "map-pin"
88532
- }, {
88533
- kind: "numeric",
88534
- field: "batteryPercent",
88535
- quantity: t("the phone battery", "la batteria del telefono"),
88536
- label: t("Battery", "Batteria"),
88537
- unit: "%",
88538
- icon: "battery"
88539
88539
  }]
88540
88540
  },
88541
88541
  "pressure-sensor": {
@@ -88543,7 +88543,7 @@ var SENSOR_CAP_VOCABULARY = {
88543
88543
  noun: t("Pressure", "Pressione"),
88544
88544
  state: [{
88545
88545
  kind: "numeric",
88546
- field: "hpa",
88546
+ field: "pressure",
88547
88547
  quantity: t("the pressure", "la pressione"),
88548
88548
  label: t("Pressure", "Pressione"),
88549
88549
  unit: "hPa",
@@ -88579,7 +88579,7 @@ var SENSOR_CAP_VOCABULARY = {
88579
88579
  noun: t("Temperature", "Temperatura"),
88580
88580
  state: [{
88581
88581
  kind: "numeric",
88582
- field: "celsius",
88582
+ field: "temperature",
88583
88583
  quantity: t("the temperature", "la temperatura"),
88584
88584
  label: t("Temperature", "Temperatura"),
88585
88585
  unit: "°C",
@@ -88650,7 +88650,7 @@ var SENSOR_CAP_VOCABULARY = {
88650
88650
  state: [
88651
88651
  {
88652
88652
  kind: "numeric",
88653
- field: "percentage",
88653
+ field: "level",
88654
88654
  quantity: t("the battery level", "il livello della batteria"),
88655
88655
  label: t("Battery", "Batteria"),
88656
88656
  unit: "%",
@@ -88692,7 +88692,7 @@ var SENSOR_CAP_VOCABULARY = {
88692
88692
  icon: "battery-charging"
88693
88693
  }
88694
88694
  ],
88695
- events: { onStatusChanged: { notOperatorFacing: "the percentage / sleeping / charging state triggers each read one field of this change" } },
88695
+ events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
88696
88696
  extraEvents: [{
88697
88697
  category: EventCategory.DeviceAwake,
88698
88698
  label: t("Woke up", "Risvegliato"),
@@ -88710,7 +88710,7 @@ var SENSOR_CAP_VOCABULARY = {
88710
88710
  noun: t("Network link", "Collegamento di rete"),
88711
88711
  state: [{
88712
88712
  kind: "numeric",
88713
- field: "signalPercent",
88713
+ field: "signal",
88714
88714
  quantity: t("the signal strength", "l’intensità del segnale"),
88715
88715
  label: t("Signal", "Segnale"),
88716
88716
  unit: "%",