@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.
- package/dist/{clip-model-registry-CoH7ORtC.mjs → clip-model-registry-DdgT3gdf.mjs} +287 -24
- package/dist/{clip-model-registry-Dj3lrvL2.js → clip-model-registry-lKeBMKlT.js} +287 -24
- package/dist/embedding-encoder/index.js +1 -1
- package/dist/embedding-encoder/index.mjs +1 -1
- package/dist/pipeline-analytics/_stub.js +2 -2
- 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
- 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
- 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
- package/dist/pipeline-analytics/{hostInit-j1gxJvS7.mjs → hostInit-CDPfOUWf.mjs} +2 -2
- package/dist/pipeline-analytics/index.js +58 -10
- package/dist/pipeline-analytics/index.mjs +58 -10
- package/dist/pipeline-analytics/remoteEntry.js +1 -1
- package/package.json +1 -1
- 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
|
|
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:
|
|
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-
|
|
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
|
|
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
|
-
})
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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
|
-
|
|
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
|
-
|
|
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: [
|
|
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",
|