@camstack/addon-model-studio 1.1.297 → 1.1.299

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/dist/{MotionZonesSettings-D_HfgGVx.mjs → MotionZonesSettings-sz-ODYZW.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-lrZujhrs.mjs → PrivacyMaskSettings-6vNqzYvt.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-D_k9w6y8.mjs → SceneMonitorEditor-DILUr4Mu.mjs} +3 -3
  4. package/dist/_stub.js +4312 -4226
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-U1Dq0t4d.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page--ME5lZcf.mjs} +3 -3
  6. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Dcmr_zC_.mjs +26 -0
  7. package/dist/{hostInit-lgxajgO5.mjs → hostInit-CtIHp-Co.mjs} +2 -2
  8. package/dist/model-studio.addon.js +446 -10
  9. package/dist/model-studio.addon.mjs +446 -10
  10. package/dist/{player-overlays-BErbmrZZ.mjs → player-overlays-D_Gu9LQG.mjs} +1 -1
  11. package/dist/remoteEntry.js +1 -1
  12. package/dist/{responsive-BaiZrRiv.mjs → responsive-EDVJCyVr.mjs} +1 -1
  13. package/dist/{scene-monitor-copy-DSS-RbWQ.mjs → scene-monitor-copy-CNS1lQNa.mjs} +1 -1
  14. package/dist/{square-CjAc_uJa.mjs → square-DmAYvpZY.mjs} +1 -1
  15. package/dist/{trash-2--He_-Iao.mjs → trash-2-C4LJKmdi.mjs} +1 -1
  16. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-ZIEWPFwu.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-brpqeKaY.mjs} +1 -1
  17. package/package.json +1 -1
  18. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DX4Jz8LK.mjs +0 -26
@@ -5829,7 +5829,7 @@ var ZodIssueCode = {
5829
5829
  var ZodFirstPartyTypeKind;
5830
5830
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5831
5831
  //#endregion
5832
- //#region ../types/dist/sleep-CARd6wZF.mjs
5832
+ //#region ../types/dist/sleep-B81gwQuR.mjs
5833
5833
  /**
5834
5834
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5835
5835
  * window to float samples (D455).
@@ -8355,6 +8355,53 @@ var READING_QUANTITIES = [
8355
8355
  ];
8356
8356
  var ReadingQuantitySchema = _enum(READING_QUANTITIES);
8357
8357
  new Set(READING_QUANTITIES);
8358
+ /**
8359
+ * Stored unit symbol for a quantity. `none` means the number is dimensionless
8360
+ * (or an index / ratio / count). `device` means the cap has no single unit.
8361
+ */
8362
+ var QUANTITY_BASE = {
8363
+ temperature: "°C",
8364
+ pressure: "hPa",
8365
+ speed: "m/s",
8366
+ precipitation: "mm",
8367
+ "precipitation-rate": "mm/h",
8368
+ length: "m",
8369
+ area: "m²",
8370
+ illuminance: "lx",
8371
+ irradiance: "W/m²",
8372
+ power: "W",
8373
+ energy: "kWh",
8374
+ voltage: "V",
8375
+ current: "A",
8376
+ "apparent-power": "VA",
8377
+ humidity: "%",
8378
+ percentage: "%",
8379
+ "concentration-volume": "ppm",
8380
+ "concentration-mass": "µg/m³",
8381
+ "concentration-ppb": "ppb",
8382
+ volume: "L",
8383
+ duration: "s",
8384
+ "duration-ms": "ms",
8385
+ information: "B",
8386
+ "sound-level": "dBFS",
8387
+ "signal-level": "dBm",
8388
+ "colour-temperature": "mired",
8389
+ angle: "°",
8390
+ bitrate: "kbps",
8391
+ rate: "fps",
8392
+ mass: "kg",
8393
+ index: "none",
8394
+ ratio: "none",
8395
+ count: "none",
8396
+ none: "none",
8397
+ device: "device"
8398
+ };
8399
+ /** The stored unit, or `undefined` when the quantity has no unit symbol. */
8400
+ function baseUnitOf(quantity) {
8401
+ const symbol = QUANTITY_BASE[quantity];
8402
+ if (symbol === "none" || symbol === "device") return void 0;
8403
+ return symbol;
8404
+ }
8358
8405
  function readingMeta(quantity, extras) {
8359
8406
  return {
8360
8407
  quantity,
@@ -8985,6 +9032,7 @@ var CAP_NAMES = Object.freeze([
8985
9032
  "filesystem-browse",
8986
9033
  "flood",
8987
9034
  "gas",
9035
+ "group-status",
8988
9036
  "heating-valve",
8989
9037
  "humidifier",
8990
9038
  "humidity-sensor",
@@ -9803,6 +9851,20 @@ Object.freeze({
9803
9851
  "path": "detected",
9804
9852
  "valueType": "boolean"
9805
9853
  }],
9854
+ "group-status": [
9855
+ {
9856
+ "path": "included",
9857
+ "valueType": "number"
9858
+ },
9859
+ {
9860
+ "path": "excluded",
9861
+ "valueType": "number"
9862
+ },
9863
+ {
9864
+ "path": "total",
9865
+ "valueType": "number"
9866
+ }
9867
+ ],
9806
9868
  "heating-valve": [{
9807
9869
  "path": "position",
9808
9870
  "valueType": "number"
@@ -11134,7 +11196,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
11134
11196
  return DeviceRole;
11135
11197
  }({});
11136
11198
  //#endregion
11137
- //#region ../types/dist/composition-kEl9mevu.mjs
11199
+ //#region ../types/dist/composition-B85l9j1M.mjs
11138
11200
  /**
11139
11201
  * The ffmpeg build every CamStack node downloads, per platform and arch.
11140
11202
  *
@@ -11889,15 +11951,67 @@ function validateExpressionSource(src) {
11889
11951
  }
11890
11952
  return null;
11891
11953
  }
11892
- /** A composed device's stableId is this prefix plus the block id. */
11893
- var COMPOSED_DEVICE_STABLE_ID_PREFIX = "composed-";
11894
- /** Longest snippet a `code` source may carry (slice 4). */
11895
- var MAX_COMPOSITION_CODE_LENGTH = 2e4;
11954
+ /**
11955
+ * A composition source identity: `(addonId, stableId)`, never a numeric device
11956
+ * id. Split out so helper schemas can name it without a cycle through
11957
+ * `composition.ts` (D659).
11958
+ */
11896
11959
  var CompositionSourceRefSchema = object({
11897
11960
  /** The owning addon; `stableId` is unique only within it. */
11898
11961
  addonId: string().min(1),
11899
11962
  stableId: string().min(1)
11900
11963
  });
11964
+ var GROUP_TEMPLATE_IDS = [
11965
+ "temperature",
11966
+ "humidity",
11967
+ "pressure",
11968
+ "illuminance",
11969
+ "power",
11970
+ "energy",
11971
+ "battery",
11972
+ "numeric",
11973
+ "motion",
11974
+ "contact",
11975
+ "leak",
11976
+ "smoke",
11977
+ "occupancy",
11978
+ "binary"
11979
+ ];
11980
+ var NUMERIC_AGGREGATES = [
11981
+ "mean",
11982
+ "median",
11983
+ "min",
11984
+ "max",
11985
+ "sum"
11986
+ ];
11987
+ var BINARY_AGGREGATES = ["any", "all"];
11988
+ var AGGREGATE_REDUCERS = [
11989
+ "mean",
11990
+ "median",
11991
+ "min",
11992
+ "max",
11993
+ "sum",
11994
+ "any",
11995
+ "all"
11996
+ ];
11997
+ var GroupTemplateIdSchema = _enum(GROUP_TEMPLATE_IDS);
11998
+ var AggregateReducerSchema = _enum(AGGREGATE_REDUCERS);
11999
+ /** One member. The field is stored so occupancy can name motion or binary. */
12000
+ var HelperMemberSchema = object({
12001
+ source: CompositionSourceRefSchema,
12002
+ cap: string().min(1),
12003
+ fieldPath: string().min(1)
12004
+ });
12005
+ var HelperSpecSchema = discriminatedUnion("kind", [object({
12006
+ kind: literal("group"),
12007
+ templateId: GroupTemplateIdSchema,
12008
+ aggregate: AggregateReducerSchema,
12009
+ members: array(HelperMemberSchema).min(1).max(64)
12010
+ })]);
12011
+ /** A composed device's stableId is this prefix plus the block id. */
12012
+ var COMPOSED_DEVICE_STABLE_ID_PREFIX = "composed-";
12013
+ /** Longest snippet a `code` source may carry (slice 4). */
12014
+ var MAX_COMPOSITION_CODE_LENGTH = 2e4;
11901
12015
  /** One field of one capability of one source device. */
11902
12016
  var CompositionFieldReadSchema = object({
11903
12017
  source: CompositionSourceRefSchema,
@@ -11941,7 +12055,33 @@ var CompositionCodeSourceSchema = object({
11941
12055
  var CompositionFieldSourceSchema = discriminatedUnion("kind", [
11942
12056
  CompositionFromSourceSchema,
11943
12057
  CompositionExpressionSourceSchema,
11944
- CompositionCodeSourceSchema
12058
+ CompositionCodeSourceSchema,
12059
+ object({
12060
+ kind: literal("aggregate"),
12061
+ reducer: _enum([
12062
+ "mean",
12063
+ "median",
12064
+ "min",
12065
+ "max",
12066
+ "sum",
12067
+ "any",
12068
+ "all"
12069
+ ]),
12070
+ reads: array(CompositionFieldReadSchema).min(1).max(64),
12071
+ /** `value` is the reading; the others are the member counts. */
12072
+ publish: _enum([
12073
+ "value",
12074
+ "included",
12075
+ "excluded",
12076
+ "total"
12077
+ ]),
12078
+ /** What a `value` publish does when nobody is included. Counts ignore this. */
12079
+ empty: _enum([
12080
+ "null",
12081
+ "omit",
12082
+ "offline"
12083
+ ])
12084
+ })
11945
12085
  ]);
11946
12086
  var CompositionCommandTargetSchema = discriminatedUnion("kind", [object({
11947
12087
  kind: literal("forward"),
@@ -11987,7 +12127,13 @@ var CompositionSchema = object({
11987
12127
  kind: literal("existing"),
11988
12128
  device: CompositionSourceRefSchema
11989
12129
  })]),
11990
- features: array(CompositionFeatureSchema).min(1).max(16)
12130
+ features: array(CompositionFeatureSchema).min(1).max(16),
12131
+ /**
12132
+ * Present when the block is a helper template. Absent on a free
12133
+ * composition (the room example, device 4603). The editor reads this,
12134
+ * never the compiled features.
12135
+ */
12136
+ helper: HelperSpecSchema.optional()
11991
12137
  }).superRefine((composition, ctx) => {
11992
12138
  const seen = /* @__PURE__ */ new Set();
11993
12139
  composition.features.forEach((feature, index) => {
@@ -18246,7 +18392,10 @@ var CompositionProblemSchema = object({
18246
18392
  "target-missing",
18247
18393
  "target-unreadable",
18248
18394
  "not-replaceable",
18249
- "native-capability-replace"
18395
+ "native-capability-replace",
18396
+ "mixed-quantity",
18397
+ "helper-mismatch",
18398
+ "member-constraint"
18250
18399
  ]),
18251
18400
  path: string(),
18252
18401
  message: string()
@@ -18267,7 +18416,8 @@ var CompositionUnavailableModeSchema = _enum([
18267
18416
  "null",
18268
18417
  "offline",
18269
18418
  "unknown",
18270
- "release"
18419
+ "release",
18420
+ "omit"
18271
18421
  ]);
18272
18422
  /**
18273
18423
  * `derived` reads a source · `clock` reads only `now`, recomputed when a sibling
@@ -18481,6 +18631,235 @@ Object.freeze({
18481
18631
  result: ["number", "null"]
18482
18632
  }
18483
18633
  });
18634
+ /**
18635
+ * One catalog row per base reading a group helper can build (D944 §3).
18636
+ * Data, not a form default written into the block.
18637
+ */
18638
+ var NOW = {
18639
+ fieldPath: "lastFetchedAt",
18640
+ expr: "now"
18641
+ };
18642
+ var CHANGED = {
18643
+ fieldPath: "lastChangedAt",
18644
+ expr: "now"
18645
+ };
18646
+ function numeric(input) {
18647
+ return {
18648
+ ...input,
18649
+ family: "numeric",
18650
+ deviceType: DeviceType.Sensor,
18651
+ memberDeviceType: DeviceType.Sensor,
18652
+ baseUnit: baseUnitOf(input.quantity),
18653
+ aggregates: NUMERIC_AGGREGATES,
18654
+ accept: [{
18655
+ cap: input.outputCap,
18656
+ fieldPath: input.outputField
18657
+ }]
18658
+ };
18659
+ }
18660
+ function binary(input) {
18661
+ return {
18662
+ ...input,
18663
+ family: "binary",
18664
+ deviceType: DeviceType.Sensor,
18665
+ memberDeviceType: DeviceType.Sensor,
18666
+ quantity: "none",
18667
+ baseUnit: void 0,
18668
+ aggregates: BINARY_AGGREGATES,
18669
+ empty: "offline"
18670
+ };
18671
+ }
18672
+ var GROUP_TEMPLATES = [
18673
+ numeric({
18674
+ id: "temperature",
18675
+ summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
18676
+ role: DeviceRole.TemperatureSensor,
18677
+ outputCap: "temperature-sensor",
18678
+ outputField: "celsius",
18679
+ quantity: "temperature",
18680
+ defaultAggregate: "mean",
18681
+ empty: "null",
18682
+ companions: [NOW]
18683
+ }),
18684
+ numeric({
18685
+ id: "humidity",
18686
+ summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
18687
+ role: DeviceRole.HumiditySensor,
18688
+ outputCap: "humidity-sensor",
18689
+ outputField: "percent",
18690
+ quantity: "humidity",
18691
+ defaultAggregate: "mean",
18692
+ empty: "null",
18693
+ companions: [NOW]
18694
+ }),
18695
+ numeric({
18696
+ id: "pressure",
18697
+ summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
18698
+ role: DeviceRole.PressureSensor,
18699
+ outputCap: "pressure-sensor",
18700
+ outputField: "hpa",
18701
+ quantity: "pressure",
18702
+ defaultAggregate: "mean",
18703
+ empty: "null",
18704
+ companions: [NOW]
18705
+ }),
18706
+ numeric({
18707
+ id: "illuminance",
18708
+ summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
18709
+ role: DeviceRole.AmbientLightSensor,
18710
+ outputCap: "ambient-light-sensor",
18711
+ outputField: "lux",
18712
+ quantity: "illuminance",
18713
+ defaultAggregate: "mean",
18714
+ empty: "null",
18715
+ companions: [NOW]
18716
+ }),
18717
+ numeric({
18718
+ id: "power",
18719
+ summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
18720
+ role: DeviceRole.PowerSensor,
18721
+ outputCap: "power-meter",
18722
+ outputField: "watts",
18723
+ quantity: "power",
18724
+ defaultAggregate: "sum",
18725
+ empty: "omit",
18726
+ companions: [NOW]
18727
+ }),
18728
+ numeric({
18729
+ id: "energy",
18730
+ summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
18731
+ role: DeviceRole.EnergySensor,
18732
+ outputCap: "power-meter",
18733
+ outputField: "kwhTotal",
18734
+ quantity: "energy",
18735
+ defaultAggregate: "sum",
18736
+ empty: "omit",
18737
+ companions: [NOW]
18738
+ }),
18739
+ numeric({
18740
+ id: "battery",
18741
+ summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
18742
+ role: DeviceRole.BatterySensor,
18743
+ outputCap: "battery",
18744
+ outputField: "percentage",
18745
+ quantity: "percentage",
18746
+ defaultAggregate: "mean",
18747
+ empty: "null",
18748
+ companions: [
18749
+ {
18750
+ fieldPath: "charging",
18751
+ expr: "\"unknown\""
18752
+ },
18753
+ {
18754
+ fieldPath: "sleeping",
18755
+ expr: "false"
18756
+ },
18757
+ {
18758
+ fieldPath: "lastUpdated",
18759
+ expr: "now"
18760
+ }
18761
+ ]
18762
+ }),
18763
+ numeric({
18764
+ id: "numeric",
18765
+ summary: "A numeric reading in the members’ shared quantity. Mixed quantities are refused. Nobody reporting publishes null, not 0.",
18766
+ role: DeviceRole.NumericSensor,
18767
+ outputCap: "numeric-sensor",
18768
+ outputField: "value",
18769
+ quantity: "device",
18770
+ defaultAggregate: "mean",
18771
+ empty: "null",
18772
+ companions: [NOW]
18773
+ }),
18774
+ binary({
18775
+ id: "motion",
18776
+ summary: "Any or all motion. Offline and unknown members are left out, never read as off. Nobody reporting takes the device offline.",
18777
+ role: DeviceRole.MotionSensor,
18778
+ outputCap: "motion",
18779
+ outputField: "detected",
18780
+ defaultAggregate: "any",
18781
+ accept: [{
18782
+ cap: "motion",
18783
+ fieldPath: "detected"
18784
+ }],
18785
+ companions: [{
18786
+ fieldPath: "lastDetectedAt",
18787
+ expr: "null"
18788
+ }, {
18789
+ fieldPath: "autoClearAfterMs",
18790
+ expr: "null"
18791
+ }]
18792
+ }),
18793
+ binary({
18794
+ id: "contact",
18795
+ summary: "Any or all open contacts. Offline and unknown members are left out, never read as closed.",
18796
+ role: DeviceRole.ContactSensor,
18797
+ outputCap: "contact",
18798
+ outputField: "entryOpen",
18799
+ defaultAggregate: "any",
18800
+ accept: [{
18801
+ cap: "contact",
18802
+ fieldPath: "entryOpen"
18803
+ }],
18804
+ companions: [CHANGED]
18805
+ }),
18806
+ binary({
18807
+ id: "leak",
18808
+ summary: "Any or all leak detections. Offline and unknown members are left out, never read as dry.",
18809
+ role: DeviceRole.LeakSensor,
18810
+ outputCap: "flood",
18811
+ outputField: "flooded",
18812
+ defaultAggregate: "any",
18813
+ accept: [{
18814
+ cap: "flood",
18815
+ fieldPath: "flooded"
18816
+ }],
18817
+ companions: [CHANGED]
18818
+ }),
18819
+ binary({
18820
+ id: "smoke",
18821
+ summary: "Any or all smoke detections. Offline and unknown members are left out, never read as clear.",
18822
+ role: DeviceRole.SmokeSensor,
18823
+ outputCap: "smoke",
18824
+ outputField: "detected",
18825
+ defaultAggregate: "any",
18826
+ accept: [{
18827
+ cap: "smoke",
18828
+ fieldPath: "detected"
18829
+ }],
18830
+ companions: [CHANGED]
18831
+ }),
18832
+ binary({
18833
+ id: "occupancy",
18834
+ summary: "Any or all of motion or binary sensors, published as a binary. Presence zones are not aggregated. Nobody reporting is offline, not off.",
18835
+ role: DeviceRole.BinarySensor,
18836
+ outputCap: "binary",
18837
+ outputField: "on",
18838
+ defaultAggregate: "any",
18839
+ accept: [{
18840
+ cap: "motion",
18841
+ fieldPath: "detected"
18842
+ }, {
18843
+ cap: "binary",
18844
+ fieldPath: "on"
18845
+ }],
18846
+ companions: [CHANGED]
18847
+ }),
18848
+ binary({
18849
+ id: "binary",
18850
+ summary: "Any or all generic binary sensors. Offline and unknown members are left out, never read as off.",
18851
+ role: DeviceRole.BinarySensor,
18852
+ outputCap: "binary",
18853
+ outputField: "on",
18854
+ defaultAggregate: "any",
18855
+ accept: [{
18856
+ cap: "binary",
18857
+ fieldPath: "on"
18858
+ }],
18859
+ companions: [CHANGED]
18860
+ })
18861
+ ];
18862
+ new Map(GROUP_TEMPLATES.map((template) => [template.id, template]));
18484
18863
  `${COMPOSED_DEVICE_STABLE_ID_PREFIX}`;
18485
18864
  /**
18486
18865
  * What a composition may BUILD on a device type (G2, D676): the caps a new
@@ -58335,6 +58714,24 @@ object({
58335
58714
  lastChangedAt: number()
58336
58715
  });
58337
58716
  DeviceType.Sensor;
58717
+ object({
58718
+ /** Members whose current value entered the aggregate. */
58719
+ included: number().int().nonnegative().meta(readingMeta("count", {
58720
+ precision: 0,
58721
+ label: "Reporting"
58722
+ })),
58723
+ /** Members left out: offline, unknown, or not a finite reading (D393). */
58724
+ excluded: number().int().nonnegative().meta(readingMeta("count", {
58725
+ precision: 0,
58726
+ label: "Excluded"
58727
+ })),
58728
+ /** `included` + `excluded`. */
58729
+ total: number().int().nonnegative().meta(readingMeta("count", {
58730
+ precision: 0,
58731
+ label: "Members"
58732
+ }))
58733
+ });
58734
+ DeviceType.Sensor;
58338
58735
  object({
58339
58736
  /** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
58340
58737
  position: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
@@ -68712,6 +69109,13 @@ Object.freeze({
68712
69109
  access: "view",
68713
69110
  role: "viewer"
68714
69111
  },
69112
+ "groupStatus.getStatus": {
69113
+ capName: "group-status",
69114
+ capScope: "device",
69115
+ addonId: null,
69116
+ access: "view",
69117
+ role: "viewer"
69118
+ },
68715
69119
  "heatingValve.getStatus": {
68716
69120
  capName: "heating-valve",
68717
69121
  capScope: "device",
@@ -78534,6 +78938,33 @@ var SENSOR_CAP_VOCABULARY = {
78534
78938
  icon: "flame"
78535
78939
  }]
78536
78940
  },
78941
+ "group-status": {
78942
+ scope: "device",
78943
+ noun: t("Group", "Gruppo"),
78944
+ state: [
78945
+ {
78946
+ kind: "numeric",
78947
+ field: "included",
78948
+ quantity: t("the members reporting", "i membri che rispondono"),
78949
+ label: t("Reporting", "Rispondono"),
78950
+ icon: "users"
78951
+ },
78952
+ {
78953
+ kind: "numeric",
78954
+ field: "excluded",
78955
+ quantity: t("the members left out", "i membri esclusi"),
78956
+ label: t("Excluded", "Esclusi"),
78957
+ icon: "users"
78958
+ },
78959
+ {
78960
+ kind: "numeric",
78961
+ field: "total",
78962
+ quantity: t("the member count", "il numero di membri"),
78963
+ label: t("Members", "Membri"),
78964
+ icon: "sigma"
78965
+ }
78966
+ ]
78967
+ },
78537
78968
  "humidity-sensor": {
78538
78969
  scope: "device",
78539
78970
  noun: t("Humidity", "Umidità"),
@@ -79999,6 +80430,11 @@ Object.freeze({
79999
80430
  form: "single",
80000
80431
  optional: false
80001
80432
  }],
80433
+ "groupStatus.getStatus": [{
80434
+ name: "deviceId",
80435
+ form: "single",
80436
+ optional: false
80437
+ }],
80002
80438
  "heatingValve.getStatus": [{
80003
80439
  name: "deviceId",
80004
80440
  form: "single",