@camstack/addon-post-analysis 1.2.642 → 1.2.643

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 (14) hide show
  1. package/dist/{clip-model-registry-CoH7ORtC.mjs → clip-model-registry-DdgT3gdf.mjs} +287 -24
  2. package/dist/{clip-model-registry-Dj3lrvL2.js → clip-model-registry-lKeBMKlT.js} +287 -24
  3. package/dist/embedding-encoder/index.js +1 -1
  4. package/dist/embedding-encoder/index.mjs +1 -1
  5. package/dist/pipeline-analytics/_stub.js +2 -2
  6. package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-Dhan9FH4.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-B6X8TAQP.mjs} +2 -2
  7. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BIjXlrFH.mjs +26 -0
  8. package/dist/pipeline-analytics/{_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CuNXxDlT.mjs → _virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js--XkysBjS.mjs} +1 -1
  9. package/dist/pipeline-analytics/{hostInit-j1gxJvS7.mjs → hostInit-CDPfOUWf.mjs} +2 -2
  10. package/dist/pipeline-analytics/index.js +58 -10
  11. package/dist/pipeline-analytics/index.mjs +58 -10
  12. package/dist/pipeline-analytics/remoteEntry.js +1 -1
  13. package/package.json +1 -1
  14. package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-_TUthUZh.mjs +0 -26
@@ -5640,7 +5640,7 @@ var ZodIssueCode = {
5640
5640
  var ZodFirstPartyTypeKind;
5641
5641
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5642
5642
  //#endregion
5643
- //#region ../types/dist/sleep-0sD_LHLI.mjs
5643
+ //#region ../types/dist/sleep--jXS9hWo.mjs
5644
5644
  /**
5645
5645
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5646
5646
  * window to float samples (D455).
@@ -9061,6 +9061,7 @@ var CAP_NAMES = Object.freeze([
9061
9061
  "filesystem-browse",
9062
9062
  "flood",
9063
9063
  "gas",
9064
+ "group-active",
9064
9065
  "group-commands",
9065
9066
  "group-status",
9066
9067
  "heating-valve",
@@ -9882,6 +9883,10 @@ Object.freeze({
9882
9883
  "path": "detected",
9883
9884
  "valueType": "boolean"
9884
9885
  }],
9886
+ "group-active": [{
9887
+ "path": "active",
9888
+ "valueType": "boolean"
9889
+ }],
9885
9890
  "group-status": [
9886
9891
  {
9887
9892
  "path": "included",
@@ -10890,7 +10895,7 @@ Object.freeze({
10890
10895
  * can answer "may a rule actuate this?" without importing the schema barrel
10891
10896
  * (~144MB RSS per runner, D28).
10892
10897
  *
10893
- * Coverage: 94 device-scoped capabilities.
10898
+ * Coverage: 95 device-scoped capabilities.
10894
10899
  */
10895
10900
  var DEVICE_SCOPED_CAPS = new Set([
10896
10901
  "accessories",
@@ -10931,6 +10936,7 @@ var DEVICE_SCOPED_CAPS = new Set([
10931
10936
  "feature-probe",
10932
10937
  "flood",
10933
10938
  "gas",
10939
+ "group-active",
10934
10940
  "group-commands",
10935
10941
  "group-status",
10936
10942
  "heating-valve",
@@ -11391,7 +11397,7 @@ function errMsg(err) {
11391
11397
  return String(err);
11392
11398
  }
11393
11399
  //#endregion
11394
- //#region ../types/dist/composition-CpETZ4HL.mjs
11400
+ //#region ../types/dist/composition-Bb8iwHEJ.mjs
11395
11401
  /**
11396
11402
  * Deterministic SHA-256 hash of an arbitrary serialisable value. The
11397
11403
  * canonical form sorts object keys alphabetically at every depth so two
@@ -11866,6 +11872,13 @@ var table = {
11866
11872
  apply: () => {
11867
11873
  throw new ExpressionEvalError("latchedAt: stateful evaluation context is required");
11868
11874
  }
11875
+ },
11876
+ schmitt: {
11877
+ minArgs: 3,
11878
+ maxArgs: 5,
11879
+ apply: () => {
11880
+ throw new ExpressionEvalError("schmitt: stateful evaluation context is required");
11881
+ }
11869
11882
  }
11870
11883
  };
11871
11884
  Object.freeze(Object.assign(Object.create(null), table));
@@ -12376,7 +12389,7 @@ var RESET_PERIODS = [
12376
12389
  5 * MINUTE_MS;
12377
12390
  24 * HOUR_MS, 2 * DAY_MS, 7 * DAY_MS, 30 * DAY_MS;
12378
12391
  7 * DAY_MS, 30 * DAY_MS, 365 * DAY_MS;
12379
- var StatisticWindowSchema = discriminatedUnion("kind", [object({
12392
+ var rollingWindowObject = object({
12380
12393
  kind: literal("rolling"),
12381
12394
  span: _enum(ROLLING_SPANS),
12382
12395
  customMinutes: number().int().min(5).optional()
@@ -12393,7 +12406,9 @@ var StatisticWindowSchema = discriminatedUnion("kind", [object({
12393
12406
  path: ["customMinutes"],
12394
12407
  input: payload.value
12395
12408
  });
12396
- }), object({
12409
+ });
12410
+ var RollingWindowSchema = rollingWindowObject;
12411
+ var StatisticWindowSchema = discriminatedUnion("kind", [rollingWindowObject, object({
12397
12412
  kind: literal("calendar"),
12398
12413
  period: _enum(CALENDAR_PERIODS)
12399
12414
  })]);
@@ -12423,7 +12438,13 @@ var GROUP_TEMPLATE_IDS = [
12423
12438
  "occupancy",
12424
12439
  "binary",
12425
12440
  "switch",
12426
- "light"
12441
+ "light",
12442
+ "fan",
12443
+ "cover",
12444
+ "valve",
12445
+ "lock",
12446
+ "media-player",
12447
+ "climate"
12427
12448
  ];
12428
12449
  var NUMERIC_AGGREGATES = [
12429
12450
  "mean",
@@ -12482,6 +12503,42 @@ var HelperSpecSchema = discriminatedUnion("kind", [
12482
12503
  reset: _enum(RESET_PERIODS),
12483
12504
  output: _enum(["energy", "meter"]),
12484
12505
  source: HelperMemberSchema
12506
+ }),
12507
+ object({
12508
+ kind: literal("threshold"),
12509
+ source: HelperMemberSchema,
12510
+ high: number(),
12511
+ low: number(),
12512
+ onForMs: number().int().nonnegative(),
12513
+ offForMs: number().int().nonnegative()
12514
+ }),
12515
+ object({
12516
+ kind: literal("arithmetic"),
12517
+ op: _enum([
12518
+ "sum",
12519
+ "difference",
12520
+ "ratio"
12521
+ ]),
12522
+ inputs: array(HelperMemberSchema).min(2).max(64)
12523
+ }),
12524
+ object({
12525
+ kind: literal("expression"),
12526
+ expr: string().min(1),
12527
+ inputs: array(object({
12528
+ name: string().min(1),
12529
+ member: HelperMemberSchema
12530
+ })).min(1).max(64),
12531
+ output: _enum(["number", "boolean"])
12532
+ }),
12533
+ object({
12534
+ kind: literal("derivative"),
12535
+ window: RollingWindowSchema,
12536
+ per: _enum([
12537
+ "second",
12538
+ "minute",
12539
+ "hour"
12540
+ ]),
12541
+ source: HelperMemberSchema
12485
12542
  })
12486
12543
  ]);
12487
12544
  /** A composed device's stableId is this prefix plus the block id. */
@@ -12544,6 +12601,12 @@ var CompositionFieldSourceSchema = discriminatedUnion("kind", [
12544
12601
  "all"
12545
12602
  ]),
12546
12603
  reads: array(CompositionFieldReadSchema).min(1).max(64),
12604
+ /**
12605
+ * Set when the reads are an enum state, not a yes/no: the listed states
12606
+ * count as active (a cover is `open`). A state outside the list is inactive;
12607
+ * a read that is not a state at all is left out. Only `any` / `all` use it.
12608
+ */
12609
+ activeWhen: array(string().min(1)).min(1).optional(),
12547
12610
  /** `value` is the reading; the others are the member counts. */
12548
12611
  publish: _enum([
12549
12612
  "value",
@@ -19859,13 +19922,17 @@ Object.freeze({
19859
19922
  latchedAt: {
19860
19923
  kind: "fixed",
19861
19924
  result: ["number", "null"]
19925
+ },
19926
+ schmitt: {
19927
+ kind: "fixed",
19928
+ result: ["boolean", "null"]
19862
19929
  }
19863
19930
  });
19864
19931
  /**
19865
19932
  * One catalog row per base reading a group helper can build (D944 §3).
19866
19933
  * Data, not a form default written into the block.
19867
19934
  */
19868
- var NOW$1 = {
19935
+ var NOW$2 = {
19869
19936
  fieldPath: "lastFetchedAt",
19870
19937
  expr: "now"
19871
19938
  };
@@ -19879,6 +19946,8 @@ function numeric(input) {
19879
19946
  family: "numeric",
19880
19947
  deviceType: DeviceType.Sensor,
19881
19948
  memberDeviceType: DeviceType.Sensor,
19949
+ memberDeviceTypes: [DeviceType.Sensor],
19950
+ activeWhen: void 0,
19882
19951
  commandCaps: [],
19883
19952
  baseUnit: baseUnitOf(input.quantity),
19884
19953
  aggregates: NUMERIC_AGGREGATES,
@@ -19894,6 +19963,8 @@ function binary(input) {
19894
19963
  family: "binary",
19895
19964
  deviceType: DeviceType.Sensor,
19896
19965
  memberDeviceType: DeviceType.Sensor,
19966
+ memberDeviceTypes: [DeviceType.Sensor],
19967
+ activeWhen: void 0,
19897
19968
  commandCaps: [],
19898
19969
  quantity: "none",
19899
19970
  baseUnit: void 0,
@@ -19911,7 +19982,7 @@ var GROUP_TEMPLATES = [
19911
19982
  quantity: "temperature",
19912
19983
  defaultAggregate: "mean",
19913
19984
  empty: "null",
19914
- companions: [NOW$1]
19985
+ companions: [NOW$2]
19915
19986
  }),
19916
19987
  numeric({
19917
19988
  id: "humidity",
@@ -19922,7 +19993,7 @@ var GROUP_TEMPLATES = [
19922
19993
  quantity: "humidity",
19923
19994
  defaultAggregate: "mean",
19924
19995
  empty: "null",
19925
- companions: [NOW$1]
19996
+ companions: [NOW$2]
19926
19997
  }),
19927
19998
  numeric({
19928
19999
  id: "pressure",
@@ -19933,7 +20004,7 @@ var GROUP_TEMPLATES = [
19933
20004
  quantity: "pressure",
19934
20005
  defaultAggregate: "mean",
19935
20006
  empty: "null",
19936
- companions: [NOW$1]
20007
+ companions: [NOW$2]
19937
20008
  }),
19938
20009
  numeric({
19939
20010
  id: "illuminance",
@@ -19944,7 +20015,7 @@ var GROUP_TEMPLATES = [
19944
20015
  quantity: "illuminance",
19945
20016
  defaultAggregate: "mean",
19946
20017
  empty: "null",
19947
- companions: [NOW$1]
20018
+ companions: [NOW$2]
19948
20019
  }),
19949
20020
  numeric({
19950
20021
  id: "power",
@@ -19955,7 +20026,7 @@ var GROUP_TEMPLATES = [
19955
20026
  quantity: "power",
19956
20027
  defaultAggregate: "sum",
19957
20028
  empty: "omit",
19958
- companions: [NOW$1]
20029
+ companions: [NOW$2]
19959
20030
  }),
19960
20031
  numeric({
19961
20032
  id: "energy",
@@ -19966,7 +20037,7 @@ var GROUP_TEMPLATES = [
19966
20037
  quantity: "energy",
19967
20038
  defaultAggregate: "sum",
19968
20039
  empty: "omit",
19969
- companions: [NOW$1]
20040
+ companions: [NOW$2]
19970
20041
  }),
19971
20042
  numeric({
19972
20043
  id: "battery",
@@ -20001,7 +20072,7 @@ var GROUP_TEMPLATES = [
20001
20072
  quantity: "device",
20002
20073
  defaultAggregate: "mean",
20003
20074
  empty: "null",
20004
- companions: [NOW$1]
20075
+ companions: [NOW$2]
20005
20076
  }),
20006
20077
  binary({
20007
20078
  id: "motion",
@@ -20095,6 +20166,11 @@ var GROUP_TEMPLATES = [
20095
20166
  summary: "On when at least one switch is on, or when all of them are. Offline and unknown members are left out of that decision, never read as off, and still receive the command.",
20096
20167
  deviceType: DeviceType.Switch,
20097
20168
  outputCap: "switch",
20169
+ outputField: "on",
20170
+ member: {
20171
+ cap: "switch",
20172
+ fieldPath: "on"
20173
+ },
20098
20174
  commandCaps: ["switch"]
20099
20175
  }),
20100
20176
  actuator({
@@ -20102,29 +20178,130 @@ var GROUP_TEMPLATES = [
20102
20178
  summary: "On when at least one light is on, or when all of them are. Brightness and colour are offered only when every member has them. A command is not sent to a member that lacks it.",
20103
20179
  deviceType: DeviceType.Light,
20104
20180
  outputCap: "switch",
20181
+ outputField: "on",
20182
+ member: {
20183
+ cap: "switch",
20184
+ fieldPath: "on"
20185
+ },
20105
20186
  commandCaps: [
20106
20187
  "switch",
20107
20188
  "brightness",
20108
20189
  "color"
20109
20190
  ]
20191
+ }),
20192
+ actuator({
20193
+ id: "fan",
20194
+ summary: "On when at least one fan is on, or when all of them are. Speed, preset, direction and oscillation are offered only when every fan has them. A command is not sent to a fan that lacks it.",
20195
+ deviceType: DeviceType.Fan,
20196
+ outputCap: "switch",
20197
+ outputField: "on",
20198
+ member: {
20199
+ cap: "switch",
20200
+ fieldPath: "on"
20201
+ },
20202
+ commandCaps: ["switch", "fan-control"]
20203
+ }),
20204
+ actuator({
20205
+ id: "cover",
20206
+ summary: "Open when at least one cover is open or part-open, or only when all of them are. Position and tilt are offered only when every cover has them. A cover that reports nothing is left out, never read as closed.",
20207
+ deviceType: DeviceType.Cover,
20208
+ outputCap: "group-active",
20209
+ outputField: "active",
20210
+ member: {
20211
+ cap: "cover",
20212
+ fieldPath: "state"
20213
+ },
20214
+ activeWhen: [
20215
+ "open",
20216
+ "opening",
20217
+ "stopped"
20218
+ ],
20219
+ commandCaps: ["cover"]
20220
+ }),
20221
+ actuator({
20222
+ id: "valve",
20223
+ summary: "Open when at least one valve is open or part-open, or only when all of them are. Position is offered only when every valve has it. A valve that reports nothing is left out, never read as closed.",
20224
+ deviceType: DeviceType.Valve,
20225
+ outputCap: "group-active",
20226
+ outputField: "active",
20227
+ member: {
20228
+ cap: "valve",
20229
+ fieldPath: "state"
20230
+ },
20231
+ activeWhen: [
20232
+ "open",
20233
+ "opening",
20234
+ "stopped"
20235
+ ],
20236
+ commandCaps: ["valve"]
20237
+ }),
20238
+ actuator({
20239
+ id: "lock",
20240
+ summary: "Locked when at least one lock is locked, or only when all of them are. A jammed or moving lock is not locked. Locking is one tap; unlocking the group needs a confirmation every time, and nothing is sent without it.",
20241
+ deviceType: DeviceType.Lock,
20242
+ outputCap: "group-active",
20243
+ outputField: "active",
20244
+ member: {
20245
+ cap: "lock-control",
20246
+ fieldPath: "state"
20247
+ },
20248
+ activeWhen: ["locked"],
20249
+ commandCaps: ["lock-control"]
20250
+ }),
20251
+ actuator({
20252
+ id: "media-player",
20253
+ summary: "Playing when at least one player is playing, or only when all of them are. Volume is offered only when every player has it. A player that reports nothing is left out, never read as stopped.",
20254
+ deviceType: DeviceType.MediaPlayer,
20255
+ outputCap: "group-active",
20256
+ outputField: "active",
20257
+ member: {
20258
+ cap: "media-player",
20259
+ fieldPath: "state"
20260
+ },
20261
+ activeWhen: ["playing", "buffering"],
20262
+ commandCaps: ["media-player"]
20263
+ }),
20264
+ actuator({
20265
+ id: "climate",
20266
+ summary: "Running when at least one thermostat or air conditioner is not off, or only when all of them are. Target temperature and fan are offered only when every device has them. A device that reports nothing is left out, never read as off.",
20267
+ deviceType: DeviceType.Thermostat,
20268
+ memberDeviceTypes: [DeviceType.Thermostat, DeviceType.Climate],
20269
+ outputCap: "group-active",
20270
+ outputField: "active",
20271
+ member: {
20272
+ cap: "climate-control",
20273
+ fieldPath: "mode"
20274
+ },
20275
+ activeWhen: [
20276
+ "heat",
20277
+ "cool",
20278
+ "auto",
20279
+ "heat_cool",
20280
+ "fan_only",
20281
+ "dry"
20282
+ ],
20283
+ commandCaps: ["climate-control"]
20110
20284
  })
20111
20285
  ];
20112
20286
  function actuator(input) {
20113
20287
  return {
20114
- ...input,
20288
+ id: input.id,
20289
+ summary: input.summary,
20290
+ deviceType: input.deviceType,
20291
+ outputCap: input.outputCap,
20292
+ outputField: input.outputField,
20293
+ commandCaps: input.commandCaps,
20115
20294
  family: "actuator",
20116
20295
  role: void 0,
20117
20296
  memberDeviceType: input.deviceType,
20118
- outputField: "on",
20297
+ memberDeviceTypes: input.memberDeviceTypes ?? [input.deviceType],
20298
+ activeWhen: input.activeWhen,
20119
20299
  quantity: "none",
20120
20300
  baseUnit: void 0,
20121
20301
  aggregates: BINARY_AGGREGATES,
20122
20302
  defaultAggregate: "any",
20123
20303
  empty: "offline",
20124
- accept: [{
20125
- cap: "switch",
20126
- fieldPath: "on"
20127
- }],
20304
+ accept: [input.member],
20128
20305
  companions: [CHANGED]
20129
20306
  };
20130
20307
  }
@@ -63727,7 +63904,17 @@ var groupCommandsCapability = {
63727
63904
  scope: "device",
63728
63905
  deviceNative: true,
63729
63906
  mode: "singleton",
63730
- deviceTypes: [DeviceType.Switch, DeviceType.Light],
63907
+ deviceTypes: [
63908
+ DeviceType.Switch,
63909
+ DeviceType.Light,
63910
+ DeviceType.Fan,
63911
+ DeviceType.Cover,
63912
+ DeviceType.Valve,
63913
+ DeviceType.Lock,
63914
+ DeviceType.MediaPlayer,
63915
+ DeviceType.Thermostat,
63916
+ DeviceType.Climate
63917
+ ],
63731
63918
  methods: {},
63732
63919
  status: {
63733
63920
  schema: GroupCommandsSchema,
@@ -63745,6 +63932,49 @@ var groupCommandsCapability = {
63745
63932
  history: "none"
63746
63933
  };
63747
63934
  /**
63935
+ * Whether a helper actuator group counts as active (D944): at least one
63936
+ * included member is, or every included member is. What "active" means is the
63937
+ * type's: a cover is open, a lock is locked, a media player is playing, a
63938
+ * climate device is not off. A group of lights, switches and fans reports
63939
+ * `switch.on` instead; this cap is for the types whose own state is not a
63940
+ * yes/no. Unknown members are left out (`group-status` counts them) and an
63941
+ * empty included set takes the device offline, never `active: false`.
63942
+ */
63943
+ var GroupActiveSchema = object({
63944
+ active: boolean().meta({ label: "Active" }),
63945
+ /** Ms epoch when the slice was last updated. */
63946
+ lastChangedAt: number()
63947
+ });
63948
+ var groupActiveCapability = {
63949
+ name: "group-active",
63950
+ scope: "device",
63951
+ deviceNative: true,
63952
+ mode: "singleton",
63953
+ deviceTypes: [
63954
+ DeviceType.Cover,
63955
+ DeviceType.Valve,
63956
+ DeviceType.Lock,
63957
+ DeviceType.MediaPlayer,
63958
+ DeviceType.Climate,
63959
+ DeviceType.Thermostat
63960
+ ],
63961
+ methods: {},
63962
+ status: {
63963
+ schema: GroupActiveSchema,
63964
+ kind: "push"
63965
+ },
63966
+ runtimeState: GroupActiveSchema,
63967
+ /**
63968
+ * Runtime-state durability: **session** — recomputed from the members on the
63969
+ * next source event; a restored value would outlive the members it named.
63970
+ *
63971
+ * See `RuntimeStateDurability`. Enforced by
63972
+ * `scripts/check-runtime-state-durability.ts`.
63973
+ */
63974
+ durability: "session",
63975
+ history: "none"
63976
+ };
63977
+ /**
63748
63978
  * How many members of a helper group answered (D944). Counts are integers,
63749
63979
  * not measurements: zero included is a real count, never a stand-in reading.
63750
63980
  * The reading itself stays on the output capability. History is none — the
@@ -63775,7 +64005,14 @@ var groupStatusCapability = {
63775
64005
  deviceTypes: [
63776
64006
  DeviceType.Sensor,
63777
64007
  DeviceType.Switch,
63778
- DeviceType.Light
64008
+ DeviceType.Light,
64009
+ DeviceType.Fan,
64010
+ DeviceType.Cover,
64011
+ DeviceType.Valve,
64012
+ DeviceType.Lock,
64013
+ DeviceType.MediaPlayer,
64014
+ DeviceType.Thermostat,
64015
+ DeviceType.Climate
63779
64016
  ],
63780
64017
  methods: {},
63781
64018
  status: {
@@ -65069,7 +65306,14 @@ var lockControlCapability = {
65069
65306
  }),
65070
65307
  unlock: method(object({
65071
65308
  deviceId: number().int().nonnegative(),
65072
- code: string().min(1).optional()
65309
+ code: string().min(1).optional(),
65310
+ /**
65311
+ * Honoured by a helper lock GROUP only (D944): unlocking several doors
65312
+ * with one call is refused unless the caller says it was confirmed. A
65313
+ * single lock ignores it. The refusal lives in the callee, so no
65314
+ * automation or API caller reaches the doors by skipping a dialog.
65315
+ */
65316
+ confirm: boolean().optional()
65073
65317
  }), _void(), {
65074
65318
  kind: "mutation",
65075
65319
  auth: "protected"
@@ -71014,7 +71258,8 @@ var switchCapability = {
71014
71258
  deviceTypes: [
71015
71259
  DeviceType.Switch,
71016
71260
  DeviceType.Siren,
71017
- DeviceType.Light
71261
+ DeviceType.Light,
71262
+ DeviceType.Fan
71018
71263
  ],
71019
71264
  methods: { setState: method(object({
71020
71265
  deviceId: number(),
@@ -73227,6 +73472,7 @@ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" })
73227
73472
  kind: "mutation",
73228
73473
  auth: "admin"
73229
73474
  });
73475
+ DeviceFeature.FanSpeed, DeviceFeature.FanPreset, DeviceFeature.FanDirection, DeviceFeature.FanOscillating, DeviceFeature.CoverPositionable, DeviceFeature.CoverTilt, DeviceFeature.ValvePositionable, DeviceFeature.MediaPlayerVolume, DeviceFeature.ClimateFanMode;
73230
73476
  SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
73231
73477
  DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher, DeviceType.Washer, DeviceType.Dryer, DeviceType.Camera, DeviceType.Camera, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
73232
73478
  String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
@@ -73610,6 +73856,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
73610
73856
  featureProbe: featureProbeCapability,
73611
73857
  flood: floodCapability,
73612
73858
  gas: gasCapability,
73859
+ groupActive: groupActiveCapability,
73613
73860
  groupCommands: groupCommandsCapability,
73614
73861
  groupStatus: groupStatusCapability,
73615
73862
  heatingValve: heatingValveCapability,
@@ -77621,6 +77868,13 @@ Object.freeze({
77621
77868
  access: "view",
77622
77869
  role: "viewer"
77623
77870
  },
77871
+ "groupActive.getStatus": {
77872
+ capName: "group-active",
77873
+ capScope: "device",
77874
+ addonId: null,
77875
+ access: "view",
77876
+ role: "viewer"
77877
+ },
77624
77878
  "groupCommands.getStatus": {
77625
77879
  capName: "group-commands",
77626
77880
  capScope: "device",
@@ -87496,6 +87750,10 @@ var SENSOR_CAP_VOCABULARY = {
87496
87750
  icon: "flame"
87497
87751
  }]
87498
87752
  },
87753
+ "group-active": {
87754
+ scope: "device",
87755
+ noun: t("Group state", "Stato del gruppo")
87756
+ },
87499
87757
  "group-commands": {
87500
87758
  scope: "device",
87501
87759
  noun: t("Group command", "Comando di gruppo")
@@ -89042,6 +89300,11 @@ Object.freeze({
89042
89300
  form: "single",
89043
89301
  optional: false
89044
89302
  }],
89303
+ "groupActive.getStatus": [{
89304
+ name: "deviceId",
89305
+ form: "single",
89306
+ optional: false
89307
+ }],
89045
89308
  "groupCommands.getStatus": [{
89046
89309
  name: "deviceId",
89047
89310
  form: "single",