@camstack/addon-model-studio 1.1.313 → 1.1.315

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 (20) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/{MotionZonesSettings-Bbq95ygz.mjs → MotionZonesSettings-CMawQJsh.mjs} +2 -2
  3. package/dist/{PrivacyMaskSettings-ZpD6VN7X.mjs → PrivacyMaskSettings-CgnGd4mf.mjs} +4 -4
  4. package/dist/{SceneMonitorEditor-BvsLHttM.mjs → SceneMonitorEditor-DWT-TJnC.mjs} +3 -3
  5. package/dist/_stub.js +6607 -6476
  6. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-vhAznt0g.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BMPYqtXC.mjs} +3 -3
  7. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DX84dVuY.mjs +26 -0
  8. package/dist/addon-model-studio.css +1 -1
  9. package/dist/{hostInit-BIVqb0f7.mjs → hostInit-D55wgKus.mjs} +2 -2
  10. package/dist/model-studio.addon.js +174 -122
  11. package/dist/model-studio.addon.mjs +174 -122
  12. package/dist/{player-overlays-Dc4klu5U.mjs → player-overlays-BgD3YVin.mjs} +1 -1
  13. package/dist/remoteEntry.js +1 -1
  14. package/dist/{responsive-D28CBU7-.mjs → responsive-LheddRXr.mjs} +1 -1
  15. package/dist/{scene-monitor-copy-KG_LV8wy.mjs → scene-monitor-copy-BwVALZ45.mjs} +1 -1
  16. package/dist/{square-BpIRNy9u.mjs → square-DmabZIoV.mjs} +1 -1
  17. package/dist/{trash-2-BwbD1FGM.mjs → trash-2-UrytgZd6.mjs} +1 -1
  18. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CeE6-aSe.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-DEQI__Rz.mjs} +1 -1
  19. package/package.json +1 -1
  20. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DxAMUMtD.mjs +0 -26
@@ -5842,7 +5842,7 @@ var ZodIssueCode = {
5842
5842
  var ZodFirstPartyTypeKind;
5843
5843
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5844
5844
  //#endregion
5845
- //#region ../types/dist/sleep-DFaVPxfm.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-DwA0uVW5.mjs
11244
11240
  /**
11245
11241
  * The ffmpeg build every CamStack node downloads, per platform and arch.
11246
11242
  *
@@ -19026,7 +19022,7 @@ var CompositionEventPlanSchema = object({
19026
19022
  stateField: string(),
19027
19023
  fieldKey: string()
19028
19024
  });
19029
- /** 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`. */
19030
19026
  var CompositionProblemSchema = object({
19031
19027
  code: _enum([
19032
19028
  "reserved-variant",
@@ -19308,12 +19304,13 @@ var CHANGED = {
19308
19304
  expr: "now"
19309
19305
  };
19310
19306
  function numeric(input) {
19307
+ const { alsoFrom, ...base } = input;
19311
19308
  return {
19312
- ...input,
19309
+ ...base,
19313
19310
  family: "numeric",
19314
19311
  deviceType: DeviceType.Sensor,
19315
19312
  memberDeviceType: DeviceType.Sensor,
19316
- memberDeviceTypes: [DeviceType.Sensor],
19313
+ memberDeviceTypes: [DeviceType.Sensor, ...alsoFrom?.deviceTypes ?? []],
19317
19314
  activeWhen: void 0,
19318
19315
  commandCaps: [],
19319
19316
  baseUnit: baseUnitOf(input.quantity),
@@ -19321,9 +19318,10 @@ function numeric(input) {
19321
19318
  accept: [{
19322
19319
  cap: input.outputCap,
19323
19320
  fieldPath: input.outputField
19324
- }]
19321
+ }, ...alsoFrom === void 0 ? [] : [alsoFrom.accept]]
19325
19322
  };
19326
19323
  }
19324
+ var CLIMATE_DEVICES = [DeviceType.Thermostat, DeviceType.Climate];
19327
19325
  function binary(input) {
19328
19326
  return {
19329
19327
  ...input,
@@ -19345,29 +19343,43 @@ var GROUP_TEMPLATES = [
19345
19343
  summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
19346
19344
  role: DeviceRole.TemperatureSensor,
19347
19345
  outputCap: "temperature-sensor",
19348
- outputField: "celsius",
19346
+ outputField: "temperature",
19349
19347
  quantity: "temperature",
19350
19348
  defaultAggregate: "mean",
19351
19349
  empty: "null",
19352
- companions: [NOW$2]
19350
+ companions: [NOW$2],
19351
+ alsoFrom: {
19352
+ deviceTypes: CLIMATE_DEVICES,
19353
+ accept: {
19354
+ cap: "climate-control",
19355
+ fieldPath: "currentTemp"
19356
+ }
19357
+ }
19353
19358
  }),
19354
19359
  numeric({
19355
19360
  id: "humidity",
19356
19361
  summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
19357
19362
  role: DeviceRole.HumiditySensor,
19358
19363
  outputCap: "humidity-sensor",
19359
- outputField: "percent",
19364
+ outputField: "humidity",
19360
19365
  quantity: "humidity",
19361
19366
  defaultAggregate: "mean",
19362
19367
  empty: "null",
19363
- companions: [NOW$2]
19368
+ companions: [NOW$2],
19369
+ alsoFrom: {
19370
+ deviceTypes: CLIMATE_DEVICES,
19371
+ accept: {
19372
+ cap: "climate-control",
19373
+ fieldPath: "currentHumidity"
19374
+ }
19375
+ }
19364
19376
  }),
19365
19377
  numeric({
19366
19378
  id: "pressure",
19367
19379
  summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
19368
19380
  role: DeviceRole.PressureSensor,
19369
19381
  outputCap: "pressure-sensor",
19370
- outputField: "hpa",
19382
+ outputField: "pressure",
19371
19383
  quantity: "pressure",
19372
19384
  defaultAggregate: "mean",
19373
19385
  empty: "null",
@@ -19378,7 +19390,7 @@ var GROUP_TEMPLATES = [
19378
19390
  summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
19379
19391
  role: DeviceRole.AmbientLightSensor,
19380
19392
  outputCap: "ambient-light-sensor",
19381
- outputField: "lux",
19393
+ outputField: "illuminance",
19382
19394
  quantity: "illuminance",
19383
19395
  defaultAggregate: "mean",
19384
19396
  empty: "null",
@@ -19389,7 +19401,7 @@ var GROUP_TEMPLATES = [
19389
19401
  summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
19390
19402
  role: DeviceRole.PowerSensor,
19391
19403
  outputCap: "power-meter",
19392
- outputField: "watts",
19404
+ outputField: "power",
19393
19405
  quantity: "power",
19394
19406
  defaultAggregate: "sum",
19395
19407
  empty: "omit",
@@ -19400,7 +19412,7 @@ var GROUP_TEMPLATES = [
19400
19412
  summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
19401
19413
  role: DeviceRole.EnergySensor,
19402
19414
  outputCap: "power-meter",
19403
- outputField: "kwhTotal",
19415
+ outputField: "energy",
19404
19416
  quantity: "energy",
19405
19417
  defaultAggregate: "sum",
19406
19418
  empty: "omit",
@@ -19411,7 +19423,7 @@ var GROUP_TEMPLATES = [
19411
19423
  summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
19412
19424
  role: DeviceRole.BatterySensor,
19413
19425
  outputCap: "battery",
19414
- outputField: "percentage",
19426
+ outputField: "level",
19415
19427
  quantity: "percentage",
19416
19428
  defaultAggregate: "mean",
19417
19429
  empty: "null",
@@ -44900,6 +44912,43 @@ var NotificationActionSchema = object({
44900
44912
  */
44901
44913
  mode: _enum(["navigate", "background"]).optional()
44902
44914
  });
44915
+ /** A delivery parameter value: what a notifier declared it takes. */
44916
+ var DeliveryParamValueSchema = union([
44917
+ string(),
44918
+ number(),
44919
+ boolean()
44920
+ ]);
44921
+ /**
44922
+ * One extra delivery parameter a notifier KIND declares (D938). A rule that
44923
+ * addresses a target of that kind may set it; a kind that declares nothing is
44924
+ * never handed one. The admin UI derives its control from this descriptor —
44925
+ * no editor knows a service by name.
44926
+ *
44927
+ * Optional fields are `.optional()`, never `.default()` (a Zod default does not
44928
+ * run on the addon cap path).
44929
+ */
44930
+ var DeliveryParamSchema = object({
44931
+ key: string().min(1),
44932
+ label: string(),
44933
+ /** i18n key of the label, resolved by the declaring addon's namespace. */
44934
+ labelKey: string().optional(),
44935
+ type: _enum([
44936
+ "enum",
44937
+ "number",
44938
+ "boolean",
44939
+ "string"
44940
+ ]),
44941
+ /** `enum` only: the closed set of accepted values. */
44942
+ options: array(object({
44943
+ value: string(),
44944
+ label: string()
44945
+ })).optional(),
44946
+ /** `number` only. */
44947
+ min: number().optional(),
44948
+ max: number().optional(),
44949
+ /** What the notifier does when the rule sets nothing; shown as the placeholder. */
44950
+ default: DeliveryParamValueSchema.optional()
44951
+ });
44903
44952
  /**
44904
44953
  * The canonical notification. `body` is the only hard field (Apprise model).
44905
44954
  * `priority` is a 5-level ORDINAL (1=lowest … 3=normal(default) … 5=urgent),
@@ -44922,7 +44971,13 @@ var NotificationSchema = object({
44922
44971
  tag: string().optional(),
44923
44972
  deviceId: number().optional(),
44924
44973
  eventId: string().optional(),
44925
- metadata: record(string(), unknown()).optional()
44974
+ metadata: record(string(), unknown()).optional(),
44975
+ /**
44976
+ * Values for the parameters the target's kind DECLARES in
44977
+ * {@link TargetKindSchema} `deliveryParams`. Already validated against the
44978
+ * declaration by the sender; a notifier reads only the keys it declared.
44979
+ */
44980
+ delivery: record(string(), DeliveryParamValueSchema).optional()
44926
44981
  });
44927
44982
  /** One declared native severity/priority level for a kind. */
44928
44983
  var TargetKindLevelSchema = object({
@@ -45028,6 +45083,11 @@ var TargetKindSchema = object({
45028
45083
  */
45029
45084
  destinationKeys: array(string()).optional(),
45030
45085
  supportsDiscovery: boolean(),
45086
+ /**
45087
+ * Extra delivery parameters a rule may set for a target of this kind (D938).
45088
+ * Absent = none; the rule editor then offers nothing.
45089
+ */
45090
+ deliveryParams: array(DeliveryParamSchema).optional(),
45031
45091
  caps: TargetKindCapsSchema
45032
45092
  });
45033
45093
  /**
@@ -57198,7 +57258,9 @@ var ManifestShapeSchema = object({
57198
57258
  icon: string().optional()
57199
57259
  }).optional(),
57200
57260
  protected: boolean().optional(),
57201
- removable: boolean().optional()
57261
+ removable: boolean().optional(),
57262
+ /** Declared Integrations-page block (mirror of `AddonDeclaration.integrationSection`). */
57263
+ integrationSection: _enum(["system", "providers"]).optional()
57202
57264
  });
57203
57265
  var AddonProcessSchema = object({
57204
57266
  pid: number().optional(),
@@ -57563,9 +57625,9 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
57563
57625
  }), LogStreamEntrySchema, { kind: "subscription" });
57564
57626
  object({
57565
57627
  /** Carbon dioxide concentration in ppm. */
57566
- co2Ppm: number().min(0).optional().meta(readingMeta("concentration-volume")),
57628
+ co2: number().min(0).optional().meta(readingMeta("concentration-volume")),
57567
57629
  /** Total volatile organic compounds in ppb. */
57568
- vocPpb: number().min(0).optional().meta(readingMeta("concentration-ppb")),
57630
+ voc: number().min(0).optional().meta(readingMeta("concentration-ppb")),
57569
57631
  /** Particulate matter ≤ 2.5 μm in µg/m³. */
57570
57632
  pm25: number().min(0).optional().meta(readingMeta("concentration-mass")),
57571
57633
  /** Particulate matter ≤ 10 μm in µg/m³. */
@@ -57578,7 +57640,7 @@ object({
57578
57640
  DeviceType.Sensor;
57579
57641
  object({
57580
57642
  /** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
57581
- lux: number().min(0).nullable().meta(readingMeta("illuminance", {
57643
+ illuminance: number().min(0).nullable().meta(readingMeta("illuminance", {
57582
57644
  precision: 0,
57583
57645
  label: "Illuminance"
57584
57646
  })),
@@ -57806,7 +57868,7 @@ var BatteryStatusSchema = object({
57806
57868
  * Consumers must SKIP a null rather than coerce it — `battery-band` already
57807
57869
  * declines to band a non-finite reading, which is the correct shape.
57808
57870
  */
57809
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
57871
+ level: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
57810
57872
  /**
57811
57873
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
57812
57874
  * Reolink-specific for the Solar Panel 2 accessory (will become
@@ -57816,7 +57878,7 @@ var BatteryStatusSchema = object({
57816
57878
  * `'unknown'` is the absence of an answer: the provider has not read the
57817
57879
  * power fields yet, or the firmware reported neither. Before it existed,
57818
57880
  * two unreadable fields produced `'none'`, and a camera nobody had reached
57819
- * was drawn "on battery alone" — the same D315 defect `percentage` closed
57881
+ * was drawn "on battery alone" — the same D315 defect `level` closed
57820
57882
  * by going nullable. Consumers SKIP it (no charger state published, no
57821
57883
  * glyph, no HomeKit ChargingState) rather than coerce it either way.
57822
57884
  */
@@ -57840,7 +57902,7 @@ var BatteryStatusSchema = object({
57840
57902
  * that only report charge. A second reading on this cap, not a second
57841
57903
  * `numeric-sensor` on the same device.
57842
57904
  */
57843
- volts: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
57905
+ voltage: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
57844
57906
  /**
57845
57907
  * Ms epoch of the last time the device PROVED it was reachable — a
57846
57908
  * completed firmware round-trip, an observed wake, or an inbound push
@@ -57874,7 +57936,7 @@ var BatteryStatusSchema = object({
57874
57936
  /**
57875
57937
  * True when the source is a BINARY low-battery indicator (HA
57876
57938
  * `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
57877
- * charge level — `percentage` is then a coarse stand-in (100 = normal,
57939
+ * charge level — `level` is then a coarse stand-in (100 = normal,
57878
57940
  * sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
57879
57941
  * misleading exact percentage. Absent/false → genuine 0–100 % reading.
57880
57942
  */
@@ -57900,19 +57962,19 @@ object({
57900
57962
  DeviceType.Sensor;
57901
57963
  object({
57902
57964
  /** Current level as 0..100 inclusive. Firmware-reported. */
57903
- percentage: number().min(0).max(100).meta(readingMeta("percentage")),
57965
+ level: number().min(0).max(100).meta(readingMeta("percentage")),
57904
57966
  /** Ms epoch of the last operator-driven change. Useful for UI freshness. */
57905
57967
  lastChangedAt: number()
57906
57968
  });
57907
57969
  DeviceType.Light, method(object({
57908
57970
  deviceId: number().int().nonnegative(),
57909
- percentage: number().min(0).max(100)
57971
+ level: number().min(0).max(100)
57910
57972
  }), _void(), {
57911
57973
  kind: "mutation",
57912
57974
  auth: "protected"
57913
57975
  }), object({
57914
57976
  deviceId: number(),
57915
- percentage: number().min(0).max(100),
57977
+ level: number().min(0).max(100),
57916
57978
  lastChangedAt: number()
57917
57979
  });
57918
57980
  DeviceType.Button, method(object({ deviceId: number().int().nonnegative() }), _void(), {
@@ -58413,11 +58475,11 @@ var ColorInputSchema = discriminatedUnion("mode", [
58413
58475
  }),
58414
58476
  object({
58415
58477
  mode: literal("mired"),
58416
- mireds: number().int().min(50).max(1e3)
58478
+ colorTemperature: number().int().min(50).max(1e3)
58417
58479
  })
58418
58480
  ]);
58419
58481
  object({
58420
- /** Active color mode — which of `rgb` / `hsv` / `mireds` reflects
58482
+ /** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
58421
58483
  * the bulb's current state. */
58422
58484
  mode: _enum([
58423
58485
  "rgb",
@@ -58429,7 +58491,7 @@ object({
58429
58491
  /** Populated when `mode === 'hsv'`. */
58430
58492
  hsv: HsvTripletSchema.optional(),
58431
58493
  /** Populated when `mode === 'mired'`. */
58432
- mireds: number().int().optional().meta(readingMeta("colour-temperature")),
58494
+ colorTemperature: number().int().optional().meta(readingMeta("colour-temperature")),
58433
58495
  /** Ms epoch of the last operator-driven change. */
58434
58496
  lastChangedAt: number()
58435
58497
  });
@@ -58448,7 +58510,7 @@ DeviceType.Light, method(object({
58448
58510
  ]),
58449
58511
  rgb: RgbTripletSchema.optional(),
58450
58512
  hsv: HsvTripletSchema.optional(),
58451
- mireds: number().int().optional(),
58513
+ colorTemperature: number().int().optional(),
58452
58514
  lastChangedAt: number()
58453
58515
  });
58454
58516
  var ConnectionTestOutcomeSchema = discriminatedUnion("outcome", [
@@ -58874,11 +58936,11 @@ object({
58874
58936
  /** Feature keys of the programs the appliance currently offers — drives the UI selector. */
58875
58937
  availablePrograms: array(string()),
58876
58938
  /** Seconds remaining on the active cycle, or null when not running / not known. */
58877
- remainingSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58939
+ remaining: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58878
58940
  /** Seconds the delayed start is set to (time until the cycle starts), or null. */
58879
- delayedStartSeconds: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58941
+ delayedStart: number().int().nonnegative().nullable().meta(readingMeta("duration")),
58880
58942
  /** Cycle completion 0..100, or null when not applicable. */
58881
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58943
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
58882
58944
  /** True when the door is reported open; null when the door state is not known. */
58883
58945
  doorOpen: boolean().nullable(),
58884
58946
  /** True when the door is latched (locked) during a cycle; null when not reported. */
@@ -59496,7 +59558,7 @@ var FanDirectionSchema = _enum(["forward", "reverse"]);
59496
59558
  object({
59497
59559
  /** Active speed as 0..100 inclusive. Null when the device has no
59498
59560
  * speed surface (single-speed fan). */
59499
- percentage: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59561
+ speed: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
59500
59562
  /** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
59501
59563
  * a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
59502
59564
  percentageStep: number().positive().optional().meta(readingMeta("percentage")),
@@ -59516,7 +59578,7 @@ object({
59516
59578
  });
59517
59579
  DeviceType.Fan, method(object({
59518
59580
  deviceId: number().int().nonnegative(),
59519
- percentage: number().min(0).max(100)
59581
+ speed: number().min(0).max(100)
59520
59582
  }), _void(), {
59521
59583
  kind: "mutation",
59522
59584
  auth: "protected"
@@ -59699,7 +59761,7 @@ DeviceType.Humidifier, method(object({
59699
59761
  });
59700
59762
  object({
59701
59763
  /** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
59702
- percent: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
59764
+ humidity: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
59703
59765
  precision: 0,
59704
59766
  label: "Humidity"
59705
59767
  })),
@@ -60142,7 +60204,7 @@ object({
60142
60204
  batteryLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
60143
60205
  /** 0..100 mowing-completion percentage of the current task, or null when no
60144
60206
  * task is active / progress is unavailable. */
60145
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
60207
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
60146
60208
  /** Current device/event code (dynamic — mostly status, sometimes an error),
60147
60209
  * or null when unknown. */
60148
60210
  currentCode: number().nullable().meta(readingMeta("none")),
@@ -60632,10 +60694,10 @@ object({
60632
60694
  currentMedia: MediaInfoSchema.nullable(),
60633
60695
  /** Current playback position in ms. Null when not seekable or
60634
60696
  * nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
60635
- positionMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60697
+ position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60636
60698
  /** Total duration of the current media in ms. Null when unknown
60637
60699
  * (live stream) or nothing is playing. */
60638
- durationMs: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60700
+ duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
60639
60701
  /** Shuffle toggle. Null when no shuffle surface.
60640
60702
  * Pair with `DeviceFeature.MediaPlayerShuffle`. */
60641
60703
  shuffle: boolean().nullable(),
@@ -60662,7 +60724,7 @@ DeviceType.MediaPlayer, method(object({ deviceId: number().int().nonnegative() }
60662
60724
  auth: "protected"
60663
60725
  }), method(object({
60664
60726
  deviceId: number().int().nonnegative(),
60665
- positionMs: number().int().nonnegative()
60727
+ position: number().int().nonnegative()
60666
60728
  }), _void(), {
60667
60729
  kind: "mutation",
60668
60730
  auth: "protected"
@@ -61335,9 +61397,9 @@ var NetworkLinkStatusSchema = object({
61335
61397
  * one whose reading has not landed must not be drawn at 0 %. Consumers
61336
61398
  * SKIP a null rather than coerce it.
61337
61399
  */
61338
- signalPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61400
+ signal: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
61339
61401
  /** Raw received signal strength in dBm, when the firmware reports one. */
61340
- rssiDbm: number().optional().meta(readingMeta("signal-level")),
61402
+ rssi: number().optional().meta(readingMeta("signal-level")),
61341
61403
  /** Network name of a wireless link, when the firmware reports it. */
61342
61404
  ssid: string().optional(),
61343
61405
  /** Ms epoch of the last observation. Lets consumers reason about freshness. */
@@ -62487,16 +62549,16 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
62487
62549
  auth: "admin"
62488
62550
  });
62489
62551
  object({
62490
- /** Instantaneous power draw in watts. */
62491
- watts: number().optional().meta(readingMeta("power", { label: "Power" })),
62552
+ /** Instantaneous power draw (watts). */
62553
+ power: number().optional().meta(readingMeta("power", { label: "Power" })),
62492
62554
  /** Cumulative energy in kilowatt-hours since the meter was reset. */
62493
- kwhTotal: number().optional().meta(readingMeta("energy", { label: "Energy" })),
62494
- /** Voltage in volts. */
62495
- volts: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
62555
+ energy: number().optional().meta(readingMeta("energy", { label: "Energy" })),
62556
+ /** Voltage (volts). */
62557
+ voltage: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
62496
62558
  /** Current in amperes. */
62497
- amps: number().optional().meta(readingMeta("current", { label: "Current" })),
62559
+ current: number().optional().meta(readingMeta("current", { label: "Current" })),
62498
62560
  /** Apparent power in volt-amperes. */
62499
- va: number().optional().meta(readingMeta("apparent-power")),
62561
+ apparentPower: number().optional().meta(readingMeta("apparent-power")),
62500
62562
  /** Power factor (0..1) if reported. */
62501
62563
  powerFactor: number().min(0).max(1).optional().meta(readingMeta("ratio")),
62502
62564
  /** Ms epoch when the slice was last updated. */
@@ -62551,16 +62613,13 @@ object({
62551
62613
  location: string().nullable(),
62552
62614
  /** GPS coordinates when available. Null otherwise. */
62553
62615
  gps: GpsLocationSchema.nullable(),
62554
- /** Optional battery level of the tracking device (0..100). Null
62555
- * when not reported. */
62556
- batteryPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
62557
62616
  /** Ms epoch when the slice was last updated. */
62558
62617
  lastChangedAt: number()
62559
62618
  });
62560
62619
  DeviceType.Presence;
62561
62620
  object({
62562
62621
  /** Current pressure in hPa. `null` when the sample was refused (D393). */
62563
- hpa: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
62622
+ pressure: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
62564
62623
  /** Ms epoch when the slice was last updated. */
62565
62624
  lastFetchedAt: number()
62566
62625
  });
@@ -65563,7 +65622,7 @@ object({
65563
65622
  DeviceType.Sensor;
65564
65623
  object({
65565
65624
  /** Current temperature in Celsius. `null` when the sample was refused (D393). */
65566
- celsius: number().nullable().meta(readingMeta("temperature", {
65625
+ temperature: number().nullable().meta(readingMeta("temperature", {
65567
65626
  precision: 1,
65568
65627
  label: "Temperature"
65569
65628
  })),
@@ -65827,7 +65886,7 @@ object({
65827
65886
  /** Speed tokens the hardware accepts — drives the UI selector. */
65828
65887
  availableFanSpeeds: array(string()),
65829
65888
  /** 0..100 cleaning-completion percentage of the current task, or null. */
65830
- progressPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65889
+ progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
65831
65890
  /** Current error code (0 / null = no error). */
65832
65891
  errorCode: number().nullable().meta(readingMeta("none")),
65833
65892
  /** Human label for {@link errorCode}, or null when none / undecodable. */
@@ -76895,7 +76954,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76895
76954
  label: t("Full brightness", "Luminosità massima"),
76896
76955
  phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
76897
76956
  icon: "sun",
76898
- args: { percentage: 100 }
76957
+ args: { level: 100 }
76899
76958
  },
76900
76959
  {
76901
76960
  id: "brightness.half",
@@ -76903,7 +76962,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76903
76962
  label: t("Half brightness", "Luminosità a metà"),
76904
76963
  phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
76905
76964
  icon: "sun-dim",
76906
- args: { percentage: 50 }
76965
+ args: { level: 50 }
76907
76966
  },
76908
76967
  {
76909
76968
  id: "brightness.off",
@@ -76911,16 +76970,16 @@ var ACTUATOR_CAP_VOCABULARY = {
76911
76970
  label: t("Brightness off", "Luminosità a zero"),
76912
76971
  phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
76913
76972
  icon: "lightbulb-off",
76914
- args: { percentage: 0 }
76973
+ args: { level: 0 }
76915
76974
  },
76916
76975
  {
76917
76976
  id: "brightness.set",
76918
76977
  method: "setBrightness",
76919
76978
  label: t("Set brightness", "Imposta la luminosità"),
76920
- phrase: t("Set the brightness of {device} to {percentage}", "Imposta la luminosità di {device} a {percentage}"),
76979
+ phrase: t("Set the brightness of {device} to {level}", "Imposta la luminosità di {device} a {level}"),
76921
76980
  icon: "sun-medium",
76922
76981
  openArgs: [{
76923
- key: "percentage",
76982
+ key: "level",
76924
76983
  label: PERCENT,
76925
76984
  offer: {
76926
76985
  kind: "number",
@@ -76934,13 +76993,13 @@ var ACTUATOR_CAP_VOCABULARY = {
76934
76993
  ],
76935
76994
  state: [{
76936
76995
  kind: "numeric",
76937
- field: "percentage",
76996
+ field: "level",
76938
76997
  quantity: t("the brightness", "la luminosità"),
76939
76998
  label: t("Brightness", "Luminosità"),
76940
76999
  unit: "%",
76941
77000
  icon: "sun"
76942
77001
  }],
76943
- events: { onBrightnessChanged: { notOperatorFacing: "the `percentage` state trigger reads the same change" } }
77002
+ events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
76944
77003
  },
76945
77004
  color: {
76946
77005
  scope: "device",
@@ -76954,7 +77013,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76954
77013
  icon: "sun",
76955
77014
  args: { color: {
76956
77015
  mode: "mired",
76957
- mireds: 370
77016
+ colorTemperature: 370
76958
77017
  } }
76959
77018
  },
76960
77019
  {
@@ -76965,7 +77024,7 @@ var ACTUATOR_CAP_VOCABULARY = {
76965
77024
  icon: "snowflake",
76966
77025
  args: { color: {
76967
77026
  mode: "mired",
76968
- mireds: 200
77027
+ colorTemperature: 200
76969
77028
  } }
76970
77029
  },
76971
77030
  {
@@ -77579,7 +77638,7 @@ var ACTUATOR_CAP_VOCABULARY = {
77579
77638
  label: t("Fan off", "Ventilatore spento"),
77580
77639
  phrase: t("Stop {device}", "Ferma {device}"),
77581
77640
  icon: "power-off",
77582
- args: { percentage: 0 }
77641
+ args: { speed: 0 }
77583
77642
  },
77584
77643
  {
77585
77644
  id: "fan.full",
@@ -77587,16 +77646,16 @@ var ACTUATOR_CAP_VOCABULARY = {
77587
77646
  label: t("Fan full", "Ventilatore al massimo"),
77588
77647
  phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
77589
77648
  icon: "fan",
77590
- args: { percentage: 100 }
77649
+ args: { speed: 100 }
77591
77650
  },
77592
77651
  {
77593
77652
  id: "fan.speed",
77594
77653
  method: "setPercentage",
77595
77654
  label: t("Set speed", "Imposta la velocità"),
77596
- phrase: t("Set the speed of {device} to {percentage}", "Imposta la velocità di {device} al {percentage}"),
77655
+ phrase: t("Set the speed of {device} to {speed}", "Imposta la velocità di {device} al {speed}"),
77597
77656
  icon: "fan",
77598
77657
  openArgs: [{
77599
- key: "percentage",
77658
+ key: "speed",
77600
77659
  label: t("Speed", "Velocità"),
77601
77660
  offer: {
77602
77661
  kind: "number",
@@ -77658,7 +77717,7 @@ var ACTUATOR_CAP_VOCABULARY = {
77658
77717
  ],
77659
77718
  state: [{
77660
77719
  kind: "numeric",
77661
- field: "percentage",
77720
+ field: "speed",
77662
77721
  quantity: t("the speed", "la velocità"),
77663
77722
  label: t("Speed", "Velocità"),
77664
77723
  unit: "%",
@@ -78456,7 +78515,7 @@ var APPLIANCE_CAP_VOCABULARY = {
78456
78515
  },
78457
78516
  {
78458
78517
  kind: "numeric",
78459
- field: "progressPercent",
78518
+ field: "progress",
78460
78519
  quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
78461
78520
  label: t("Progress", "Avanzamento"),
78462
78521
  unit: "%",
@@ -78814,10 +78873,10 @@ var APPLIANCE_CAP_VOCABULARY = {
78814
78873
  id: "media.seek",
78815
78874
  method: "seek",
78816
78875
  label: t("Seek", "Vai al punto"),
78817
- phrase: t("Move {device} to {positionMs}", "Porta {device} al punto {positionMs}"),
78876
+ phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
78818
78877
  icon: "fast-forward",
78819
78878
  openArgs: [{
78820
- key: "positionMs",
78879
+ key: "position",
78821
78880
  label: t("Position", "Posizione"),
78822
78881
  offer: {
78823
78882
  kind: "number",
@@ -79866,7 +79925,7 @@ var SENSOR_CAP_VOCABULARY = {
79866
79925
  state: [
79867
79926
  {
79868
79927
  kind: "numeric",
79869
- field: "co2Ppm",
79928
+ field: "co2",
79870
79929
  quantity: t("the CO₂", "la CO₂"),
79871
79930
  label: t("CO₂", "CO₂"),
79872
79931
  unit: "ppm",
@@ -79874,7 +79933,7 @@ var SENSOR_CAP_VOCABULARY = {
79874
79933
  },
79875
79934
  {
79876
79935
  kind: "numeric",
79877
- field: "vocPpb",
79936
+ field: "voc",
79878
79937
  quantity: t("the VOC level", "il livello di COV"),
79879
79938
  label: t("VOC", "COV"),
79880
79939
  unit: "ppb",
@@ -79910,7 +79969,7 @@ var SENSOR_CAP_VOCABULARY = {
79910
79969
  noun: t("Light level", "Luminosità ambiente"),
79911
79970
  state: [{
79912
79971
  kind: "numeric",
79913
- field: "lux",
79972
+ field: "illuminance",
79914
79973
  quantity: t("the light level", "la luminosità"),
79915
79974
  label: t("Illuminance", "Illuminamento"),
79916
79975
  unit: "lx",
@@ -80113,7 +80172,7 @@ var SENSOR_CAP_VOCABULARY = {
80113
80172
  noun: t("Humidity", "Umidità"),
80114
80173
  state: [{
80115
80174
  kind: "numeric",
80116
- field: "percent",
80175
+ field: "humidity",
80117
80176
  quantity: t("the humidity", "l’umidità"),
80118
80177
  label: t("Humidity", "Umidità"),
80119
80178
  unit: "%",
@@ -80161,7 +80220,7 @@ var SENSOR_CAP_VOCABULARY = {
80161
80220
  state: [
80162
80221
  {
80163
80222
  kind: "numeric",
80164
- field: "watts",
80223
+ field: "power",
80165
80224
  quantity: t("the power draw", "il consumo"),
80166
80225
  label: t("Power", "Potenza"),
80167
80226
  unit: "W",
@@ -80169,7 +80228,7 @@ var SENSOR_CAP_VOCABULARY = {
80169
80228
  },
80170
80229
  {
80171
80230
  kind: "numeric",
80172
- field: "kwhTotal",
80231
+ field: "energy",
80173
80232
  quantity: t("the energy used", "l’energia consumata"),
80174
80233
  label: t("Energy", "Energia"),
80175
80234
  unit: "kWh",
@@ -80177,7 +80236,7 @@ var SENSOR_CAP_VOCABULARY = {
80177
80236
  },
80178
80237
  {
80179
80238
  kind: "numeric",
80180
- field: "volts",
80239
+ field: "voltage",
80181
80240
  quantity: t("the voltage", "la tensione"),
80182
80241
  label: t("Voltage", "Tensione"),
80183
80242
  unit: "V",
@@ -80185,7 +80244,7 @@ var SENSOR_CAP_VOCABULARY = {
80185
80244
  },
80186
80245
  {
80187
80246
  kind: "numeric",
80188
- field: "amps",
80247
+ field: "current",
80189
80248
  quantity: t("the current", "la corrente"),
80190
80249
  label: t("Current", "Corrente"),
80191
80250
  unit: "A",
@@ -80202,13 +80261,6 @@ var SENSOR_CAP_VOCABULARY = {
80202
80261
  label: t("Where", "Posizione"),
80203
80262
  phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
80204
80263
  icon: "map-pin"
80205
- }, {
80206
- kind: "numeric",
80207
- field: "batteryPercent",
80208
- quantity: t("the phone battery", "la batteria del telefono"),
80209
- label: t("Battery", "Batteria"),
80210
- unit: "%",
80211
- icon: "battery"
80212
80264
  }]
80213
80265
  },
80214
80266
  "pressure-sensor": {
@@ -80216,7 +80268,7 @@ var SENSOR_CAP_VOCABULARY = {
80216
80268
  noun: t("Pressure", "Pressione"),
80217
80269
  state: [{
80218
80270
  kind: "numeric",
80219
- field: "hpa",
80271
+ field: "pressure",
80220
80272
  quantity: t("the pressure", "la pressione"),
80221
80273
  label: t("Pressure", "Pressione"),
80222
80274
  unit: "hPa",
@@ -80252,7 +80304,7 @@ var SENSOR_CAP_VOCABULARY = {
80252
80304
  noun: t("Temperature", "Temperatura"),
80253
80305
  state: [{
80254
80306
  kind: "numeric",
80255
- field: "celsius",
80307
+ field: "temperature",
80256
80308
  quantity: t("the temperature", "la temperatura"),
80257
80309
  label: t("Temperature", "Temperatura"),
80258
80310
  unit: "°C",
@@ -80323,7 +80375,7 @@ var SENSOR_CAP_VOCABULARY = {
80323
80375
  state: [
80324
80376
  {
80325
80377
  kind: "numeric",
80326
- field: "percentage",
80378
+ field: "level",
80327
80379
  quantity: t("the battery level", "il livello della batteria"),
80328
80380
  label: t("Battery", "Batteria"),
80329
80381
  unit: "%",
@@ -80365,7 +80417,7 @@ var SENSOR_CAP_VOCABULARY = {
80365
80417
  icon: "battery-charging"
80366
80418
  }
80367
80419
  ],
80368
- events: { onStatusChanged: { notOperatorFacing: "the percentage / sleeping / charging state triggers each read one field of this change" } },
80420
+ events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
80369
80421
  extraEvents: [{
80370
80422
  category: EventCategory.DeviceAwake,
80371
80423
  label: t("Woke up", "Risvegliato"),
@@ -80383,7 +80435,7 @@ var SENSOR_CAP_VOCABULARY = {
80383
80435
  noun: t("Network link", "Collegamento di rete"),
80384
80436
  state: [{
80385
80437
  kind: "numeric",
80386
- field: "signalPercent",
80438
+ field: "signal",
80387
80439
  quantity: t("the signal strength", "l’intensità del segnale"),
80388
80440
  label: t("Signal", "Segnale"),
80389
80441
  unit: "%",