@camstack/addon-model-studio 1.1.305 → 1.1.306
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/{MotionZonesSettings-nwsYJ4LM.mjs → MotionZonesSettings-BdAF3Lx2.mjs} +2 -2
- package/dist/{PrivacyMaskSettings-D44t-3Il.mjs → PrivacyMaskSettings-bRMKWnGr.mjs} +4 -4
- package/dist/{SceneMonitorEditor-B7GPFInk.mjs → SceneMonitorEditor-DffVOhzN.mjs} +3 -3
- package/dist/_stub.js +130 -129
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-Dm-CsmsB.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-DVVRygHY.mjs} +3 -3
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CsIeC3fr.mjs +26 -0
- package/dist/{hostInit-BCkvpKIY.mjs → hostInit-fNjQtgdi.mjs} +2 -2
- package/dist/model-studio.addon.js +243 -24
- package/dist/model-studio.addon.mjs +243 -24
- package/dist/{player-overlays-BmekT-lx.mjs → player-overlays-BQux3aXS.mjs} +1 -1
- package/dist/remoteEntry.js +1 -1
- package/dist/{responsive-DEe2tyvb.mjs → responsive-BOS8RfJa.mjs} +1 -1
- package/dist/{scene-monitor-copy-0SI6bJjg.mjs → scene-monitor-copy-CaVNQakt.mjs} +1 -1
- package/dist/{square-_3D14YQf.mjs → square-DCA-7eaY.mjs} +1 -1
- package/dist/{trash-2-CBnastSw.mjs → trash-2-DYZFq4gu.mjs} +1 -1
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-BVMDXJrt.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CWXLGHpz.mjs} +1 -1
- package/package.json +1 -1
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-B5mcgboO.mjs +0 -26
|
@@ -5811,7 +5811,7 @@ var ZodIssueCode = {
|
|
|
5811
5811
|
var ZodFirstPartyTypeKind;
|
|
5812
5812
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5813
5813
|
//#endregion
|
|
5814
|
-
//#region ../types/dist/sleep
|
|
5814
|
+
//#region ../types/dist/sleep--jXS9hWo.mjs
|
|
5815
5815
|
/**
|
|
5816
5816
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5817
5817
|
* window to float samples (D455).
|
|
@@ -9014,6 +9014,7 @@ var CAP_NAMES = Object.freeze([
|
|
|
9014
9014
|
"filesystem-browse",
|
|
9015
9015
|
"flood",
|
|
9016
9016
|
"gas",
|
|
9017
|
+
"group-active",
|
|
9017
9018
|
"group-commands",
|
|
9018
9019
|
"group-status",
|
|
9019
9020
|
"heating-valve",
|
|
@@ -9835,6 +9836,10 @@ Object.freeze({
|
|
|
9835
9836
|
"path": "detected",
|
|
9836
9837
|
"valueType": "boolean"
|
|
9837
9838
|
}],
|
|
9839
|
+
"group-active": [{
|
|
9840
|
+
"path": "active",
|
|
9841
|
+
"valueType": "boolean"
|
|
9842
|
+
}],
|
|
9838
9843
|
"group-status": [
|
|
9839
9844
|
{
|
|
9840
9845
|
"path": "included",
|
|
@@ -11190,7 +11195,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
|
|
|
11190
11195
|
return DeviceRole;
|
|
11191
11196
|
}({});
|
|
11192
11197
|
//#endregion
|
|
11193
|
-
//#region ../types/dist/composition-
|
|
11198
|
+
//#region ../types/dist/composition-Bb8iwHEJ.mjs
|
|
11194
11199
|
/**
|
|
11195
11200
|
* The ffmpeg build every CamStack node downloads, per platform and arch.
|
|
11196
11201
|
*
|
|
@@ -11505,6 +11510,13 @@ var table = {
|
|
|
11505
11510
|
apply: () => {
|
|
11506
11511
|
throw new ExpressionEvalError("latchedAt: stateful evaluation context is required");
|
|
11507
11512
|
}
|
|
11513
|
+
},
|
|
11514
|
+
schmitt: {
|
|
11515
|
+
minArgs: 3,
|
|
11516
|
+
maxArgs: 5,
|
|
11517
|
+
apply: () => {
|
|
11518
|
+
throw new ExpressionEvalError("schmitt: stateful evaluation context is required");
|
|
11519
|
+
}
|
|
11508
11520
|
}
|
|
11509
11521
|
};
|
|
11510
11522
|
Object.freeze(Object.assign(Object.create(null), table));
|
|
@@ -12015,7 +12027,7 @@ var RESET_PERIODS = [
|
|
|
12015
12027
|
5 * MINUTE_MS;
|
|
12016
12028
|
24 * HOUR_MS, 2 * DAY_MS, 7 * DAY_MS, 30 * DAY_MS;
|
|
12017
12029
|
7 * DAY_MS, 30 * DAY_MS, 365 * DAY_MS;
|
|
12018
|
-
var
|
|
12030
|
+
var rollingWindowObject = object({
|
|
12019
12031
|
kind: literal("rolling"),
|
|
12020
12032
|
span: _enum(ROLLING_SPANS),
|
|
12021
12033
|
customMinutes: number().int().min(5).optional()
|
|
@@ -12032,7 +12044,9 @@ var StatisticWindowSchema = discriminatedUnion("kind", [object({
|
|
|
12032
12044
|
path: ["customMinutes"],
|
|
12033
12045
|
input: payload.value
|
|
12034
12046
|
});
|
|
12035
|
-
})
|
|
12047
|
+
});
|
|
12048
|
+
var RollingWindowSchema = rollingWindowObject;
|
|
12049
|
+
var StatisticWindowSchema = discriminatedUnion("kind", [rollingWindowObject, object({
|
|
12036
12050
|
kind: literal("calendar"),
|
|
12037
12051
|
period: _enum(CALENDAR_PERIODS)
|
|
12038
12052
|
})]);
|
|
@@ -12062,7 +12076,13 @@ var GROUP_TEMPLATE_IDS = [
|
|
|
12062
12076
|
"occupancy",
|
|
12063
12077
|
"binary",
|
|
12064
12078
|
"switch",
|
|
12065
|
-
"light"
|
|
12079
|
+
"light",
|
|
12080
|
+
"fan",
|
|
12081
|
+
"cover",
|
|
12082
|
+
"valve",
|
|
12083
|
+
"lock",
|
|
12084
|
+
"media-player",
|
|
12085
|
+
"climate"
|
|
12066
12086
|
];
|
|
12067
12087
|
var NUMERIC_AGGREGATES = [
|
|
12068
12088
|
"mean",
|
|
@@ -12121,6 +12141,42 @@ var HelperSpecSchema = discriminatedUnion("kind", [
|
|
|
12121
12141
|
reset: _enum(RESET_PERIODS),
|
|
12122
12142
|
output: _enum(["energy", "meter"]),
|
|
12123
12143
|
source: HelperMemberSchema
|
|
12144
|
+
}),
|
|
12145
|
+
object({
|
|
12146
|
+
kind: literal("threshold"),
|
|
12147
|
+
source: HelperMemberSchema,
|
|
12148
|
+
high: number(),
|
|
12149
|
+
low: number(),
|
|
12150
|
+
onForMs: number().int().nonnegative(),
|
|
12151
|
+
offForMs: number().int().nonnegative()
|
|
12152
|
+
}),
|
|
12153
|
+
object({
|
|
12154
|
+
kind: literal("arithmetic"),
|
|
12155
|
+
op: _enum([
|
|
12156
|
+
"sum",
|
|
12157
|
+
"difference",
|
|
12158
|
+
"ratio"
|
|
12159
|
+
]),
|
|
12160
|
+
inputs: array(HelperMemberSchema).min(2).max(64)
|
|
12161
|
+
}),
|
|
12162
|
+
object({
|
|
12163
|
+
kind: literal("expression"),
|
|
12164
|
+
expr: string().min(1),
|
|
12165
|
+
inputs: array(object({
|
|
12166
|
+
name: string().min(1),
|
|
12167
|
+
member: HelperMemberSchema
|
|
12168
|
+
})).min(1).max(64),
|
|
12169
|
+
output: _enum(["number", "boolean"])
|
|
12170
|
+
}),
|
|
12171
|
+
object({
|
|
12172
|
+
kind: literal("derivative"),
|
|
12173
|
+
window: RollingWindowSchema,
|
|
12174
|
+
per: _enum([
|
|
12175
|
+
"second",
|
|
12176
|
+
"minute",
|
|
12177
|
+
"hour"
|
|
12178
|
+
]),
|
|
12179
|
+
source: HelperMemberSchema
|
|
12124
12180
|
})
|
|
12125
12181
|
]);
|
|
12126
12182
|
/** A composed device's stableId is this prefix plus the block id. */
|
|
@@ -12183,6 +12239,12 @@ var CompositionFieldSourceSchema = discriminatedUnion("kind", [
|
|
|
12183
12239
|
"all"
|
|
12184
12240
|
]),
|
|
12185
12241
|
reads: array(CompositionFieldReadSchema).min(1).max(64),
|
|
12242
|
+
/**
|
|
12243
|
+
* Set when the reads are an enum state, not a yes/no: the listed states
|
|
12244
|
+
* count as active (a cover is `open`). A state outside the list is inactive;
|
|
12245
|
+
* a read that is not a state at all is left out. Only `any` / `all` use it.
|
|
12246
|
+
*/
|
|
12247
|
+
activeWhen: array(string().min(1)).min(1).optional(),
|
|
12186
12248
|
/** `value` is the reading; the others are the member counts. */
|
|
12187
12249
|
publish: _enum([
|
|
12188
12250
|
"value",
|
|
@@ -18765,13 +18827,17 @@ Object.freeze({
|
|
|
18765
18827
|
latchedAt: {
|
|
18766
18828
|
kind: "fixed",
|
|
18767
18829
|
result: ["number", "null"]
|
|
18830
|
+
},
|
|
18831
|
+
schmitt: {
|
|
18832
|
+
kind: "fixed",
|
|
18833
|
+
result: ["boolean", "null"]
|
|
18768
18834
|
}
|
|
18769
18835
|
});
|
|
18770
18836
|
/**
|
|
18771
18837
|
* One catalog row per base reading a group helper can build (D944 §3).
|
|
18772
18838
|
* Data, not a form default written into the block.
|
|
18773
18839
|
*/
|
|
18774
|
-
var NOW$
|
|
18840
|
+
var NOW$2 = {
|
|
18775
18841
|
fieldPath: "lastFetchedAt",
|
|
18776
18842
|
expr: "now"
|
|
18777
18843
|
};
|
|
@@ -18785,6 +18851,8 @@ function numeric(input) {
|
|
|
18785
18851
|
family: "numeric",
|
|
18786
18852
|
deviceType: DeviceType.Sensor,
|
|
18787
18853
|
memberDeviceType: DeviceType.Sensor,
|
|
18854
|
+
memberDeviceTypes: [DeviceType.Sensor],
|
|
18855
|
+
activeWhen: void 0,
|
|
18788
18856
|
commandCaps: [],
|
|
18789
18857
|
baseUnit: baseUnitOf(input.quantity),
|
|
18790
18858
|
aggregates: NUMERIC_AGGREGATES,
|
|
@@ -18800,6 +18868,8 @@ function binary(input) {
|
|
|
18800
18868
|
family: "binary",
|
|
18801
18869
|
deviceType: DeviceType.Sensor,
|
|
18802
18870
|
memberDeviceType: DeviceType.Sensor,
|
|
18871
|
+
memberDeviceTypes: [DeviceType.Sensor],
|
|
18872
|
+
activeWhen: void 0,
|
|
18803
18873
|
commandCaps: [],
|
|
18804
18874
|
quantity: "none",
|
|
18805
18875
|
baseUnit: void 0,
|
|
@@ -18817,7 +18887,7 @@ var GROUP_TEMPLATES = [
|
|
|
18817
18887
|
quantity: "temperature",
|
|
18818
18888
|
defaultAggregate: "mean",
|
|
18819
18889
|
empty: "null",
|
|
18820
|
-
companions: [NOW$
|
|
18890
|
+
companions: [NOW$2]
|
|
18821
18891
|
}),
|
|
18822
18892
|
numeric({
|
|
18823
18893
|
id: "humidity",
|
|
@@ -18828,7 +18898,7 @@ var GROUP_TEMPLATES = [
|
|
|
18828
18898
|
quantity: "humidity",
|
|
18829
18899
|
defaultAggregate: "mean",
|
|
18830
18900
|
empty: "null",
|
|
18831
|
-
companions: [NOW$
|
|
18901
|
+
companions: [NOW$2]
|
|
18832
18902
|
}),
|
|
18833
18903
|
numeric({
|
|
18834
18904
|
id: "pressure",
|
|
@@ -18839,7 +18909,7 @@ var GROUP_TEMPLATES = [
|
|
|
18839
18909
|
quantity: "pressure",
|
|
18840
18910
|
defaultAggregate: "mean",
|
|
18841
18911
|
empty: "null",
|
|
18842
|
-
companions: [NOW$
|
|
18912
|
+
companions: [NOW$2]
|
|
18843
18913
|
}),
|
|
18844
18914
|
numeric({
|
|
18845
18915
|
id: "illuminance",
|
|
@@ -18850,7 +18920,7 @@ var GROUP_TEMPLATES = [
|
|
|
18850
18920
|
quantity: "illuminance",
|
|
18851
18921
|
defaultAggregate: "mean",
|
|
18852
18922
|
empty: "null",
|
|
18853
|
-
companions: [NOW$
|
|
18923
|
+
companions: [NOW$2]
|
|
18854
18924
|
}),
|
|
18855
18925
|
numeric({
|
|
18856
18926
|
id: "power",
|
|
@@ -18861,7 +18931,7 @@ var GROUP_TEMPLATES = [
|
|
|
18861
18931
|
quantity: "power",
|
|
18862
18932
|
defaultAggregate: "sum",
|
|
18863
18933
|
empty: "omit",
|
|
18864
|
-
companions: [NOW$
|
|
18934
|
+
companions: [NOW$2]
|
|
18865
18935
|
}),
|
|
18866
18936
|
numeric({
|
|
18867
18937
|
id: "energy",
|
|
@@ -18872,7 +18942,7 @@ var GROUP_TEMPLATES = [
|
|
|
18872
18942
|
quantity: "energy",
|
|
18873
18943
|
defaultAggregate: "sum",
|
|
18874
18944
|
empty: "omit",
|
|
18875
|
-
companions: [NOW$
|
|
18945
|
+
companions: [NOW$2]
|
|
18876
18946
|
}),
|
|
18877
18947
|
numeric({
|
|
18878
18948
|
id: "battery",
|
|
@@ -18907,7 +18977,7 @@ var GROUP_TEMPLATES = [
|
|
|
18907
18977
|
quantity: "device",
|
|
18908
18978
|
defaultAggregate: "mean",
|
|
18909
18979
|
empty: "null",
|
|
18910
|
-
companions: [NOW$
|
|
18980
|
+
companions: [NOW$2]
|
|
18911
18981
|
}),
|
|
18912
18982
|
binary({
|
|
18913
18983
|
id: "motion",
|
|
@@ -19001,6 +19071,11 @@ var GROUP_TEMPLATES = [
|
|
|
19001
19071
|
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.",
|
|
19002
19072
|
deviceType: DeviceType.Switch,
|
|
19003
19073
|
outputCap: "switch",
|
|
19074
|
+
outputField: "on",
|
|
19075
|
+
member: {
|
|
19076
|
+
cap: "switch",
|
|
19077
|
+
fieldPath: "on"
|
|
19078
|
+
},
|
|
19004
19079
|
commandCaps: ["switch"]
|
|
19005
19080
|
}),
|
|
19006
19081
|
actuator({
|
|
@@ -19008,29 +19083,130 @@ var GROUP_TEMPLATES = [
|
|
|
19008
19083
|
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.",
|
|
19009
19084
|
deviceType: DeviceType.Light,
|
|
19010
19085
|
outputCap: "switch",
|
|
19086
|
+
outputField: "on",
|
|
19087
|
+
member: {
|
|
19088
|
+
cap: "switch",
|
|
19089
|
+
fieldPath: "on"
|
|
19090
|
+
},
|
|
19011
19091
|
commandCaps: [
|
|
19012
19092
|
"switch",
|
|
19013
19093
|
"brightness",
|
|
19014
19094
|
"color"
|
|
19015
19095
|
]
|
|
19096
|
+
}),
|
|
19097
|
+
actuator({
|
|
19098
|
+
id: "fan",
|
|
19099
|
+
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.",
|
|
19100
|
+
deviceType: DeviceType.Fan,
|
|
19101
|
+
outputCap: "switch",
|
|
19102
|
+
outputField: "on",
|
|
19103
|
+
member: {
|
|
19104
|
+
cap: "switch",
|
|
19105
|
+
fieldPath: "on"
|
|
19106
|
+
},
|
|
19107
|
+
commandCaps: ["switch", "fan-control"]
|
|
19108
|
+
}),
|
|
19109
|
+
actuator({
|
|
19110
|
+
id: "cover",
|
|
19111
|
+
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.",
|
|
19112
|
+
deviceType: DeviceType.Cover,
|
|
19113
|
+
outputCap: "group-active",
|
|
19114
|
+
outputField: "active",
|
|
19115
|
+
member: {
|
|
19116
|
+
cap: "cover",
|
|
19117
|
+
fieldPath: "state"
|
|
19118
|
+
},
|
|
19119
|
+
activeWhen: [
|
|
19120
|
+
"open",
|
|
19121
|
+
"opening",
|
|
19122
|
+
"stopped"
|
|
19123
|
+
],
|
|
19124
|
+
commandCaps: ["cover"]
|
|
19125
|
+
}),
|
|
19126
|
+
actuator({
|
|
19127
|
+
id: "valve",
|
|
19128
|
+
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.",
|
|
19129
|
+
deviceType: DeviceType.Valve,
|
|
19130
|
+
outputCap: "group-active",
|
|
19131
|
+
outputField: "active",
|
|
19132
|
+
member: {
|
|
19133
|
+
cap: "valve",
|
|
19134
|
+
fieldPath: "state"
|
|
19135
|
+
},
|
|
19136
|
+
activeWhen: [
|
|
19137
|
+
"open",
|
|
19138
|
+
"opening",
|
|
19139
|
+
"stopped"
|
|
19140
|
+
],
|
|
19141
|
+
commandCaps: ["valve"]
|
|
19142
|
+
}),
|
|
19143
|
+
actuator({
|
|
19144
|
+
id: "lock",
|
|
19145
|
+
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.",
|
|
19146
|
+
deviceType: DeviceType.Lock,
|
|
19147
|
+
outputCap: "group-active",
|
|
19148
|
+
outputField: "active",
|
|
19149
|
+
member: {
|
|
19150
|
+
cap: "lock-control",
|
|
19151
|
+
fieldPath: "state"
|
|
19152
|
+
},
|
|
19153
|
+
activeWhen: ["locked"],
|
|
19154
|
+
commandCaps: ["lock-control"]
|
|
19155
|
+
}),
|
|
19156
|
+
actuator({
|
|
19157
|
+
id: "media-player",
|
|
19158
|
+
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.",
|
|
19159
|
+
deviceType: DeviceType.MediaPlayer,
|
|
19160
|
+
outputCap: "group-active",
|
|
19161
|
+
outputField: "active",
|
|
19162
|
+
member: {
|
|
19163
|
+
cap: "media-player",
|
|
19164
|
+
fieldPath: "state"
|
|
19165
|
+
},
|
|
19166
|
+
activeWhen: ["playing", "buffering"],
|
|
19167
|
+
commandCaps: ["media-player"]
|
|
19168
|
+
}),
|
|
19169
|
+
actuator({
|
|
19170
|
+
id: "climate",
|
|
19171
|
+
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.",
|
|
19172
|
+
deviceType: DeviceType.Thermostat,
|
|
19173
|
+
memberDeviceTypes: [DeviceType.Thermostat, DeviceType.Climate],
|
|
19174
|
+
outputCap: "group-active",
|
|
19175
|
+
outputField: "active",
|
|
19176
|
+
member: {
|
|
19177
|
+
cap: "climate-control",
|
|
19178
|
+
fieldPath: "mode"
|
|
19179
|
+
},
|
|
19180
|
+
activeWhen: [
|
|
19181
|
+
"heat",
|
|
19182
|
+
"cool",
|
|
19183
|
+
"auto",
|
|
19184
|
+
"heat_cool",
|
|
19185
|
+
"fan_only",
|
|
19186
|
+
"dry"
|
|
19187
|
+
],
|
|
19188
|
+
commandCaps: ["climate-control"]
|
|
19016
19189
|
})
|
|
19017
19190
|
];
|
|
19018
19191
|
function actuator(input) {
|
|
19019
19192
|
return {
|
|
19020
|
-
|
|
19193
|
+
id: input.id,
|
|
19194
|
+
summary: input.summary,
|
|
19195
|
+
deviceType: input.deviceType,
|
|
19196
|
+
outputCap: input.outputCap,
|
|
19197
|
+
outputField: input.outputField,
|
|
19198
|
+
commandCaps: input.commandCaps,
|
|
19021
19199
|
family: "actuator",
|
|
19022
19200
|
role: void 0,
|
|
19023
19201
|
memberDeviceType: input.deviceType,
|
|
19024
|
-
|
|
19202
|
+
memberDeviceTypes: input.memberDeviceTypes ?? [input.deviceType],
|
|
19203
|
+
activeWhen: input.activeWhen,
|
|
19025
19204
|
quantity: "none",
|
|
19026
19205
|
baseUnit: void 0,
|
|
19027
19206
|
aggregates: BINARY_AGGREGATES,
|
|
19028
19207
|
defaultAggregate: "any",
|
|
19029
19208
|
empty: "offline",
|
|
19030
|
-
accept: [
|
|
19031
|
-
cap: "switch",
|
|
19032
|
-
fieldPath: "on"
|
|
19033
|
-
}],
|
|
19209
|
+
accept: [input.member],
|
|
19034
19210
|
companions: [CHANGED]
|
|
19035
19211
|
};
|
|
19036
19212
|
}
|
|
@@ -46728,7 +46904,20 @@ var NcRuleInputSchema = object({
|
|
|
46728
46904
|
* save by the hub's grouping guard). `.optional()`, never `.default()`: the addon cap
|
|
46729
46905
|
* path does not run Zod defaults.
|
|
46730
46906
|
*/
|
|
46731
|
-
groupingSec: number().int().min(5).max(60).optional()
|
|
46907
|
+
groupingSec: number().int().min(5).max(60).optional(),
|
|
46908
|
+
/**
|
|
46909
|
+
* ASK ME TO CONFIRM DETECTIONS (#243): a DETECTION notification of this rule
|
|
46910
|
+
* carries "Correct" / "Wrong" buttons (and, where the channel has room, a
|
|
46911
|
+
* "Wrong, it is a <class>" choice). A tap marks the track for retraining, the
|
|
46912
|
+
* same mark the Library writes, and records whose notification it was and
|
|
46913
|
+
* when. A channel with no buttons gets the same two choices as links.
|
|
46914
|
+
*
|
|
46915
|
+
* `.optional()`, never `.default()` (a Zod default does not run on the addon
|
|
46916
|
+
* cap path): absent and `false` both mean off, which is what every rule
|
|
46917
|
+
* authored before this field meant. An editor turns it off by writing
|
|
46918
|
+
* `false`, so it needs no `clear` key.
|
|
46919
|
+
*/
|
|
46920
|
+
askVerdict: boolean().optional()
|
|
46732
46921
|
});
|
|
46733
46922
|
/**
|
|
46734
46923
|
* Partial patch for `updateRule` — any subset of the input fields, plus the
|
|
@@ -58929,7 +59118,13 @@ results: array(object({
|
|
|
58929
59118
|
/** Ms epoch of the attempt. */
|
|
58930
59119
|
at: number()
|
|
58931
59120
|
})) });
|
|
58932
|
-
DeviceType.Switch, DeviceType.Light;
|
|
59121
|
+
DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Cover, DeviceType.Valve, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.Thermostat, DeviceType.Climate;
|
|
59122
|
+
object({
|
|
59123
|
+
active: boolean().meta({ label: "Active" }),
|
|
59124
|
+
/** Ms epoch when the slice was last updated. */
|
|
59125
|
+
lastChangedAt: number()
|
|
59126
|
+
});
|
|
59127
|
+
DeviceType.Cover, DeviceType.Valve, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.Climate, DeviceType.Thermostat;
|
|
58933
59128
|
object({
|
|
58934
59129
|
/** Members whose current value entered the aggregate. */
|
|
58935
59130
|
included: number().int().nonnegative().meta(readingMeta("count", {
|
|
@@ -58947,7 +59142,7 @@ object({
|
|
|
58947
59142
|
label: "Members"
|
|
58948
59143
|
}))
|
|
58949
59144
|
});
|
|
58950
|
-
DeviceType.Sensor, DeviceType.Switch, DeviceType.Light;
|
|
59145
|
+
DeviceType.Sensor, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Cover, DeviceType.Valve, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.Thermostat, DeviceType.Climate;
|
|
58951
59146
|
object({
|
|
58952
59147
|
/** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
|
|
58953
59148
|
position: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
@@ -59854,7 +60049,14 @@ DeviceType.Lock, method(object({
|
|
|
59854
60049
|
auth: "protected"
|
|
59855
60050
|
}), method(object({
|
|
59856
60051
|
deviceId: number().int().nonnegative(),
|
|
59857
|
-
code: string().min(1).optional()
|
|
60052
|
+
code: string().min(1).optional(),
|
|
60053
|
+
/**
|
|
60054
|
+
* Honoured by a helper lock GROUP only (D944): unlocking several doors
|
|
60055
|
+
* with one call is refused unless the caller says it was confirmed. A
|
|
60056
|
+
* single lock ignores it. The refusal lives in the callee, so no
|
|
60057
|
+
* automation or API caller reaches the doors by skipping a dialog.
|
|
60058
|
+
*/
|
|
60059
|
+
confirm: boolean().optional()
|
|
59858
60060
|
}), _void(), {
|
|
59859
60061
|
kind: "mutation",
|
|
59860
60062
|
auth: "protected"
|
|
@@ -64270,7 +64472,7 @@ object({
|
|
|
64270
64472
|
/** Ms epoch of the last state change. Useful for UI "X minutes ago". */
|
|
64271
64473
|
lastChangedAt: number()
|
|
64272
64474
|
});
|
|
64273
|
-
DeviceType.Switch, DeviceType.Siren, DeviceType.Light, method(object({
|
|
64475
|
+
DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, method(object({
|
|
64274
64476
|
deviceId: number(),
|
|
64275
64477
|
on: boolean()
|
|
64276
64478
|
}), _void(), {
|
|
@@ -65962,6 +66164,7 @@ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" })
|
|
|
65962
66164
|
kind: "mutation",
|
|
65963
66165
|
auth: "admin"
|
|
65964
66166
|
});
|
|
66167
|
+
DeviceFeature.FanSpeed, DeviceFeature.FanPreset, DeviceFeature.FanDirection, DeviceFeature.FanOscillating, DeviceFeature.CoverPositionable, DeviceFeature.CoverTilt, DeviceFeature.ValvePositionable, DeviceFeature.MediaPlayerVolume, DeviceFeature.ClimateFanMode;
|
|
65965
66168
|
SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
|
|
65966
66169
|
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;
|
|
65967
66170
|
String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
|
|
@@ -69337,6 +69540,13 @@ Object.freeze({
|
|
|
69337
69540
|
access: "view",
|
|
69338
69541
|
role: "viewer"
|
|
69339
69542
|
},
|
|
69543
|
+
"groupActive.getStatus": {
|
|
69544
|
+
capName: "group-active",
|
|
69545
|
+
capScope: "device",
|
|
69546
|
+
addonId: null,
|
|
69547
|
+
access: "view",
|
|
69548
|
+
role: "viewer"
|
|
69549
|
+
},
|
|
69340
69550
|
"groupCommands.getStatus": {
|
|
69341
69551
|
capName: "group-commands",
|
|
69342
69552
|
capScope: "device",
|
|
@@ -79212,6 +79422,10 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
79212
79422
|
icon: "flame"
|
|
79213
79423
|
}]
|
|
79214
79424
|
},
|
|
79425
|
+
"group-active": {
|
|
79426
|
+
scope: "device",
|
|
79427
|
+
noun: t("Group state", "Stato del gruppo")
|
|
79428
|
+
},
|
|
79215
79429
|
"group-commands": {
|
|
79216
79430
|
scope: "device",
|
|
79217
79431
|
noun: t("Group command", "Comando di gruppo")
|
|
@@ -80758,6 +80972,11 @@ Object.freeze({
|
|
|
80758
80972
|
form: "single",
|
|
80759
80973
|
optional: false
|
|
80760
80974
|
}],
|
|
80975
|
+
"groupActive.getStatus": [{
|
|
80976
|
+
name: "deviceId",
|
|
80977
|
+
form: "single",
|
|
80978
|
+
optional: false
|
|
80979
|
+
}],
|
|
80761
80980
|
"groupCommands.getStatus": [{
|
|
80762
80981
|
name: "deviceId",
|
|
80763
80982
|
form: "single",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { S as e, d as t, u as n, v as r } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DMBKVIH7.mjs";
|
|
2
2
|
import { n as i, r as a, t as o } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-ds_Ehzaa.mjs";
|
|
3
|
-
import { _ as s, g as c } from "./responsive-
|
|
3
|
+
import { _ as s, g as c } from "./responsive-BOS8RfJa.mjs";
|
|
4
4
|
var l = s("chevron-down", [["path", {
|
|
5
5
|
d: "m6 9 6 6 6-6",
|
|
6
6
|
key: "qrunsl"
|
package/dist/remoteEntry.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-
|
|
1
|
+
import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CWXLGHpz.mjs";
|
|
2
2
|
export { t as get, e as init };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { S as e, d as t, g as n, i as r, l as i, n as a, r as o, u as s, v as c, y as l } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DMBKVIH7.mjs";
|
|
2
2
|
import "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-ds_Ehzaa.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { S as u } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CsIeC3fr.mjs";
|
|
4
4
|
//#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
|
|
5
5
|
e();
|
|
6
6
|
var d = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), f = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), p = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), m = (e) => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { S as e, g as t, l as n, v as r } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DMBKVIH7.mjs";
|
|
2
2
|
import { n as i } from "./ui-text-BqZa5BNK.mjs";
|
|
3
|
-
import { _ as a } from "./responsive-
|
|
3
|
+
import { _ as a } from "./responsive-BOS8RfJa.mjs";
|
|
4
4
|
var o = a("camera", [["path", {
|
|
5
5
|
d: "M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z",
|
|
6
6
|
key: "18u6gg"
|
|
@@ -2753,7 +2753,7 @@ async function rr(e) {
|
|
|
2753
2753
|
}
|
|
2754
2754
|
}
|
|
2755
2755
|
async function ir() {
|
|
2756
|
-
return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-
|
|
2756
|
+
return tr ||= rr(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-DVVRygHY.mjs")).catch((e) => {
|
|
2757
2757
|
throw tr = void 0, e;
|
|
2758
2758
|
}), tr;
|
|
2759
2759
|
}
|