@camstack/addon-provider-dreame 0.2.160 → 0.2.161

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.
package/dist/addon.mjs CHANGED
@@ -52899,7 +52899,7 @@ var DreameCameraStream = class extends TypedEmitter {
52899
52899
  }
52900
52900
  };
52901
52901
  //#endregion
52902
- //#region ../types/dist/event-category-hdMR7CTW.mjs
52902
+ //#region ../types/dist/event-category-DmZDPDf_.mjs
52903
52903
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
52904
52904
  EventCategory["SystemBoot"] = "system.boot";
52905
52905
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -53526,7 +53526,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
53526
53526
  * (a track was promoted to a stationary-registry entry) or departs (the
53527
53527
  * object moved / was removed). Telemetry (D8): lossy, drives a UI refresh of
53528
53528
  * the dedicated "Stationary" section — never the live event feed. Payload:
53529
- * `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp }`.
53529
+ * `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp, observedAt, zones }`.
53530
53530
  */
53531
53531
  EventCategory["PipelineAnalyticsStationaryChanged"] = "pipeline-analytics.stationary-changed";
53532
53532
  /**
@@ -58347,7 +58347,7 @@ var ZodIssueCode = {
58347
58347
  var ZodFirstPartyTypeKind;
58348
58348
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
58349
58349
  //#endregion
58350
- //#region ../types/dist/sleep-BHjNez61.mjs
58350
+ //#region ../types/dist/sleep-Crlmu_tO.mjs
58351
58351
  /**
58352
58352
  * The audio chunk plane's byte format, and the ONE expansion from a coded
58353
58353
  * window to float samples (D455).
@@ -61657,11 +61657,11 @@ var CAP_NAMES = Object.freeze([
61657
61657
  Object.freeze({
61658
61658
  "air-quality-sensor": [
61659
61659
  {
61660
- "path": "co2Ppm",
61660
+ "path": "co2",
61661
61661
  "valueType": "number"
61662
61662
  },
61663
61663
  {
61664
- "path": "vocPpb",
61664
+ "path": "voc",
61665
61665
  "valueType": "number"
61666
61666
  },
61667
61667
  {
@@ -61711,7 +61711,7 @@ Object.freeze({
61711
61711
  }
61712
61712
  ],
61713
61713
  "ambient-light-sensor": [{
61714
- "path": "lux",
61714
+ "path": "illuminance",
61715
61715
  "valueType": "number"
61716
61716
  }],
61717
61717
  "audio-metrics": [
@@ -61772,7 +61772,7 @@ Object.freeze({
61772
61772
  ],
61773
61773
  "battery": [
61774
61774
  {
61775
- "path": "percentage",
61775
+ "path": "level",
61776
61776
  "valueType": "number"
61777
61777
  },
61778
61778
  {
@@ -61794,7 +61794,7 @@ Object.freeze({
61794
61794
  "valueType": "number"
61795
61795
  },
61796
61796
  {
61797
- "path": "volts",
61797
+ "path": "voltage",
61798
61798
  "valueType": "number"
61799
61799
  },
61800
61800
  {
@@ -61815,7 +61815,7 @@ Object.freeze({
61815
61815
  "valueType": "boolean"
61816
61816
  }],
61817
61817
  "brightness": [{
61818
- "path": "percentage",
61818
+ "path": "level",
61819
61819
  "valueType": "number"
61820
61820
  }],
61821
61821
  "broker": [{
@@ -62016,7 +62016,7 @@ Object.freeze({
62016
62016
  "valueType": "number"
62017
62017
  },
62018
62018
  {
62019
- "path": "mireds",
62019
+ "path": "colorTemperature",
62020
62020
  "valueType": "number"
62021
62021
  }
62022
62022
  ],
@@ -62195,15 +62195,15 @@ Object.freeze({
62195
62195
  "valueType": "string"
62196
62196
  },
62197
62197
  {
62198
- "path": "remainingSeconds",
62198
+ "path": "remaining",
62199
62199
  "valueType": "number"
62200
62200
  },
62201
62201
  {
62202
- "path": "delayedStartSeconds",
62202
+ "path": "delayedStart",
62203
62203
  "valueType": "number"
62204
62204
  },
62205
62205
  {
62206
- "path": "progressPercent",
62206
+ "path": "progress",
62207
62207
  "valueType": "number"
62208
62208
  },
62209
62209
  {
@@ -62317,7 +62317,7 @@ Object.freeze({
62317
62317
  ],
62318
62318
  "fan-control": [
62319
62319
  {
62320
- "path": "percentage",
62320
+ "path": "speed",
62321
62321
  "valueType": "number"
62322
62322
  },
62323
62323
  {
@@ -62417,7 +62417,7 @@ Object.freeze({
62417
62417
  }
62418
62418
  ],
62419
62419
  "humidity-sensor": [{
62420
- "path": "percent",
62420
+ "path": "humidity",
62421
62421
  "valueType": "number"
62422
62422
  }],
62423
62423
  "image": [{
@@ -62527,7 +62527,7 @@ Object.freeze({
62527
62527
  "valueType": "number"
62528
62528
  },
62529
62529
  {
62530
- "path": "progressPercent",
62530
+ "path": "progress",
62531
62531
  "valueType": "number"
62532
62532
  },
62533
62533
  {
@@ -62606,11 +62606,11 @@ Object.freeze({
62606
62606
  "valueType": "string"
62607
62607
  },
62608
62608
  {
62609
- "path": "positionMs",
62609
+ "path": "position",
62610
62610
  "valueType": "number"
62611
62611
  },
62612
62612
  {
62613
- "path": "durationMs",
62613
+ "path": "duration",
62614
62614
  "valueType": "number"
62615
62615
  },
62616
62616
  {
@@ -62712,11 +62712,11 @@ Object.freeze({
62712
62712
  ]
62713
62713
  },
62714
62714
  {
62715
- "path": "signalPercent",
62715
+ "path": "signal",
62716
62716
  "valueType": "number"
62717
62717
  },
62718
62718
  {
62719
- "path": "rssiDbm",
62719
+ "path": "rssi",
62720
62720
  "valueType": "number"
62721
62721
  },
62722
62722
  {
@@ -62847,23 +62847,23 @@ Object.freeze({
62847
62847
  ],
62848
62848
  "power-meter": [
62849
62849
  {
62850
- "path": "watts",
62850
+ "path": "power",
62851
62851
  "valueType": "number"
62852
62852
  },
62853
62853
  {
62854
- "path": "kwhTotal",
62854
+ "path": "energy",
62855
62855
  "valueType": "number"
62856
62856
  },
62857
62857
  {
62858
- "path": "volts",
62858
+ "path": "voltage",
62859
62859
  "valueType": "number"
62860
62860
  },
62861
62861
  {
62862
- "path": "amps",
62862
+ "path": "current",
62863
62863
  "valueType": "number"
62864
62864
  },
62865
62865
  {
62866
- "path": "va",
62866
+ "path": "apparentPower",
62867
62867
  "valueType": "number"
62868
62868
  },
62869
62869
  {
@@ -62891,14 +62891,10 @@ Object.freeze({
62891
62891
  {
62892
62892
  "path": "gps.accuracyMeters",
62893
62893
  "valueType": "number"
62894
- },
62895
- {
62896
- "path": "batteryPercent",
62897
- "valueType": "number"
62898
62894
  }
62899
62895
  ],
62900
62896
  "pressure-sensor": [{
62901
- "path": "hpa",
62897
+ "path": "pressure",
62902
62898
  "valueType": "number"
62903
62899
  }],
62904
62900
  "privacy-mask": [{
@@ -63212,7 +63208,7 @@ Object.freeze({
63212
63208
  "valueType": "boolean"
63213
63209
  }],
63214
63210
  "temperature-sensor": [{
63215
- "path": "celsius",
63211
+ "path": "temperature",
63216
63212
  "valueType": "number"
63217
63213
  }],
63218
63214
  "update": [
@@ -63260,7 +63256,7 @@ Object.freeze({
63260
63256
  "valueType": "string"
63261
63257
  },
63262
63258
  {
63263
- "path": "progressPercent",
63259
+ "path": "progress",
63264
63260
  "valueType": "number"
63265
63261
  },
63266
63262
  {
@@ -63759,7 +63755,7 @@ function errMsg(err) {
63759
63755
  return String(err);
63760
63756
  }
63761
63757
  //#endregion
63762
- //#region ../types/dist/composition-Bb8iwHEJ.mjs
63758
+ //#region ../types/dist/composition-CZImLpOI.mjs
63763
63759
  /**
63764
63760
  * The ffmpeg build every CamStack node downloads, per platform and arch.
63765
63761
  *
@@ -68523,6 +68519,14 @@ var AutomationConditionLeafSchema = object({
68523
68519
  array(union([string(), number()]))
68524
68520
  ])
68525
68521
  });
68522
+ var AutomationConditionStationaryPresentSchema = object({
68523
+ kind: literal("stationary-present"),
68524
+ deviceId: number().int().nonnegative(),
68525
+ /** Class names; a macro class matches every raw class that maps to it. */
68526
+ classes: array(string().min(1)).min(1).optional(),
68527
+ /** The parked object must be in at least one of these zones. */
68528
+ zones: array(string().min(1)).min(1).optional()
68529
+ });
68526
68530
  /**
68527
68531
  * The expression leaf, declared as a plain object rather than an intersection
68528
68532
  * with {@link ExpressionSourceSchema}: a discriminated union has to be able to
@@ -68556,7 +68560,8 @@ var AutomationConditionSchema = lazy(() => discriminatedUnion("kind", [
68556
68560
  child: AutomationConditionSchema
68557
68561
  }),
68558
68562
  AutomationConditionLeafSchema,
68559
- AutomationConditionExpressionSchema
68563
+ AutomationConditionExpressionSchema,
68564
+ AutomationConditionStationaryPresentSchema
68560
68565
  ]));
68561
68566
  /**
68562
68567
  * What starts a run.
@@ -68610,6 +68615,17 @@ var AutomationTriggerSchema = discriminatedUnion("kind", [
68610
68615
  /** Best-so-far confidence the track must reach. */
68611
68616
  minScore: number().min(0).max(1).optional()
68612
68617
  }),
68618
+ object({
68619
+ kind: literal("stationary"),
68620
+ deviceIds: array(number().int().nonnegative()).min(1),
68621
+ /** Class names; a macro class matches like the detection trigger. */
68622
+ classes: array(string().min(1)).min(1).optional(),
68623
+ /** The parked object must be in at least one of these zones. */
68624
+ zones: array(string().min(1)).min(1).optional(),
68625
+ /** `appeared`: it became parked. `departed`: the registry retired it.
68626
+ * The vocabulary of `PipelineAnalyticsStationaryChanged`. */
68627
+ phase: _enum(["appeared", "departed"])
68628
+ }),
68613
68629
  object({
68614
68630
  kind: literal("interval"),
68615
68631
  minutes: number().int().min(1).max(1440)
@@ -68819,7 +68835,8 @@ var AutomationConditionTraceNodeSchema = object({
68819
68835
  "any",
68820
68836
  "not",
68821
68837
  "condition",
68822
- "expression"
68838
+ "expression",
68839
+ "stationary-present"
68823
68840
  ]),
68824
68841
  outcome: TraceNodeOutcomeSchema,
68825
68842
  reason: string(),
@@ -71718,7 +71735,7 @@ var CompositionEventPlanSchema = object({
71718
71735
  stateField: string(),
71719
71736
  fieldKey: string()
71720
71737
  });
71721
- /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.celsius`. */
71738
+ /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.temperature`. */
71722
71739
  var CompositionProblemSchema = object({
71723
71740
  code: _enum([
71724
71741
  "reserved-variant",
@@ -72037,7 +72054,7 @@ var GROUP_TEMPLATES = [
72037
72054
  summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
72038
72055
  role: DeviceRole.TemperatureSensor,
72039
72056
  outputCap: "temperature-sensor",
72040
- outputField: "celsius",
72057
+ outputField: "temperature",
72041
72058
  quantity: "temperature",
72042
72059
  defaultAggregate: "mean",
72043
72060
  empty: "null",
@@ -72048,7 +72065,7 @@ var GROUP_TEMPLATES = [
72048
72065
  summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
72049
72066
  role: DeviceRole.HumiditySensor,
72050
72067
  outputCap: "humidity-sensor",
72051
- outputField: "percent",
72068
+ outputField: "humidity",
72052
72069
  quantity: "humidity",
72053
72070
  defaultAggregate: "mean",
72054
72071
  empty: "null",
@@ -72059,7 +72076,7 @@ var GROUP_TEMPLATES = [
72059
72076
  summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
72060
72077
  role: DeviceRole.PressureSensor,
72061
72078
  outputCap: "pressure-sensor",
72062
- outputField: "hpa",
72079
+ outputField: "pressure",
72063
72080
  quantity: "pressure",
72064
72081
  defaultAggregate: "mean",
72065
72082
  empty: "null",
@@ -72070,7 +72087,7 @@ var GROUP_TEMPLATES = [
72070
72087
  summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
72071
72088
  role: DeviceRole.AmbientLightSensor,
72072
72089
  outputCap: "ambient-light-sensor",
72073
- outputField: "lux",
72090
+ outputField: "illuminance",
72074
72091
  quantity: "illuminance",
72075
72092
  defaultAggregate: "mean",
72076
72093
  empty: "null",
@@ -72081,7 +72098,7 @@ var GROUP_TEMPLATES = [
72081
72098
  summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
72082
72099
  role: DeviceRole.PowerSensor,
72083
72100
  outputCap: "power-meter",
72084
- outputField: "watts",
72101
+ outputField: "power",
72085
72102
  quantity: "power",
72086
72103
  defaultAggregate: "sum",
72087
72104
  empty: "omit",
@@ -72092,7 +72109,7 @@ var GROUP_TEMPLATES = [
72092
72109
  summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
72093
72110
  role: DeviceRole.EnergySensor,
72094
72111
  outputCap: "power-meter",
72095
- outputField: "kwhTotal",
72112
+ outputField: "energy",
72096
72113
  quantity: "energy",
72097
72114
  defaultAggregate: "sum",
72098
72115
  empty: "omit",
@@ -72103,7 +72120,7 @@ var GROUP_TEMPLATES = [
72103
72120
  summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
72104
72121
  role: DeviceRole.BatterySensor,
72105
72122
  outputCap: "battery",
72106
- outputField: "percentage",
72123
+ outputField: "level",
72107
72124
  quantity: "percentage",
72108
72125
  defaultAggregate: "mean",
72109
72126
  empty: "null",
@@ -110646,9 +110663,9 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
110646
110663
  */
110647
110664
  var AirQualitySensorStatusSchema = object({
110648
110665
  /** Carbon dioxide concentration in ppm. */
110649
- co2Ppm: number().min(0).optional().meta(readingMeta("concentration-volume")),
110666
+ co2: number().min(0).optional().meta(readingMeta("concentration-volume")),
110650
110667
  /** Total volatile organic compounds in ppb. */
110651
- vocPpb: number().min(0).optional().meta(readingMeta("concentration-ppb")),
110668
+ voc: number().min(0).optional().meta(readingMeta("concentration-ppb")),
110652
110669
  /** Particulate matter ≤ 2.5 μm in µg/m³. */
110653
110670
  pm25: number().min(0).optional().meta(readingMeta("concentration-mass")),
110654
110671
  /** Particulate matter ≤ 10 μm in µg/m³. */
@@ -110681,12 +110698,12 @@ var airQualitySensorCapability = {
110681
110698
  * History (D850): recorded series.
110682
110699
  */
110683
110700
  history: { fields: {
110684
- co2Ppm: {
110701
+ co2: {
110685
110702
  kind: "gauge",
110686
110703
  unit: "ppm",
110687
110704
  deadband: 5
110688
110705
  },
110689
- vocPpb: {
110706
+ voc: {
110690
110707
  kind: "gauge",
110691
110708
  unit: "ppb",
110692
110709
  deadband: 5
@@ -110717,7 +110734,7 @@ var airQualitySensorCapability = {
110717
110734
  */
110718
110735
  var AmbientLightSensorStatusSchema = object({
110719
110736
  /** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
110720
- lux: number().min(0).nullable().meta(readingMeta("illuminance", {
110737
+ illuminance: number().min(0).nullable().meta(readingMeta("illuminance", {
110721
110738
  precision: 0,
110722
110739
  label: "Illuminance"
110723
110740
  })),
@@ -110746,7 +110763,7 @@ var ambientLightSensorCapability = {
110746
110763
  /**
110747
110764
  * History (D850): recorded series. Wide range, so a RELATIVE deadband (10 %).
110748
110765
  */
110749
- history: { fields: { lux: {
110766
+ history: { fields: { illuminance: {
110750
110767
  kind: "gauge",
110751
110768
  unit: "lx",
110752
110769
  deadbandPct: 10,
@@ -111059,7 +111076,7 @@ var BatteryStatusSchema = object({
111059
111076
  * Consumers must SKIP a null rather than coerce it — `battery-band` already
111060
111077
  * declines to band a non-finite reading, which is the correct shape.
111061
111078
  */
111062
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
111079
+ level: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
111063
111080
  /**
111064
111081
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
111065
111082
  * Reolink-specific for the Solar Panel 2 accessory (will become
@@ -111069,7 +111086,7 @@ var BatteryStatusSchema = object({
111069
111086
  * `'unknown'` is the absence of an answer: the provider has not read the
111070
111087
  * power fields yet, or the firmware reported neither. Before it existed,
111071
111088
  * two unreadable fields produced `'none'`, and a camera nobody had reached
111072
- * was drawn "on battery alone" — the same D315 defect `percentage` closed
111089
+ * was drawn "on battery alone" — the same D315 defect `level` closed
111073
111090
  * by going nullable. Consumers SKIP it (no charger state published, no
111074
111091
  * glyph, no HomeKit ChargingState) rather than coerce it either way.
111075
111092
  */
@@ -111093,7 +111110,7 @@ var BatteryStatusSchema = object({
111093
111110
  * that only report charge. A second reading on this cap, not a second
111094
111111
  * `numeric-sensor` on the same device.
111095
111112
  */
111096
- volts: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
111113
+ voltage: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
111097
111114
  /**
111098
111115
  * Ms epoch of the last time the device PROVED it was reachable — a
111099
111116
  * completed firmware round-trip, an observed wake, or an inbound push
@@ -111127,7 +111144,7 @@ var BatteryStatusSchema = object({
111127
111144
  /**
111128
111145
  * True when the source is a BINARY low-battery indicator (HA
111129
111146
  * `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
111130
- * charge level — `percentage` is then a coarse stand-in (100 = normal,
111147
+ * charge level — `level` is then a coarse stand-in (100 = normal,
111131
111148
  * sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
111132
111149
  * misleading exact percentage. Absent/false → genuine 0–100 % reading.
111133
111150
  */
@@ -111147,15 +111164,15 @@ var BATTERY_DEVICE_TYPES = [
111147
111164
  var batteryCustomize = {
111148
111165
  version: 1,
111149
111166
  targets: [{
111150
- id: "percentage",
111167
+ id: "level",
111151
111168
  cardinality: "scalar",
111152
111169
  vocabulary: {
111153
111170
  cap: "battery",
111154
- stateField: "percentage"
111171
+ stateField: "level"
111155
111172
  },
111156
111173
  deviceTypes: BATTERY_DEVICE_TYPES,
111157
111174
  apply: "add",
111158
- path: "percentage",
111175
+ path: "level",
111159
111176
  sources: [{
111160
111177
  kind: "field",
111161
111178
  valueKinds: ["number", "string"],
@@ -111249,7 +111266,7 @@ onStatusChanged: { data: object({
111249
111266
  schema: BatteryStatusSchema,
111250
111267
  kind: "push",
111251
111268
  empty: {
111252
- percentage: null,
111269
+ level: null,
111253
111270
  charging: "unknown",
111254
111271
  sleeping: false,
111255
111272
  lastUpdated: 0
@@ -111276,11 +111293,11 @@ onStatusChanged: { data: object({
111276
111293
  * History (D850): recorded series. The generic capture replaces the `battery` series of `pipeline-analytics:stats-5m`.
111277
111294
  */
111278
111295
  history: { fields: {
111279
- percentage: {
111296
+ level: {
111280
111297
  kind: "gauge",
111281
111298
  unit: "%"
111282
111299
  },
111283
- volts: {
111300
+ voltage: {
111284
111301
  kind: "gauge",
111285
111302
  unit: "V"
111286
111303
  }
@@ -111340,14 +111357,14 @@ var binaryCapability = {
111340
111357
  * controls to this single-method surface.
111341
111358
  *
111342
111359
  * The cap is intentionally minimal: a single `setBrightness({deviceId,
111343
- * percentage})` mutation plus the auto-injected `getStatus`. Drivers
111360
+ * level})` mutation plus the auto-injected `getStatus`. Drivers
111344
111361
  * that expose richer controls (color temperature, scenes, schedules)
111345
111362
  * should surface those via the device's `getSettingsUISchema()`
111346
111363
  * instead of bloating this cap.
111347
111364
  */
111348
111365
  var BrightnessStatusSchema = object({
111349
111366
  /** Current level as 0..100 inclusive. Firmware-reported. */
111350
- percentage: number().min(0).max(100).meta(readingMeta("percentage")),
111367
+ level: number().min(0).max(100).meta(readingMeta("percentage")),
111351
111368
  /** Ms epoch of the last operator-driven change. Useful for UI freshness. */
111352
111369
  lastChangedAt: number()
111353
111370
  });
@@ -111359,7 +111376,7 @@ var brightnessCapability = {
111359
111376
  deviceTypes: [DeviceType.Light],
111360
111377
  methods: { setBrightness: method(object({
111361
111378
  deviceId: number().int().nonnegative(),
111362
- percentage: number().min(0).max(100)
111379
+ level: number().min(0).max(100)
111363
111380
  }), _void(), {
111364
111381
  kind: "mutation",
111365
111382
  auth: "protected"
@@ -111372,7 +111389,7 @@ var brightnessCapability = {
111372
111389
  */
111373
111390
  onBrightnessChanged: { data: object({
111374
111391
  deviceId: number(),
111375
- percentage: number().min(0).max(100),
111392
+ level: number().min(0).max(100),
111376
111393
  lastChangedAt: number()
111377
111394
  }) } },
111378
111395
  status: {
@@ -111395,7 +111412,7 @@ onBrightnessChanged: { data: object({
111395
111412
  /**
111396
111413
  * History (D850): recorded series. Actuator tier: level keeps every change.
111397
111414
  */
111398
- history: { fields: { percentage: {
111415
+ history: { fields: { level: {
111399
111416
  kind: "gauge",
111400
111417
  unit: "%",
111401
111418
  minIntervalMs: 0
@@ -112009,11 +112026,11 @@ var ColorInputSchema = discriminatedUnion("mode", [
112009
112026
  }),
112010
112027
  object({
112011
112028
  mode: literal("mired"),
112012
- mireds: number().int().min(50).max(1e3)
112029
+ colorTemperature: number().int().min(50).max(1e3)
112013
112030
  })
112014
112031
  ]);
112015
112032
  var ColorStatusSchema = object({
112016
- /** Active color mode — which of `rgb` / `hsv` / `mireds` reflects
112033
+ /** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
112017
112034
  * the bulb's current state. */
112018
112035
  mode: _enum([
112019
112036
  "rgb",
@@ -112025,7 +112042,7 @@ var ColorStatusSchema = object({
112025
112042
  /** Populated when `mode === 'hsv'`. */
112026
112043
  hsv: HsvTripletSchema.optional(),
112027
112044
  /** Populated when `mode === 'mired'`. */
112028
- mireds: number().int().optional().meta(readingMeta("colour-temperature")),
112045
+ colorTemperature: number().int().optional().meta(readingMeta("colour-temperature")),
112029
112046
  /** Ms epoch of the last operator-driven change. */
112030
112047
  lastChangedAt: number()
112031
112048
  });
@@ -112057,7 +112074,7 @@ onColorChanged: { data: object({
112057
112074
  ]),
112058
112075
  rgb: RgbTripletSchema.optional(),
112059
112076
  hsv: HsvTripletSchema.optional(),
112060
- mireds: number().int().optional(),
112077
+ colorTemperature: number().int().optional(),
112061
112078
  lastChangedAt: number()
112062
112079
  }) } },
112063
112080
  status: {
@@ -112946,11 +112963,11 @@ var DishwasherStatusSchema = object({
112946
112963
  /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
112947
112964
  availablePrograms: array(string()),
112948
112965
  /** Seconds remaining on the active cycle, or null when not running / not known. */
112949
- remainingSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
112966
+ remaining: number().int().nonnegative().nullable().meta(readingMeta("duration")),
112950
112967
  /** Seconds the delayed start is set to (time until the cycle starts), or null. */
112951
- delayedStartSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
112968
+ delayedStart: number().int().nonnegative().nullable().meta(readingMeta("duration")),
112952
112969
  /** Cycle completion 0..100, or null when not applicable. */
112953
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
112970
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
112954
112971
  /** True when the door is reported open; null when the door state is not known. */
112955
112972
  doorOpen: boolean().nullable(),
112956
112973
  /** True when the door is latched (locked) during a cycle; null when not reported. */
@@ -113169,14 +113186,14 @@ var dishwasherCapability = {
113169
113186
  runtimeState: DishwasherStatusSchema,
113170
113187
  durability: "session",
113171
113188
  history: { fields: {
113172
- progressPercent: {
113189
+ progress: {
113173
113190
  kind: "gauge",
113174
113191
  unit: "%",
113175
113192
  deadband: 2
113176
113193
  },
113177
113194
  state: { kind: "enum" },
113178
113195
  operationState: { kind: "enum" },
113179
- remainingSeconds: {
113196
+ remaining: {
113180
113197
  kind: "gauge",
113181
113198
  unit: "s",
113182
113199
  minIntervalMs: 6e4
@@ -113767,7 +113784,7 @@ var FanDirectionSchema = _enum(["forward", "reverse"]);
113767
113784
  var FanControlStatusSchema = object({
113768
113785
  /** Active speed as 0..100 inclusive. Null when the device has no
113769
113786
  * speed surface (single-speed fan). */
113770
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
113787
+ speed: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
113771
113788
  /** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
113772
113789
  * a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
113773
113790
  percentageStep: number().positive().optional().meta(readingMeta("percentage")),
@@ -113794,7 +113811,7 @@ var fanControlCapability = {
113794
113811
  methods: {
113795
113812
  setPercentage: method(object({
113796
113813
  deviceId: number().int().nonnegative(),
113797
- percentage: number().min(0).max(100)
113814
+ speed: number().min(0).max(100)
113798
113815
  }), _void(), {
113799
113816
  kind: "mutation",
113800
113817
  auth: "protected"
@@ -113827,7 +113844,7 @@ var fanControlCapability = {
113827
113844
  },
113828
113845
  /**
113829
113846
  * Runtime-state slice — mirrored by the kernel. UI fan speed
113830
- * sliders read `percentage` for live updates.
113847
+ * sliders read `speed` for live updates.
113831
113848
  */
113832
113849
  runtimeState: FanControlStatusSchema,
113833
113850
  /**
@@ -113841,7 +113858,7 @@ var fanControlCapability = {
113841
113858
  * History (D850): recorded series. Actuator tier: speed keeps every change.
113842
113859
  */
113843
113860
  history: { fields: {
113844
- percentage: {
113861
+ speed: {
113845
113862
  kind: "gauge",
113846
113863
  unit: "%",
113847
113864
  minIntervalMs: 0
@@ -114286,7 +114303,7 @@ var humidifierCapability = {
114286
114303
  */
114287
114304
  var HumiditySensorStatusSchema = object({
114288
114305
  /** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
114289
- percent: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
114306
+ humidity: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
114290
114307
  precision: 0,
114291
114308
  label: "Humidity"
114292
114309
  })),
@@ -114315,7 +114332,7 @@ var humiditySensorCapability = {
114315
114332
  /**
114316
114333
  * History (D850): recorded series.
114317
114334
  */
114318
- history: { fields: { percent: {
114335
+ history: { fields: { humidity: {
114319
114336
  kind: "gauge",
114320
114337
  unit: "%",
114321
114338
  deadband: .5
@@ -114955,7 +114972,7 @@ var LawnMowerControlStatusSchema = object({
114955
114972
  batteryLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
114956
114973
  /** 0..100 mowing-completion percentage of the current task, or null when no
114957
114974
  * task is active / progress is unavailable. */
114958
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
114975
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
114959
114976
  /** Current device/event code (dynamic — mostly status, sometimes an error),
114960
114977
  * or null when unknown. */
114961
114978
  currentCode: number().nullable().meta(readingMeta("none")),
@@ -115455,7 +115472,7 @@ var lockControlCapability = {
115455
115472
  volatileStateFields: ["lastChangedAt"]
115456
115473
  };
115457
115474
  /**
115458
- * A monotonic total between resets (D944). Energy uses `power-meter.kwhTotal`
115475
+ * A monotonic total between resets (D944). Energy uses `power-meter.energy`
115459
115476
  * so dashboards keep one series; every other instantaneous reading lands here.
115460
115477
  * `value` is the time integral in the source quantity's accumulated base
115461
115478
  * (base-unit seconds, or kWh on the power meter). `null` is a gap, never zero.
@@ -115549,10 +115566,10 @@ var MediaPlayerStatusSchema = object({
115549
115566
  currentMedia: MediaInfoSchema.nullable(),
115550
115567
  /** Current playback position in ms. Null when not seekable or
115551
115568
  * nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
115552
- positionMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
115569
+ position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
115553
115570
  /** Total duration of the current media in ms. Null when unknown
115554
115571
  * (live stream) or nothing is playing. */
115555
- durationMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
115572
+ duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
115556
115573
  /** Shuffle toggle. Null when no shuffle surface.
115557
115574
  * Pair with `DeviceFeature.MediaPlayerShuffle`. */
115558
115575
  shuffle: boolean().nullable(),
@@ -115591,7 +115608,7 @@ var mediaPlayerCapability = {
115591
115608
  }),
115592
115609
  seek: method(object({
115593
115610
  deviceId: number().int().nonnegative(),
115594
- positionMs: number().int().nonnegative()
115611
+ position: number().int().nonnegative()
115595
115612
  }), _void(), {
115596
115613
  kind: "mutation",
115597
115614
  auth: "protected"
@@ -115663,7 +115680,7 @@ var mediaPlayerCapability = {
115663
115680
  /**
115664
115681
  * History (D850): volume (a level an operator or an automation sets; the
115665
115682
  * default 10 s floor folds a slider drag into its end value) and mute.
115666
- * `positionMs` is not recorded: it moves continuously while playing.
115683
+ * `position` is not recorded: it moves continuously while playing.
115667
115684
  */
115668
115685
  history: { fields: {
115669
115686
  volumeLevel: {
@@ -116762,9 +116779,9 @@ var NetworkLinkStatusSchema = object({
116762
116779
  * one whose reading has not landed must not be drawn at 0 %. Consumers
116763
116780
  * SKIP a null rather than coerce it.
116764
116781
  */
116765
- signalPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
116782
+ signal: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
116766
116783
  /** Raw received signal strength in dBm, when the firmware reports one. */
116767
- rssiDbm: number().optional().meta(readingMeta("signal-level")),
116784
+ rssi: number().optional().meta(readingMeta("signal-level")),
116768
116785
  /** Network name of a wireless link, when the firmware reports it. */
116769
116786
  ssid: string().optional(),
116770
116787
  /** Ms epoch of the last observation. Lets consumers reason about freshness. */
@@ -116773,7 +116790,7 @@ var NetworkLinkStatusSchema = object({
116773
116790
  /** The slice a provider seeds before its first read: nothing is known yet. */
116774
116791
  var NETWORK_LINK_UNKNOWN = {
116775
116792
  type: "unknown",
116776
- signalPercent: null,
116793
+ signal: null,
116777
116794
  lastUpdated: 0
116778
116795
  };
116779
116796
  /**
@@ -116834,13 +116851,13 @@ onStatusChanged: { data: object({
116834
116851
  * History (D850): recorded series.
116835
116852
  */
116836
116853
  history: { fields: {
116837
- signalPercent: {
116854
+ signal: {
116838
116855
  kind: "gauge",
116839
116856
  unit: "%",
116840
116857
  deadband: 3,
116841
116858
  minIntervalMs: 6e4
116842
116859
  },
116843
- rssiDbm: {
116860
+ rssi: {
116844
116861
  kind: "gauge",
116845
116862
  unit: "dBm",
116846
116863
  deadband: 2,
@@ -118160,16 +118177,16 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
118160
118177
  * in real-world devices.
118161
118178
  */
118162
118179
  var PowerMeterStatusSchema = object({
118163
- /** Instantaneous power draw in watts. */
118164
- watts: number().optional().meta(readingMeta("power", { label: "Power" })),
118180
+ /** Instantaneous power draw (watts). */
118181
+ power: number().optional().meta(readingMeta("power", { label: "Power" })),
118165
118182
  /** Cumulative energy in kilowatt-hours since the meter was reset. */
118166
- kwhTotal: number().optional().meta(readingMeta("energy", { label: "Energy" })),
118167
- /** Voltage in volts. */
118168
- volts: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
118183
+ energy: number().optional().meta(readingMeta("energy", { label: "Energy" })),
118184
+ /** Voltage (volts). */
118185
+ voltage: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
118169
118186
  /** Current in amperes. */
118170
- amps: number().optional().meta(readingMeta("current", { label: "Current" })),
118187
+ current: number().optional().meta(readingMeta("current", { label: "Current" })),
118171
118188
  /** Apparent power in volt-amperes. */
118172
- va: number().optional().meta(readingMeta("apparent-power")),
118189
+ apparentPower: number().optional().meta(readingMeta("apparent-power")),
118173
118190
  /** Power factor (0..1) if reported. */
118174
118191
  powerFactor: number().min(0).max(1).optional().meta(readingMeta("ratio")),
118175
118192
  /** Ms epoch when the slice was last updated. */
@@ -118227,14 +118244,14 @@ function powerTarget(id, unit) {
118227
118244
  advancedExpression: true
118228
118245
  };
118229
118246
  }
118230
- /** "Power and energy" extension: watts, energy, voltage and current from other devices (D951). */
118247
+ /** "Power and energy" extension: power, energy, voltage and current from other devices (D951). */
118231
118248
  var powerMeterCustomize = {
118232
118249
  version: 1,
118233
118250
  targets: [
118234
- powerTarget("watts", "W"),
118235
- powerTarget("kwhTotal", "kWh"),
118236
- powerTarget("volts", "V"),
118237
- powerTarget("amps", "A")
118251
+ powerTarget("power", "W"),
118252
+ powerTarget("energy", "kWh"),
118253
+ powerTarget("voltage", "V"),
118254
+ powerTarget("current", "A")
118238
118255
  ]
118239
118256
  };
118240
118257
  var powerMeterCapability = {
@@ -118250,41 +118267,41 @@ var powerMeterCapability = {
118250
118267
  },
118251
118268
  runtimeState: PowerMeterStatusSchema,
118252
118269
  /**
118253
- * Runtime-state durability: **restored** — as `numeric-sensor`; `kwhTotal` is an accumulator whose restored value is the baseline.
118270
+ * Runtime-state durability: **restored** — as `numeric-sensor`; `energy` is an accumulator whose restored value is the baseline.
118254
118271
  *
118255
118272
  * See `RuntimeStateDurability`. Enforced by
118256
118273
  * `scripts/check-runtime-state-durability.ts`.
118257
118274
  */
118258
118275
  durability: "restored",
118259
118276
  /**
118260
- * History (D850): recorded series. Gauges are floored at 30 s; `kwhTotal` is the one monotonic meter (counter).
118277
+ * History (D850): recorded series. Gauges are floored at 30 s; `energy` is the one monotonic meter (counter).
118261
118278
  */
118262
118279
  history: { fields: {
118263
- watts: {
118280
+ power: {
118264
118281
  kind: "gauge",
118265
118282
  unit: "W",
118266
118283
  deadband: 1,
118267
118284
  minIntervalMs: 3e4
118268
118285
  },
118269
- kwhTotal: {
118286
+ energy: {
118270
118287
  kind: "counter",
118271
118288
  unit: "kWh",
118272
118289
  deadband: .01,
118273
118290
  minIntervalMs: 6e4
118274
118291
  },
118275
- volts: {
118292
+ voltage: {
118276
118293
  kind: "gauge",
118277
118294
  unit: "V",
118278
118295
  deadband: 1,
118279
118296
  minIntervalMs: 3e4
118280
118297
  },
118281
- amps: {
118298
+ current: {
118282
118299
  kind: "gauge",
118283
118300
  unit: "A",
118284
118301
  deadband: .05,
118285
118302
  minIntervalMs: 3e4
118286
118303
  },
118287
- va: {
118304
+ apparentPower: {
118288
118305
  kind: "gauge",
118289
118306
  unit: "VA",
118290
118307
  deadband: 1,
@@ -118334,9 +118351,6 @@ var PresenceStatusSchema = object({
118334
118351
  location: string().nullable(),
118335
118352
  /** GPS coordinates when available. Null otherwise. */
118336
118353
  gps: GpsLocationSchema.nullable(),
118337
- /** Optional battery level of the tracking device (0..100). Null
118338
- * when not reported. */
118339
- batteryPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
118340
118354
  /** Ms epoch when the slice was last updated. */
118341
118355
  lastChangedAt: number()
118342
118356
  });
@@ -118365,14 +118379,7 @@ var presenceCapability = {
118365
118379
  * `scripts/check-runtime-state-durability.ts`.
118366
118380
  */
118367
118381
  durability: "restored",
118368
- /**
118369
- * History (D850): recorded series.
118370
- */
118371
- history: { fields: { batteryPercent: {
118372
- kind: "gauge",
118373
- unit: "%",
118374
- deadband: 1
118375
- } } },
118382
+ history: "none",
118376
118383
  /** Clock fields: written, but excluded from the compare that decides
118377
118384
  * whether persisting is worth a SQLite commit. */
118378
118385
  volatileStateFields: ["lastChangedAt"]
@@ -118387,7 +118394,7 @@ var presenceCapability = {
118387
118394
  */
118388
118395
  var PressureSensorStatusSchema = object({
118389
118396
  /** Current pressure in hPa. `null` when the sample was refused (D393). */
118390
- hpa: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
118397
+ pressure: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
118391
118398
  /** Ms epoch when the slice was last updated. */
118392
118399
  lastFetchedAt: number()
118393
118400
  });
@@ -118413,7 +118420,7 @@ var pressureSensorCapability = {
118413
118420
  /**
118414
118421
  * History (D850): recorded series.
118415
118422
  */
118416
- history: { fields: { hpa: {
118423
+ history: { fields: { pressure: {
118417
118424
  kind: "gauge",
118418
118425
  unit: "hPa",
118419
118426
  deadband: .1
@@ -122120,7 +122127,7 @@ var tamperCapability = {
122120
122127
  */
122121
122128
  var TemperatureSensorStatusSchema = object({
122122
122129
  /** Current temperature in Celsius. `null` when the sample was refused (D393). */
122123
- celsius: number().nullable().meta(readingMeta("temperature", {
122130
+ temperature: number().nullable().meta(readingMeta("temperature", {
122124
122131
  precision: 1,
122125
122132
  label: "Temperature"
122126
122133
  })),
@@ -122149,7 +122156,7 @@ var temperatureSensorCapability = {
122149
122156
  /**
122150
122157
  * History (D850): recorded series.
122151
122158
  */
122152
- history: { fields: { celsius: {
122159
+ history: { fields: { temperature: {
122153
122160
  kind: "gauge",
122154
122161
  unit: "°C",
122155
122162
  deadband: .1
@@ -122446,7 +122453,7 @@ var VacuumControlStatusSchema = object({
122446
122453
  /** Speed tokens the hardware accepts — drives the UI selector. */
122447
122454
  availableFanSpeeds: array(string()),
122448
122455
  /** 0..100 cleaning-completion percentage of the current task, or null. */
122449
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
122456
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
122450
122457
  /** Current error code (0 / null = no error). */
122451
122458
  errorCode: number().nullable().meta(readingMeta("none")),
122452
122459
  /** Human label for {@link errorCode}, or null when none / undecodable. */
@@ -124528,7 +124535,7 @@ var BaseDevice = class {
124528
124535
  * `device-local-state.ts`. Drivers access via:
124529
124536
  *
124530
124537
  * `this.state.battery.sleeping = true` // patches the battery slice
124531
- * `const pct = this.state.battery.percentage` // reads the battery slice
124538
+ * `const pct = this.state.battery.level` // reads the battery slice
124532
124539
  * `this.state.deviceStatus.online = true` // mirrors `markOnline(true)`
124533
124540
  *
124534
124541
  * Adding a new cap with `runtimeState:` automatically extends this
@@ -124568,7 +124575,7 @@ var BaseDevice = class {
124568
124575
  * shape; drivers don't redeclare it, they just write through.
124569
124576
  *
124570
124577
  * Read: `this.runtimeState.getCapState('battery')` →
124571
- * `{percentage, charging, sleeping, lastUpdated}` for any
124578
+ * `{level, charging, sleeping, lastUpdated}` for any
124572
124579
  * provider that registers `batteryCapability`.
124573
124580
  * Write: `this.runtimeState.setCapState('battery', { … })`.
124574
124581
  *
@@ -135787,7 +135794,7 @@ var ACTUATOR_CAP_VOCABULARY = {
135787
135794
  label: t("Full brightness", "Luminosità massima"),
135788
135795
  phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
135789
135796
  icon: "sun",
135790
- args: { percentage: 100 }
135797
+ args: { level: 100 }
135791
135798
  },
135792
135799
  {
135793
135800
  id: "brightness.half",
@@ -135795,7 +135802,7 @@ var ACTUATOR_CAP_VOCABULARY = {
135795
135802
  label: t("Half brightness", "Luminosità a metà"),
135796
135803
  phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
135797
135804
  icon: "sun-dim",
135798
- args: { percentage: 50 }
135805
+ args: { level: 50 }
135799
135806
  },
135800
135807
  {
135801
135808
  id: "brightness.off",
@@ -135803,16 +135810,16 @@ var ACTUATOR_CAP_VOCABULARY = {
135803
135810
  label: t("Brightness off", "Luminosità a zero"),
135804
135811
  phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
135805
135812
  icon: "lightbulb-off",
135806
- args: { percentage: 0 }
135813
+ args: { level: 0 }
135807
135814
  },
135808
135815
  {
135809
135816
  id: "brightness.set",
135810
135817
  method: "setBrightness",
135811
135818
  label: t("Set brightness", "Imposta la luminosità"),
135812
- phrase: t("Set the brightness of {device} to {percentage}", "Imposta la luminosità di {device} a {percentage}"),
135819
+ phrase: t("Set the brightness of {device} to {level}", "Imposta la luminosità di {device} a {level}"),
135813
135820
  icon: "sun-medium",
135814
135821
  openArgs: [{
135815
- key: "percentage",
135822
+ key: "level",
135816
135823
  label: PERCENT,
135817
135824
  offer: {
135818
135825
  kind: "number",
@@ -135826,13 +135833,13 @@ var ACTUATOR_CAP_VOCABULARY = {
135826
135833
  ],
135827
135834
  state: [{
135828
135835
  kind: "numeric",
135829
- field: "percentage",
135836
+ field: "level",
135830
135837
  quantity: t("the brightness", "la luminosità"),
135831
135838
  label: t("Brightness", "Luminosità"),
135832
135839
  unit: "%",
135833
135840
  icon: "sun"
135834
135841
  }],
135835
- events: { onBrightnessChanged: { notOperatorFacing: "the `percentage` state trigger reads the same change" } }
135842
+ events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
135836
135843
  },
135837
135844
  color: {
135838
135845
  scope: "device",
@@ -135846,7 +135853,7 @@ var ACTUATOR_CAP_VOCABULARY = {
135846
135853
  icon: "sun",
135847
135854
  args: { color: {
135848
135855
  mode: "mired",
135849
- mireds: 370
135856
+ colorTemperature: 370
135850
135857
  } }
135851
135858
  },
135852
135859
  {
@@ -135857,7 +135864,7 @@ var ACTUATOR_CAP_VOCABULARY = {
135857
135864
  icon: "snowflake",
135858
135865
  args: { color: {
135859
135866
  mode: "mired",
135860
- mireds: 200
135867
+ colorTemperature: 200
135861
135868
  } }
135862
135869
  },
135863
135870
  {
@@ -136471,7 +136478,7 @@ var ACTUATOR_CAP_VOCABULARY = {
136471
136478
  label: t("Fan off", "Ventilatore spento"),
136472
136479
  phrase: t("Stop {device}", "Ferma {device}"),
136473
136480
  icon: "power-off",
136474
- args: { percentage: 0 }
136481
+ args: { speed: 0 }
136475
136482
  },
136476
136483
  {
136477
136484
  id: "fan.full",
@@ -136479,16 +136486,16 @@ var ACTUATOR_CAP_VOCABULARY = {
136479
136486
  label: t("Fan full", "Ventilatore al massimo"),
136480
136487
  phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
136481
136488
  icon: "fan",
136482
- args: { percentage: 100 }
136489
+ args: { speed: 100 }
136483
136490
  },
136484
136491
  {
136485
136492
  id: "fan.speed",
136486
136493
  method: "setPercentage",
136487
136494
  label: t("Set speed", "Imposta la velocità"),
136488
- phrase: t("Set the speed of {device} to {percentage}", "Imposta la velocità di {device} al {percentage}"),
136495
+ phrase: t("Set the speed of {device} to {speed}", "Imposta la velocità di {device} al {speed}"),
136489
136496
  icon: "fan",
136490
136497
  openArgs: [{
136491
- key: "percentage",
136498
+ key: "speed",
136492
136499
  label: t("Speed", "Velocità"),
136493
136500
  offer: {
136494
136501
  kind: "number",
@@ -136550,7 +136557,7 @@ var ACTUATOR_CAP_VOCABULARY = {
136550
136557
  ],
136551
136558
  state: [{
136552
136559
  kind: "numeric",
136553
- field: "percentage",
136560
+ field: "speed",
136554
136561
  quantity: t("the speed", "la velocità"),
136555
136562
  label: t("Speed", "Velocità"),
136556
136563
  unit: "%",
@@ -137348,7 +137355,7 @@ var APPLIANCE_CAP_VOCABULARY = {
137348
137355
  },
137349
137356
  {
137350
137357
  kind: "numeric",
137351
- field: "progressPercent",
137358
+ field: "progress",
137352
137359
  quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
137353
137360
  label: t("Progress", "Avanzamento"),
137354
137361
  unit: "%",
@@ -137706,10 +137713,10 @@ var APPLIANCE_CAP_VOCABULARY = {
137706
137713
  id: "media.seek",
137707
137714
  method: "seek",
137708
137715
  label: t("Seek", "Vai al punto"),
137709
- phrase: t("Move {device} to {positionMs}", "Porta {device} al punto {positionMs}"),
137716
+ phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
137710
137717
  icon: "fast-forward",
137711
137718
  openArgs: [{
137712
- key: "positionMs",
137719
+ key: "position",
137713
137720
  label: t("Position", "Posizione"),
137714
137721
  offer: {
137715
137722
  kind: "number",
@@ -138758,7 +138765,7 @@ var SENSOR_CAP_VOCABULARY = {
138758
138765
  state: [
138759
138766
  {
138760
138767
  kind: "numeric",
138761
- field: "co2Ppm",
138768
+ field: "co2",
138762
138769
  quantity: t("the CO₂", "la CO₂"),
138763
138770
  label: t("CO₂", "CO₂"),
138764
138771
  unit: "ppm",
@@ -138766,7 +138773,7 @@ var SENSOR_CAP_VOCABULARY = {
138766
138773
  },
138767
138774
  {
138768
138775
  kind: "numeric",
138769
- field: "vocPpb",
138776
+ field: "voc",
138770
138777
  quantity: t("the VOC level", "il livello di COV"),
138771
138778
  label: t("VOC", "COV"),
138772
138779
  unit: "ppb",
@@ -138802,7 +138809,7 @@ var SENSOR_CAP_VOCABULARY = {
138802
138809
  noun: t("Light level", "Luminosità ambiente"),
138803
138810
  state: [{
138804
138811
  kind: "numeric",
138805
- field: "lux",
138812
+ field: "illuminance",
138806
138813
  quantity: t("the light level", "la luminosità"),
138807
138814
  label: t("Illuminance", "Illuminamento"),
138808
138815
  unit: "lx",
@@ -139005,7 +139012,7 @@ var SENSOR_CAP_VOCABULARY = {
139005
139012
  noun: t("Humidity", "Umidità"),
139006
139013
  state: [{
139007
139014
  kind: "numeric",
139008
- field: "percent",
139015
+ field: "humidity",
139009
139016
  quantity: t("the humidity", "l’umidità"),
139010
139017
  label: t("Humidity", "Umidità"),
139011
139018
  unit: "%",
@@ -139053,7 +139060,7 @@ var SENSOR_CAP_VOCABULARY = {
139053
139060
  state: [
139054
139061
  {
139055
139062
  kind: "numeric",
139056
- field: "watts",
139063
+ field: "power",
139057
139064
  quantity: t("the power draw", "il consumo"),
139058
139065
  label: t("Power", "Potenza"),
139059
139066
  unit: "W",
@@ -139061,7 +139068,7 @@ var SENSOR_CAP_VOCABULARY = {
139061
139068
  },
139062
139069
  {
139063
139070
  kind: "numeric",
139064
- field: "kwhTotal",
139071
+ field: "energy",
139065
139072
  quantity: t("the energy used", "l’energia consumata"),
139066
139073
  label: t("Energy", "Energia"),
139067
139074
  unit: "kWh",
@@ -139069,7 +139076,7 @@ var SENSOR_CAP_VOCABULARY = {
139069
139076
  },
139070
139077
  {
139071
139078
  kind: "numeric",
139072
- field: "volts",
139079
+ field: "voltage",
139073
139080
  quantity: t("the voltage", "la tensione"),
139074
139081
  label: t("Voltage", "Tensione"),
139075
139082
  unit: "V",
@@ -139077,7 +139084,7 @@ var SENSOR_CAP_VOCABULARY = {
139077
139084
  },
139078
139085
  {
139079
139086
  kind: "numeric",
139080
- field: "amps",
139087
+ field: "current",
139081
139088
  quantity: t("the current", "la corrente"),
139082
139089
  label: t("Current", "Corrente"),
139083
139090
  unit: "A",
@@ -139094,13 +139101,6 @@ var SENSOR_CAP_VOCABULARY = {
139094
139101
  label: t("Where", "Posizione"),
139095
139102
  phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
139096
139103
  icon: "map-pin"
139097
- }, {
139098
- kind: "numeric",
139099
- field: "batteryPercent",
139100
- quantity: t("the phone battery", "la batteria del telefono"),
139101
- label: t("Battery", "Batteria"),
139102
- unit: "%",
139103
- icon: "battery"
139104
139104
  }]
139105
139105
  },
139106
139106
  "pressure-sensor": {
@@ -139108,7 +139108,7 @@ var SENSOR_CAP_VOCABULARY = {
139108
139108
  noun: t("Pressure", "Pressione"),
139109
139109
  state: [{
139110
139110
  kind: "numeric",
139111
- field: "hpa",
139111
+ field: "pressure",
139112
139112
  quantity: t("the pressure", "la pressione"),
139113
139113
  label: t("Pressure", "Pressione"),
139114
139114
  unit: "hPa",
@@ -139144,7 +139144,7 @@ var SENSOR_CAP_VOCABULARY = {
139144
139144
  noun: t("Temperature", "Temperatura"),
139145
139145
  state: [{
139146
139146
  kind: "numeric",
139147
- field: "celsius",
139147
+ field: "temperature",
139148
139148
  quantity: t("the temperature", "la temperatura"),
139149
139149
  label: t("Temperature", "Temperatura"),
139150
139150
  unit: "°C",
@@ -139215,7 +139215,7 @@ var SENSOR_CAP_VOCABULARY = {
139215
139215
  state: [
139216
139216
  {
139217
139217
  kind: "numeric",
139218
- field: "percentage",
139218
+ field: "level",
139219
139219
  quantity: t("the battery level", "il livello della batteria"),
139220
139220
  label: t("Battery", "Batteria"),
139221
139221
  unit: "%",
@@ -139257,7 +139257,7 @@ var SENSOR_CAP_VOCABULARY = {
139257
139257
  icon: "battery-charging"
139258
139258
  }
139259
139259
  ],
139260
- events: { onStatusChanged: { notOperatorFacing: "the percentage / sleeping / charging state triggers each read one field of this change" } },
139260
+ events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
139261
139261
  extraEvents: [{
139262
139262
  category: EventCategory.DeviceAwake,
139263
139263
  label: t("Woke up", "Risvegliato"),
@@ -139275,7 +139275,7 @@ var SENSOR_CAP_VOCABULARY = {
139275
139275
  noun: t("Network link", "Collegamento di rete"),
139276
139276
  state: [{
139277
139277
  kind: "numeric",
139278
- field: "signalPercent",
139278
+ field: "signal",
139279
139279
  quantity: t("the signal strength", "l’intensità del segnale"),
139280
139280
  label: t("Signal", "Segnale"),
139281
139281
  unit: "%",
@@ -146254,7 +146254,7 @@ function clampLevel(level) {
146254
146254
  function cameraBatterySlice(facts) {
146255
146255
  const charging = facts.charging === null ? "unknown" : facts.charging === CHARGING_STATUS_CHARGING ? "dc" : "none";
146256
146256
  return {
146257
- percentage: clampLevel(facts.level),
146257
+ level: clampLevel(facts.level),
146258
146258
  charging,
146259
146259
  sleeping: !facts.streamOpen,
146260
146260
  lastUpdated: facts.now,
@@ -146663,7 +146663,7 @@ function networkLinkFromBars(bars, now) {
146663
146663
  if (bars === null || !Number.isFinite(bars)) return null;
146664
146664
  return {
146665
146665
  type: "wifi",
146666
- signalPercent: bars === 0 ? null : signalPercentFromBars(bars, 4),
146666
+ signal: bars === 0 ? null : signalPercentFromBars(bars, 4),
146667
146667
  lastUpdated: now
146668
146668
  };
146669
146669
  }
@@ -193866,7 +193866,7 @@ var SHADOW_POLL_MS = 12e4;
193866
193866
  var COLD_START = {
193867
193867
  activity: "idle",
193868
193868
  batteryLevel: null,
193869
- progressPercent: null,
193869
+ progress: null,
193870
193870
  currentCode: null,
193871
193871
  currentCodeLabel: null,
193872
193872
  severity: "info",
@@ -193980,11 +193980,11 @@ var DreameMowerDevice = class extends DreameChildDevice {
193980
193980
  const status = mower.status;
193981
193981
  const code = mower.faultRaw;
193982
193982
  const livePct = clampPercent(mower.mowingProgressPct);
193983
- const prevPct = this.runtimeState.getCapState(CAP_NAME$9)?.progressPercent;
193983
+ const prevPct = this.runtimeState.getCapState(CAP_NAME$9)?.progress;
193984
193984
  const slice = {
193985
193985
  activity: mapMowerStatusToActivity(status),
193986
193986
  batteryLevel: clampBatteryLevel(mower.battery),
193987
- progressPercent: livePct ?? prevPct ?? null,
193987
+ progress: livePct ?? prevPct ?? null,
193988
193988
  currentCode: code,
193989
193989
  currentCodeLabel: code !== null ? MowerFault[code] ?? null : null,
193990
193990
  severity: mower.faultSeverity,
@@ -194924,7 +194924,7 @@ var CONTROL_COLD_START = {
194924
194924
  batteryLevel: null,
194925
194925
  fanSpeed: null,
194926
194926
  availableFanSpeeds: [],
194927
- progressPercent: null,
194927
+ progress: null,
194928
194928
  errorCode: null,
194929
194929
  errorLabel: null,
194930
194930
  lastChangedAt: 0
@@ -195078,7 +195078,7 @@ var DreameVacuumDevice = class extends DreameChildDevice {
195078
195078
  batteryLevel: clampBatteryLevel$1(vacuum.battery),
195079
195079
  fanSpeed: suctionLevelToken(vacuum.suction),
195080
195080
  availableFanSpeeds: supportedFanSpeedTokens(vacuum.supportedSuctionLevels),
195081
- progressPercent: clampPercent$1(vacuum.taskProgressPct),
195081
+ progress: clampPercent$1(vacuum.taskProgressPct),
195082
195082
  errorCode: vacuum.errorCode,
195083
195083
  errorLabel: vacuumErrorLabel(vacuum.errorCode),
195084
195084
  lastChangedAt: Date.now()