@camstack/addon-model-studio 1.1.305 → 1.1.307
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-DkgjOPCB.mjs} +2 -2
- package/dist/{PrivacyMaskSettings-D44t-3Il.mjs → PrivacyMaskSettings-fESQpFIS.mjs} +4 -4
- package/dist/{SceneMonitorEditor-B7GPFInk.mjs → SceneMonitorEditor-C9B7EixP.mjs} +123 -124
- package/dist/_stub.js +4359 -4370
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-Dm-CsmsB.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-DLl1PFV-.mjs} +3 -3
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BQQ1gj_P.mjs +26 -0
- package/dist/addon-model-studio.css +1 -1
- package/dist/{hostInit-BCkvpKIY.mjs → hostInit-DHIO-yMd.mjs} +2 -2
- package/dist/model-studio.addon.js +280 -30
- package/dist/model-studio.addon.mjs +280 -30
- package/dist/{player-overlays-BmekT-lx.mjs → player-overlays-SAR77Y-f.mjs} +1 -1
- package/dist/remoteEntry.js +1 -1
- package/dist/{responsive-DEe2tyvb.mjs → responsive-DhsW4w_p.mjs} +1 -1
- package/dist/{scene-monitor-copy-0SI6bJjg.mjs → scene-monitor-copy-BYVAve5e.mjs} +63 -50
- package/dist/{square-_3D14YQf.mjs → square-Dy3-P6UW.mjs} +1 -1
- package/dist/{trash-2-CBnastSw.mjs → trash-2-DScdmxQC.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-cC9vn7dW.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",
|
|
@@ -17531,7 +17593,22 @@ var BrokerProviderInfoSchema = object({
|
|
|
17531
17593
|
*/
|
|
17532
17594
|
interactiveConnectPath: string().min(1).optional(),
|
|
17533
17595
|
/** Relative hub path to disconnect the linked account (same popup pattern). */
|
|
17534
|
-
interactiveDisconnectPath: string().min(1).optional()
|
|
17596
|
+
interactiveDisconnectPath: string().min(1).optional(),
|
|
17597
|
+
/**
|
|
17598
|
+
* The kind signs in through a server-held interactive session instead of
|
|
17599
|
+
* (or before) typed credentials. `basePath` is a hub-relative route set
|
|
17600
|
+
* served by the owning addon (`/addon/<id>/...`) speaking the sign-in
|
|
17601
|
+
* contract: `POST {basePath}/start` (body: the form's settings) answers
|
|
17602
|
+
* `{ sessionId, loginUrl }`; `GET {basePath}/status?sessionId=` answers
|
|
17603
|
+
* `{ phase: 'starting' | 'awaiting-login' | 'captured' | 'error' |
|
|
17604
|
+
* 'cancelled', loginUrl, error }`; `POST {basePath}/commit`
|
|
17605
|
+
* (`{ sessionId, name, brokerId? }`) stores the credentials on a new or
|
|
17606
|
+
* existing broker and answers `{ brokerId }`; `POST {basePath}/cancel`
|
|
17607
|
+
* (`{ sessionId }`) drops the session. The dialog that edits a broker
|
|
17608
|
+
* offers it as the default path; the fields the session fills are
|
|
17609
|
+
* marked `filledBySignIn` in the kind's settings schema.
|
|
17610
|
+
*/
|
|
17611
|
+
signIn: object({ basePath: string().min(1) }).optional()
|
|
17535
17612
|
}))
|
|
17536
17613
|
});
|
|
17537
17614
|
var ListInputSchema = object({
|
|
@@ -18765,13 +18842,17 @@ Object.freeze({
|
|
|
18765
18842
|
latchedAt: {
|
|
18766
18843
|
kind: "fixed",
|
|
18767
18844
|
result: ["number", "null"]
|
|
18845
|
+
},
|
|
18846
|
+
schmitt: {
|
|
18847
|
+
kind: "fixed",
|
|
18848
|
+
result: ["boolean", "null"]
|
|
18768
18849
|
}
|
|
18769
18850
|
});
|
|
18770
18851
|
/**
|
|
18771
18852
|
* One catalog row per base reading a group helper can build (D944 §3).
|
|
18772
18853
|
* Data, not a form default written into the block.
|
|
18773
18854
|
*/
|
|
18774
|
-
var NOW$
|
|
18855
|
+
var NOW$2 = {
|
|
18775
18856
|
fieldPath: "lastFetchedAt",
|
|
18776
18857
|
expr: "now"
|
|
18777
18858
|
};
|
|
@@ -18785,6 +18866,8 @@ function numeric(input) {
|
|
|
18785
18866
|
family: "numeric",
|
|
18786
18867
|
deviceType: DeviceType.Sensor,
|
|
18787
18868
|
memberDeviceType: DeviceType.Sensor,
|
|
18869
|
+
memberDeviceTypes: [DeviceType.Sensor],
|
|
18870
|
+
activeWhen: void 0,
|
|
18788
18871
|
commandCaps: [],
|
|
18789
18872
|
baseUnit: baseUnitOf(input.quantity),
|
|
18790
18873
|
aggregates: NUMERIC_AGGREGATES,
|
|
@@ -18800,6 +18883,8 @@ function binary(input) {
|
|
|
18800
18883
|
family: "binary",
|
|
18801
18884
|
deviceType: DeviceType.Sensor,
|
|
18802
18885
|
memberDeviceType: DeviceType.Sensor,
|
|
18886
|
+
memberDeviceTypes: [DeviceType.Sensor],
|
|
18887
|
+
activeWhen: void 0,
|
|
18803
18888
|
commandCaps: [],
|
|
18804
18889
|
quantity: "none",
|
|
18805
18890
|
baseUnit: void 0,
|
|
@@ -18817,7 +18902,7 @@ var GROUP_TEMPLATES = [
|
|
|
18817
18902
|
quantity: "temperature",
|
|
18818
18903
|
defaultAggregate: "mean",
|
|
18819
18904
|
empty: "null",
|
|
18820
|
-
companions: [NOW$
|
|
18905
|
+
companions: [NOW$2]
|
|
18821
18906
|
}),
|
|
18822
18907
|
numeric({
|
|
18823
18908
|
id: "humidity",
|
|
@@ -18828,7 +18913,7 @@ var GROUP_TEMPLATES = [
|
|
|
18828
18913
|
quantity: "humidity",
|
|
18829
18914
|
defaultAggregate: "mean",
|
|
18830
18915
|
empty: "null",
|
|
18831
|
-
companions: [NOW$
|
|
18916
|
+
companions: [NOW$2]
|
|
18832
18917
|
}),
|
|
18833
18918
|
numeric({
|
|
18834
18919
|
id: "pressure",
|
|
@@ -18839,7 +18924,7 @@ var GROUP_TEMPLATES = [
|
|
|
18839
18924
|
quantity: "pressure",
|
|
18840
18925
|
defaultAggregate: "mean",
|
|
18841
18926
|
empty: "null",
|
|
18842
|
-
companions: [NOW$
|
|
18927
|
+
companions: [NOW$2]
|
|
18843
18928
|
}),
|
|
18844
18929
|
numeric({
|
|
18845
18930
|
id: "illuminance",
|
|
@@ -18850,7 +18935,7 @@ var GROUP_TEMPLATES = [
|
|
|
18850
18935
|
quantity: "illuminance",
|
|
18851
18936
|
defaultAggregate: "mean",
|
|
18852
18937
|
empty: "null",
|
|
18853
|
-
companions: [NOW$
|
|
18938
|
+
companions: [NOW$2]
|
|
18854
18939
|
}),
|
|
18855
18940
|
numeric({
|
|
18856
18941
|
id: "power",
|
|
@@ -18861,7 +18946,7 @@ var GROUP_TEMPLATES = [
|
|
|
18861
18946
|
quantity: "power",
|
|
18862
18947
|
defaultAggregate: "sum",
|
|
18863
18948
|
empty: "omit",
|
|
18864
|
-
companions: [NOW$
|
|
18949
|
+
companions: [NOW$2]
|
|
18865
18950
|
}),
|
|
18866
18951
|
numeric({
|
|
18867
18952
|
id: "energy",
|
|
@@ -18872,7 +18957,7 @@ var GROUP_TEMPLATES = [
|
|
|
18872
18957
|
quantity: "energy",
|
|
18873
18958
|
defaultAggregate: "sum",
|
|
18874
18959
|
empty: "omit",
|
|
18875
|
-
companions: [NOW$
|
|
18960
|
+
companions: [NOW$2]
|
|
18876
18961
|
}),
|
|
18877
18962
|
numeric({
|
|
18878
18963
|
id: "battery",
|
|
@@ -18907,7 +18992,7 @@ var GROUP_TEMPLATES = [
|
|
|
18907
18992
|
quantity: "device",
|
|
18908
18993
|
defaultAggregate: "mean",
|
|
18909
18994
|
empty: "null",
|
|
18910
|
-
companions: [NOW$
|
|
18995
|
+
companions: [NOW$2]
|
|
18911
18996
|
}),
|
|
18912
18997
|
binary({
|
|
18913
18998
|
id: "motion",
|
|
@@ -19001,6 +19086,11 @@ var GROUP_TEMPLATES = [
|
|
|
19001
19086
|
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
19087
|
deviceType: DeviceType.Switch,
|
|
19003
19088
|
outputCap: "switch",
|
|
19089
|
+
outputField: "on",
|
|
19090
|
+
member: {
|
|
19091
|
+
cap: "switch",
|
|
19092
|
+
fieldPath: "on"
|
|
19093
|
+
},
|
|
19004
19094
|
commandCaps: ["switch"]
|
|
19005
19095
|
}),
|
|
19006
19096
|
actuator({
|
|
@@ -19008,29 +19098,130 @@ var GROUP_TEMPLATES = [
|
|
|
19008
19098
|
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
19099
|
deviceType: DeviceType.Light,
|
|
19010
19100
|
outputCap: "switch",
|
|
19101
|
+
outputField: "on",
|
|
19102
|
+
member: {
|
|
19103
|
+
cap: "switch",
|
|
19104
|
+
fieldPath: "on"
|
|
19105
|
+
},
|
|
19011
19106
|
commandCaps: [
|
|
19012
19107
|
"switch",
|
|
19013
19108
|
"brightness",
|
|
19014
19109
|
"color"
|
|
19015
19110
|
]
|
|
19111
|
+
}),
|
|
19112
|
+
actuator({
|
|
19113
|
+
id: "fan",
|
|
19114
|
+
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.",
|
|
19115
|
+
deviceType: DeviceType.Fan,
|
|
19116
|
+
outputCap: "switch",
|
|
19117
|
+
outputField: "on",
|
|
19118
|
+
member: {
|
|
19119
|
+
cap: "switch",
|
|
19120
|
+
fieldPath: "on"
|
|
19121
|
+
},
|
|
19122
|
+
commandCaps: ["switch", "fan-control"]
|
|
19123
|
+
}),
|
|
19124
|
+
actuator({
|
|
19125
|
+
id: "cover",
|
|
19126
|
+
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.",
|
|
19127
|
+
deviceType: DeviceType.Cover,
|
|
19128
|
+
outputCap: "group-active",
|
|
19129
|
+
outputField: "active",
|
|
19130
|
+
member: {
|
|
19131
|
+
cap: "cover",
|
|
19132
|
+
fieldPath: "state"
|
|
19133
|
+
},
|
|
19134
|
+
activeWhen: [
|
|
19135
|
+
"open",
|
|
19136
|
+
"opening",
|
|
19137
|
+
"stopped"
|
|
19138
|
+
],
|
|
19139
|
+
commandCaps: ["cover"]
|
|
19140
|
+
}),
|
|
19141
|
+
actuator({
|
|
19142
|
+
id: "valve",
|
|
19143
|
+
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.",
|
|
19144
|
+
deviceType: DeviceType.Valve,
|
|
19145
|
+
outputCap: "group-active",
|
|
19146
|
+
outputField: "active",
|
|
19147
|
+
member: {
|
|
19148
|
+
cap: "valve",
|
|
19149
|
+
fieldPath: "state"
|
|
19150
|
+
},
|
|
19151
|
+
activeWhen: [
|
|
19152
|
+
"open",
|
|
19153
|
+
"opening",
|
|
19154
|
+
"stopped"
|
|
19155
|
+
],
|
|
19156
|
+
commandCaps: ["valve"]
|
|
19157
|
+
}),
|
|
19158
|
+
actuator({
|
|
19159
|
+
id: "lock",
|
|
19160
|
+
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.",
|
|
19161
|
+
deviceType: DeviceType.Lock,
|
|
19162
|
+
outputCap: "group-active",
|
|
19163
|
+
outputField: "active",
|
|
19164
|
+
member: {
|
|
19165
|
+
cap: "lock-control",
|
|
19166
|
+
fieldPath: "state"
|
|
19167
|
+
},
|
|
19168
|
+
activeWhen: ["locked"],
|
|
19169
|
+
commandCaps: ["lock-control"]
|
|
19170
|
+
}),
|
|
19171
|
+
actuator({
|
|
19172
|
+
id: "media-player",
|
|
19173
|
+
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.",
|
|
19174
|
+
deviceType: DeviceType.MediaPlayer,
|
|
19175
|
+
outputCap: "group-active",
|
|
19176
|
+
outputField: "active",
|
|
19177
|
+
member: {
|
|
19178
|
+
cap: "media-player",
|
|
19179
|
+
fieldPath: "state"
|
|
19180
|
+
},
|
|
19181
|
+
activeWhen: ["playing", "buffering"],
|
|
19182
|
+
commandCaps: ["media-player"]
|
|
19183
|
+
}),
|
|
19184
|
+
actuator({
|
|
19185
|
+
id: "climate",
|
|
19186
|
+
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.",
|
|
19187
|
+
deviceType: DeviceType.Thermostat,
|
|
19188
|
+
memberDeviceTypes: [DeviceType.Thermostat, DeviceType.Climate],
|
|
19189
|
+
outputCap: "group-active",
|
|
19190
|
+
outputField: "active",
|
|
19191
|
+
member: {
|
|
19192
|
+
cap: "climate-control",
|
|
19193
|
+
fieldPath: "mode"
|
|
19194
|
+
},
|
|
19195
|
+
activeWhen: [
|
|
19196
|
+
"heat",
|
|
19197
|
+
"cool",
|
|
19198
|
+
"auto",
|
|
19199
|
+
"heat_cool",
|
|
19200
|
+
"fan_only",
|
|
19201
|
+
"dry"
|
|
19202
|
+
],
|
|
19203
|
+
commandCaps: ["climate-control"]
|
|
19016
19204
|
})
|
|
19017
19205
|
];
|
|
19018
19206
|
function actuator(input) {
|
|
19019
19207
|
return {
|
|
19020
|
-
|
|
19208
|
+
id: input.id,
|
|
19209
|
+
summary: input.summary,
|
|
19210
|
+
deviceType: input.deviceType,
|
|
19211
|
+
outputCap: input.outputCap,
|
|
19212
|
+
outputField: input.outputField,
|
|
19213
|
+
commandCaps: input.commandCaps,
|
|
19021
19214
|
family: "actuator",
|
|
19022
19215
|
role: void 0,
|
|
19023
19216
|
memberDeviceType: input.deviceType,
|
|
19024
|
-
|
|
19217
|
+
memberDeviceTypes: input.memberDeviceTypes ?? [input.deviceType],
|
|
19218
|
+
activeWhen: input.activeWhen,
|
|
19025
19219
|
quantity: "none",
|
|
19026
19220
|
baseUnit: void 0,
|
|
19027
19221
|
aggregates: BINARY_AGGREGATES,
|
|
19028
19222
|
defaultAggregate: "any",
|
|
19029
19223
|
empty: "offline",
|
|
19030
|
-
accept: [
|
|
19031
|
-
cap: "switch",
|
|
19032
|
-
fieldPath: "on"
|
|
19033
|
-
}],
|
|
19224
|
+
accept: [input.member],
|
|
19034
19225
|
companions: [CHANGED]
|
|
19035
19226
|
};
|
|
19036
19227
|
}
|
|
@@ -46728,7 +46919,20 @@ var NcRuleInputSchema = object({
|
|
|
46728
46919
|
* save by the hub's grouping guard). `.optional()`, never `.default()`: the addon cap
|
|
46729
46920
|
* path does not run Zod defaults.
|
|
46730
46921
|
*/
|
|
46731
|
-
groupingSec: number().int().min(5).max(60).optional()
|
|
46922
|
+
groupingSec: number().int().min(5).max(60).optional(),
|
|
46923
|
+
/**
|
|
46924
|
+
* ASK ME TO CONFIRM DETECTIONS (#243): a DETECTION notification of this rule
|
|
46925
|
+
* carries "Correct" / "Wrong" buttons (and, where the channel has room, a
|
|
46926
|
+
* "Wrong, it is a <class>" choice). A tap marks the track for retraining, the
|
|
46927
|
+
* same mark the Library writes, and records whose notification it was and
|
|
46928
|
+
* when. A channel with no buttons gets the same two choices as links.
|
|
46929
|
+
*
|
|
46930
|
+
* `.optional()`, never `.default()` (a Zod default does not run on the addon
|
|
46931
|
+
* cap path): absent and `false` both mean off, which is what every rule
|
|
46932
|
+
* authored before this field meant. An editor turns it off by writing
|
|
46933
|
+
* `false`, so it needs no `clear` key.
|
|
46934
|
+
*/
|
|
46935
|
+
askVerdict: boolean().optional()
|
|
46732
46936
|
});
|
|
46733
46937
|
/**
|
|
46734
46938
|
* Partial patch for `updateRule` — any subset of the input fields, plus the
|
|
@@ -57185,7 +57389,7 @@ var BatteryStatusSchema = object({
|
|
|
57185
57389
|
*/
|
|
57186
57390
|
binary: boolean().optional().meta({ label: "Binary indicator" })
|
|
57187
57391
|
});
|
|
57188
|
-
DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat;
|
|
57392
|
+
DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.EventEmitter;
|
|
57189
57393
|
method(object({
|
|
57190
57394
|
deviceId: number(),
|
|
57191
57395
|
/** Bound on the wait. Sensible range 3000–10000ms. */
|
|
@@ -58929,7 +59133,13 @@ results: array(object({
|
|
|
58929
59133
|
/** Ms epoch of the attempt. */
|
|
58930
59134
|
at: number()
|
|
58931
59135
|
})) });
|
|
58932
|
-
DeviceType.Switch, DeviceType.Light;
|
|
59136
|
+
DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Cover, DeviceType.Valve, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.Thermostat, DeviceType.Climate;
|
|
59137
|
+
object({
|
|
59138
|
+
active: boolean().meta({ label: "Active" }),
|
|
59139
|
+
/** Ms epoch when the slice was last updated. */
|
|
59140
|
+
lastChangedAt: number()
|
|
59141
|
+
});
|
|
59142
|
+
DeviceType.Cover, DeviceType.Valve, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.Climate, DeviceType.Thermostat;
|
|
58933
59143
|
object({
|
|
58934
59144
|
/** Members whose current value entered the aggregate. */
|
|
58935
59145
|
included: number().int().nonnegative().meta(readingMeta("count", {
|
|
@@ -58947,7 +59157,7 @@ object({
|
|
|
58947
59157
|
label: "Members"
|
|
58948
59158
|
}))
|
|
58949
59159
|
});
|
|
58950
|
-
DeviceType.Sensor, DeviceType.Switch, DeviceType.Light;
|
|
59160
|
+
DeviceType.Sensor, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Cover, DeviceType.Valve, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.Thermostat, DeviceType.Climate;
|
|
58951
59161
|
object({
|
|
58952
59162
|
/** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
|
|
58953
59163
|
position: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
@@ -59854,7 +60064,14 @@ DeviceType.Lock, method(object({
|
|
|
59854
60064
|
auth: "protected"
|
|
59855
60065
|
}), method(object({
|
|
59856
60066
|
deviceId: number().int().nonnegative(),
|
|
59857
|
-
code: string().min(1).optional()
|
|
60067
|
+
code: string().min(1).optional(),
|
|
60068
|
+
/**
|
|
60069
|
+
* Honoured by a helper lock GROUP only (D944): unlocking several doors
|
|
60070
|
+
* with one call is refused unless the caller says it was confirmed. A
|
|
60071
|
+
* single lock ignores it. The refusal lives in the callee, so no
|
|
60072
|
+
* automation or API caller reaches the doors by skipping a dialog.
|
|
60073
|
+
*/
|
|
60074
|
+
confirm: boolean().optional()
|
|
59858
60075
|
}), _void(), {
|
|
59859
60076
|
kind: "mutation",
|
|
59860
60077
|
auth: "protected"
|
|
@@ -61774,9 +61991,9 @@ object({
|
|
|
61774
61991
|
/** Cumulative energy in kilowatt-hours since the meter was reset. */
|
|
61775
61992
|
kwhTotal: number().optional().meta(readingMeta("energy", { label: "Energy" })),
|
|
61776
61993
|
/** Voltage in volts. */
|
|
61777
|
-
volts: number().optional().meta(readingMeta("voltage")),
|
|
61994
|
+
volts: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
|
|
61778
61995
|
/** Current in amperes. */
|
|
61779
|
-
amps: number().optional().meta(readingMeta("current")),
|
|
61996
|
+
amps: number().optional().meta(readingMeta("current", { label: "Current" })),
|
|
61780
61997
|
/** Apparent power in volt-amperes. */
|
|
61781
61998
|
va: number().optional().meta(readingMeta("apparent-power")),
|
|
61782
61999
|
/** Power factor (0..1) if reported. */
|
|
@@ -61784,7 +62001,23 @@ object({
|
|
|
61784
62001
|
/** Ms epoch when the slice was last updated. */
|
|
61785
62002
|
lastFetchedAt: number()
|
|
61786
62003
|
});
|
|
61787
|
-
|
|
62004
|
+
[
|
|
62005
|
+
DeviceType.Sensor,
|
|
62006
|
+
DeviceType.Switch,
|
|
62007
|
+
DeviceType.Light,
|
|
62008
|
+
DeviceType.Fan,
|
|
62009
|
+
DeviceType.Climate,
|
|
62010
|
+
DeviceType.Thermostat,
|
|
62011
|
+
DeviceType.Humidifier,
|
|
62012
|
+
DeviceType.WaterHeater,
|
|
62013
|
+
DeviceType.MediaPlayer,
|
|
62014
|
+
DeviceType.Washer,
|
|
62015
|
+
DeviceType.Dryer,
|
|
62016
|
+
DeviceType.Dishwasher,
|
|
62017
|
+
DeviceType.Vacuum,
|
|
62018
|
+
DeviceType.LawnMower,
|
|
62019
|
+
DeviceType.PetFeeder
|
|
62020
|
+
].filter((type) => type !== DeviceType.Sensor);
|
|
61788
62021
|
/**
|
|
61789
62022
|
* Presence cap. Models HA `person.*` and `device_tracker.*` entities
|
|
61790
62023
|
* on `DeviceType.Presence`. Read-only — no setters: presence is
|
|
@@ -64270,7 +64503,7 @@ object({
|
|
|
64270
64503
|
/** Ms epoch of the last state change. Useful for UI "X minutes ago". */
|
|
64271
64504
|
lastChangedAt: number()
|
|
64272
64505
|
});
|
|
64273
|
-
DeviceType.Switch, DeviceType.Siren, DeviceType.Light, method(object({
|
|
64506
|
+
DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, method(object({
|
|
64274
64507
|
deviceId: number(),
|
|
64275
64508
|
on: boolean()
|
|
64276
64509
|
}), _void(), {
|
|
@@ -65962,8 +66195,9 @@ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" })
|
|
|
65962
66195
|
kind: "mutation",
|
|
65963
66196
|
auth: "admin"
|
|
65964
66197
|
});
|
|
66198
|
+
DeviceFeature.FanSpeed, DeviceFeature.FanPreset, DeviceFeature.FanDirection, DeviceFeature.FanOscillating, DeviceFeature.CoverPositionable, DeviceFeature.CoverTilt, DeviceFeature.ValvePositionable, DeviceFeature.MediaPlayerVolume, DeviceFeature.ClimateFanMode;
|
|
65965
66199
|
SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
|
|
65966
|
-
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;
|
|
66200
|
+
DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.EventEmitter, 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.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, 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
66201
|
String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
|
|
65968
66202
|
DeviceRole.BinarySensor, DeviceRole.MotionSensor;
|
|
65969
66203
|
new Set(CAP_NAMES);
|
|
@@ -69337,6 +69571,13 @@ Object.freeze({
|
|
|
69337
69571
|
access: "view",
|
|
69338
69572
|
role: "viewer"
|
|
69339
69573
|
},
|
|
69574
|
+
"groupActive.getStatus": {
|
|
69575
|
+
capName: "group-active",
|
|
69576
|
+
capScope: "device",
|
|
69577
|
+
addonId: null,
|
|
69578
|
+
access: "view",
|
|
69579
|
+
role: "viewer"
|
|
69580
|
+
},
|
|
69340
69581
|
"groupCommands.getStatus": {
|
|
69341
69582
|
capName: "group-commands",
|
|
69342
69583
|
capScope: "device",
|
|
@@ -79212,6 +79453,10 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
79212
79453
|
icon: "flame"
|
|
79213
79454
|
}]
|
|
79214
79455
|
},
|
|
79456
|
+
"group-active": {
|
|
79457
|
+
scope: "device",
|
|
79458
|
+
noun: t("Group state", "Stato del gruppo")
|
|
79459
|
+
},
|
|
79215
79460
|
"group-commands": {
|
|
79216
79461
|
scope: "device",
|
|
79217
79462
|
noun: t("Group command", "Comando di gruppo")
|
|
@@ -80758,6 +81003,11 @@ Object.freeze({
|
|
|
80758
81003
|
form: "single",
|
|
80759
81004
|
optional: false
|
|
80760
81005
|
}],
|
|
81006
|
+
"groupActive.getStatus": [{
|
|
81007
|
+
name: "deviceId",
|
|
81008
|
+
form: "single",
|
|
81009
|
+
optional: false
|
|
81010
|
+
}],
|
|
80761
81011
|
"groupCommands.getStatus": [{
|
|
80762
81012
|
name: "deviceId",
|
|
80763
81013
|
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-DhsW4w_p.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-cC9vn7dW.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-BQQ1gj_P.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) => {
|