@camstack/addon-post-analysis 1.2.641 → 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-Cw7Iy7Qi.mjs → clip-model-registry-DdgT3gdf.mjs} +301 -25
- package/dist/{clip-model-registry-Qr0XipkX.js → clip-model-registry-lKeBMKlT.js} +301 -25
- 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-Cct0TMzC.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-B9c2FowI.mjs → hostInit-CDPfOUWf.mjs} +2 -2
- package/dist/pipeline-analytics/index.js +411 -15
- package/dist/pipeline-analytics/index.mjs +411 -15
- 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
|
}
|
|
@@ -48242,7 +48419,20 @@ var NcRuleInputSchema = object({
|
|
|
48242
48419
|
* save by the hub's grouping guard). `.optional()`, never `.default()`: the addon cap
|
|
48243
48420
|
* path does not run Zod defaults.
|
|
48244
48421
|
*/
|
|
48245
|
-
groupingSec: number().int().min(5).max(60).optional()
|
|
48422
|
+
groupingSec: number().int().min(5).max(60).optional(),
|
|
48423
|
+
/**
|
|
48424
|
+
* ASK ME TO CONFIRM DETECTIONS (#243): a DETECTION notification of this rule
|
|
48425
|
+
* carries "Correct" / "Wrong" buttons (and, where the channel has room, a
|
|
48426
|
+
* "Wrong, it is a <class>" choice). A tap marks the track for retraining, the
|
|
48427
|
+
* same mark the Library writes, and records whose notification it was and
|
|
48428
|
+
* when. A channel with no buttons gets the same two choices as links.
|
|
48429
|
+
*
|
|
48430
|
+
* `.optional()`, never `.default()` (a Zod default does not run on the addon
|
|
48431
|
+
* cap path): absent and `false` both mean off, which is what every rule
|
|
48432
|
+
* authored before this field meant. An editor turns it off by writing
|
|
48433
|
+
* `false`, so it needs no `clear` key.
|
|
48434
|
+
*/
|
|
48435
|
+
askVerdict: boolean().optional()
|
|
48246
48436
|
});
|
|
48247
48437
|
/**
|
|
48248
48438
|
* Partial patch for `updateRule` — any subset of the input fields, plus the
|
|
@@ -63714,7 +63904,17 @@ var groupCommandsCapability = {
|
|
|
63714
63904
|
scope: "device",
|
|
63715
63905
|
deviceNative: true,
|
|
63716
63906
|
mode: "singleton",
|
|
63717
|
-
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
|
+
],
|
|
63718
63918
|
methods: {},
|
|
63719
63919
|
status: {
|
|
63720
63920
|
schema: GroupCommandsSchema,
|
|
@@ -63732,6 +63932,49 @@ var groupCommandsCapability = {
|
|
|
63732
63932
|
history: "none"
|
|
63733
63933
|
};
|
|
63734
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
|
+
/**
|
|
63735
63978
|
* How many members of a helper group answered (D944). Counts are integers,
|
|
63736
63979
|
* not measurements: zero included is a real count, never a stand-in reading.
|
|
63737
63980
|
* The reading itself stays on the output capability. History is none — the
|
|
@@ -63762,7 +64005,14 @@ var groupStatusCapability = {
|
|
|
63762
64005
|
deviceTypes: [
|
|
63763
64006
|
DeviceType.Sensor,
|
|
63764
64007
|
DeviceType.Switch,
|
|
63765
|
-
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
|
|
63766
64016
|
],
|
|
63767
64017
|
methods: {},
|
|
63768
64018
|
status: {
|
|
@@ -65056,7 +65306,14 @@ var lockControlCapability = {
|
|
|
65056
65306
|
}),
|
|
65057
65307
|
unlock: method(object({
|
|
65058
65308
|
deviceId: number().int().nonnegative(),
|
|
65059
|
-
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()
|
|
65060
65317
|
}), _void(), {
|
|
65061
65318
|
kind: "mutation",
|
|
65062
65319
|
auth: "protected"
|
|
@@ -71001,7 +71258,8 @@ var switchCapability = {
|
|
|
71001
71258
|
deviceTypes: [
|
|
71002
71259
|
DeviceType.Switch,
|
|
71003
71260
|
DeviceType.Siren,
|
|
71004
|
-
DeviceType.Light
|
|
71261
|
+
DeviceType.Light,
|
|
71262
|
+
DeviceType.Fan
|
|
71005
71263
|
],
|
|
71006
71264
|
methods: { setState: method(object({
|
|
71007
71265
|
deviceId: number(),
|
|
@@ -73214,6 +73472,7 @@ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" })
|
|
|
73214
73472
|
kind: "mutation",
|
|
73215
73473
|
auth: "admin"
|
|
73216
73474
|
});
|
|
73475
|
+
DeviceFeature.FanSpeed, DeviceFeature.FanPreset, DeviceFeature.FanDirection, DeviceFeature.FanOscillating, DeviceFeature.CoverPositionable, DeviceFeature.CoverTilt, DeviceFeature.ValvePositionable, DeviceFeature.MediaPlayerVolume, DeviceFeature.ClimateFanMode;
|
|
73217
73476
|
SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
|
|
73218
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;
|
|
73219
73478
|
String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
|
|
@@ -73597,6 +73856,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
|
|
|
73597
73856
|
featureProbe: featureProbeCapability,
|
|
73598
73857
|
flood: floodCapability,
|
|
73599
73858
|
gas: gasCapability,
|
|
73859
|
+
groupActive: groupActiveCapability,
|
|
73600
73860
|
groupCommands: groupCommandsCapability,
|
|
73601
73861
|
groupStatus: groupStatusCapability,
|
|
73602
73862
|
heatingValve: heatingValveCapability,
|
|
@@ -77608,6 +77868,13 @@ Object.freeze({
|
|
|
77608
77868
|
access: "view",
|
|
77609
77869
|
role: "viewer"
|
|
77610
77870
|
},
|
|
77871
|
+
"groupActive.getStatus": {
|
|
77872
|
+
capName: "group-active",
|
|
77873
|
+
capScope: "device",
|
|
77874
|
+
addonId: null,
|
|
77875
|
+
access: "view",
|
|
77876
|
+
role: "viewer"
|
|
77877
|
+
},
|
|
77611
77878
|
"groupCommands.getStatus": {
|
|
77612
77879
|
capName: "group-commands",
|
|
77613
77880
|
capScope: "device",
|
|
@@ -87483,6 +87750,10 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
87483
87750
|
icon: "flame"
|
|
87484
87751
|
}]
|
|
87485
87752
|
},
|
|
87753
|
+
"group-active": {
|
|
87754
|
+
scope: "device",
|
|
87755
|
+
noun: t("Group state", "Stato del gruppo")
|
|
87756
|
+
},
|
|
87486
87757
|
"group-commands": {
|
|
87487
87758
|
scope: "device",
|
|
87488
87759
|
noun: t("Group command", "Comando di gruppo")
|
|
@@ -89029,6 +89300,11 @@ Object.freeze({
|
|
|
89029
89300
|
form: "single",
|
|
89030
89301
|
optional: false
|
|
89031
89302
|
}],
|
|
89303
|
+
"groupActive.getStatus": [{
|
|
89304
|
+
name: "deviceId",
|
|
89305
|
+
form: "single",
|
|
89306
|
+
optional: false
|
|
89307
|
+
}],
|
|
89032
89308
|
"groupCommands.getStatus": [{
|
|
89033
89309
|
name: "deviceId",
|
|
89034
89310
|
form: "single",
|