@camstack/addon-model-studio 1.1.312 → 1.1.314

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (18) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/{MotionZonesSettings-DInCzvsZ.mjs → MotionZonesSettings-Bbq95ygz.mjs} +2 -2
  3. package/dist/{PrivacyMaskSettings-CmrBaDuA.mjs → PrivacyMaskSettings-ZpD6VN7X.mjs} +4 -4
  4. package/dist/{SceneMonitorEditor-RTv6NbW6.mjs → SceneMonitorEditor-BvsLHttM.mjs} +3 -3
  5. package/dist/_stub.js +51 -51
  6. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BrYK-jYX.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BtG6KzLk.mjs} +3 -3
  7. package/dist/{_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Ce9Sfoip.mjs → _virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DxAMUMtD.mjs} +1 -1
  8. package/dist/{hostInit-GYZT1Fyq.mjs → hostInit-XUNzuCDs.mjs} +2 -2
  9. package/dist/model-studio.addon.js +126 -119
  10. package/dist/model-studio.addon.mjs +126 -119
  11. package/dist/{player-overlays-DsE4YtZ1.mjs → player-overlays-Dc4klu5U.mjs} +1 -1
  12. package/dist/remoteEntry.js +1 -1
  13. package/dist/{responsive-D_CPQ5yV.mjs → responsive-D28CBU7-.mjs} +1 -1
  14. package/dist/{scene-monitor-copy-DHj78OC7.mjs → scene-monitor-copy-KG_LV8wy.mjs} +1 -1
  15. package/dist/{square-DbA6Yd2X.mjs → square-BpIRNy9u.mjs} +1 -1
  16. package/dist/{trash-2-B9wTfggN.mjs → trash-2-BwbD1FGM.mjs} +1 -1
  17. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-BkSr2wEh.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-D2YHXWx9.mjs} +1 -1
  18. package/package.json +1 -1
@@ -394,7 +394,7 @@ function buildPluginCatalogRegistryDescriptor(entry) {
394
394
  };
395
395
  }
396
396
  //#endregion
397
- //#region ../types/dist/event-category-hdMR7CTW.mjs
397
+ //#region ../types/dist/event-category-DmZDPDf_.mjs
398
398
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
399
399
  EventCategory["SystemBoot"] = "system.boot";
400
400
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -1021,7 +1021,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
1021
1021
  * (a track was promoted to a stationary-registry entry) or departs (the
1022
1022
  * object moved / was removed). Telemetry (D8): lossy, drives a UI refresh of
1023
1023
  * the dedicated "Stationary" section — never the live event feed. Payload:
1024
- * `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp }`.
1024
+ * `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp, observedAt, zones }`.
1025
1025
  */
1026
1026
  EventCategory["PipelineAnalyticsStationaryChanged"] = "pipeline-analytics.stationary-changed";
1027
1027
  /**
@@ -5842,7 +5842,7 @@ var ZodIssueCode = {
5842
5842
  var ZodFirstPartyTypeKind;
5843
5843
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5844
5844
  //#endregion
5845
- //#region ../types/dist/sleep-BHjNez61.mjs
5845
+ //#region ../types/dist/sleep-Crlmu_tO.mjs
5846
5846
  /**
5847
5847
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5848
5848
  * window to float samples (D455).
@@ -9162,11 +9162,11 @@ var CAP_NAMES = Object.freeze([
9162
9162
  Object.freeze({
9163
9163
  "air-quality-sensor": [
9164
9164
  {
9165
- "path": "co2Ppm",
9165
+ "path": "co2",
9166
9166
  "valueType": "number"
9167
9167
  },
9168
9168
  {
9169
- "path": "vocPpb",
9169
+ "path": "voc",
9170
9170
  "valueType": "number"
9171
9171
  },
9172
9172
  {
@@ -9216,7 +9216,7 @@ Object.freeze({
9216
9216
  }
9217
9217
  ],
9218
9218
  "ambient-light-sensor": [{
9219
- "path": "lux",
9219
+ "path": "illuminance",
9220
9220
  "valueType": "number"
9221
9221
  }],
9222
9222
  "audio-metrics": [
@@ -9277,7 +9277,7 @@ Object.freeze({
9277
9277
  ],
9278
9278
  "battery": [
9279
9279
  {
9280
- "path": "percentage",
9280
+ "path": "level",
9281
9281
  "valueType": "number"
9282
9282
  },
9283
9283
  {
@@ -9299,7 +9299,7 @@ Object.freeze({
9299
9299
  "valueType": "number"
9300
9300
  },
9301
9301
  {
9302
- "path": "volts",
9302
+ "path": "voltage",
9303
9303
  "valueType": "number"
9304
9304
  },
9305
9305
  {
@@ -9320,7 +9320,7 @@ Object.freeze({
9320
9320
  "valueType": "boolean"
9321
9321
  }],
9322
9322
  "brightness": [{
9323
- "path": "percentage",
9323
+ "path": "level",
9324
9324
  "valueType": "number"
9325
9325
  }],
9326
9326
  "broker": [{
@@ -9521,7 +9521,7 @@ Object.freeze({
9521
9521
  "valueType": "number"
9522
9522
  },
9523
9523
  {
9524
- "path": "mireds",
9524
+ "path": "colorTemperature",
9525
9525
  "valueType": "number"
9526
9526
  }
9527
9527
  ],
@@ -9700,15 +9700,15 @@ Object.freeze({
9700
9700
  "valueType": "string"
9701
9701
  },
9702
9702
  {
9703
- "path": "remainingSeconds",
9703
+ "path": "remaining",
9704
9704
  "valueType": "number"
9705
9705
  },
9706
9706
  {
9707
- "path": "delayedStartSeconds",
9707
+ "path": "delayedStart",
9708
9708
  "valueType": "number"
9709
9709
  },
9710
9710
  {
9711
- "path": "progressPercent",
9711
+ "path": "progress",
9712
9712
  "valueType": "number"
9713
9713
  },
9714
9714
  {
@@ -9822,7 +9822,7 @@ Object.freeze({
9822
9822
  ],
9823
9823
  "fan-control": [
9824
9824
  {
9825
- "path": "percentage",
9825
+ "path": "speed",
9826
9826
  "valueType": "number"
9827
9827
  },
9828
9828
  {
@@ -9922,7 +9922,7 @@ Object.freeze({
9922
9922
  }
9923
9923
  ],
9924
9924
  "humidity-sensor": [{
9925
- "path": "percent",
9925
+ "path": "humidity",
9926
9926
  "valueType": "number"
9927
9927
  }],
9928
9928
  "image": [{
@@ -10032,7 +10032,7 @@ Object.freeze({
10032
10032
  "valueType": "number"
10033
10033
  },
10034
10034
  {
10035
- "path": "progressPercent",
10035
+ "path": "progress",
10036
10036
  "valueType": "number"
10037
10037
  },
10038
10038
  {
@@ -10111,11 +10111,11 @@ Object.freeze({
10111
10111
  "valueType": "string"
10112
10112
  },
10113
10113
  {
10114
- "path": "positionMs",
10114
+ "path": "position",
10115
10115
  "valueType": "number"
10116
10116
  },
10117
10117
  {
10118
- "path": "durationMs",
10118
+ "path": "duration",
10119
10119
  "valueType": "number"
10120
10120
  },
10121
10121
  {
@@ -10217,11 +10217,11 @@ Object.freeze({
10217
10217
  ]
10218
10218
  },
10219
10219
  {
10220
- "path": "signalPercent",
10220
+ "path": "signal",
10221
10221
  "valueType": "number"
10222
10222
  },
10223
10223
  {
10224
- "path": "rssiDbm",
10224
+ "path": "rssi",
10225
10225
  "valueType": "number"
10226
10226
  },
10227
10227
  {
@@ -10352,23 +10352,23 @@ Object.freeze({
10352
10352
  ],
10353
10353
  "power-meter": [
10354
10354
  {
10355
- "path": "watts",
10355
+ "path": "power",
10356
10356
  "valueType": "number"
10357
10357
  },
10358
10358
  {
10359
- "path": "kwhTotal",
10359
+ "path": "energy",
10360
10360
  "valueType": "number"
10361
10361
  },
10362
10362
  {
10363
- "path": "volts",
10363
+ "path": "voltage",
10364
10364
  "valueType": "number"
10365
10365
  },
10366
10366
  {
10367
- "path": "amps",
10367
+ "path": "current",
10368
10368
  "valueType": "number"
10369
10369
  },
10370
10370
  {
10371
- "path": "va",
10371
+ "path": "apparentPower",
10372
10372
  "valueType": "number"
10373
10373
  },
10374
10374
  {
@@ -10396,14 +10396,10 @@ Object.freeze({
10396
10396
  {
10397
10397
  "path": "gps.accuracyMeters",
10398
10398
  "valueType": "number"
10399
- },
10400
- {
10401
- "path": "batteryPercent",
10402
- "valueType": "number"
10403
10399
  }
10404
10400
  ],
10405
10401
  "pressure-sensor": [{
10406
- "path": "hpa",
10402
+ "path": "pressure",
10407
10403
  "valueType": "number"
10408
10404
  }],
10409
10405
  "privacy-mask": [{
@@ -10717,7 +10713,7 @@ Object.freeze({
10717
10713
  "valueType": "boolean"
10718
10714
  }],
10719
10715
  "temperature-sensor": [{
10720
- "path": "celsius",
10716
+ "path": "temperature",
10721
10717
  "valueType": "number"
10722
10718
  }],
10723
10719
  "update": [
@@ -10765,7 +10761,7 @@ Object.freeze({
10765
10761
  "valueType": "string"
10766
10762
  },
10767
10763
  {
10768
- "path": "progressPercent",
10764
+ "path": "progress",
10769
10765
  "valueType": "number"
10770
10766
  },
10771
10767
  {
@@ -11240,7 +11236,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
11240
11236
  return DeviceRole;
11241
11237
  }({});
11242
11238
  //#endregion
11243
- //#region ../types/dist/composition-Bb8iwHEJ.mjs
11239
+ //#region ../types/dist/composition-CZImLpOI.mjs
11244
11240
  /**
11245
11241
  * The ffmpeg build every CamStack node downloads, per platform and arch.
11246
11242
  *
@@ -15899,6 +15895,14 @@ var AutomationConditionLeafSchema = object({
15899
15895
  array(union([string(), number()]))
15900
15896
  ])
15901
15897
  });
15898
+ var AutomationConditionStationaryPresentSchema = object({
15899
+ kind: literal("stationary-present"),
15900
+ deviceId: number().int().nonnegative(),
15901
+ /** Class names; a macro class matches every raw class that maps to it. */
15902
+ classes: array(string().min(1)).min(1).optional(),
15903
+ /** The parked object must be in at least one of these zones. */
15904
+ zones: array(string().min(1)).min(1).optional()
15905
+ });
15902
15906
  /**
15903
15907
  * The expression leaf, declared as a plain object rather than an intersection
15904
15908
  * with {@link ExpressionSourceSchema}: a discriminated union has to be able to
@@ -15932,7 +15936,8 @@ var AutomationConditionSchema = lazy(() => discriminatedUnion("kind", [
15932
15936
  child: AutomationConditionSchema
15933
15937
  }),
15934
15938
  AutomationConditionLeafSchema,
15935
- AutomationConditionExpressionSchema
15939
+ AutomationConditionExpressionSchema,
15940
+ AutomationConditionStationaryPresentSchema
15936
15941
  ]));
15937
15942
  /**
15938
15943
  * What starts a run.
@@ -15986,6 +15991,17 @@ var AutomationTriggerSchema = discriminatedUnion("kind", [
15986
15991
  /** Best-so-far confidence the track must reach. */
15987
15992
  minScore: number().min(0).max(1).optional()
15988
15993
  }),
15994
+ object({
15995
+ kind: literal("stationary"),
15996
+ deviceIds: array(number().int().nonnegative()).min(1),
15997
+ /** Class names; a macro class matches like the detection trigger. */
15998
+ classes: array(string().min(1)).min(1).optional(),
15999
+ /** The parked object must be in at least one of these zones. */
16000
+ zones: array(string().min(1)).min(1).optional(),
16001
+ /** `appeared`: it became parked. `departed`: the registry retired it.
16002
+ * The vocabulary of `PipelineAnalyticsStationaryChanged`. */
16003
+ phase: _enum(["appeared", "departed"])
16004
+ }),
15989
16005
  object({
15990
16006
  kind: literal("interval"),
15991
16007
  minutes: number().int().min(1).max(1440)
@@ -16195,7 +16211,8 @@ var AutomationConditionTraceNodeSchema = object({
16195
16211
  "any",
16196
16212
  "not",
16197
16213
  "condition",
16198
- "expression"
16214
+ "expression",
16215
+ "stationary-present"
16199
16216
  ]),
16200
16217
  outcome: TraceNodeOutcomeSchema,
16201
16218
  reason: string(),
@@ -19005,7 +19022,7 @@ var CompositionEventPlanSchema = object({
19005
19022
  stateField: string(),
19006
19023
  fieldKey: string()
19007
19024
  });
19008
- /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.celsius`. */
19025
+ /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.temperature`. */
19009
19026
  var CompositionProblemSchema = object({
19010
19027
  code: _enum([
19011
19028
  "reserved-variant",
@@ -19324,7 +19341,7 @@ var GROUP_TEMPLATES = [
19324
19341
  summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
19325
19342
  role: DeviceRole.TemperatureSensor,
19326
19343
  outputCap: "temperature-sensor",
19327
- outputField: "celsius",
19344
+ outputField: "temperature",
19328
19345
  quantity: "temperature",
19329
19346
  defaultAggregate: "mean",
19330
19347
  empty: "null",
@@ -19335,7 +19352,7 @@ var GROUP_TEMPLATES = [
19335
19352
  summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
19336
19353
  role: DeviceRole.HumiditySensor,
19337
19354
  outputCap: "humidity-sensor",
19338
- outputField: "percent",
19355
+ outputField: "humidity",
19339
19356
  quantity: "humidity",
19340
19357
  defaultAggregate: "mean",
19341
19358
  empty: "null",
@@ -19346,7 +19363,7 @@ var GROUP_TEMPLATES = [
19346
19363
  summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
19347
19364
  role: DeviceRole.PressureSensor,
19348
19365
  outputCap: "pressure-sensor",
19349
- outputField: "hpa",
19366
+ outputField: "pressure",
19350
19367
  quantity: "pressure",
19351
19368
  defaultAggregate: "mean",
19352
19369
  empty: "null",
@@ -19357,7 +19374,7 @@ var GROUP_TEMPLATES = [
19357
19374
  summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
19358
19375
  role: DeviceRole.AmbientLightSensor,
19359
19376
  outputCap: "ambient-light-sensor",
19360
- outputField: "lux",
19377
+ outputField: "illuminance",
19361
19378
  quantity: "illuminance",
19362
19379
  defaultAggregate: "mean",
19363
19380
  empty: "null",
@@ -19368,7 +19385,7 @@ var GROUP_TEMPLATES = [
19368
19385
  summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
19369
19386
  role: DeviceRole.PowerSensor,
19370
19387
  outputCap: "power-meter",
19371
- outputField: "watts",
19388
+ outputField: "power",
19372
19389
  quantity: "power",
19373
19390
  defaultAggregate: "sum",
19374
19391
  empty: "omit",
@@ -19379,7 +19396,7 @@ var GROUP_TEMPLATES = [
19379
19396
  summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
19380
19397
  role: DeviceRole.EnergySensor,
19381
19398
  outputCap: "power-meter",
19382
- outputField: "kwhTotal",
19399
+ outputField: "energy",
19383
19400
  quantity: "energy",
19384
19401
  defaultAggregate: "sum",
19385
19402
  empty: "omit",
@@ -19390,7 +19407,7 @@ var GROUP_TEMPLATES = [
19390
19407
  summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
19391
19408
  role: DeviceRole.BatterySensor,
19392
19409
  outputCap: "battery",
19393
- outputField: "percentage",
19410
+ outputField: "level",
19394
19411
  quantity: "percentage",
19395
19412
  defaultAggregate: "mean",
19396
19413
  empty: "null",
@@ -57542,9 +57559,9 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
57542
57559
  }), LogStreamEntrySchema, { kind: "subscription" });
57543
57560
  object({
57544
57561
  /** Carbon dioxide concentration in ppm. */
57545
- co2Ppm: number().min(0).optional().meta(readingMeta("concentration-volume")),
57562
+ co2: number().min(0).optional().meta(readingMeta("concentration-volume")),
57546
57563
  /** Total volatile organic compounds in ppb. */
57547
- vocPpb: number().min(0).optional().meta(readingMeta("concentration-ppb")),
57564
+ voc: number().min(0).optional().meta(readingMeta("concentration-ppb")),
57548
57565
  /** Particulate matter ≤ 2.5 μm in µg/m³. */
57549
57566
  pm25: number().min(0).optional().meta(readingMeta("concentration-mass")),
57550
57567
  /** Particulate matter ≤ 10 μm in µg/m³. */
@@ -57557,7 +57574,7 @@ object({
57557
57574
  DeviceType.Sensor;
57558
57575
  object({
57559
57576
  /** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
57560
- lux: number().min(0).nullable().meta(readingMeta("illuminance", {
57577
+ illuminance: number().min(0).nullable().meta(readingMeta("illuminance", {
57561
57578
  precision: 0,
57562
57579
  label: "Illuminance"
57563
57580
  })),
@@ -57785,7 +57802,7 @@ var BatteryStatusSchema = object({
57785
57802
  * Consumers must SKIP a null rather than coerce it — `battery-band` already
57786
57803
  * declines to band a non-finite reading, which is the correct shape.
57787
57804
  */
57788
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
57805
+ level: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
57789
57806
  /**
57790
57807
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
57791
57808
  * Reolink-specific for the Solar Panel 2 accessory (will become
@@ -57795,7 +57812,7 @@ var BatteryStatusSchema = object({
57795
57812
  * `'unknown'` is the absence of an answer: the provider has not read the
57796
57813
  * power fields yet, or the firmware reported neither. Before it existed,
57797
57814
  * two unreadable fields produced `'none'`, and a camera nobody had reached
57798
- * was drawn "on battery alone" — the same D315 defect `percentage` closed
57815
+ * was drawn "on battery alone" — the same D315 defect `level` closed
57799
57816
  * by going nullable. Consumers SKIP it (no charger state published, no
57800
57817
  * glyph, no HomeKit ChargingState) rather than coerce it either way.
57801
57818
  */
@@ -57819,7 +57836,7 @@ var BatteryStatusSchema = object({
57819
57836
  * that only report charge. A second reading on this cap, not a second
57820
57837
  * `numeric-sensor` on the same device.
57821
57838
  */
57822
- volts: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
57839
+ voltage: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
57823
57840
  /**
57824
57841
  * Ms epoch of the last time the device PROVED it was reachable — a
57825
57842
  * completed firmware round-trip, an observed wake, or an inbound push
@@ -57853,7 +57870,7 @@ var BatteryStatusSchema = object({
57853
57870
  /**
57854
57871
  * True when the source is a BINARY low-battery indicator (HA
57855
57872
  * `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
57856
- * charge level — `percentage` is then a coarse stand-in (100 = normal,
57873
+ * charge level — `level` is then a coarse stand-in (100 = normal,
57857
57874
  * sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
57858
57875
  * misleading exact percentage. Absent/false → genuine 0–100 % reading.
57859
57876
  */
@@ -57879,19 +57896,19 @@ object({
57879
57896
  DeviceType.Sensor;
57880
57897
  object({
57881
57898
  /** Current level as 0..100 inclusive. Firmware-reported. */
57882
- percentage: number().min(0).max(100).meta(readingMeta("percentage")),
57899
+ level: number().min(0).max(100).meta(readingMeta("percentage")),
57883
57900
  /** Ms epoch of the last operator-driven change. Useful for UI freshness. */
57884
57901
  lastChangedAt: number()
57885
57902
  });
57886
57903
  DeviceType.Light, method(object({
57887
57904
  deviceId: number().int().nonnegative(),
57888
- percentage: number().min(0).max(100)
57905
+ level: number().min(0).max(100)
57889
57906
  }), _void(), {
57890
57907
  kind: "mutation",
57891
57908
  auth: "protected"
57892
57909
  }), object({
57893
57910
  deviceId: number(),
57894
- percentage: number().min(0).max(100),
57911
+ level: number().min(0).max(100),
57895
57912
  lastChangedAt: number()
57896
57913
  });
57897
57914
  DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
@@ -58392,11 +58409,11 @@ var ColorInputSchema = discriminatedUnion("mode", [
58392
58409
  }),
58393
58410
  object({
58394
58411
  mode: literal("mired"),
58395
- mireds: number().int().min(50).max(1e3)
58412
+ colorTemperature: number().int().min(50).max(1e3)
58396
58413
  })
58397
58414
  ]);
58398
58415
  object({
58399
- /** Active color mode — which of `rgb` / `hsv` / `mireds` reflects
58416
+ /** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
58400
58417
  * the bulb's current state. */
58401
58418
  mode: _enum([
58402
58419
  "rgb",
@@ -58408,7 +58425,7 @@ object({
58408
58425
  /** Populated when `mode === 'hsv'`. */
58409
58426
  hsv: HsvTripletSchema.optional(),
58410
58427
  /** Populated when `mode === 'mired'`. */
58411
- mireds: number().int().optional().meta(readingMeta("colour-temperature")),
58428
+ colorTemperature: number().int().optional().meta(readingMeta("colour-temperature")),
58412
58429
  /** Ms epoch of the last operator-driven change. */
58413
58430
  lastChangedAt: number()
58414
58431
  });
@@ -58427,7 +58444,7 @@ DeviceType.Light, method(object({
58427
58444
  ]),
58428
58445
  rgb: RgbTripletSchema.optional(),
58429
58446
  hsv: HsvTripletSchema.optional(),
58430
- mireds: number().int().optional(),
58447
+ colorTemperature: number().int().optional(),
58431
58448
  lastChangedAt: number()
58432
58449
  });
58433
58450
  var ConnectionTestOutcomeSchema = discriminatedUnion("outcome", [
@@ -58853,11 +58870,11 @@ object({
58853
58870
  /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
58854
58871
  availablePrograms: array(string()),
58855
58872
  /** Seconds remaining on the active cycle, or null when not running / not known. */
58856
- remainingSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58873
+ remaining: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58857
58874
  /** Seconds the delayed start is set to (time until the cycle starts), or null. */
58858
- delayedStartSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58875
+ delayedStart: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58859
58876
  /** Cycle completion 0..100, or null when not applicable. */
58860
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58877
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58861
58878
  /** True when the door is reported open; null when the door state is not known. */
58862
58879
  doorOpen: boolean().nullable(),
58863
58880
  /** True when the door is latched (locked) during a cycle; null when not reported. */
@@ -59475,7 +59492,7 @@ var FanDirectionSchema = _enum(["forward", "reverse"]);
59475
59492
  object({
59476
59493
  /** Active speed as 0..100 inclusive. Null when the device has no
59477
59494
  * speed surface (single-speed fan). */
59478
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59495
+ speed: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59479
59496
  /** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
59480
59497
  * a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
59481
59498
  percentageStep: number().positive().optional().meta(readingMeta("percentage")),
@@ -59495,7 +59512,7 @@ object({
59495
59512
  });
59496
59513
  DeviceType.Fan, method(object({
59497
59514
  deviceId: number().int().nonnegative(),
59498
- percentage: number().min(0).max(100)
59515
+ speed: number().min(0).max(100)
59499
59516
  }), _void(), {
59500
59517
  kind: "mutation",
59501
59518
  auth: "protected"
@@ -59678,7 +59695,7 @@ DeviceType.Humidifier, method(object({
59678
59695
  });
59679
59696
  object({
59680
59697
  /** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
59681
- percent: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
59698
+ humidity: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
59682
59699
  precision: 0,
59683
59700
  label: "Humidity"
59684
59701
  })),
@@ -60121,7 +60138,7 @@ object({
60121
60138
  batteryLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
60122
60139
  /** 0..100 mowing-completion percentage of the current task, or null when no
60123
60140
  * task is active / progress is unavailable. */
60124
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
60141
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
60125
60142
  /** Current device/event code (dynamic — mostly status, sometimes an error),
60126
60143
  * or null when unknown. */
60127
60144
  currentCode: number().nullable().meta(readingMeta("none")),
@@ -60611,10 +60628,10 @@ object({
60611
60628
  currentMedia: MediaInfoSchema.nullable(),
60612
60629
  /** Current playback position in ms. Null when not seekable or
60613
60630
  * nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
60614
- positionMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60631
+ position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60615
60632
  /** Total duration of the current media in ms. Null when unknown
60616
60633
  * (live stream) or nothing is playing. */
60617
- durationMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60634
+ duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60618
60635
  /** Shuffle toggle. Null when no shuffle surface.
60619
60636
  * Pair with `DeviceFeature.MediaPlayerShuffle`. */
60620
60637
  shuffle: boolean().nullable(),
@@ -60641,7 +60658,7 @@ DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }
60641
60658
  auth: "protected"
60642
60659
  }), method(object({
60643
60660
  deviceId: number().int().nonnegative(),
60644
- positionMs: number().int().nonnegative()
60661
+ position: number().int().nonnegative()
60645
60662
  }), _void(), {
60646
60663
  kind: "mutation",
60647
60664
  auth: "protected"
@@ -61314,9 +61331,9 @@ var NetworkLinkStatusSchema = object({
61314
61331
  * one whose reading has not landed must not be drawn at 0 %. Consumers
61315
61332
  * SKIP a null rather than coerce it.
61316
61333
  */
61317
- signalPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61334
+ signal: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61318
61335
  /** Raw received signal strength in dBm, when the firmware reports one. */
61319
- rssiDbm: number().optional().meta(readingMeta("signal-level")),
61336
+ rssi: number().optional().meta(readingMeta("signal-level")),
61320
61337
  /** Network name of a wireless link, when the firmware reports it. */
61321
61338
  ssid: string().optional(),
61322
61339
  /** Ms epoch of the last observation. Lets consumers reason about freshness. */
@@ -62466,16 +62483,16 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
62466
62483
  auth: "admin"
62467
62484
  });
62468
62485
  object({
62469
- /** Instantaneous power draw in watts. */
62470
- watts: number().optional().meta(readingMeta("power", { label: "Power" })),
62486
+ /** Instantaneous power draw (watts). */
62487
+ power: number().optional().meta(readingMeta("power", { label: "Power" })),
62471
62488
  /** Cumulative energy in kilowatt-hours since the meter was reset. */
62472
- kwhTotal: number().optional().meta(readingMeta("energy", { label: "Energy" })),
62473
- /** Voltage in volts. */
62474
- volts: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
62489
+ energy: number().optional().meta(readingMeta("energy", { label: "Energy" })),
62490
+ /** Voltage (volts). */
62491
+ voltage: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
62475
62492
  /** Current in amperes. */
62476
- amps: number().optional().meta(readingMeta("current", { label: "Current" })),
62493
+ current: number().optional().meta(readingMeta("current", { label: "Current" })),
62477
62494
  /** Apparent power in volt-amperes. */
62478
- va: number().optional().meta(readingMeta("apparent-power")),
62495
+ apparentPower: number().optional().meta(readingMeta("apparent-power")),
62479
62496
  /** Power factor (0..1) if reported. */
62480
62497
  powerFactor: number().min(0).max(1).optional().meta(readingMeta("ratio")),
62481
62498
  /** Ms epoch when the slice was last updated. */
@@ -62530,16 +62547,13 @@ object({
62530
62547
  location: string().nullable(),
62531
62548
  /** GPS coordinates when available. Null otherwise. */
62532
62549
  gps: GpsLocationSchema.nullable(),
62533
- /** Optional battery level of the tracking device (0..100). Null
62534
- * when not reported. */
62535
- batteryPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
62536
62550
  /** Ms epoch when the slice was last updated. */
62537
62551
  lastChangedAt: number()
62538
62552
  });
62539
62553
  DeviceType.Presence;
62540
62554
  object({
62541
62555
  /** Current pressure in hPa. `null` when the sample was refused (D393). */
62542
- hpa: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
62556
+ pressure: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
62543
62557
  /** Ms epoch when the slice was last updated. */
62544
62558
  lastFetchedAt: number()
62545
62559
  });
@@ -65542,7 +65556,7 @@ object({
65542
65556
  DeviceType.Sensor;
65543
65557
  object({
65544
65558
  /** Current temperature in Celsius. `null` when the sample was refused (D393). */
65545
- celsius: number().nullable().meta(readingMeta("temperature", {
65559
+ temperature: number().nullable().meta(readingMeta("temperature", {
65546
65560
  precision: 1,
65547
65561
  label: "Temperature"
65548
65562
  })),
@@ -65806,7 +65820,7 @@ object({
65806
65820
  /** Speed tokens the hardware accepts — drives the UI selector. */
65807
65821
  availableFanSpeeds: array(string()),
65808
65822
  /** 0..100 cleaning-completion percentage of the current task, or null. */
65809
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65823
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65810
65824
  /** Current error code (0 / null = no error). */
65811
65825
  errorCode: number().nullable().meta(readingMeta("none")),
65812
65826
  /** Human label for {@link errorCode}, or null when none / undecodable. */
@@ -76874,7 +76888,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76874
76888
  label: t("Full brightness", "Luminosità massima"),
76875
76889
  phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
76876
76890
  icon: "sun",
76877
- args: { percentage: 100 }
76891
+ args: { level: 100 }
76878
76892
  },
76879
76893
  {
76880
76894
  id: "brightness.half",
@@ -76882,7 +76896,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76882
76896
  label: t("Half brightness", "Luminosità a metà"),
76883
76897
  phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
76884
76898
  icon: "sun-dim",
76885
- args: { percentage: 50 }
76899
+ args: { level: 50 }
76886
76900
  },
76887
76901
  {
76888
76902
  id: "brightness.off",
@@ -76890,16 +76904,16 @@ var ACTUATOR_CAP_VOCABULARY = {
76890
76904
  label: t("Brightness off", "Luminosità a zero"),
76891
76905
  phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
76892
76906
  icon: "lightbulb-off",
76893
- args: { percentage: 0 }
76907
+ args: { level: 0 }
76894
76908
  },
76895
76909
  {
76896
76910
  id: "brightness.set",
76897
76911
  method: "setBrightness",
76898
76912
  label: t("Set brightness", "Imposta la luminosità"),
76899
- phrase: t("Set the brightness of {device} to {percentage}", "Imposta la luminosità di {device} a {percentage}"),
76913
+ phrase: t("Set the brightness of {device} to {level}", "Imposta la luminosità di {device} a {level}"),
76900
76914
  icon: "sun-medium",
76901
76915
  openArgs: [{
76902
- key: "percentage",
76916
+ key: "level",
76903
76917
  label: PERCENT,
76904
76918
  offer: {
76905
76919
  kind: "number",
@@ -76913,13 +76927,13 @@ var ACTUATOR_CAP_VOCABULARY = {
76913
76927
  ],
76914
76928
  state: [{
76915
76929
  kind: "numeric",
76916
- field: "percentage",
76930
+ field: "level",
76917
76931
  quantity: t("the brightness", "la luminosità"),
76918
76932
  label: t("Brightness", "Luminosità"),
76919
76933
  unit: "%",
76920
76934
  icon: "sun"
76921
76935
  }],
76922
- events: { onBrightnessChanged: { notOperatorFacing: "the `percentage` state trigger reads the same change" } }
76936
+ events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
76923
76937
  },
76924
76938
  color: {
76925
76939
  scope: "device",
@@ -76933,7 +76947,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76933
76947
  icon: "sun",
76934
76948
  args: { color: {
76935
76949
  mode: "mired",
76936
- mireds: 370
76950
+ colorTemperature: 370
76937
76951
  } }
76938
76952
  },
76939
76953
  {
@@ -76944,7 +76958,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76944
76958
  icon: "snowflake",
76945
76959
  args: { color: {
76946
76960
  mode: "mired",
76947
- mireds: 200
76961
+ colorTemperature: 200
76948
76962
  } }
76949
76963
  },
76950
76964
  {
@@ -77558,7 +77572,7 @@ var ACTUATOR_CAP_VOCABULARY = {
77558
77572
  label: t("Fan off", "Ventilatore spento"),
77559
77573
  phrase: t("Stop {device}", "Ferma {device}"),
77560
77574
  icon: "power-off",
77561
- args: { percentage: 0 }
77575
+ args: { speed: 0 }
77562
77576
  },
77563
77577
  {
77564
77578
  id: "fan.full",
@@ -77566,16 +77580,16 @@ var ACTUATOR_CAP_VOCABULARY = {
77566
77580
  label: t("Fan full", "Ventilatore al massimo"),
77567
77581
  phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
77568
77582
  icon: "fan",
77569
- args: { percentage: 100 }
77583
+ args: { speed: 100 }
77570
77584
  },
77571
77585
  {
77572
77586
  id: "fan.speed",
77573
77587
  method: "setPercentage",
77574
77588
  label: t("Set speed", "Imposta la velocità"),
77575
- phrase: t("Set the speed of {device} to {percentage}", "Imposta la velocità di {device} al {percentage}"),
77589
+ phrase: t("Set the speed of {device} to {speed}", "Imposta la velocità di {device} al {speed}"),
77576
77590
  icon: "fan",
77577
77591
  openArgs: [{
77578
- key: "percentage",
77592
+ key: "speed",
77579
77593
  label: t("Speed", "Velocità"),
77580
77594
  offer: {
77581
77595
  kind: "number",
@@ -77637,7 +77651,7 @@ var ACTUATOR_CAP_VOCABULARY = {
77637
77651
  ],
77638
77652
  state: [{
77639
77653
  kind: "numeric",
77640
- field: "percentage",
77654
+ field: "speed",
77641
77655
  quantity: t("the speed", "la velocità"),
77642
77656
  label: t("Speed", "Velocità"),
77643
77657
  unit: "%",
@@ -78435,7 +78449,7 @@ var APPLIANCE_CAP_VOCABULARY = {
78435
78449
  },
78436
78450
  {
78437
78451
  kind: "numeric",
78438
- field: "progressPercent",
78452
+ field: "progress",
78439
78453
  quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
78440
78454
  label: t("Progress", "Avanzamento"),
78441
78455
  unit: "%",
@@ -78793,10 +78807,10 @@ var APPLIANCE_CAP_VOCABULARY = {
78793
78807
  id: "media.seek",
78794
78808
  method: "seek",
78795
78809
  label: t("Seek", "Vai al punto"),
78796
- phrase: t("Move {device} to {positionMs}", "Porta {device} al punto {positionMs}"),
78810
+ phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
78797
78811
  icon: "fast-forward",
78798
78812
  openArgs: [{
78799
- key: "positionMs",
78813
+ key: "position",
78800
78814
  label: t("Position", "Posizione"),
78801
78815
  offer: {
78802
78816
  kind: "number",
@@ -79845,7 +79859,7 @@ var SENSOR_CAP_VOCABULARY = {
79845
79859
  state: [
79846
79860
  {
79847
79861
  kind: "numeric",
79848
- field: "co2Ppm",
79862
+ field: "co2",
79849
79863
  quantity: t("the CO₂", "la CO₂"),
79850
79864
  label: t("CO₂", "CO₂"),
79851
79865
  unit: "ppm",
@@ -79853,7 +79867,7 @@ var SENSOR_CAP_VOCABULARY = {
79853
79867
  },
79854
79868
  {
79855
79869
  kind: "numeric",
79856
- field: "vocPpb",
79870
+ field: "voc",
79857
79871
  quantity: t("the VOC level", "il livello di COV"),
79858
79872
  label: t("VOC", "COV"),
79859
79873
  unit: "ppb",
@@ -79889,7 +79903,7 @@ var SENSOR_CAP_VOCABULARY = {
79889
79903
  noun: t("Light level", "Luminosità ambiente"),
79890
79904
  state: [{
79891
79905
  kind: "numeric",
79892
- field: "lux",
79906
+ field: "illuminance",
79893
79907
  quantity: t("the light level", "la luminosità"),
79894
79908
  label: t("Illuminance", "Illuminamento"),
79895
79909
  unit: "lx",
@@ -80092,7 +80106,7 @@ var SENSOR_CAP_VOCABULARY = {
80092
80106
  noun: t("Humidity", "Umidità"),
80093
80107
  state: [{
80094
80108
  kind: "numeric",
80095
- field: "percent",
80109
+ field: "humidity",
80096
80110
  quantity: t("the humidity", "l’umidità"),
80097
80111
  label: t("Humidity", "Umidità"),
80098
80112
  unit: "%",
@@ -80140,7 +80154,7 @@ var SENSOR_CAP_VOCABULARY = {
80140
80154
  state: [
80141
80155
  {
80142
80156
  kind: "numeric",
80143
- field: "watts",
80157
+ field: "power",
80144
80158
  quantity: t("the power draw", "il consumo"),
80145
80159
  label: t("Power", "Potenza"),
80146
80160
  unit: "W",
@@ -80148,7 +80162,7 @@ var SENSOR_CAP_VOCABULARY = {
80148
80162
  },
80149
80163
  {
80150
80164
  kind: "numeric",
80151
- field: "kwhTotal",
80165
+ field: "energy",
80152
80166
  quantity: t("the energy used", "l’energia consumata"),
80153
80167
  label: t("Energy", "Energia"),
80154
80168
  unit: "kWh",
@@ -80156,7 +80170,7 @@ var SENSOR_CAP_VOCABULARY = {
80156
80170
  },
80157
80171
  {
80158
80172
  kind: "numeric",
80159
- field: "volts",
80173
+ field: "voltage",
80160
80174
  quantity: t("the voltage", "la tensione"),
80161
80175
  label: t("Voltage", "Tensione"),
80162
80176
  unit: "V",
@@ -80164,7 +80178,7 @@ var SENSOR_CAP_VOCABULARY = {
80164
80178
  },
80165
80179
  {
80166
80180
  kind: "numeric",
80167
- field: "amps",
80181
+ field: "current",
80168
80182
  quantity: t("the current", "la corrente"),
80169
80183
  label: t("Current", "Corrente"),
80170
80184
  unit: "A",
@@ -80181,13 +80195,6 @@ var SENSOR_CAP_VOCABULARY = {
80181
80195
  label: t("Where", "Posizione"),
80182
80196
  phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
80183
80197
  icon: "map-pin"
80184
- }, {
80185
- kind: "numeric",
80186
- field: "batteryPercent",
80187
- quantity: t("the phone battery", "la batteria del telefono"),
80188
- label: t("Battery", "Batteria"),
80189
- unit: "%",
80190
- icon: "battery"
80191
80198
  }]
80192
80199
  },
80193
80200
  "pressure-sensor": {
@@ -80195,7 +80202,7 @@ var SENSOR_CAP_VOCABULARY = {
80195
80202
  noun: t("Pressure", "Pressione"),
80196
80203
  state: [{
80197
80204
  kind: "numeric",
80198
- field: "hpa",
80205
+ field: "pressure",
80199
80206
  quantity: t("the pressure", "la pressione"),
80200
80207
  label: t("Pressure", "Pressione"),
80201
80208
  unit: "hPa",
@@ -80231,7 +80238,7 @@ var SENSOR_CAP_VOCABULARY = {
80231
80238
  noun: t("Temperature", "Temperatura"),
80232
80239
  state: [{
80233
80240
  kind: "numeric",
80234
- field: "celsius",
80241
+ field: "temperature",
80235
80242
  quantity: t("the temperature", "la temperatura"),
80236
80243
  label: t("Temperature", "Temperatura"),
80237
80244
  unit: "°C",
@@ -80302,7 +80309,7 @@ var SENSOR_CAP_VOCABULARY = {
80302
80309
  state: [
80303
80310
  {
80304
80311
  kind: "numeric",
80305
- field: "percentage",
80312
+ field: "level",
80306
80313
  quantity: t("the battery level", "il livello della batteria"),
80307
80314
  label: t("Battery", "Batteria"),
80308
80315
  unit: "%",
@@ -80344,7 +80351,7 @@ var SENSOR_CAP_VOCABULARY = {
80344
80351
  icon: "battery-charging"
80345
80352
  }
80346
80353
  ],
80347
- events: { onStatusChanged: { notOperatorFacing: "the percentage / sleeping / charging state triggers each read one field of this change" } },
80354
+ events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
80348
80355
  extraEvents: [{
80349
80356
  category: EventCategory.DeviceAwake,
80350
80357
  label: t("Woke up", "Risvegliato"),
@@ -80362,7 +80369,7 @@ var SENSOR_CAP_VOCABULARY = {
80362
80369
  noun: t("Network link", "Collegamento di rete"),
80363
80370
  state: [{
80364
80371
  kind: "numeric",
80365
- field: "signalPercent",
80372
+ field: "signal",
80366
80373
  quantity: t("the signal strength", "l’intensità del segnale"),
80367
80374
  label: t("Signal", "Segnale"),
80368
80375
  unit: "%",