@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
@@ -368,7 +368,7 @@ function buildPluginCatalogRegistryDescriptor(entry) {
368
368
  };
369
369
  }
370
370
  //#endregion
371
- //#region ../types/dist/event-category-hdMR7CTW.mjs
371
+ //#region ../types/dist/event-category-DmZDPDf_.mjs
372
372
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
373
373
  EventCategory["SystemBoot"] = "system.boot";
374
374
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -995,7 +995,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
995
995
  * (a track was promoted to a stationary-registry entry) or departs (the
996
996
  * object moved / was removed). Telemetry (D8): lossy, drives a UI refresh of
997
997
  * the dedicated "Stationary" section — never the live event feed. Payload:
998
- * `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp }`.
998
+ * `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp, observedAt, zones }`.
999
999
  */
1000
1000
  EventCategory["PipelineAnalyticsStationaryChanged"] = "pipeline-analytics.stationary-changed";
1001
1001
  /**
@@ -5816,7 +5816,7 @@ var ZodIssueCode = {
5816
5816
  var ZodFirstPartyTypeKind;
5817
5817
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5818
5818
  //#endregion
5819
- //#region ../types/dist/sleep-BHjNez61.mjs
5819
+ //#region ../types/dist/sleep-Crlmu_tO.mjs
5820
5820
  /**
5821
5821
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5822
5822
  * window to float samples (D455).
@@ -9136,11 +9136,11 @@ var CAP_NAMES = Object.freeze([
9136
9136
  Object.freeze({
9137
9137
  "air-quality-sensor": [
9138
9138
  {
9139
- "path": "co2Ppm",
9139
+ "path": "co2",
9140
9140
  "valueType": "number"
9141
9141
  },
9142
9142
  {
9143
- "path": "vocPpb",
9143
+ "path": "voc",
9144
9144
  "valueType": "number"
9145
9145
  },
9146
9146
  {
@@ -9190,7 +9190,7 @@ Object.freeze({
9190
9190
  }
9191
9191
  ],
9192
9192
  "ambient-light-sensor": [{
9193
- "path": "lux",
9193
+ "path": "illuminance",
9194
9194
  "valueType": "number"
9195
9195
  }],
9196
9196
  "audio-metrics": [
@@ -9251,7 +9251,7 @@ Object.freeze({
9251
9251
  ],
9252
9252
  "battery": [
9253
9253
  {
9254
- "path": "percentage",
9254
+ "path": "level",
9255
9255
  "valueType": "number"
9256
9256
  },
9257
9257
  {
@@ -9273,7 +9273,7 @@ Object.freeze({
9273
9273
  "valueType": "number"
9274
9274
  },
9275
9275
  {
9276
- "path": "volts",
9276
+ "path": "voltage",
9277
9277
  "valueType": "number"
9278
9278
  },
9279
9279
  {
@@ -9294,7 +9294,7 @@ Object.freeze({
9294
9294
  "valueType": "boolean"
9295
9295
  }],
9296
9296
  "brightness": [{
9297
- "path": "percentage",
9297
+ "path": "level",
9298
9298
  "valueType": "number"
9299
9299
  }],
9300
9300
  "broker": [{
@@ -9495,7 +9495,7 @@ Object.freeze({
9495
9495
  "valueType": "number"
9496
9496
  },
9497
9497
  {
9498
- "path": "mireds",
9498
+ "path": "colorTemperature",
9499
9499
  "valueType": "number"
9500
9500
  }
9501
9501
  ],
@@ -9674,15 +9674,15 @@ Object.freeze({
9674
9674
  "valueType": "string"
9675
9675
  },
9676
9676
  {
9677
- "path": "remainingSeconds",
9677
+ "path": "remaining",
9678
9678
  "valueType": "number"
9679
9679
  },
9680
9680
  {
9681
- "path": "delayedStartSeconds",
9681
+ "path": "delayedStart",
9682
9682
  "valueType": "number"
9683
9683
  },
9684
9684
  {
9685
- "path": "progressPercent",
9685
+ "path": "progress",
9686
9686
  "valueType": "number"
9687
9687
  },
9688
9688
  {
@@ -9796,7 +9796,7 @@ Object.freeze({
9796
9796
  ],
9797
9797
  "fan-control": [
9798
9798
  {
9799
- "path": "percentage",
9799
+ "path": "speed",
9800
9800
  "valueType": "number"
9801
9801
  },
9802
9802
  {
@@ -9896,7 +9896,7 @@ Object.freeze({
9896
9896
  }
9897
9897
  ],
9898
9898
  "humidity-sensor": [{
9899
- "path": "percent",
9899
+ "path": "humidity",
9900
9900
  "valueType": "number"
9901
9901
  }],
9902
9902
  "image": [{
@@ -10006,7 +10006,7 @@ Object.freeze({
10006
10006
  "valueType": "number"
10007
10007
  },
10008
10008
  {
10009
- "path": "progressPercent",
10009
+ "path": "progress",
10010
10010
  "valueType": "number"
10011
10011
  },
10012
10012
  {
@@ -10085,11 +10085,11 @@ Object.freeze({
10085
10085
  "valueType": "string"
10086
10086
  },
10087
10087
  {
10088
- "path": "positionMs",
10088
+ "path": "position",
10089
10089
  "valueType": "number"
10090
10090
  },
10091
10091
  {
10092
- "path": "durationMs",
10092
+ "path": "duration",
10093
10093
  "valueType": "number"
10094
10094
  },
10095
10095
  {
@@ -10191,11 +10191,11 @@ Object.freeze({
10191
10191
  ]
10192
10192
  },
10193
10193
  {
10194
- "path": "signalPercent",
10194
+ "path": "signal",
10195
10195
  "valueType": "number"
10196
10196
  },
10197
10197
  {
10198
- "path": "rssiDbm",
10198
+ "path": "rssi",
10199
10199
  "valueType": "number"
10200
10200
  },
10201
10201
  {
@@ -10326,23 +10326,23 @@ Object.freeze({
10326
10326
  ],
10327
10327
  "power-meter": [
10328
10328
  {
10329
- "path": "watts",
10329
+ "path": "power",
10330
10330
  "valueType": "number"
10331
10331
  },
10332
10332
  {
10333
- "path": "kwhTotal",
10333
+ "path": "energy",
10334
10334
  "valueType": "number"
10335
10335
  },
10336
10336
  {
10337
- "path": "volts",
10337
+ "path": "voltage",
10338
10338
  "valueType": "number"
10339
10339
  },
10340
10340
  {
10341
- "path": "amps",
10341
+ "path": "current",
10342
10342
  "valueType": "number"
10343
10343
  },
10344
10344
  {
10345
- "path": "va",
10345
+ "path": "apparentPower",
10346
10346
  "valueType": "number"
10347
10347
  },
10348
10348
  {
@@ -10370,14 +10370,10 @@ Object.freeze({
10370
10370
  {
10371
10371
  "path": "gps.accuracyMeters",
10372
10372
  "valueType": "number"
10373
- },
10374
- {
10375
- "path": "batteryPercent",
10376
- "valueType": "number"
10377
10373
  }
10378
10374
  ],
10379
10375
  "pressure-sensor": [{
10380
- "path": "hpa",
10376
+ "path": "pressure",
10381
10377
  "valueType": "number"
10382
10378
  }],
10383
10379
  "privacy-mask": [{
@@ -10691,7 +10687,7 @@ Object.freeze({
10691
10687
  "valueType": "boolean"
10692
10688
  }],
10693
10689
  "temperature-sensor": [{
10694
- "path": "celsius",
10690
+ "path": "temperature",
10695
10691
  "valueType": "number"
10696
10692
  }],
10697
10693
  "update": [
@@ -10739,7 +10735,7 @@ Object.freeze({
10739
10735
  "valueType": "string"
10740
10736
  },
10741
10737
  {
10742
- "path": "progressPercent",
10738
+ "path": "progress",
10743
10739
  "valueType": "number"
10744
10740
  },
10745
10741
  {
@@ -11214,7 +11210,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
11214
11210
  return DeviceRole;
11215
11211
  }({});
11216
11212
  //#endregion
11217
- //#region ../types/dist/composition-Bb8iwHEJ.mjs
11213
+ //#region ../types/dist/composition-CZImLpOI.mjs
11218
11214
  /**
11219
11215
  * The ffmpeg build every CamStack node downloads, per platform and arch.
11220
11216
  *
@@ -15873,6 +15869,14 @@ var AutomationConditionLeafSchema = object({
15873
15869
  array(union([string(), number()]))
15874
15870
  ])
15875
15871
  });
15872
+ var AutomationConditionStationaryPresentSchema = object({
15873
+ kind: literal("stationary-present"),
15874
+ deviceId: number().int().nonnegative(),
15875
+ /** Class names; a macro class matches every raw class that maps to it. */
15876
+ classes: array(string().min(1)).min(1).optional(),
15877
+ /** The parked object must be in at least one of these zones. */
15878
+ zones: array(string().min(1)).min(1).optional()
15879
+ });
15876
15880
  /**
15877
15881
  * The expression leaf, declared as a plain object rather than an intersection
15878
15882
  * with {@link ExpressionSourceSchema}: a discriminated union has to be able to
@@ -15906,7 +15910,8 @@ var AutomationConditionSchema = lazy(() => discriminatedUnion("kind", [
15906
15910
  child: AutomationConditionSchema
15907
15911
  }),
15908
15912
  AutomationConditionLeafSchema,
15909
- AutomationConditionExpressionSchema
15913
+ AutomationConditionExpressionSchema,
15914
+ AutomationConditionStationaryPresentSchema
15910
15915
  ]));
15911
15916
  /**
15912
15917
  * What starts a run.
@@ -15960,6 +15965,17 @@ var AutomationTriggerSchema = discriminatedUnion("kind", [
15960
15965
  /** Best-so-far confidence the track must reach. */
15961
15966
  minScore: number().min(0).max(1).optional()
15962
15967
  }),
15968
+ object({
15969
+ kind: literal("stationary"),
15970
+ deviceIds: array(number().int().nonnegative()).min(1),
15971
+ /** Class names; a macro class matches like the detection trigger. */
15972
+ classes: array(string().min(1)).min(1).optional(),
15973
+ /** The parked object must be in at least one of these zones. */
15974
+ zones: array(string().min(1)).min(1).optional(),
15975
+ /** `appeared`: it became parked. `departed`: the registry retired it.
15976
+ * The vocabulary of `PipelineAnalyticsStationaryChanged`. */
15977
+ phase: _enum(["appeared", "departed"])
15978
+ }),
15963
15979
  object({
15964
15980
  kind: literal("interval"),
15965
15981
  minutes: number().int().min(1).max(1440)
@@ -16169,7 +16185,8 @@ var AutomationConditionTraceNodeSchema = object({
16169
16185
  "any",
16170
16186
  "not",
16171
16187
  "condition",
16172
- "expression"
16188
+ "expression",
16189
+ "stationary-present"
16173
16190
  ]),
16174
16191
  outcome: TraceNodeOutcomeSchema,
16175
16192
  reason: string(),
@@ -18979,7 +18996,7 @@ var CompositionEventPlanSchema = object({
18979
18996
  stateField: string(),
18980
18997
  fieldKey: string()
18981
18998
  });
18982
- /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.celsius`. */
18999
+ /** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.temperature`. */
18983
19000
  var CompositionProblemSchema = object({
18984
19001
  code: _enum([
18985
19002
  "reserved-variant",
@@ -19298,7 +19315,7 @@ var GROUP_TEMPLATES = [
19298
19315
  summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
19299
19316
  role: DeviceRole.TemperatureSensor,
19300
19317
  outputCap: "temperature-sensor",
19301
- outputField: "celsius",
19318
+ outputField: "temperature",
19302
19319
  quantity: "temperature",
19303
19320
  defaultAggregate: "mean",
19304
19321
  empty: "null",
@@ -19309,7 +19326,7 @@ var GROUP_TEMPLATES = [
19309
19326
  summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
19310
19327
  role: DeviceRole.HumiditySensor,
19311
19328
  outputCap: "humidity-sensor",
19312
- outputField: "percent",
19329
+ outputField: "humidity",
19313
19330
  quantity: "humidity",
19314
19331
  defaultAggregate: "mean",
19315
19332
  empty: "null",
@@ -19320,7 +19337,7 @@ var GROUP_TEMPLATES = [
19320
19337
  summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
19321
19338
  role: DeviceRole.PressureSensor,
19322
19339
  outputCap: "pressure-sensor",
19323
- outputField: "hpa",
19340
+ outputField: "pressure",
19324
19341
  quantity: "pressure",
19325
19342
  defaultAggregate: "mean",
19326
19343
  empty: "null",
@@ -19331,7 +19348,7 @@ var GROUP_TEMPLATES = [
19331
19348
  summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
19332
19349
  role: DeviceRole.AmbientLightSensor,
19333
19350
  outputCap: "ambient-light-sensor",
19334
- outputField: "lux",
19351
+ outputField: "illuminance",
19335
19352
  quantity: "illuminance",
19336
19353
  defaultAggregate: "mean",
19337
19354
  empty: "null",
@@ -19342,7 +19359,7 @@ var GROUP_TEMPLATES = [
19342
19359
  summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
19343
19360
  role: DeviceRole.PowerSensor,
19344
19361
  outputCap: "power-meter",
19345
- outputField: "watts",
19362
+ outputField: "power",
19346
19363
  quantity: "power",
19347
19364
  defaultAggregate: "sum",
19348
19365
  empty: "omit",
@@ -19353,7 +19370,7 @@ var GROUP_TEMPLATES = [
19353
19370
  summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
19354
19371
  role: DeviceRole.EnergySensor,
19355
19372
  outputCap: "power-meter",
19356
- outputField: "kwhTotal",
19373
+ outputField: "energy",
19357
19374
  quantity: "energy",
19358
19375
  defaultAggregate: "sum",
19359
19376
  empty: "omit",
@@ -19364,7 +19381,7 @@ var GROUP_TEMPLATES = [
19364
19381
  summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
19365
19382
  role: DeviceRole.BatterySensor,
19366
19383
  outputCap: "battery",
19367
- outputField: "percentage",
19384
+ outputField: "level",
19368
19385
  quantity: "percentage",
19369
19386
  defaultAggregate: "mean",
19370
19387
  empty: "null",
@@ -57516,9 +57533,9 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
57516
57533
  }), LogStreamEntrySchema, { kind: "subscription" });
57517
57534
  object({
57518
57535
  /** Carbon dioxide concentration in ppm. */
57519
- co2Ppm: number().min(0).optional().meta(readingMeta("concentration-volume")),
57536
+ co2: number().min(0).optional().meta(readingMeta("concentration-volume")),
57520
57537
  /** Total volatile organic compounds in ppb. */
57521
- vocPpb: number().min(0).optional().meta(readingMeta("concentration-ppb")),
57538
+ voc: number().min(0).optional().meta(readingMeta("concentration-ppb")),
57522
57539
  /** Particulate matter ≤ 2.5 μm in µg/m³. */
57523
57540
  pm25: number().min(0).optional().meta(readingMeta("concentration-mass")),
57524
57541
  /** Particulate matter ≤ 10 μm in µg/m³. */
@@ -57531,7 +57548,7 @@ object({
57531
57548
  DeviceType.Sensor;
57532
57549
  object({
57533
57550
  /** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
57534
- lux: number().min(0).nullable().meta(readingMeta("illuminance", {
57551
+ illuminance: number().min(0).nullable().meta(readingMeta("illuminance", {
57535
57552
  precision: 0,
57536
57553
  label: "Illuminance"
57537
57554
  })),
@@ -57759,7 +57776,7 @@ var BatteryStatusSchema = object({
57759
57776
  * Consumers must SKIP a null rather than coerce it — `battery-band` already
57760
57777
  * declines to band a non-finite reading, which is the correct shape.
57761
57778
  */
57762
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
57779
+ level: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
57763
57780
  /**
57764
57781
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
57765
57782
  * Reolink-specific for the Solar Panel 2 accessory (will become
@@ -57769,7 +57786,7 @@ var BatteryStatusSchema = object({
57769
57786
  * `'unknown'` is the absence of an answer: the provider has not read the
57770
57787
  * power fields yet, or the firmware reported neither. Before it existed,
57771
57788
  * two unreadable fields produced `'none'`, and a camera nobody had reached
57772
- * was drawn "on battery alone" — the same D315 defect `percentage` closed
57789
+ * was drawn "on battery alone" — the same D315 defect `level` closed
57773
57790
  * by going nullable. Consumers SKIP it (no charger state published, no
57774
57791
  * glyph, no HomeKit ChargingState) rather than coerce it either way.
57775
57792
  */
@@ -57793,7 +57810,7 @@ var BatteryStatusSchema = object({
57793
57810
  * that only report charge. A second reading on this cap, not a second
57794
57811
  * `numeric-sensor` on the same device.
57795
57812
  */
57796
- volts: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
57813
+ voltage: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
57797
57814
  /**
57798
57815
  * Ms epoch of the last time the device PROVED it was reachable — a
57799
57816
  * completed firmware round-trip, an observed wake, or an inbound push
@@ -57827,7 +57844,7 @@ var BatteryStatusSchema = object({
57827
57844
  /**
57828
57845
  * True when the source is a BINARY low-battery indicator (HA
57829
57846
  * `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
57830
- * charge level — `percentage` is then a coarse stand-in (100 = normal,
57847
+ * charge level — `level` is then a coarse stand-in (100 = normal,
57831
57848
  * sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
57832
57849
  * misleading exact percentage. Absent/false → genuine 0–100 % reading.
57833
57850
  */
@@ -57853,19 +57870,19 @@ object({
57853
57870
  DeviceType.Sensor;
57854
57871
  object({
57855
57872
  /** Current level as 0..100 inclusive. Firmware-reported. */
57856
- percentage: number().min(0).max(100).meta(readingMeta("percentage")),
57873
+ level: number().min(0).max(100).meta(readingMeta("percentage")),
57857
57874
  /** Ms epoch of the last operator-driven change. Useful for UI freshness. */
57858
57875
  lastChangedAt: number()
57859
57876
  });
57860
57877
  DeviceType.Light, method(object({
57861
57878
  deviceId: number().int().nonnegative(),
57862
- percentage: number().min(0).max(100)
57879
+ level: number().min(0).max(100)
57863
57880
  }), _void(), {
57864
57881
  kind: "mutation",
57865
57882
  auth: "protected"
57866
57883
  }), object({
57867
57884
  deviceId: number(),
57868
- percentage: number().min(0).max(100),
57885
+ level: number().min(0).max(100),
57869
57886
  lastChangedAt: number()
57870
57887
  });
57871
57888
  DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
@@ -58366,11 +58383,11 @@ var ColorInputSchema = discriminatedUnion("mode", [
58366
58383
  }),
58367
58384
  object({
58368
58385
  mode: literal("mired"),
58369
- mireds: number().int().min(50).max(1e3)
58386
+ colorTemperature: number().int().min(50).max(1e3)
58370
58387
  })
58371
58388
  ]);
58372
58389
  object({
58373
- /** Active color mode — which of `rgb` / `hsv` / `mireds` reflects
58390
+ /** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
58374
58391
  * the bulb's current state. */
58375
58392
  mode: _enum([
58376
58393
  "rgb",
@@ -58382,7 +58399,7 @@ object({
58382
58399
  /** Populated when `mode === 'hsv'`. */
58383
58400
  hsv: HsvTripletSchema.optional(),
58384
58401
  /** Populated when `mode === 'mired'`. */
58385
- mireds: number().int().optional().meta(readingMeta("colour-temperature")),
58402
+ colorTemperature: number().int().optional().meta(readingMeta("colour-temperature")),
58386
58403
  /** Ms epoch of the last operator-driven change. */
58387
58404
  lastChangedAt: number()
58388
58405
  });
@@ -58401,7 +58418,7 @@ DeviceType.Light, method(object({
58401
58418
  ]),
58402
58419
  rgb: RgbTripletSchema.optional(),
58403
58420
  hsv: HsvTripletSchema.optional(),
58404
- mireds: number().int().optional(),
58421
+ colorTemperature: number().int().optional(),
58405
58422
  lastChangedAt: number()
58406
58423
  });
58407
58424
  var ConnectionTestOutcomeSchema = discriminatedUnion("outcome", [
@@ -58827,11 +58844,11 @@ object({
58827
58844
  /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
58828
58845
  availablePrograms: array(string()),
58829
58846
  /** Seconds remaining on the active cycle, or null when not running / not known. */
58830
- remainingSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58847
+ remaining: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58831
58848
  /** Seconds the delayed start is set to (time until the cycle starts), or null. */
58832
- delayedStartSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58849
+ delayedStart: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58833
58850
  /** Cycle completion 0..100, or null when not applicable. */
58834
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58851
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58835
58852
  /** True when the door is reported open; null when the door state is not known. */
58836
58853
  doorOpen: boolean().nullable(),
58837
58854
  /** True when the door is latched (locked) during a cycle; null when not reported. */
@@ -59449,7 +59466,7 @@ var FanDirectionSchema = _enum(["forward", "reverse"]);
59449
59466
  object({
59450
59467
  /** Active speed as 0..100 inclusive. Null when the device has no
59451
59468
  * speed surface (single-speed fan). */
59452
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59469
+ speed: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59453
59470
  /** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
59454
59471
  * a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
59455
59472
  percentageStep: number().positive().optional().meta(readingMeta("percentage")),
@@ -59469,7 +59486,7 @@ object({
59469
59486
  });
59470
59487
  DeviceType.Fan, method(object({
59471
59488
  deviceId: number().int().nonnegative(),
59472
- percentage: number().min(0).max(100)
59489
+ speed: number().min(0).max(100)
59473
59490
  }), _void(), {
59474
59491
  kind: "mutation",
59475
59492
  auth: "protected"
@@ -59652,7 +59669,7 @@ DeviceType.Humidifier, method(object({
59652
59669
  });
59653
59670
  object({
59654
59671
  /** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
59655
- percent: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
59672
+ humidity: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
59656
59673
  precision: 0,
59657
59674
  label: "Humidity"
59658
59675
  })),
@@ -60095,7 +60112,7 @@ object({
60095
60112
  batteryLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
60096
60113
  /** 0..100 mowing-completion percentage of the current task, or null when no
60097
60114
  * task is active / progress is unavailable. */
60098
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
60115
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
60099
60116
  /** Current device/event code (dynamic — mostly status, sometimes an error),
60100
60117
  * or null when unknown. */
60101
60118
  currentCode: number().nullable().meta(readingMeta("none")),
@@ -60585,10 +60602,10 @@ object({
60585
60602
  currentMedia: MediaInfoSchema.nullable(),
60586
60603
  /** Current playback position in ms. Null when not seekable or
60587
60604
  * nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
60588
- positionMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60605
+ position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60589
60606
  /** Total duration of the current media in ms. Null when unknown
60590
60607
  * (live stream) or nothing is playing. */
60591
- durationMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60608
+ duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60592
60609
  /** Shuffle toggle. Null when no shuffle surface.
60593
60610
  * Pair with `DeviceFeature.MediaPlayerShuffle`. */
60594
60611
  shuffle: boolean().nullable(),
@@ -60615,7 +60632,7 @@ DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }
60615
60632
  auth: "protected"
60616
60633
  }), method(object({
60617
60634
  deviceId: number().int().nonnegative(),
60618
- positionMs: number().int().nonnegative()
60635
+ position: number().int().nonnegative()
60619
60636
  }), _void(), {
60620
60637
  kind: "mutation",
60621
60638
  auth: "protected"
@@ -61288,9 +61305,9 @@ var NetworkLinkStatusSchema = object({
61288
61305
  * one whose reading has not landed must not be drawn at 0 %. Consumers
61289
61306
  * SKIP a null rather than coerce it.
61290
61307
  */
61291
- signalPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61308
+ signal: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61292
61309
  /** Raw received signal strength in dBm, when the firmware reports one. */
61293
- rssiDbm: number().optional().meta(readingMeta("signal-level")),
61310
+ rssi: number().optional().meta(readingMeta("signal-level")),
61294
61311
  /** Network name of a wireless link, when the firmware reports it. */
61295
61312
  ssid: string().optional(),
61296
61313
  /** Ms epoch of the last observation. Lets consumers reason about freshness. */
@@ -62440,16 +62457,16 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
62440
62457
  auth: "admin"
62441
62458
  });
62442
62459
  object({
62443
- /** Instantaneous power draw in watts. */
62444
- watts: number().optional().meta(readingMeta("power", { label: "Power" })),
62460
+ /** Instantaneous power draw (watts). */
62461
+ power: number().optional().meta(readingMeta("power", { label: "Power" })),
62445
62462
  /** Cumulative energy in kilowatt-hours since the meter was reset. */
62446
- kwhTotal: number().optional().meta(readingMeta("energy", { label: "Energy" })),
62447
- /** Voltage in volts. */
62448
- volts: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
62463
+ energy: number().optional().meta(readingMeta("energy", { label: "Energy" })),
62464
+ /** Voltage (volts). */
62465
+ voltage: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
62449
62466
  /** Current in amperes. */
62450
- amps: number().optional().meta(readingMeta("current", { label: "Current" })),
62467
+ current: number().optional().meta(readingMeta("current", { label: "Current" })),
62451
62468
  /** Apparent power in volt-amperes. */
62452
- va: number().optional().meta(readingMeta("apparent-power")),
62469
+ apparentPower: number().optional().meta(readingMeta("apparent-power")),
62453
62470
  /** Power factor (0..1) if reported. */
62454
62471
  powerFactor: number().min(0).max(1).optional().meta(readingMeta("ratio")),
62455
62472
  /** Ms epoch when the slice was last updated. */
@@ -62504,16 +62521,13 @@ object({
62504
62521
  location: string().nullable(),
62505
62522
  /** GPS coordinates when available. Null otherwise. */
62506
62523
  gps: GpsLocationSchema.nullable(),
62507
- /** Optional battery level of the tracking device (0..100). Null
62508
- * when not reported. */
62509
- batteryPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
62510
62524
  /** Ms epoch when the slice was last updated. */
62511
62525
  lastChangedAt: number()
62512
62526
  });
62513
62527
  DeviceType.Presence;
62514
62528
  object({
62515
62529
  /** Current pressure in hPa. `null` when the sample was refused (D393). */
62516
- hpa: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
62530
+ pressure: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
62517
62531
  /** Ms epoch when the slice was last updated. */
62518
62532
  lastFetchedAt: number()
62519
62533
  });
@@ -65516,7 +65530,7 @@ object({
65516
65530
  DeviceType.Sensor;
65517
65531
  object({
65518
65532
  /** Current temperature in Celsius. `null` when the sample was refused (D393). */
65519
- celsius: number().nullable().meta(readingMeta("temperature", {
65533
+ temperature: number().nullable().meta(readingMeta("temperature", {
65520
65534
  precision: 1,
65521
65535
  label: "Temperature"
65522
65536
  })),
@@ -65780,7 +65794,7 @@ object({
65780
65794
  /** Speed tokens the hardware accepts — drives the UI selector. */
65781
65795
  availableFanSpeeds: array(string()),
65782
65796
  /** 0..100 cleaning-completion percentage of the current task, or null. */
65783
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65797
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65784
65798
  /** Current error code (0 / null = no error). */
65785
65799
  errorCode: number().nullable().meta(readingMeta("none")),
65786
65800
  /** Human label for {@link errorCode}, or null when none / undecodable. */
@@ -76848,7 +76862,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76848
76862
  label: t("Full brightness", "Luminosità massima"),
76849
76863
  phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
76850
76864
  icon: "sun",
76851
- args: { percentage: 100 }
76865
+ args: { level: 100 }
76852
76866
  },
76853
76867
  {
76854
76868
  id: "brightness.half",
@@ -76856,7 +76870,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76856
76870
  label: t("Half brightness", "Luminosità a metà"),
76857
76871
  phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
76858
76872
  icon: "sun-dim",
76859
- args: { percentage: 50 }
76873
+ args: { level: 50 }
76860
76874
  },
76861
76875
  {
76862
76876
  id: "brightness.off",
@@ -76864,16 +76878,16 @@ var ACTUATOR_CAP_VOCABULARY = {
76864
76878
  label: t("Brightness off", "Luminosità a zero"),
76865
76879
  phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
76866
76880
  icon: "lightbulb-off",
76867
- args: { percentage: 0 }
76881
+ args: { level: 0 }
76868
76882
  },
76869
76883
  {
76870
76884
  id: "brightness.set",
76871
76885
  method: "setBrightness",
76872
76886
  label: t("Set brightness", "Imposta la luminosità"),
76873
- phrase: t("Set the brightness of {device} to {percentage}", "Imposta la luminosità di {device} a {percentage}"),
76887
+ phrase: t("Set the brightness of {device} to {level}", "Imposta la luminosità di {device} a {level}"),
76874
76888
  icon: "sun-medium",
76875
76889
  openArgs: [{
76876
- key: "percentage",
76890
+ key: "level",
76877
76891
  label: PERCENT,
76878
76892
  offer: {
76879
76893
  kind: "number",
@@ -76887,13 +76901,13 @@ var ACTUATOR_CAP_VOCABULARY = {
76887
76901
  ],
76888
76902
  state: [{
76889
76903
  kind: "numeric",
76890
- field: "percentage",
76904
+ field: "level",
76891
76905
  quantity: t("the brightness", "la luminosità"),
76892
76906
  label: t("Brightness", "Luminosità"),
76893
76907
  unit: "%",
76894
76908
  icon: "sun"
76895
76909
  }],
76896
- events: { onBrightnessChanged: { notOperatorFacing: "the `percentage` state trigger reads the same change" } }
76910
+ events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
76897
76911
  },
76898
76912
  color: {
76899
76913
  scope: "device",
@@ -76907,7 +76921,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76907
76921
  icon: "sun",
76908
76922
  args: { color: {
76909
76923
  mode: "mired",
76910
- mireds: 370
76924
+ colorTemperature: 370
76911
76925
  } }
76912
76926
  },
76913
76927
  {
@@ -76918,7 +76932,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76918
76932
  icon: "snowflake",
76919
76933
  args: { color: {
76920
76934
  mode: "mired",
76921
- mireds: 200
76935
+ colorTemperature: 200
76922
76936
  } }
76923
76937
  },
76924
76938
  {
@@ -77532,7 +77546,7 @@ var ACTUATOR_CAP_VOCABULARY = {
77532
77546
  label: t("Fan off", "Ventilatore spento"),
77533
77547
  phrase: t("Stop {device}", "Ferma {device}"),
77534
77548
  icon: "power-off",
77535
- args: { percentage: 0 }
77549
+ args: { speed: 0 }
77536
77550
  },
77537
77551
  {
77538
77552
  id: "fan.full",
@@ -77540,16 +77554,16 @@ var ACTUATOR_CAP_VOCABULARY = {
77540
77554
  label: t("Fan full", "Ventilatore al massimo"),
77541
77555
  phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
77542
77556
  icon: "fan",
77543
- args: { percentage: 100 }
77557
+ args: { speed: 100 }
77544
77558
  },
77545
77559
  {
77546
77560
  id: "fan.speed",
77547
77561
  method: "setPercentage",
77548
77562
  label: t("Set speed", "Imposta la velocità"),
77549
- phrase: t("Set the speed of {device} to {percentage}", "Imposta la velocità di {device} al {percentage}"),
77563
+ phrase: t("Set the speed of {device} to {speed}", "Imposta la velocità di {device} al {speed}"),
77550
77564
  icon: "fan",
77551
77565
  openArgs: [{
77552
- key: "percentage",
77566
+ key: "speed",
77553
77567
  label: t("Speed", "Velocità"),
77554
77568
  offer: {
77555
77569
  kind: "number",
@@ -77611,7 +77625,7 @@ var ACTUATOR_CAP_VOCABULARY = {
77611
77625
  ],
77612
77626
  state: [{
77613
77627
  kind: "numeric",
77614
- field: "percentage",
77628
+ field: "speed",
77615
77629
  quantity: t("the speed", "la velocità"),
77616
77630
  label: t("Speed", "Velocità"),
77617
77631
  unit: "%",
@@ -78409,7 +78423,7 @@ var APPLIANCE_CAP_VOCABULARY = {
78409
78423
  },
78410
78424
  {
78411
78425
  kind: "numeric",
78412
- field: "progressPercent",
78426
+ field: "progress",
78413
78427
  quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
78414
78428
  label: t("Progress", "Avanzamento"),
78415
78429
  unit: "%",
@@ -78767,10 +78781,10 @@ var APPLIANCE_CAP_VOCABULARY = {
78767
78781
  id: "media.seek",
78768
78782
  method: "seek",
78769
78783
  label: t("Seek", "Vai al punto"),
78770
- phrase: t("Move {device} to {positionMs}", "Porta {device} al punto {positionMs}"),
78784
+ phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
78771
78785
  icon: "fast-forward",
78772
78786
  openArgs: [{
78773
- key: "positionMs",
78787
+ key: "position",
78774
78788
  label: t("Position", "Posizione"),
78775
78789
  offer: {
78776
78790
  kind: "number",
@@ -79819,7 +79833,7 @@ var SENSOR_CAP_VOCABULARY = {
79819
79833
  state: [
79820
79834
  {
79821
79835
  kind: "numeric",
79822
- field: "co2Ppm",
79836
+ field: "co2",
79823
79837
  quantity: t("the CO₂", "la CO₂"),
79824
79838
  label: t("CO₂", "CO₂"),
79825
79839
  unit: "ppm",
@@ -79827,7 +79841,7 @@ var SENSOR_CAP_VOCABULARY = {
79827
79841
  },
79828
79842
  {
79829
79843
  kind: "numeric",
79830
- field: "vocPpb",
79844
+ field: "voc",
79831
79845
  quantity: t("the VOC level", "il livello di COV"),
79832
79846
  label: t("VOC", "COV"),
79833
79847
  unit: "ppb",
@@ -79863,7 +79877,7 @@ var SENSOR_CAP_VOCABULARY = {
79863
79877
  noun: t("Light level", "Luminosità ambiente"),
79864
79878
  state: [{
79865
79879
  kind: "numeric",
79866
- field: "lux",
79880
+ field: "illuminance",
79867
79881
  quantity: t("the light level", "la luminosità"),
79868
79882
  label: t("Illuminance", "Illuminamento"),
79869
79883
  unit: "lx",
@@ -80066,7 +80080,7 @@ var SENSOR_CAP_VOCABULARY = {
80066
80080
  noun: t("Humidity", "Umidità"),
80067
80081
  state: [{
80068
80082
  kind: "numeric",
80069
- field: "percent",
80083
+ field: "humidity",
80070
80084
  quantity: t("the humidity", "l’umidità"),
80071
80085
  label: t("Humidity", "Umidità"),
80072
80086
  unit: "%",
@@ -80114,7 +80128,7 @@ var SENSOR_CAP_VOCABULARY = {
80114
80128
  state: [
80115
80129
  {
80116
80130
  kind: "numeric",
80117
- field: "watts",
80131
+ field: "power",
80118
80132
  quantity: t("the power draw", "il consumo"),
80119
80133
  label: t("Power", "Potenza"),
80120
80134
  unit: "W",
@@ -80122,7 +80136,7 @@ var SENSOR_CAP_VOCABULARY = {
80122
80136
  },
80123
80137
  {
80124
80138
  kind: "numeric",
80125
- field: "kwhTotal",
80139
+ field: "energy",
80126
80140
  quantity: t("the energy used", "l’energia consumata"),
80127
80141
  label: t("Energy", "Energia"),
80128
80142
  unit: "kWh",
@@ -80130,7 +80144,7 @@ var SENSOR_CAP_VOCABULARY = {
80130
80144
  },
80131
80145
  {
80132
80146
  kind: "numeric",
80133
- field: "volts",
80147
+ field: "voltage",
80134
80148
  quantity: t("the voltage", "la tensione"),
80135
80149
  label: t("Voltage", "Tensione"),
80136
80150
  unit: "V",
@@ -80138,7 +80152,7 @@ var SENSOR_CAP_VOCABULARY = {
80138
80152
  },
80139
80153
  {
80140
80154
  kind: "numeric",
80141
- field: "amps",
80155
+ field: "current",
80142
80156
  quantity: t("the current", "la corrente"),
80143
80157
  label: t("Current", "Corrente"),
80144
80158
  unit: "A",
@@ -80155,13 +80169,6 @@ var SENSOR_CAP_VOCABULARY = {
80155
80169
  label: t("Where", "Posizione"),
80156
80170
  phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
80157
80171
  icon: "map-pin"
80158
- }, {
80159
- kind: "numeric",
80160
- field: "batteryPercent",
80161
- quantity: t("the phone battery", "la batteria del telefono"),
80162
- label: t("Battery", "Batteria"),
80163
- unit: "%",
80164
- icon: "battery"
80165
80172
  }]
80166
80173
  },
80167
80174
  "pressure-sensor": {
@@ -80169,7 +80176,7 @@ var SENSOR_CAP_VOCABULARY = {
80169
80176
  noun: t("Pressure", "Pressione"),
80170
80177
  state: [{
80171
80178
  kind: "numeric",
80172
- field: "hpa",
80179
+ field: "pressure",
80173
80180
  quantity: t("the pressure", "la pressione"),
80174
80181
  label: t("Pressure", "Pressione"),
80175
80182
  unit: "hPa",
@@ -80205,7 +80212,7 @@ var SENSOR_CAP_VOCABULARY = {
80205
80212
  noun: t("Temperature", "Temperatura"),
80206
80213
  state: [{
80207
80214
  kind: "numeric",
80208
- field: "celsius",
80215
+ field: "temperature",
80209
80216
  quantity: t("the temperature", "la temperatura"),
80210
80217
  label: t("Temperature", "Temperatura"),
80211
80218
  unit: "°C",
@@ -80276,7 +80283,7 @@ var SENSOR_CAP_VOCABULARY = {
80276
80283
  state: [
80277
80284
  {
80278
80285
  kind: "numeric",
80279
- field: "percentage",
80286
+ field: "level",
80280
80287
  quantity: t("the battery level", "il livello della batteria"),
80281
80288
  label: t("Battery", "Batteria"),
80282
80289
  unit: "%",
@@ -80318,7 +80325,7 @@ var SENSOR_CAP_VOCABULARY = {
80318
80325
  icon: "battery-charging"
80319
80326
  }
80320
80327
  ],
80321
- events: { onStatusChanged: { notOperatorFacing: "the percentage / sleeping / charging state triggers each read one field of this change" } },
80328
+ events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
80322
80329
  extraEvents: [{
80323
80330
  category: EventCategory.DeviceAwake,
80324
80331
  label: t("Woke up", "Risvegliato"),
@@ -80336,7 +80343,7 @@ var SENSOR_CAP_VOCABULARY = {
80336
80343
  noun: t("Network link", "Collegamento di rete"),
80337
80344
  state: [{
80338
80345
  kind: "numeric",
80339
- field: "signalPercent",
80346
+ field: "signal",
80340
80347
  quantity: t("the signal strength", "l’intensità del segnale"),
80341
80348
  label: t("Signal", "Segnale"),
80342
80349
  unit: "%",