@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.js CHANGED
@@ -52902,7 +52902,7 @@ var DreameCameraStream = class extends TypedEmitter {
52902
52902
  }
52903
52903
  };
52904
52904
  //#endregion
52905
- //#region ../types/dist/event-category-hdMR7CTW.mjs
52905
+ //#region ../types/dist/event-category-DmZDPDf_.mjs
52906
52906
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
52907
52907
  EventCategory["SystemBoot"] = "system.boot";
52908
52908
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -53529,7 +53529,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
53529
53529
  * (a track was promoted to a stationary-registry entry) or departs (the
53530
53530
  * object moved / was removed). Telemetry (D8): lossy, drives a UI refresh of
53531
53531
  * the dedicated "Stationary" section — never the live event feed. Payload:
53532
- * `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp }`.
53532
+ * `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp, observedAt, zones }`.
53533
53533
  */
53534
53534
  EventCategory["PipelineAnalyticsStationaryChanged"] = "pipeline-analytics.stationary-changed";
53535
53535
  /**
@@ -58350,7 +58350,7 @@ var ZodIssueCode = {
58350
58350
  var ZodFirstPartyTypeKind;
58351
58351
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
58352
58352
  //#endregion
58353
- //#region ../types/dist/sleep-BHjNez61.mjs
58353
+ //#region ../types/dist/sleep-Crlmu_tO.mjs
58354
58354
  /**
58355
58355
  * The audio chunk plane's byte format, and the ONE expansion from a coded
58356
58356
  * window to float samples (D455).
@@ -61660,11 +61660,11 @@ var CAP_NAMES = Object.freeze([
61660
61660
  Object.freeze({
61661
61661
  "air-quality-sensor": [
61662
61662
  {
61663
- "path": "co2Ppm",
61663
+ "path": "co2",
61664
61664
  "valueType": "number"
61665
61665
  },
61666
61666
  {
61667
- "path": "vocPpb",
61667
+ "path": "voc",
61668
61668
  "valueType": "number"
61669
61669
  },
61670
61670
  {
@@ -61714,7 +61714,7 @@ Object.freeze({
61714
61714
  }
61715
61715
  ],
61716
61716
  "ambient-light-sensor": [{
61717
- "path": "lux",
61717
+ "path": "illuminance",
61718
61718
  "valueType": "number"
61719
61719
  }],
61720
61720
  "audio-metrics": [
@@ -61775,7 +61775,7 @@ Object.freeze({
61775
61775
  ],
61776
61776
  "battery": [
61777
61777
  {
61778
- "path": "percentage",
61778
+ "path": "level",
61779
61779
  "valueType": "number"
61780
61780
  },
61781
61781
  {
@@ -61797,7 +61797,7 @@ Object.freeze({
61797
61797
  "valueType": "number"
61798
61798
  },
61799
61799
  {
61800
- "path": "volts",
61800
+ "path": "voltage",
61801
61801
  "valueType": "number"
61802
61802
  },
61803
61803
  {
@@ -61818,7 +61818,7 @@ Object.freeze({
61818
61818
  "valueType": "boolean"
61819
61819
  }],
61820
61820
  "brightness": [{
61821
- "path": "percentage",
61821
+ "path": "level",
61822
61822
  "valueType": "number"
61823
61823
  }],
61824
61824
  "broker": [{
@@ -62019,7 +62019,7 @@ Object.freeze({
62019
62019
  "valueType": "number"
62020
62020
  },
62021
62021
  {
62022
- "path": "mireds",
62022
+ "path": "colorTemperature",
62023
62023
  "valueType": "number"
62024
62024
  }
62025
62025
  ],
@@ -62198,15 +62198,15 @@ Object.freeze({
62198
62198
  "valueType": "string"
62199
62199
  },
62200
62200
  {
62201
- "path": "remainingSeconds",
62201
+ "path": "remaining",
62202
62202
  "valueType": "number"
62203
62203
  },
62204
62204
  {
62205
- "path": "delayedStartSeconds",
62205
+ "path": "delayedStart",
62206
62206
  "valueType": "number"
62207
62207
  },
62208
62208
  {
62209
- "path": "progressPercent",
62209
+ "path": "progress",
62210
62210
  "valueType": "number"
62211
62211
  },
62212
62212
  {
@@ -62320,7 +62320,7 @@ Object.freeze({
62320
62320
  ],
62321
62321
  "fan-control": [
62322
62322
  {
62323
- "path": "percentage",
62323
+ "path": "speed",
62324
62324
  "valueType": "number"
62325
62325
  },
62326
62326
  {
@@ -62420,7 +62420,7 @@ Object.freeze({
62420
62420
  }
62421
62421
  ],
62422
62422
  "humidity-sensor": [{
62423
- "path": "percent",
62423
+ "path": "humidity",
62424
62424
  "valueType": "number"
62425
62425
  }],
62426
62426
  "image": [{
@@ -62530,7 +62530,7 @@ Object.freeze({
62530
62530
  "valueType": "number"
62531
62531
  },
62532
62532
  {
62533
- "path": "progressPercent",
62533
+ "path": "progress",
62534
62534
  "valueType": "number"
62535
62535
  },
62536
62536
  {
@@ -62609,11 +62609,11 @@ Object.freeze({
62609
62609
  "valueType": "string"
62610
62610
  },
62611
62611
  {
62612
- "path": "positionMs",
62612
+ "path": "position",
62613
62613
  "valueType": "number"
62614
62614
  },
62615
62615
  {
62616
- "path": "durationMs",
62616
+ "path": "duration",
62617
62617
  "valueType": "number"
62618
62618
  },
62619
62619
  {
@@ -62715,11 +62715,11 @@ Object.freeze({
62715
62715
  ]
62716
62716
  },
62717
62717
  {
62718
- "path": "signalPercent",
62718
+ "path": "signal",
62719
62719
  "valueType": "number"
62720
62720
  },
62721
62721
  {
62722
- "path": "rssiDbm",
62722
+ "path": "rssi",
62723
62723
  "valueType": "number"
62724
62724
  },
62725
62725
  {
@@ -62850,23 +62850,23 @@ Object.freeze({
62850
62850
  ],
62851
62851
  "power-meter": [
62852
62852
  {
62853
- "path": "watts",
62853
+ "path": "power",
62854
62854
  "valueType": "number"
62855
62855
  },
62856
62856
  {
62857
- "path": "kwhTotal",
62857
+ "path": "energy",
62858
62858
  "valueType": "number"
62859
62859
  },
62860
62860
  {
62861
- "path": "volts",
62861
+ "path": "voltage",
62862
62862
  "valueType": "number"
62863
62863
  },
62864
62864
  {
62865
- "path": "amps",
62865
+ "path": "current",
62866
62866
  "valueType": "number"
62867
62867
  },
62868
62868
  {
62869
- "path": "va",
62869
+ "path": "apparentPower",
62870
62870
  "valueType": "number"
62871
62871
  },
62872
62872
  {
@@ -62894,14 +62894,10 @@ Object.freeze({
62894
62894
  {
62895
62895
  "path": "gps.accuracyMeters",
62896
62896
  "valueType": "number"
62897
- },
62898
- {
62899
- "path": "batteryPercent",
62900
- "valueType": "number"
62901
62897
  }
62902
62898
  ],
62903
62899
  "pressure-sensor": [{
62904
- "path": "hpa",
62900
+ "path": "pressure",
62905
62901
  "valueType": "number"
62906
62902
  }],
62907
62903
  "privacy-mask": [{
@@ -63215,7 +63211,7 @@ Object.freeze({
63215
63211
  "valueType": "boolean"
63216
63212
  }],
63217
63213
  "temperature-sensor": [{
63218
- "path": "celsius",
63214
+ "path": "temperature",
63219
63215
  "valueType": "number"
63220
63216
  }],
63221
63217
  "update": [
@@ -63263,7 +63259,7 @@ Object.freeze({
63263
63259
  "valueType": "string"
63264
63260
  },
63265
63261
  {
63266
- "path": "progressPercent",
63262
+ "path": "progress",
63267
63263
  "valueType": "number"
63268
63264
  },
63269
63265
  {
@@ -63762,7 +63758,7 @@ function errMsg(err) {
63762
63758
  return String(err);
63763
63759
  }
63764
63760
  //#endregion
63765
- //#region ../types/dist/composition-Bb8iwHEJ.mjs
63761
+ //#region ../types/dist/composition-CZImLpOI.mjs
63766
63762
  /**
63767
63763
  * The ffmpeg build every CamStack node downloads, per platform and arch.
63768
63764
  *
@@ -68526,6 +68522,14 @@ var AutomationConditionLeafSchema = object({
68526
68522
  array(union([string(), number()]))
68527
68523
  ])
68528
68524
  });
68525
+ var AutomationConditionStationaryPresentSchema = object({
68526
+ kind: literal("stationary-present"),
68527
+ deviceId: number().int().nonnegative(),
68528
+ /** Class names; a macro class matches every raw class that maps to it. */
68529
+ classes: array(string().min(1)).min(1).optional(),
68530
+ /** The parked object must be in at least one of these zones. */
68531
+ zones: array(string().min(1)).min(1).optional()
68532
+ });
68529
68533
  /**
68530
68534
  * The expression leaf, declared as a plain object rather than an intersection
68531
68535
  * with {@link ExpressionSourceSchema}: a discriminated union has to be able to
@@ -68559,7 +68563,8 @@ var AutomationConditionSchema = lazy(() => discriminatedUnion("kind", [
68559
68563
  child: AutomationConditionSchema
68560
68564
  }),
68561
68565
  AutomationConditionLeafSchema,
68562
- AutomationConditionExpressionSchema
68566
+ AutomationConditionExpressionSchema,
68567
+ AutomationConditionStationaryPresentSchema
68563
68568
  ]));
68564
68569
  /**
68565
68570
  * What starts a run.
@@ -68613,6 +68618,17 @@ var AutomationTriggerSchema = discriminatedUnion("kind", [
68613
68618
  /** Best-so-far confidence the track must reach. */
68614
68619
  minScore: number().min(0).max(1).optional()
68615
68620
  }),
68621
+ object({
68622
+ kind: literal("stationary"),
68623
+ deviceIds: array(number().int().nonnegative()).min(1),
68624
+ /** Class names; a macro class matches like the detection trigger. */
68625
+ classes: array(string().min(1)).min(1).optional(),
68626
+ /** The parked object must be in at least one of these zones. */
68627
+ zones: array(string().min(1)).min(1).optional(),
68628
+ /** `appeared`: it became parked. `departed`: the registry retired it.
68629
+ * The vocabulary of `PipelineAnalyticsStationaryChanged`. */
68630
+ phase: _enum(["appeared", "departed"])
68631
+ }),
68616
68632
  object({
68617
68633
  kind: literal("interval"),
68618
68634
  minutes: number().int().min(1).max(1440)
@@ -68822,7 +68838,8 @@ var AutomationConditionTraceNodeSchema = object({
68822
68838
  "any",
68823
68839
  "not",
68824
68840
  "condition",
68825
- "expression"
68841
+ "expression",
68842
+ "stationary-present"
68826
68843
  ]),
68827
68844
  outcome: TraceNodeOutcomeSchema,
68828
68845
  reason: string(),
@@ -71721,7 +71738,7 @@ var CompositionEventPlanSchema = object({
71721
71738
  stateField: string(),
71722
71739
  fieldKey: string()
71723
71740
  });
71724
- /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.celsius`. */
71741
+ /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.temperature`. */
71725
71742
  var CompositionProblemSchema = object({
71726
71743
  code: _enum([
71727
71744
  "reserved-variant",
@@ -72040,7 +72057,7 @@ var GROUP_TEMPLATES = [
72040
72057
  summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
72041
72058
  role: DeviceRole.TemperatureSensor,
72042
72059
  outputCap: "temperature-sensor",
72043
- outputField: "celsius",
72060
+ outputField: "temperature",
72044
72061
  quantity: "temperature",
72045
72062
  defaultAggregate: "mean",
72046
72063
  empty: "null",
@@ -72051,7 +72068,7 @@ var GROUP_TEMPLATES = [
72051
72068
  summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
72052
72069
  role: DeviceRole.HumiditySensor,
72053
72070
  outputCap: "humidity-sensor",
72054
- outputField: "percent",
72071
+ outputField: "humidity",
72055
72072
  quantity: "humidity",
72056
72073
  defaultAggregate: "mean",
72057
72074
  empty: "null",
@@ -72062,7 +72079,7 @@ var GROUP_TEMPLATES = [
72062
72079
  summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
72063
72080
  role: DeviceRole.PressureSensor,
72064
72081
  outputCap: "pressure-sensor",
72065
- outputField: "hpa",
72082
+ outputField: "pressure",
72066
72083
  quantity: "pressure",
72067
72084
  defaultAggregate: "mean",
72068
72085
  empty: "null",
@@ -72073,7 +72090,7 @@ var GROUP_TEMPLATES = [
72073
72090
  summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
72074
72091
  role: DeviceRole.AmbientLightSensor,
72075
72092
  outputCap: "ambient-light-sensor",
72076
- outputField: "lux",
72093
+ outputField: "illuminance",
72077
72094
  quantity: "illuminance",
72078
72095
  defaultAggregate: "mean",
72079
72096
  empty: "null",
@@ -72084,7 +72101,7 @@ var GROUP_TEMPLATES = [
72084
72101
  summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
72085
72102
  role: DeviceRole.PowerSensor,
72086
72103
  outputCap: "power-meter",
72087
- outputField: "watts",
72104
+ outputField: "power",
72088
72105
  quantity: "power",
72089
72106
  defaultAggregate: "sum",
72090
72107
  empty: "omit",
@@ -72095,7 +72112,7 @@ var GROUP_TEMPLATES = [
72095
72112
  summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
72096
72113
  role: DeviceRole.EnergySensor,
72097
72114
  outputCap: "power-meter",
72098
- outputField: "kwhTotal",
72115
+ outputField: "energy",
72099
72116
  quantity: "energy",
72100
72117
  defaultAggregate: "sum",
72101
72118
  empty: "omit",
@@ -72106,7 +72123,7 @@ var GROUP_TEMPLATES = [
72106
72123
  summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
72107
72124
  role: DeviceRole.BatterySensor,
72108
72125
  outputCap: "battery",
72109
- outputField: "percentage",
72126
+ outputField: "level",
72110
72127
  quantity: "percentage",
72111
72128
  defaultAggregate: "mean",
72112
72129
  empty: "null",
@@ -110649,9 +110666,9 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
110649
110666
  */
110650
110667
  var AirQualitySensorStatusSchema = object({
110651
110668
  /** Carbon dioxide concentration in ppm. */
110652
- co2Ppm: number().min(0).optional().meta(readingMeta("concentration-volume")),
110669
+ co2: number().min(0).optional().meta(readingMeta("concentration-volume")),
110653
110670
  /** Total volatile organic compounds in ppb. */
110654
- vocPpb: number().min(0).optional().meta(readingMeta("concentration-ppb")),
110671
+ voc: number().min(0).optional().meta(readingMeta("concentration-ppb")),
110655
110672
  /** Particulate matter ≤ 2.5 μm in µg/m³. */
110656
110673
  pm25: number().min(0).optional().meta(readingMeta("concentration-mass")),
110657
110674
  /** Particulate matter ≤ 10 μm in µg/m³. */
@@ -110684,12 +110701,12 @@ var airQualitySensorCapability = {
110684
110701
  * History (D850): recorded series.
110685
110702
  */
110686
110703
  history: { fields: {
110687
- co2Ppm: {
110704
+ co2: {
110688
110705
  kind: "gauge",
110689
110706
  unit: "ppm",
110690
110707
  deadband: 5
110691
110708
  },
110692
- vocPpb: {
110709
+ voc: {
110693
110710
  kind: "gauge",
110694
110711
  unit: "ppb",
110695
110712
  deadband: 5
@@ -110720,7 +110737,7 @@ var airQualitySensorCapability = {
110720
110737
  */
110721
110738
  var AmbientLightSensorStatusSchema = object({
110722
110739
  /** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
110723
- lux: number().min(0).nullable().meta(readingMeta("illuminance", {
110740
+ illuminance: number().min(0).nullable().meta(readingMeta("illuminance", {
110724
110741
  precision: 0,
110725
110742
  label: "Illuminance"
110726
110743
  })),
@@ -110749,7 +110766,7 @@ var ambientLightSensorCapability = {
110749
110766
  /**
110750
110767
  * History (D850): recorded series. Wide range, so a RELATIVE deadband (10 %).
110751
110768
  */
110752
- history: { fields: { lux: {
110769
+ history: { fields: { illuminance: {
110753
110770
  kind: "gauge",
110754
110771
  unit: "lx",
110755
110772
  deadbandPct: 10,
@@ -111062,7 +111079,7 @@ var BatteryStatusSchema = object({
111062
111079
  * Consumers must SKIP a null rather than coerce it — `battery-band` already
111063
111080
  * declines to band a non-finite reading, which is the correct shape.
111064
111081
  */
111065
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
111082
+ level: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
111066
111083
  /**
111067
111084
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
111068
111085
  * Reolink-specific for the Solar Panel 2 accessory (will become
@@ -111072,7 +111089,7 @@ var BatteryStatusSchema = object({
111072
111089
  * `'unknown'` is the absence of an answer: the provider has not read the
111073
111090
  * power fields yet, or the firmware reported neither. Before it existed,
111074
111091
  * two unreadable fields produced `'none'`, and a camera nobody had reached
111075
- * was drawn "on battery alone" — the same D315 defect `percentage` closed
111092
+ * was drawn "on battery alone" — the same D315 defect `level` closed
111076
111093
  * by going nullable. Consumers SKIP it (no charger state published, no
111077
111094
  * glyph, no HomeKit ChargingState) rather than coerce it either way.
111078
111095
  */
@@ -111096,7 +111113,7 @@ var BatteryStatusSchema = object({
111096
111113
  * that only report charge. A second reading on this cap, not a second
111097
111114
  * `numeric-sensor` on the same device.
111098
111115
  */
111099
- volts: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
111116
+ voltage: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
111100
111117
  /**
111101
111118
  * Ms epoch of the last time the device PROVED it was reachable — a
111102
111119
  * completed firmware round-trip, an observed wake, or an inbound push
@@ -111130,7 +111147,7 @@ var BatteryStatusSchema = object({
111130
111147
  /**
111131
111148
  * True when the source is a BINARY low-battery indicator (HA
111132
111149
  * `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
111133
- * charge level — `percentage` is then a coarse stand-in (100 = normal,
111150
+ * charge level — `level` is then a coarse stand-in (100 = normal,
111134
111151
  * sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
111135
111152
  * misleading exact percentage. Absent/false → genuine 0–100 % reading.
111136
111153
  */
@@ -111150,15 +111167,15 @@ var BATTERY_DEVICE_TYPES = [
111150
111167
  var batteryCustomize = {
111151
111168
  version: 1,
111152
111169
  targets: [{
111153
- id: "percentage",
111170
+ id: "level",
111154
111171
  cardinality: "scalar",
111155
111172
  vocabulary: {
111156
111173
  cap: "battery",
111157
- stateField: "percentage"
111174
+ stateField: "level"
111158
111175
  },
111159
111176
  deviceTypes: BATTERY_DEVICE_TYPES,
111160
111177
  apply: "add",
111161
- path: "percentage",
111178
+ path: "level",
111162
111179
  sources: [{
111163
111180
  kind: "field",
111164
111181
  valueKinds: ["number", "string"],
@@ -111252,7 +111269,7 @@ onStatusChanged: { data: object({
111252
111269
  schema: BatteryStatusSchema,
111253
111270
  kind: "push",
111254
111271
  empty: {
111255
- percentage: null,
111272
+ level: null,
111256
111273
  charging: "unknown",
111257
111274
  sleeping: false,
111258
111275
  lastUpdated: 0
@@ -111279,11 +111296,11 @@ onStatusChanged: { data: object({
111279
111296
  * History (D850): recorded series. The generic capture replaces the `battery` series of `pipeline-analytics:stats-5m`.
111280
111297
  */
111281
111298
  history: { fields: {
111282
- percentage: {
111299
+ level: {
111283
111300
  kind: "gauge",
111284
111301
  unit: "%"
111285
111302
  },
111286
- volts: {
111303
+ voltage: {
111287
111304
  kind: "gauge",
111288
111305
  unit: "V"
111289
111306
  }
@@ -111343,14 +111360,14 @@ var binaryCapability = {
111343
111360
  * controls to this single-method surface.
111344
111361
  *
111345
111362
  * The cap is intentionally minimal: a single `setBrightness({deviceId,
111346
- * percentage})` mutation plus the auto-injected `getStatus`. Drivers
111363
+ * level})` mutation plus the auto-injected `getStatus`. Drivers
111347
111364
  * that expose richer controls (color temperature, scenes, schedules)
111348
111365
  * should surface those via the device's `getSettingsUISchema()`
111349
111366
  * instead of bloating this cap.
111350
111367
  */
111351
111368
  var BrightnessStatusSchema = object({
111352
111369
  /** Current level as 0..100 inclusive. Firmware-reported. */
111353
- percentage: number().min(0).max(100).meta(readingMeta("percentage")),
111370
+ level: number().min(0).max(100).meta(readingMeta("percentage")),
111354
111371
  /** Ms epoch of the last operator-driven change. Useful for UI freshness. */
111355
111372
  lastChangedAt: number()
111356
111373
  });
@@ -111362,7 +111379,7 @@ var brightnessCapability = {
111362
111379
  deviceTypes: [DeviceType.Light],
111363
111380
  methods: { setBrightness: method(object({
111364
111381
  deviceId: number().int().nonnegative(),
111365
- percentage: number().min(0).max(100)
111382
+ level: number().min(0).max(100)
111366
111383
  }), _void(), {
111367
111384
  kind: "mutation",
111368
111385
  auth: "protected"
@@ -111375,7 +111392,7 @@ var brightnessCapability = {
111375
111392
  */
111376
111393
  onBrightnessChanged: { data: object({
111377
111394
  deviceId: number(),
111378
- percentage: number().min(0).max(100),
111395
+ level: number().min(0).max(100),
111379
111396
  lastChangedAt: number()
111380
111397
  }) } },
111381
111398
  status: {
@@ -111398,7 +111415,7 @@ onBrightnessChanged: { data: object({
111398
111415
  /**
111399
111416
  * History (D850): recorded series. Actuator tier: level keeps every change.
111400
111417
  */
111401
- history: { fields: { percentage: {
111418
+ history: { fields: { level: {
111402
111419
  kind: "gauge",
111403
111420
  unit: "%",
111404
111421
  minIntervalMs: 0
@@ -112012,11 +112029,11 @@ var ColorInputSchema = discriminatedUnion("mode", [
112012
112029
  }),
112013
112030
  object({
112014
112031
  mode: literal("mired"),
112015
- mireds: number().int().min(50).max(1e3)
112032
+ colorTemperature: number().int().min(50).max(1e3)
112016
112033
  })
112017
112034
  ]);
112018
112035
  var ColorStatusSchema = object({
112019
- /** Active color mode — which of `rgb` / `hsv` / `mireds` reflects
112036
+ /** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
112020
112037
  * the bulb's current state. */
112021
112038
  mode: _enum([
112022
112039
  "rgb",
@@ -112028,7 +112045,7 @@ var ColorStatusSchema = object({
112028
112045
  /** Populated when `mode === 'hsv'`. */
112029
112046
  hsv: HsvTripletSchema.optional(),
112030
112047
  /** Populated when `mode === 'mired'`. */
112031
- mireds: number().int().optional().meta(readingMeta("colour-temperature")),
112048
+ colorTemperature: number().int().optional().meta(readingMeta("colour-temperature")),
112032
112049
  /** Ms epoch of the last operator-driven change. */
112033
112050
  lastChangedAt: number()
112034
112051
  });
@@ -112060,7 +112077,7 @@ onColorChanged: { data: object({
112060
112077
  ]),
112061
112078
  rgb: RgbTripletSchema.optional(),
112062
112079
  hsv: HsvTripletSchema.optional(),
112063
- mireds: number().int().optional(),
112080
+ colorTemperature: number().int().optional(),
112064
112081
  lastChangedAt: number()
112065
112082
  }) } },
112066
112083
  status: {
@@ -112949,11 +112966,11 @@ var DishwasherStatusSchema = object({
112949
112966
  /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
112950
112967
  availablePrograms: array(string()),
112951
112968
  /** Seconds remaining on the active cycle, or null when not running / not known. */
112952
- remainingSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
112969
+ remaining: number().int().nonnegative().nullable().meta(readingMeta("duration")),
112953
112970
  /** Seconds the delayed start is set to (time until the cycle starts), or null. */
112954
- delayedStartSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
112971
+ delayedStart: number().int().nonnegative().nullable().meta(readingMeta("duration")),
112955
112972
  /** Cycle completion 0..100, or null when not applicable. */
112956
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
112973
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
112957
112974
  /** True when the door is reported open; null when the door state is not known. */
112958
112975
  doorOpen: boolean().nullable(),
112959
112976
  /** True when the door is latched (locked) during a cycle; null when not reported. */
@@ -113172,14 +113189,14 @@ var dishwasherCapability = {
113172
113189
  runtimeState: DishwasherStatusSchema,
113173
113190
  durability: "session",
113174
113191
  history: { fields: {
113175
- progressPercent: {
113192
+ progress: {
113176
113193
  kind: "gauge",
113177
113194
  unit: "%",
113178
113195
  deadband: 2
113179
113196
  },
113180
113197
  state: { kind: "enum" },
113181
113198
  operationState: { kind: "enum" },
113182
- remainingSeconds: {
113199
+ remaining: {
113183
113200
  kind: "gauge",
113184
113201
  unit: "s",
113185
113202
  minIntervalMs: 6e4
@@ -113770,7 +113787,7 @@ var FanDirectionSchema = _enum(["forward", "reverse"]);
113770
113787
  var FanControlStatusSchema = object({
113771
113788
  /** Active speed as 0..100 inclusive. Null when the device has no
113772
113789
  * speed surface (single-speed fan). */
113773
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
113790
+ speed: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
113774
113791
  /** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
113775
113792
  * a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
113776
113793
  percentageStep: number().positive().optional().meta(readingMeta("percentage")),
@@ -113797,7 +113814,7 @@ var fanControlCapability = {
113797
113814
  methods: {
113798
113815
  setPercentage: method(object({
113799
113816
  deviceId: number().int().nonnegative(),
113800
- percentage: number().min(0).max(100)
113817
+ speed: number().min(0).max(100)
113801
113818
  }), _void(), {
113802
113819
  kind: "mutation",
113803
113820
  auth: "protected"
@@ -113830,7 +113847,7 @@ var fanControlCapability = {
113830
113847
  },
113831
113848
  /**
113832
113849
  * Runtime-state slice — mirrored by the kernel. UI fan speed
113833
- * sliders read `percentage` for live updates.
113850
+ * sliders read `speed` for live updates.
113834
113851
  */
113835
113852
  runtimeState: FanControlStatusSchema,
113836
113853
  /**
@@ -113844,7 +113861,7 @@ var fanControlCapability = {
113844
113861
  * History (D850): recorded series. Actuator tier: speed keeps every change.
113845
113862
  */
113846
113863
  history: { fields: {
113847
- percentage: {
113864
+ speed: {
113848
113865
  kind: "gauge",
113849
113866
  unit: "%",
113850
113867
  minIntervalMs: 0
@@ -114289,7 +114306,7 @@ var humidifierCapability = {
114289
114306
  */
114290
114307
  var HumiditySensorStatusSchema = object({
114291
114308
  /** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
114292
- percent: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
114309
+ humidity: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
114293
114310
  precision: 0,
114294
114311
  label: "Humidity"
114295
114312
  })),
@@ -114318,7 +114335,7 @@ var humiditySensorCapability = {
114318
114335
  /**
114319
114336
  * History (D850): recorded series.
114320
114337
  */
114321
- history: { fields: { percent: {
114338
+ history: { fields: { humidity: {
114322
114339
  kind: "gauge",
114323
114340
  unit: "%",
114324
114341
  deadband: .5
@@ -114958,7 +114975,7 @@ var LawnMowerControlStatusSchema = object({
114958
114975
  batteryLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
114959
114976
  /** 0..100 mowing-completion percentage of the current task, or null when no
114960
114977
  * task is active / progress is unavailable. */
114961
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
114978
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
114962
114979
  /** Current device/event code (dynamic — mostly status, sometimes an error),
114963
114980
  * or null when unknown. */
114964
114981
  currentCode: number().nullable().meta(readingMeta("none")),
@@ -115458,7 +115475,7 @@ var lockControlCapability = {
115458
115475
  volatileStateFields: ["lastChangedAt"]
115459
115476
  };
115460
115477
  /**
115461
- * A monotonic total between resets (D944). Energy uses `power-meter.kwhTotal`
115478
+ * A monotonic total between resets (D944). Energy uses `power-meter.energy`
115462
115479
  * so dashboards keep one series; every other instantaneous reading lands here.
115463
115480
  * `value` is the time integral in the source quantity's accumulated base
115464
115481
  * (base-unit seconds, or kWh on the power meter). `null` is a gap, never zero.
@@ -115552,10 +115569,10 @@ var MediaPlayerStatusSchema = object({
115552
115569
  currentMedia: MediaInfoSchema.nullable(),
115553
115570
  /** Current playback position in ms. Null when not seekable or
115554
115571
  * nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
115555
- positionMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
115572
+ position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
115556
115573
  /** Total duration of the current media in ms. Null when unknown
115557
115574
  * (live stream) or nothing is playing. */
115558
- durationMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
115575
+ duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
115559
115576
  /** Shuffle toggle. Null when no shuffle surface.
115560
115577
  * Pair with `DeviceFeature.MediaPlayerShuffle`. */
115561
115578
  shuffle: boolean().nullable(),
@@ -115594,7 +115611,7 @@ var mediaPlayerCapability = {
115594
115611
  }),
115595
115612
  seek: method(object({
115596
115613
  deviceId: number().int().nonnegative(),
115597
- positionMs: number().int().nonnegative()
115614
+ position: number().int().nonnegative()
115598
115615
  }), _void(), {
115599
115616
  kind: "mutation",
115600
115617
  auth: "protected"
@@ -115666,7 +115683,7 @@ var mediaPlayerCapability = {
115666
115683
  /**
115667
115684
  * History (D850): volume (a level an operator or an automation sets; the
115668
115685
  * default 10 s floor folds a slider drag into its end value) and mute.
115669
- * `positionMs` is not recorded: it moves continuously while playing.
115686
+ * `position` is not recorded: it moves continuously while playing.
115670
115687
  */
115671
115688
  history: { fields: {
115672
115689
  volumeLevel: {
@@ -116765,9 +116782,9 @@ var NetworkLinkStatusSchema = object({
116765
116782
  * one whose reading has not landed must not be drawn at 0 %. Consumers
116766
116783
  * SKIP a null rather than coerce it.
116767
116784
  */
116768
- signalPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
116785
+ signal: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
116769
116786
  /** Raw received signal strength in dBm, when the firmware reports one. */
116770
- rssiDbm: number().optional().meta(readingMeta("signal-level")),
116787
+ rssi: number().optional().meta(readingMeta("signal-level")),
116771
116788
  /** Network name of a wireless link, when the firmware reports it. */
116772
116789
  ssid: string().optional(),
116773
116790
  /** Ms epoch of the last observation. Lets consumers reason about freshness. */
@@ -116776,7 +116793,7 @@ var NetworkLinkStatusSchema = object({
116776
116793
  /** The slice a provider seeds before its first read: nothing is known yet. */
116777
116794
  var NETWORK_LINK_UNKNOWN = {
116778
116795
  type: "unknown",
116779
- signalPercent: null,
116796
+ signal: null,
116780
116797
  lastUpdated: 0
116781
116798
  };
116782
116799
  /**
@@ -116837,13 +116854,13 @@ onStatusChanged: { data: object({
116837
116854
  * History (D850): recorded series.
116838
116855
  */
116839
116856
  history: { fields: {
116840
- signalPercent: {
116857
+ signal: {
116841
116858
  kind: "gauge",
116842
116859
  unit: "%",
116843
116860
  deadband: 3,
116844
116861
  minIntervalMs: 6e4
116845
116862
  },
116846
- rssiDbm: {
116863
+ rssi: {
116847
116864
  kind: "gauge",
116848
116865
  unit: "dBm",
116849
116866
  deadband: 2,
@@ -118163,16 +118180,16 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
118163
118180
  * in real-world devices.
118164
118181
  */
118165
118182
  var PowerMeterStatusSchema = object({
118166
- /** Instantaneous power draw in watts. */
118167
- watts: number().optional().meta(readingMeta("power", { label: "Power" })),
118183
+ /** Instantaneous power draw (watts). */
118184
+ power: number().optional().meta(readingMeta("power", { label: "Power" })),
118168
118185
  /** Cumulative energy in kilowatt-hours since the meter was reset. */
118169
- kwhTotal: number().optional().meta(readingMeta("energy", { label: "Energy" })),
118170
- /** Voltage in volts. */
118171
- volts: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
118186
+ energy: number().optional().meta(readingMeta("energy", { label: "Energy" })),
118187
+ /** Voltage (volts). */
118188
+ voltage: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
118172
118189
  /** Current in amperes. */
118173
- amps: number().optional().meta(readingMeta("current", { label: "Current" })),
118190
+ current: number().optional().meta(readingMeta("current", { label: "Current" })),
118174
118191
  /** Apparent power in volt-amperes. */
118175
- va: number().optional().meta(readingMeta("apparent-power")),
118192
+ apparentPower: number().optional().meta(readingMeta("apparent-power")),
118176
118193
  /** Power factor (0..1) if reported. */
118177
118194
  powerFactor: number().min(0).max(1).optional().meta(readingMeta("ratio")),
118178
118195
  /** Ms epoch when the slice was last updated. */
@@ -118230,14 +118247,14 @@ function powerTarget(id, unit) {
118230
118247
  advancedExpression: true
118231
118248
  };
118232
118249
  }
118233
- /** "Power and energy" extension: watts, energy, voltage and current from other devices (D951). */
118250
+ /** "Power and energy" extension: power, energy, voltage and current from other devices (D951). */
118234
118251
  var powerMeterCustomize = {
118235
118252
  version: 1,
118236
118253
  targets: [
118237
- powerTarget("watts", "W"),
118238
- powerTarget("kwhTotal", "kWh"),
118239
- powerTarget("volts", "V"),
118240
- powerTarget("amps", "A")
118254
+ powerTarget("power", "W"),
118255
+ powerTarget("energy", "kWh"),
118256
+ powerTarget("voltage", "V"),
118257
+ powerTarget("current", "A")
118241
118258
  ]
118242
118259
  };
118243
118260
  var powerMeterCapability = {
@@ -118253,41 +118270,41 @@ var powerMeterCapability = {
118253
118270
  },
118254
118271
  runtimeState: PowerMeterStatusSchema,
118255
118272
  /**
118256
- * Runtime-state durability: **restored** — as `numeric-sensor`; `kwhTotal` is an accumulator whose restored value is the baseline.
118273
+ * Runtime-state durability: **restored** — as `numeric-sensor`; `energy` is an accumulator whose restored value is the baseline.
118257
118274
  *
118258
118275
  * See `RuntimeStateDurability`. Enforced by
118259
118276
  * `scripts/check-runtime-state-durability.ts`.
118260
118277
  */
118261
118278
  durability: "restored",
118262
118279
  /**
118263
- * History (D850): recorded series. Gauges are floored at 30 s; `kwhTotal` is the one monotonic meter (counter).
118280
+ * History (D850): recorded series. Gauges are floored at 30 s; `energy` is the one monotonic meter (counter).
118264
118281
  */
118265
118282
  history: { fields: {
118266
- watts: {
118283
+ power: {
118267
118284
  kind: "gauge",
118268
118285
  unit: "W",
118269
118286
  deadband: 1,
118270
118287
  minIntervalMs: 3e4
118271
118288
  },
118272
- kwhTotal: {
118289
+ energy: {
118273
118290
  kind: "counter",
118274
118291
  unit: "kWh",
118275
118292
  deadband: .01,
118276
118293
  minIntervalMs: 6e4
118277
118294
  },
118278
- volts: {
118295
+ voltage: {
118279
118296
  kind: "gauge",
118280
118297
  unit: "V",
118281
118298
  deadband: 1,
118282
118299
  minIntervalMs: 3e4
118283
118300
  },
118284
- amps: {
118301
+ current: {
118285
118302
  kind: "gauge",
118286
118303
  unit: "A",
118287
118304
  deadband: .05,
118288
118305
  minIntervalMs: 3e4
118289
118306
  },
118290
- va: {
118307
+ apparentPower: {
118291
118308
  kind: "gauge",
118292
118309
  unit: "VA",
118293
118310
  deadband: 1,
@@ -118337,9 +118354,6 @@ var PresenceStatusSchema = object({
118337
118354
  location: string().nullable(),
118338
118355
  /** GPS coordinates when available. Null otherwise. */
118339
118356
  gps: GpsLocationSchema.nullable(),
118340
- /** Optional battery level of the tracking device (0..100). Null
118341
- * when not reported. */
118342
- batteryPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
118343
118357
  /** Ms epoch when the slice was last updated. */
118344
118358
  lastChangedAt: number()
118345
118359
  });
@@ -118368,14 +118382,7 @@ var presenceCapability = {
118368
118382
  * `scripts/check-runtime-state-durability.ts`.
118369
118383
  */
118370
118384
  durability: "restored",
118371
- /**
118372
- * History (D850): recorded series.
118373
- */
118374
- history: { fields: { batteryPercent: {
118375
- kind: "gauge",
118376
- unit: "%",
118377
- deadband: 1
118378
- } } },
118385
+ history: "none",
118379
118386
  /** Clock fields: written, but excluded from the compare that decides
118380
118387
  * whether persisting is worth a SQLite commit. */
118381
118388
  volatileStateFields: ["lastChangedAt"]
@@ -118390,7 +118397,7 @@ var presenceCapability = {
118390
118397
  */
118391
118398
  var PressureSensorStatusSchema = object({
118392
118399
  /** Current pressure in hPa. `null` when the sample was refused (D393). */
118393
- hpa: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
118400
+ pressure: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
118394
118401
  /** Ms epoch when the slice was last updated. */
118395
118402
  lastFetchedAt: number()
118396
118403
  });
@@ -118416,7 +118423,7 @@ var pressureSensorCapability = {
118416
118423
  /**
118417
118424
  * History (D850): recorded series.
118418
118425
  */
118419
- history: { fields: { hpa: {
118426
+ history: { fields: { pressure: {
118420
118427
  kind: "gauge",
118421
118428
  unit: "hPa",
118422
118429
  deadband: .1
@@ -122123,7 +122130,7 @@ var tamperCapability = {
122123
122130
  */
122124
122131
  var TemperatureSensorStatusSchema = object({
122125
122132
  /** Current temperature in Celsius. `null` when the sample was refused (D393). */
122126
- celsius: number().nullable().meta(readingMeta("temperature", {
122133
+ temperature: number().nullable().meta(readingMeta("temperature", {
122127
122134
  precision: 1,
122128
122135
  label: "Temperature"
122129
122136
  })),
@@ -122152,7 +122159,7 @@ var temperatureSensorCapability = {
122152
122159
  /**
122153
122160
  * History (D850): recorded series.
122154
122161
  */
122155
- history: { fields: { celsius: {
122162
+ history: { fields: { temperature: {
122156
122163
  kind: "gauge",
122157
122164
  unit: "°C",
122158
122165
  deadband: .1
@@ -122449,7 +122456,7 @@ var VacuumControlStatusSchema = object({
122449
122456
  /** Speed tokens the hardware accepts — drives the UI selector. */
122450
122457
  availableFanSpeeds: array(string()),
122451
122458
  /** 0..100 cleaning-completion percentage of the current task, or null. */
122452
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
122459
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
122453
122460
  /** Current error code (0 / null = no error). */
122454
122461
  errorCode: number().nullable().meta(readingMeta("none")),
122455
122462
  /** Human label for {@link errorCode}, or null when none / undecodable. */
@@ -124531,7 +124538,7 @@ var BaseDevice = class {
124531
124538
  * `device-local-state.ts`. Drivers access via:
124532
124539
  *
124533
124540
  * `this.state.battery.sleeping = true` // patches the battery slice
124534
- * `const pct = this.state.battery.percentage` // reads the battery slice
124541
+ * `const pct = this.state.battery.level` // reads the battery slice
124535
124542
  * `this.state.deviceStatus.online = true` // mirrors `markOnline(true)`
124536
124543
  *
124537
124544
  * Adding a new cap with `runtimeState:` automatically extends this
@@ -124571,7 +124578,7 @@ var BaseDevice = class {
124571
124578
  * shape; drivers don't redeclare it, they just write through.
124572
124579
  *
124573
124580
  * Read: `this.runtimeState.getCapState('battery')` →
124574
- * `{percentage, charging, sleeping, lastUpdated}` for any
124581
+ * `{level, charging, sleeping, lastUpdated}` for any
124575
124582
  * provider that registers `batteryCapability`.
124576
124583
  * Write: `this.runtimeState.setCapState('battery', { … })`.
124577
124584
  *
@@ -135790,7 +135797,7 @@ var ACTUATOR_CAP_VOCABULARY = {
135790
135797
  label: t("Full brightness", "Luminosità massima"),
135791
135798
  phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
135792
135799
  icon: "sun",
135793
- args: { percentage: 100 }
135800
+ args: { level: 100 }
135794
135801
  },
135795
135802
  {
135796
135803
  id: "brightness.half",
@@ -135798,7 +135805,7 @@ var ACTUATOR_CAP_VOCABULARY = {
135798
135805
  label: t("Half brightness", "Luminosità a metà"),
135799
135806
  phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
135800
135807
  icon: "sun-dim",
135801
- args: { percentage: 50 }
135808
+ args: { level: 50 }
135802
135809
  },
135803
135810
  {
135804
135811
  id: "brightness.off",
@@ -135806,16 +135813,16 @@ var ACTUATOR_CAP_VOCABULARY = {
135806
135813
  label: t("Brightness off", "Luminosità a zero"),
135807
135814
  phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
135808
135815
  icon: "lightbulb-off",
135809
- args: { percentage: 0 }
135816
+ args: { level: 0 }
135810
135817
  },
135811
135818
  {
135812
135819
  id: "brightness.set",
135813
135820
  method: "setBrightness",
135814
135821
  label: t("Set brightness", "Imposta la luminosità"),
135815
- phrase: t("Set the brightness of {device} to {percentage}", "Imposta la luminosità di {device} a {percentage}"),
135822
+ phrase: t("Set the brightness of {device} to {level}", "Imposta la luminosità di {device} a {level}"),
135816
135823
  icon: "sun-medium",
135817
135824
  openArgs: [{
135818
- key: "percentage",
135825
+ key: "level",
135819
135826
  label: PERCENT,
135820
135827
  offer: {
135821
135828
  kind: "number",
@@ -135829,13 +135836,13 @@ var ACTUATOR_CAP_VOCABULARY = {
135829
135836
  ],
135830
135837
  state: [{
135831
135838
  kind: "numeric",
135832
- field: "percentage",
135839
+ field: "level",
135833
135840
  quantity: t("the brightness", "la luminosità"),
135834
135841
  label: t("Brightness", "Luminosità"),
135835
135842
  unit: "%",
135836
135843
  icon: "sun"
135837
135844
  }],
135838
- events: { onBrightnessChanged: { notOperatorFacing: "the `percentage` state trigger reads the same change" } }
135845
+ events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
135839
135846
  },
135840
135847
  color: {
135841
135848
  scope: "device",
@@ -135849,7 +135856,7 @@ var ACTUATOR_CAP_VOCABULARY = {
135849
135856
  icon: "sun",
135850
135857
  args: { color: {
135851
135858
  mode: "mired",
135852
- mireds: 370
135859
+ colorTemperature: 370
135853
135860
  } }
135854
135861
  },
135855
135862
  {
@@ -135860,7 +135867,7 @@ var ACTUATOR_CAP_VOCABULARY = {
135860
135867
  icon: "snowflake",
135861
135868
  args: { color: {
135862
135869
  mode: "mired",
135863
- mireds: 200
135870
+ colorTemperature: 200
135864
135871
  } }
135865
135872
  },
135866
135873
  {
@@ -136474,7 +136481,7 @@ var ACTUATOR_CAP_VOCABULARY = {
136474
136481
  label: t("Fan off", "Ventilatore spento"),
136475
136482
  phrase: t("Stop {device}", "Ferma {device}"),
136476
136483
  icon: "power-off",
136477
- args: { percentage: 0 }
136484
+ args: { speed: 0 }
136478
136485
  },
136479
136486
  {
136480
136487
  id: "fan.full",
@@ -136482,16 +136489,16 @@ var ACTUATOR_CAP_VOCABULARY = {
136482
136489
  label: t("Fan full", "Ventilatore al massimo"),
136483
136490
  phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
136484
136491
  icon: "fan",
136485
- args: { percentage: 100 }
136492
+ args: { speed: 100 }
136486
136493
  },
136487
136494
  {
136488
136495
  id: "fan.speed",
136489
136496
  method: "setPercentage",
136490
136497
  label: t("Set speed", "Imposta la velocità"),
136491
- phrase: t("Set the speed of {device} to {percentage}", "Imposta la velocità di {device} al {percentage}"),
136498
+ phrase: t("Set the speed of {device} to {speed}", "Imposta la velocità di {device} al {speed}"),
136492
136499
  icon: "fan",
136493
136500
  openArgs: [{
136494
- key: "percentage",
136501
+ key: "speed",
136495
136502
  label: t("Speed", "Velocità"),
136496
136503
  offer: {
136497
136504
  kind: "number",
@@ -136553,7 +136560,7 @@ var ACTUATOR_CAP_VOCABULARY = {
136553
136560
  ],
136554
136561
  state: [{
136555
136562
  kind: "numeric",
136556
- field: "percentage",
136563
+ field: "speed",
136557
136564
  quantity: t("the speed", "la velocità"),
136558
136565
  label: t("Speed", "Velocità"),
136559
136566
  unit: "%",
@@ -137351,7 +137358,7 @@ var APPLIANCE_CAP_VOCABULARY = {
137351
137358
  },
137352
137359
  {
137353
137360
  kind: "numeric",
137354
- field: "progressPercent",
137361
+ field: "progress",
137355
137362
  quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
137356
137363
  label: t("Progress", "Avanzamento"),
137357
137364
  unit: "%",
@@ -137709,10 +137716,10 @@ var APPLIANCE_CAP_VOCABULARY = {
137709
137716
  id: "media.seek",
137710
137717
  method: "seek",
137711
137718
  label: t("Seek", "Vai al punto"),
137712
- phrase: t("Move {device} to {positionMs}", "Porta {device} al punto {positionMs}"),
137719
+ phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
137713
137720
  icon: "fast-forward",
137714
137721
  openArgs: [{
137715
- key: "positionMs",
137722
+ key: "position",
137716
137723
  label: t("Position", "Posizione"),
137717
137724
  offer: {
137718
137725
  kind: "number",
@@ -138761,7 +138768,7 @@ var SENSOR_CAP_VOCABULARY = {
138761
138768
  state: [
138762
138769
  {
138763
138770
  kind: "numeric",
138764
- field: "co2Ppm",
138771
+ field: "co2",
138765
138772
  quantity: t("the CO₂", "la CO₂"),
138766
138773
  label: t("CO₂", "CO₂"),
138767
138774
  unit: "ppm",
@@ -138769,7 +138776,7 @@ var SENSOR_CAP_VOCABULARY = {
138769
138776
  },
138770
138777
  {
138771
138778
  kind: "numeric",
138772
- field: "vocPpb",
138779
+ field: "voc",
138773
138780
  quantity: t("the VOC level", "il livello di COV"),
138774
138781
  label: t("VOC", "COV"),
138775
138782
  unit: "ppb",
@@ -138805,7 +138812,7 @@ var SENSOR_CAP_VOCABULARY = {
138805
138812
  noun: t("Light level", "Luminosità ambiente"),
138806
138813
  state: [{
138807
138814
  kind: "numeric",
138808
- field: "lux",
138815
+ field: "illuminance",
138809
138816
  quantity: t("the light level", "la luminosità"),
138810
138817
  label: t("Illuminance", "Illuminamento"),
138811
138818
  unit: "lx",
@@ -139008,7 +139015,7 @@ var SENSOR_CAP_VOCABULARY = {
139008
139015
  noun: t("Humidity", "Umidità"),
139009
139016
  state: [{
139010
139017
  kind: "numeric",
139011
- field: "percent",
139018
+ field: "humidity",
139012
139019
  quantity: t("the humidity", "l’umidità"),
139013
139020
  label: t("Humidity", "Umidità"),
139014
139021
  unit: "%",
@@ -139056,7 +139063,7 @@ var SENSOR_CAP_VOCABULARY = {
139056
139063
  state: [
139057
139064
  {
139058
139065
  kind: "numeric",
139059
- field: "watts",
139066
+ field: "power",
139060
139067
  quantity: t("the power draw", "il consumo"),
139061
139068
  label: t("Power", "Potenza"),
139062
139069
  unit: "W",
@@ -139064,7 +139071,7 @@ var SENSOR_CAP_VOCABULARY = {
139064
139071
  },
139065
139072
  {
139066
139073
  kind: "numeric",
139067
- field: "kwhTotal",
139074
+ field: "energy",
139068
139075
  quantity: t("the energy used", "l’energia consumata"),
139069
139076
  label: t("Energy", "Energia"),
139070
139077
  unit: "kWh",
@@ -139072,7 +139079,7 @@ var SENSOR_CAP_VOCABULARY = {
139072
139079
  },
139073
139080
  {
139074
139081
  kind: "numeric",
139075
- field: "volts",
139082
+ field: "voltage",
139076
139083
  quantity: t("the voltage", "la tensione"),
139077
139084
  label: t("Voltage", "Tensione"),
139078
139085
  unit: "V",
@@ -139080,7 +139087,7 @@ var SENSOR_CAP_VOCABULARY = {
139080
139087
  },
139081
139088
  {
139082
139089
  kind: "numeric",
139083
- field: "amps",
139090
+ field: "current",
139084
139091
  quantity: t("the current", "la corrente"),
139085
139092
  label: t("Current", "Corrente"),
139086
139093
  unit: "A",
@@ -139097,13 +139104,6 @@ var SENSOR_CAP_VOCABULARY = {
139097
139104
  label: t("Where", "Posizione"),
139098
139105
  phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
139099
139106
  icon: "map-pin"
139100
- }, {
139101
- kind: "numeric",
139102
- field: "batteryPercent",
139103
- quantity: t("the phone battery", "la batteria del telefono"),
139104
- label: t("Battery", "Batteria"),
139105
- unit: "%",
139106
- icon: "battery"
139107
139107
  }]
139108
139108
  },
139109
139109
  "pressure-sensor": {
@@ -139111,7 +139111,7 @@ var SENSOR_CAP_VOCABULARY = {
139111
139111
  noun: t("Pressure", "Pressione"),
139112
139112
  state: [{
139113
139113
  kind: "numeric",
139114
- field: "hpa",
139114
+ field: "pressure",
139115
139115
  quantity: t("the pressure", "la pressione"),
139116
139116
  label: t("Pressure", "Pressione"),
139117
139117
  unit: "hPa",
@@ -139147,7 +139147,7 @@ var SENSOR_CAP_VOCABULARY = {
139147
139147
  noun: t("Temperature", "Temperatura"),
139148
139148
  state: [{
139149
139149
  kind: "numeric",
139150
- field: "celsius",
139150
+ field: "temperature",
139151
139151
  quantity: t("the temperature", "la temperatura"),
139152
139152
  label: t("Temperature", "Temperatura"),
139153
139153
  unit: "°C",
@@ -139218,7 +139218,7 @@ var SENSOR_CAP_VOCABULARY = {
139218
139218
  state: [
139219
139219
  {
139220
139220
  kind: "numeric",
139221
- field: "percentage",
139221
+ field: "level",
139222
139222
  quantity: t("the battery level", "il livello della batteria"),
139223
139223
  label: t("Battery", "Batteria"),
139224
139224
  unit: "%",
@@ -139260,7 +139260,7 @@ var SENSOR_CAP_VOCABULARY = {
139260
139260
  icon: "battery-charging"
139261
139261
  }
139262
139262
  ],
139263
- events: { onStatusChanged: { notOperatorFacing: "the percentage / sleeping / charging state triggers each read one field of this change" } },
139263
+ events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
139264
139264
  extraEvents: [{
139265
139265
  category: EventCategory.DeviceAwake,
139266
139266
  label: t("Woke up", "Risvegliato"),
@@ -139278,7 +139278,7 @@ var SENSOR_CAP_VOCABULARY = {
139278
139278
  noun: t("Network link", "Collegamento di rete"),
139279
139279
  state: [{
139280
139280
  kind: "numeric",
139281
- field: "signalPercent",
139281
+ field: "signal",
139282
139282
  quantity: t("the signal strength", "l’intensità del segnale"),
139283
139283
  label: t("Signal", "Segnale"),
139284
139284
  unit: "%",
@@ -146257,7 +146257,7 @@ function clampLevel(level) {
146257
146257
  function cameraBatterySlice(facts) {
146258
146258
  const charging = facts.charging === null ? "unknown" : facts.charging === CHARGING_STATUS_CHARGING ? "dc" : "none";
146259
146259
  return {
146260
- percentage: clampLevel(facts.level),
146260
+ level: clampLevel(facts.level),
146261
146261
  charging,
146262
146262
  sleeping: !facts.streamOpen,
146263
146263
  lastUpdated: facts.now,
@@ -146666,7 +146666,7 @@ function networkLinkFromBars(bars, now) {
146666
146666
  if (bars === null || !Number.isFinite(bars)) return null;
146667
146667
  return {
146668
146668
  type: "wifi",
146669
- signalPercent: bars === 0 ? null : signalPercentFromBars(bars, 4),
146669
+ signal: bars === 0 ? null : signalPercentFromBars(bars, 4),
146670
146670
  lastUpdated: now
146671
146671
  };
146672
146672
  }
@@ -193869,7 +193869,7 @@ var SHADOW_POLL_MS = 12e4;
193869
193869
  var COLD_START = {
193870
193870
  activity: "idle",
193871
193871
  batteryLevel: null,
193872
- progressPercent: null,
193872
+ progress: null,
193873
193873
  currentCode: null,
193874
193874
  currentCodeLabel: null,
193875
193875
  severity: "info",
@@ -193983,11 +193983,11 @@ var DreameMowerDevice = class extends DreameChildDevice {
193983
193983
  const status = mower.status;
193984
193984
  const code = mower.faultRaw;
193985
193985
  const livePct = clampPercent(mower.mowingProgressPct);
193986
- const prevPct = this.runtimeState.getCapState(CAP_NAME$9)?.progressPercent;
193986
+ const prevPct = this.runtimeState.getCapState(CAP_NAME$9)?.progress;
193987
193987
  const slice = {
193988
193988
  activity: mapMowerStatusToActivity(status),
193989
193989
  batteryLevel: clampBatteryLevel(mower.battery),
193990
- progressPercent: livePct ?? prevPct ?? null,
193990
+ progress: livePct ?? prevPct ?? null,
193991
193991
  currentCode: code,
193992
193992
  currentCodeLabel: code !== null ? MowerFault[code] ?? null : null,
193993
193993
  severity: mower.faultSeverity,
@@ -194927,7 +194927,7 @@ var CONTROL_COLD_START = {
194927
194927
  batteryLevel: null,
194928
194928
  fanSpeed: null,
194929
194929
  availableFanSpeeds: [],
194930
- progressPercent: null,
194930
+ progress: null,
194931
194931
  errorCode: null,
194932
194932
  errorLabel: null,
194933
194933
  lastChangedAt: 0
@@ -195081,7 +195081,7 @@ var DreameVacuumDevice = class extends DreameChildDevice {
195081
195081
  batteryLevel: clampBatteryLevel$1(vacuum.battery),
195082
195082
  fanSpeed: suctionLevelToken(vacuum.suction),
195083
195083
  availableFanSpeeds: supportedFanSpeedTokens(vacuum.supportedSuctionLevels),
195084
- progressPercent: clampPercent$1(vacuum.taskProgressPct),
195084
+ progress: clampPercent$1(vacuum.taskProgressPct),
195085
195085
  errorCode: vacuum.errorCode,
195086
195086
  errorLabel: vacuumErrorLabel(vacuum.errorCode),
195087
195087
  lastChangedAt: Date.now()