@camstack/addon-training 0.1.91 → 0.1.93
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-kbJlg0c5.mjs → MotionZonesSettings-BDIz0ADl.mjs} +2 -2
- package/dist/{PrivacyMaskSettings-B3gzWS6Y.mjs → PrivacyMaskSettings-Cz_1itEY.mjs} +2 -2
- package/dist/{SceneMonitorEditor-CjxaItjN.mjs → SceneMonitorEditor-DxdQN6e5.mjs} +119 -120
- package/dist/_stub.js +5328 -5342
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-Cer78kD4.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-BZNWvnmy.mjs} +3 -3
- package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-B6wwfPOo.mjs +26 -0
- package/dist/addon-training.css +1 -1
- package/dist/{dist-B3Dz3xDZ.mjs → dist-Bna6QSX9.mjs} +280 -30
- package/dist/{dist-uLc6FQWF.js → dist-Cv8pFcIo.js} +280 -30
- package/dist/{hostInit-C-l48gwp.mjs → hostInit-BsH6KoQn.mjs} +2 -2
- package/dist/index.js +1 -1
- package/dist/orchestrator/training.addon.js +1 -1
- package/dist/orchestrator/training.addon.mjs +1 -1
- package/dist/{player-overlays-DrA4TUe3.mjs → player-overlays-ClwLHxNP.mjs} +1 -1
- package/dist/providers/modal/training-modal.addon.js +1 -1
- package/dist/providers/modal/training-modal.addon.mjs +1 -1
- package/dist/remoteEntry.js +1 -1
- package/dist/{responsive-C46lpRSX.mjs → responsive-Cx4quvGq.mjs} +1 -1
- package/dist/{scene-monitor-copy-Cqfs4Vng.mjs → scene-monitor-copy-DIJUg8Ro.mjs} +63 -46
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-qVIpiQZD.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-C-gbqU_M.mjs} +1 -1
- package/package.json +1 -1
- package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DM1LS5rC.mjs +0 -26
|
@@ -5608,7 +5608,7 @@ var ZodIssueCode = {
|
|
|
5608
5608
|
var ZodFirstPartyTypeKind;
|
|
5609
5609
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5610
5610
|
//#endregion
|
|
5611
|
-
//#region ../types/dist/sleep
|
|
5611
|
+
//#region ../types/dist/sleep--jXS9hWo.mjs
|
|
5612
5612
|
/**
|
|
5613
5613
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5614
5614
|
* window to float samples (D455).
|
|
@@ -8978,6 +8978,7 @@ var CAP_NAMES = Object.freeze([
|
|
|
8978
8978
|
"filesystem-browse",
|
|
8979
8979
|
"flood",
|
|
8980
8980
|
"gas",
|
|
8981
|
+
"group-active",
|
|
8981
8982
|
"group-commands",
|
|
8982
8983
|
"group-status",
|
|
8983
8984
|
"heating-valve",
|
|
@@ -9799,6 +9800,10 @@ Object.freeze({
|
|
|
9799
9800
|
"path": "detected",
|
|
9800
9801
|
"valueType": "boolean"
|
|
9801
9802
|
}],
|
|
9803
|
+
"group-active": [{
|
|
9804
|
+
"path": "active",
|
|
9805
|
+
"valueType": "boolean"
|
|
9806
|
+
}],
|
|
9802
9807
|
"group-status": [
|
|
9803
9808
|
{
|
|
9804
9809
|
"path": "included",
|
|
@@ -11154,7 +11159,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
|
|
|
11154
11159
|
return DeviceRole;
|
|
11155
11160
|
}({});
|
|
11156
11161
|
//#endregion
|
|
11157
|
-
//#region ../types/dist/composition-
|
|
11162
|
+
//#region ../types/dist/composition-Bb8iwHEJ.mjs
|
|
11158
11163
|
/**
|
|
11159
11164
|
* The ffmpeg build every CamStack node downloads, per platform and arch.
|
|
11160
11165
|
*
|
|
@@ -11469,6 +11474,13 @@ var table = {
|
|
|
11469
11474
|
apply: () => {
|
|
11470
11475
|
throw new ExpressionEvalError("latchedAt: stateful evaluation context is required");
|
|
11471
11476
|
}
|
|
11477
|
+
},
|
|
11478
|
+
schmitt: {
|
|
11479
|
+
minArgs: 3,
|
|
11480
|
+
maxArgs: 5,
|
|
11481
|
+
apply: () => {
|
|
11482
|
+
throw new ExpressionEvalError("schmitt: stateful evaluation context is required");
|
|
11483
|
+
}
|
|
11472
11484
|
}
|
|
11473
11485
|
};
|
|
11474
11486
|
Object.freeze(Object.assign(Object.create(null), table));
|
|
@@ -11979,7 +11991,7 @@ var RESET_PERIODS = [
|
|
|
11979
11991
|
5 * MINUTE_MS;
|
|
11980
11992
|
24 * HOUR_MS, 2 * DAY_MS, 7 * DAY_MS, 30 * DAY_MS;
|
|
11981
11993
|
7 * DAY_MS, 30 * DAY_MS, 365 * DAY_MS;
|
|
11982
|
-
var
|
|
11994
|
+
var rollingWindowObject = object({
|
|
11983
11995
|
kind: literal("rolling"),
|
|
11984
11996
|
span: _enum(ROLLING_SPANS),
|
|
11985
11997
|
customMinutes: number().int().min(5).optional()
|
|
@@ -11996,7 +12008,9 @@ var StatisticWindowSchema = discriminatedUnion("kind", [object({
|
|
|
11996
12008
|
path: ["customMinutes"],
|
|
11997
12009
|
input: payload.value
|
|
11998
12010
|
});
|
|
11999
|
-
})
|
|
12011
|
+
});
|
|
12012
|
+
var RollingWindowSchema = rollingWindowObject;
|
|
12013
|
+
var StatisticWindowSchema = discriminatedUnion("kind", [rollingWindowObject, object({
|
|
12000
12014
|
kind: literal("calendar"),
|
|
12001
12015
|
period: _enum(CALENDAR_PERIODS)
|
|
12002
12016
|
})]);
|
|
@@ -12026,7 +12040,13 @@ var GROUP_TEMPLATE_IDS = [
|
|
|
12026
12040
|
"occupancy",
|
|
12027
12041
|
"binary",
|
|
12028
12042
|
"switch",
|
|
12029
|
-
"light"
|
|
12043
|
+
"light",
|
|
12044
|
+
"fan",
|
|
12045
|
+
"cover",
|
|
12046
|
+
"valve",
|
|
12047
|
+
"lock",
|
|
12048
|
+
"media-player",
|
|
12049
|
+
"climate"
|
|
12030
12050
|
];
|
|
12031
12051
|
var NUMERIC_AGGREGATES = [
|
|
12032
12052
|
"mean",
|
|
@@ -12085,6 +12105,42 @@ var HelperSpecSchema = discriminatedUnion("kind", [
|
|
|
12085
12105
|
reset: _enum(RESET_PERIODS),
|
|
12086
12106
|
output: _enum(["energy", "meter"]),
|
|
12087
12107
|
source: HelperMemberSchema
|
|
12108
|
+
}),
|
|
12109
|
+
object({
|
|
12110
|
+
kind: literal("threshold"),
|
|
12111
|
+
source: HelperMemberSchema,
|
|
12112
|
+
high: number(),
|
|
12113
|
+
low: number(),
|
|
12114
|
+
onForMs: number().int().nonnegative(),
|
|
12115
|
+
offForMs: number().int().nonnegative()
|
|
12116
|
+
}),
|
|
12117
|
+
object({
|
|
12118
|
+
kind: literal("arithmetic"),
|
|
12119
|
+
op: _enum([
|
|
12120
|
+
"sum",
|
|
12121
|
+
"difference",
|
|
12122
|
+
"ratio"
|
|
12123
|
+
]),
|
|
12124
|
+
inputs: array(HelperMemberSchema).min(2).max(64)
|
|
12125
|
+
}),
|
|
12126
|
+
object({
|
|
12127
|
+
kind: literal("expression"),
|
|
12128
|
+
expr: string().min(1),
|
|
12129
|
+
inputs: array(object({
|
|
12130
|
+
name: string().min(1),
|
|
12131
|
+
member: HelperMemberSchema
|
|
12132
|
+
})).min(1).max(64),
|
|
12133
|
+
output: _enum(["number", "boolean"])
|
|
12134
|
+
}),
|
|
12135
|
+
object({
|
|
12136
|
+
kind: literal("derivative"),
|
|
12137
|
+
window: RollingWindowSchema,
|
|
12138
|
+
per: _enum([
|
|
12139
|
+
"second",
|
|
12140
|
+
"minute",
|
|
12141
|
+
"hour"
|
|
12142
|
+
]),
|
|
12143
|
+
source: HelperMemberSchema
|
|
12088
12144
|
})
|
|
12089
12145
|
]);
|
|
12090
12146
|
/** A composed device's stableId is this prefix plus the block id. */
|
|
@@ -12147,6 +12203,12 @@ var CompositionFieldSourceSchema = discriminatedUnion("kind", [
|
|
|
12147
12203
|
"all"
|
|
12148
12204
|
]),
|
|
12149
12205
|
reads: array(CompositionFieldReadSchema).min(1).max(64),
|
|
12206
|
+
/**
|
|
12207
|
+
* Set when the reads are an enum state, not a yes/no: the listed states
|
|
12208
|
+
* count as active (a cover is `open`). A state outside the list is inactive;
|
|
12209
|
+
* a read that is not a state at all is left out. Only `any` / `all` use it.
|
|
12210
|
+
*/
|
|
12211
|
+
activeWhen: array(string().min(1)).min(1).optional(),
|
|
12150
12212
|
/** `value` is the reading; the others are the member counts. */
|
|
12151
12213
|
publish: _enum([
|
|
12152
12214
|
"value",
|
|
@@ -17374,7 +17436,22 @@ var BrokerProviderInfoSchema = object({
|
|
|
17374
17436
|
*/
|
|
17375
17437
|
interactiveConnectPath: string().min(1).optional(),
|
|
17376
17438
|
/** Relative hub path to disconnect the linked account (same popup pattern). */
|
|
17377
|
-
interactiveDisconnectPath: string().min(1).optional()
|
|
17439
|
+
interactiveDisconnectPath: string().min(1).optional(),
|
|
17440
|
+
/**
|
|
17441
|
+
* The kind signs in through a server-held interactive session instead of
|
|
17442
|
+
* (or before) typed credentials. `basePath` is a hub-relative route set
|
|
17443
|
+
* served by the owning addon (`/addon/<id>/...`) speaking the sign-in
|
|
17444
|
+
* contract: `POST {basePath}/start` (body: the form's settings) answers
|
|
17445
|
+
* `{ sessionId, loginUrl }`; `GET {basePath}/status?sessionId=` answers
|
|
17446
|
+
* `{ phase: 'starting' | 'awaiting-login' | 'captured' | 'error' |
|
|
17447
|
+
* 'cancelled', loginUrl, error }`; `POST {basePath}/commit`
|
|
17448
|
+
* (`{ sessionId, name, brokerId? }`) stores the credentials on a new or
|
|
17449
|
+
* existing broker and answers `{ brokerId }`; `POST {basePath}/cancel`
|
|
17450
|
+
* (`{ sessionId }`) drops the session. The dialog that edits a broker
|
|
17451
|
+
* offers it as the default path; the fields the session fills are
|
|
17452
|
+
* marked `filledBySignIn` in the kind's settings schema.
|
|
17453
|
+
*/
|
|
17454
|
+
signIn: object({ basePath: string().min(1) }).optional()
|
|
17378
17455
|
}))
|
|
17379
17456
|
});
|
|
17380
17457
|
var ListInputSchema = object({
|
|
@@ -18608,13 +18685,17 @@ Object.freeze({
|
|
|
18608
18685
|
latchedAt: {
|
|
18609
18686
|
kind: "fixed",
|
|
18610
18687
|
result: ["number", "null"]
|
|
18688
|
+
},
|
|
18689
|
+
schmitt: {
|
|
18690
|
+
kind: "fixed",
|
|
18691
|
+
result: ["boolean", "null"]
|
|
18611
18692
|
}
|
|
18612
18693
|
});
|
|
18613
18694
|
/**
|
|
18614
18695
|
* One catalog row per base reading a group helper can build (D944 §3).
|
|
18615
18696
|
* Data, not a form default written into the block.
|
|
18616
18697
|
*/
|
|
18617
|
-
var NOW$
|
|
18698
|
+
var NOW$2 = {
|
|
18618
18699
|
fieldPath: "lastFetchedAt",
|
|
18619
18700
|
expr: "now"
|
|
18620
18701
|
};
|
|
@@ -18628,6 +18709,8 @@ function numeric(input) {
|
|
|
18628
18709
|
family: "numeric",
|
|
18629
18710
|
deviceType: DeviceType.Sensor,
|
|
18630
18711
|
memberDeviceType: DeviceType.Sensor,
|
|
18712
|
+
memberDeviceTypes: [DeviceType.Sensor],
|
|
18713
|
+
activeWhen: void 0,
|
|
18631
18714
|
commandCaps: [],
|
|
18632
18715
|
baseUnit: baseUnitOf(input.quantity),
|
|
18633
18716
|
aggregates: NUMERIC_AGGREGATES,
|
|
@@ -18643,6 +18726,8 @@ function binary(input) {
|
|
|
18643
18726
|
family: "binary",
|
|
18644
18727
|
deviceType: DeviceType.Sensor,
|
|
18645
18728
|
memberDeviceType: DeviceType.Sensor,
|
|
18729
|
+
memberDeviceTypes: [DeviceType.Sensor],
|
|
18730
|
+
activeWhen: void 0,
|
|
18646
18731
|
commandCaps: [],
|
|
18647
18732
|
quantity: "none",
|
|
18648
18733
|
baseUnit: void 0,
|
|
@@ -18660,7 +18745,7 @@ var GROUP_TEMPLATES = [
|
|
|
18660
18745
|
quantity: "temperature",
|
|
18661
18746
|
defaultAggregate: "mean",
|
|
18662
18747
|
empty: "null",
|
|
18663
|
-
companions: [NOW$
|
|
18748
|
+
companions: [NOW$2]
|
|
18664
18749
|
}),
|
|
18665
18750
|
numeric({
|
|
18666
18751
|
id: "humidity",
|
|
@@ -18671,7 +18756,7 @@ var GROUP_TEMPLATES = [
|
|
|
18671
18756
|
quantity: "humidity",
|
|
18672
18757
|
defaultAggregate: "mean",
|
|
18673
18758
|
empty: "null",
|
|
18674
|
-
companions: [NOW$
|
|
18759
|
+
companions: [NOW$2]
|
|
18675
18760
|
}),
|
|
18676
18761
|
numeric({
|
|
18677
18762
|
id: "pressure",
|
|
@@ -18682,7 +18767,7 @@ var GROUP_TEMPLATES = [
|
|
|
18682
18767
|
quantity: "pressure",
|
|
18683
18768
|
defaultAggregate: "mean",
|
|
18684
18769
|
empty: "null",
|
|
18685
|
-
companions: [NOW$
|
|
18770
|
+
companions: [NOW$2]
|
|
18686
18771
|
}),
|
|
18687
18772
|
numeric({
|
|
18688
18773
|
id: "illuminance",
|
|
@@ -18693,7 +18778,7 @@ var GROUP_TEMPLATES = [
|
|
|
18693
18778
|
quantity: "illuminance",
|
|
18694
18779
|
defaultAggregate: "mean",
|
|
18695
18780
|
empty: "null",
|
|
18696
|
-
companions: [NOW$
|
|
18781
|
+
companions: [NOW$2]
|
|
18697
18782
|
}),
|
|
18698
18783
|
numeric({
|
|
18699
18784
|
id: "power",
|
|
@@ -18704,7 +18789,7 @@ var GROUP_TEMPLATES = [
|
|
|
18704
18789
|
quantity: "power",
|
|
18705
18790
|
defaultAggregate: "sum",
|
|
18706
18791
|
empty: "omit",
|
|
18707
|
-
companions: [NOW$
|
|
18792
|
+
companions: [NOW$2]
|
|
18708
18793
|
}),
|
|
18709
18794
|
numeric({
|
|
18710
18795
|
id: "energy",
|
|
@@ -18715,7 +18800,7 @@ var GROUP_TEMPLATES = [
|
|
|
18715
18800
|
quantity: "energy",
|
|
18716
18801
|
defaultAggregate: "sum",
|
|
18717
18802
|
empty: "omit",
|
|
18718
|
-
companions: [NOW$
|
|
18803
|
+
companions: [NOW$2]
|
|
18719
18804
|
}),
|
|
18720
18805
|
numeric({
|
|
18721
18806
|
id: "battery",
|
|
@@ -18750,7 +18835,7 @@ var GROUP_TEMPLATES = [
|
|
|
18750
18835
|
quantity: "device",
|
|
18751
18836
|
defaultAggregate: "mean",
|
|
18752
18837
|
empty: "null",
|
|
18753
|
-
companions: [NOW$
|
|
18838
|
+
companions: [NOW$2]
|
|
18754
18839
|
}),
|
|
18755
18840
|
binary({
|
|
18756
18841
|
id: "motion",
|
|
@@ -18844,6 +18929,11 @@ var GROUP_TEMPLATES = [
|
|
|
18844
18929
|
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.",
|
|
18845
18930
|
deviceType: DeviceType.Switch,
|
|
18846
18931
|
outputCap: "switch",
|
|
18932
|
+
outputField: "on",
|
|
18933
|
+
member: {
|
|
18934
|
+
cap: "switch",
|
|
18935
|
+
fieldPath: "on"
|
|
18936
|
+
},
|
|
18847
18937
|
commandCaps: ["switch"]
|
|
18848
18938
|
}),
|
|
18849
18939
|
actuator({
|
|
@@ -18851,29 +18941,130 @@ var GROUP_TEMPLATES = [
|
|
|
18851
18941
|
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.",
|
|
18852
18942
|
deviceType: DeviceType.Light,
|
|
18853
18943
|
outputCap: "switch",
|
|
18944
|
+
outputField: "on",
|
|
18945
|
+
member: {
|
|
18946
|
+
cap: "switch",
|
|
18947
|
+
fieldPath: "on"
|
|
18948
|
+
},
|
|
18854
18949
|
commandCaps: [
|
|
18855
18950
|
"switch",
|
|
18856
18951
|
"brightness",
|
|
18857
18952
|
"color"
|
|
18858
18953
|
]
|
|
18954
|
+
}),
|
|
18955
|
+
actuator({
|
|
18956
|
+
id: "fan",
|
|
18957
|
+
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.",
|
|
18958
|
+
deviceType: DeviceType.Fan,
|
|
18959
|
+
outputCap: "switch",
|
|
18960
|
+
outputField: "on",
|
|
18961
|
+
member: {
|
|
18962
|
+
cap: "switch",
|
|
18963
|
+
fieldPath: "on"
|
|
18964
|
+
},
|
|
18965
|
+
commandCaps: ["switch", "fan-control"]
|
|
18966
|
+
}),
|
|
18967
|
+
actuator({
|
|
18968
|
+
id: "cover",
|
|
18969
|
+
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.",
|
|
18970
|
+
deviceType: DeviceType.Cover,
|
|
18971
|
+
outputCap: "group-active",
|
|
18972
|
+
outputField: "active",
|
|
18973
|
+
member: {
|
|
18974
|
+
cap: "cover",
|
|
18975
|
+
fieldPath: "state"
|
|
18976
|
+
},
|
|
18977
|
+
activeWhen: [
|
|
18978
|
+
"open",
|
|
18979
|
+
"opening",
|
|
18980
|
+
"stopped"
|
|
18981
|
+
],
|
|
18982
|
+
commandCaps: ["cover"]
|
|
18983
|
+
}),
|
|
18984
|
+
actuator({
|
|
18985
|
+
id: "valve",
|
|
18986
|
+
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.",
|
|
18987
|
+
deviceType: DeviceType.Valve,
|
|
18988
|
+
outputCap: "group-active",
|
|
18989
|
+
outputField: "active",
|
|
18990
|
+
member: {
|
|
18991
|
+
cap: "valve",
|
|
18992
|
+
fieldPath: "state"
|
|
18993
|
+
},
|
|
18994
|
+
activeWhen: [
|
|
18995
|
+
"open",
|
|
18996
|
+
"opening",
|
|
18997
|
+
"stopped"
|
|
18998
|
+
],
|
|
18999
|
+
commandCaps: ["valve"]
|
|
19000
|
+
}),
|
|
19001
|
+
actuator({
|
|
19002
|
+
id: "lock",
|
|
19003
|
+
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.",
|
|
19004
|
+
deviceType: DeviceType.Lock,
|
|
19005
|
+
outputCap: "group-active",
|
|
19006
|
+
outputField: "active",
|
|
19007
|
+
member: {
|
|
19008
|
+
cap: "lock-control",
|
|
19009
|
+
fieldPath: "state"
|
|
19010
|
+
},
|
|
19011
|
+
activeWhen: ["locked"],
|
|
19012
|
+
commandCaps: ["lock-control"]
|
|
19013
|
+
}),
|
|
19014
|
+
actuator({
|
|
19015
|
+
id: "media-player",
|
|
19016
|
+
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.",
|
|
19017
|
+
deviceType: DeviceType.MediaPlayer,
|
|
19018
|
+
outputCap: "group-active",
|
|
19019
|
+
outputField: "active",
|
|
19020
|
+
member: {
|
|
19021
|
+
cap: "media-player",
|
|
19022
|
+
fieldPath: "state"
|
|
19023
|
+
},
|
|
19024
|
+
activeWhen: ["playing", "buffering"],
|
|
19025
|
+
commandCaps: ["media-player"]
|
|
19026
|
+
}),
|
|
19027
|
+
actuator({
|
|
19028
|
+
id: "climate",
|
|
19029
|
+
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.",
|
|
19030
|
+
deviceType: DeviceType.Thermostat,
|
|
19031
|
+
memberDeviceTypes: [DeviceType.Thermostat, DeviceType.Climate],
|
|
19032
|
+
outputCap: "group-active",
|
|
19033
|
+
outputField: "active",
|
|
19034
|
+
member: {
|
|
19035
|
+
cap: "climate-control",
|
|
19036
|
+
fieldPath: "mode"
|
|
19037
|
+
},
|
|
19038
|
+
activeWhen: [
|
|
19039
|
+
"heat",
|
|
19040
|
+
"cool",
|
|
19041
|
+
"auto",
|
|
19042
|
+
"heat_cool",
|
|
19043
|
+
"fan_only",
|
|
19044
|
+
"dry"
|
|
19045
|
+
],
|
|
19046
|
+
commandCaps: ["climate-control"]
|
|
18859
19047
|
})
|
|
18860
19048
|
];
|
|
18861
19049
|
function actuator(input) {
|
|
18862
19050
|
return {
|
|
18863
|
-
|
|
19051
|
+
id: input.id,
|
|
19052
|
+
summary: input.summary,
|
|
19053
|
+
deviceType: input.deviceType,
|
|
19054
|
+
outputCap: input.outputCap,
|
|
19055
|
+
outputField: input.outputField,
|
|
19056
|
+
commandCaps: input.commandCaps,
|
|
18864
19057
|
family: "actuator",
|
|
18865
19058
|
role: void 0,
|
|
18866
19059
|
memberDeviceType: input.deviceType,
|
|
18867
|
-
|
|
19060
|
+
memberDeviceTypes: input.memberDeviceTypes ?? [input.deviceType],
|
|
19061
|
+
activeWhen: input.activeWhen,
|
|
18868
19062
|
quantity: "none",
|
|
18869
19063
|
baseUnit: void 0,
|
|
18870
19064
|
aggregates: BINARY_AGGREGATES,
|
|
18871
19065
|
defaultAggregate: "any",
|
|
18872
19066
|
empty: "offline",
|
|
18873
|
-
accept: [
|
|
18874
|
-
cap: "switch",
|
|
18875
|
-
fieldPath: "on"
|
|
18876
|
-
}],
|
|
19067
|
+
accept: [input.member],
|
|
18877
19068
|
companions: [CHANGED]
|
|
18878
19069
|
};
|
|
18879
19070
|
}
|
|
@@ -46537,7 +46728,20 @@ var NcRuleInputSchema = object({
|
|
|
46537
46728
|
* save by the hub's grouping guard). `.optional()`, never `.default()`: the addon cap
|
|
46538
46729
|
* path does not run Zod defaults.
|
|
46539
46730
|
*/
|
|
46540
|
-
groupingSec: number().int().min(5).max(60).optional()
|
|
46731
|
+
groupingSec: number().int().min(5).max(60).optional(),
|
|
46732
|
+
/**
|
|
46733
|
+
* ASK ME TO CONFIRM DETECTIONS (#243): a DETECTION notification of this rule
|
|
46734
|
+
* carries "Correct" / "Wrong" buttons (and, where the channel has room, a
|
|
46735
|
+
* "Wrong, it is a <class>" choice). A tap marks the track for retraining, the
|
|
46736
|
+
* same mark the Library writes, and records whose notification it was and
|
|
46737
|
+
* when. A channel with no buttons gets the same two choices as links.
|
|
46738
|
+
*
|
|
46739
|
+
* `.optional()`, never `.default()` (a Zod default does not run on the addon
|
|
46740
|
+
* cap path): absent and `false` both mean off, which is what every rule
|
|
46741
|
+
* authored before this field meant. An editor turns it off by writing
|
|
46742
|
+
* `false`, so it needs no `clear` key.
|
|
46743
|
+
*/
|
|
46744
|
+
askVerdict: boolean().optional()
|
|
46541
46745
|
});
|
|
46542
46746
|
/**
|
|
46543
46747
|
* Partial patch for `updateRule` — any subset of the input fields, plus the
|
|
@@ -56994,7 +57198,7 @@ var BatteryStatusSchema = object({
|
|
|
56994
57198
|
*/
|
|
56995
57199
|
binary: boolean().optional().meta({ label: "Binary indicator" })
|
|
56996
57200
|
});
|
|
56997
|
-
DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat;
|
|
57201
|
+
DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.EventEmitter;
|
|
56998
57202
|
method(object({
|
|
56999
57203
|
deviceId: number(),
|
|
57000
57204
|
/** Bound on the wait. Sensible range 3000–10000ms. */
|
|
@@ -58738,7 +58942,13 @@ results: array(object({
|
|
|
58738
58942
|
/** Ms epoch of the attempt. */
|
|
58739
58943
|
at: number()
|
|
58740
58944
|
})) });
|
|
58741
|
-
DeviceType.Switch, DeviceType.Light;
|
|
58945
|
+
DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Cover, DeviceType.Valve, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.Thermostat, DeviceType.Climate;
|
|
58946
|
+
object({
|
|
58947
|
+
active: boolean().meta({ label: "Active" }),
|
|
58948
|
+
/** Ms epoch when the slice was last updated. */
|
|
58949
|
+
lastChangedAt: number()
|
|
58950
|
+
});
|
|
58951
|
+
DeviceType.Cover, DeviceType.Valve, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.Climate, DeviceType.Thermostat;
|
|
58742
58952
|
object({
|
|
58743
58953
|
/** Members whose current value entered the aggregate. */
|
|
58744
58954
|
included: number().int().nonnegative().meta(readingMeta("count", {
|
|
@@ -58756,7 +58966,7 @@ object({
|
|
|
58756
58966
|
label: "Members"
|
|
58757
58967
|
}))
|
|
58758
58968
|
});
|
|
58759
|
-
DeviceType.Sensor, DeviceType.Switch, DeviceType.Light;
|
|
58969
|
+
DeviceType.Sensor, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Cover, DeviceType.Valve, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.Thermostat, DeviceType.Climate;
|
|
58760
58970
|
object({
|
|
58761
58971
|
/** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
|
|
58762
58972
|
position: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
@@ -59663,7 +59873,14 @@ DeviceType.Lock, method(object({
|
|
|
59663
59873
|
auth: "protected"
|
|
59664
59874
|
}), method(object({
|
|
59665
59875
|
deviceId: number().int().nonnegative(),
|
|
59666
|
-
code: string().min(1).optional()
|
|
59876
|
+
code: string().min(1).optional(),
|
|
59877
|
+
/**
|
|
59878
|
+
* Honoured by a helper lock GROUP only (D944): unlocking several doors
|
|
59879
|
+
* with one call is refused unless the caller says it was confirmed. A
|
|
59880
|
+
* single lock ignores it. The refusal lives in the callee, so no
|
|
59881
|
+
* automation or API caller reaches the doors by skipping a dialog.
|
|
59882
|
+
*/
|
|
59883
|
+
confirm: boolean().optional()
|
|
59667
59884
|
}), _void(), {
|
|
59668
59885
|
kind: "mutation",
|
|
59669
59886
|
auth: "protected"
|
|
@@ -61583,9 +61800,9 @@ object({
|
|
|
61583
61800
|
/** Cumulative energy in kilowatt-hours since the meter was reset. */
|
|
61584
61801
|
kwhTotal: number().optional().meta(readingMeta("energy", { label: "Energy" })),
|
|
61585
61802
|
/** Voltage in volts. */
|
|
61586
|
-
volts: number().optional().meta(readingMeta("voltage")),
|
|
61803
|
+
volts: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
|
|
61587
61804
|
/** Current in amperes. */
|
|
61588
|
-
amps: number().optional().meta(readingMeta("current")),
|
|
61805
|
+
amps: number().optional().meta(readingMeta("current", { label: "Current" })),
|
|
61589
61806
|
/** Apparent power in volt-amperes. */
|
|
61590
61807
|
va: number().optional().meta(readingMeta("apparent-power")),
|
|
61591
61808
|
/** Power factor (0..1) if reported. */
|
|
@@ -61593,7 +61810,23 @@ object({
|
|
|
61593
61810
|
/** Ms epoch when the slice was last updated. */
|
|
61594
61811
|
lastFetchedAt: number()
|
|
61595
61812
|
});
|
|
61596
|
-
|
|
61813
|
+
[
|
|
61814
|
+
DeviceType.Sensor,
|
|
61815
|
+
DeviceType.Switch,
|
|
61816
|
+
DeviceType.Light,
|
|
61817
|
+
DeviceType.Fan,
|
|
61818
|
+
DeviceType.Climate,
|
|
61819
|
+
DeviceType.Thermostat,
|
|
61820
|
+
DeviceType.Humidifier,
|
|
61821
|
+
DeviceType.WaterHeater,
|
|
61822
|
+
DeviceType.MediaPlayer,
|
|
61823
|
+
DeviceType.Washer,
|
|
61824
|
+
DeviceType.Dryer,
|
|
61825
|
+
DeviceType.Dishwasher,
|
|
61826
|
+
DeviceType.Vacuum,
|
|
61827
|
+
DeviceType.LawnMower,
|
|
61828
|
+
DeviceType.PetFeeder
|
|
61829
|
+
].filter((type) => type !== DeviceType.Sensor);
|
|
61597
61830
|
/**
|
|
61598
61831
|
* Presence cap. Models HA `person.*` and `device_tracker.*` entities
|
|
61599
61832
|
* on `DeviceType.Presence`. Read-only — no setters: presence is
|
|
@@ -64079,7 +64312,7 @@ object({
|
|
|
64079
64312
|
/** Ms epoch of the last state change. Useful for UI "X minutes ago". */
|
|
64080
64313
|
lastChangedAt: number()
|
|
64081
64314
|
});
|
|
64082
|
-
DeviceType.Switch, DeviceType.Siren, DeviceType.Light, method(object({
|
|
64315
|
+
DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, method(object({
|
|
64083
64316
|
deviceId: number(),
|
|
64084
64317
|
on: boolean()
|
|
64085
64318
|
}), _void(), {
|
|
@@ -65873,8 +66106,9 @@ var trainingCapability = {
|
|
|
65873
66106
|
})
|
|
65874
66107
|
}
|
|
65875
66108
|
};
|
|
66109
|
+
DeviceFeature.FanSpeed, DeviceFeature.FanPreset, DeviceFeature.FanDirection, DeviceFeature.FanOscillating, DeviceFeature.CoverPositionable, DeviceFeature.CoverTilt, DeviceFeature.ValvePositionable, DeviceFeature.MediaPlayerVolume, DeviceFeature.ClimateFanMode;
|
|
65876
66110
|
SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
|
|
65877
|
-
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;
|
|
66111
|
+
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;
|
|
65878
66112
|
String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
|
|
65879
66113
|
DeviceRole.BinarySensor, DeviceRole.MotionSensor;
|
|
65880
66114
|
new Set(CAP_NAMES);
|
|
@@ -69150,6 +69384,13 @@ Object.freeze({
|
|
|
69150
69384
|
access: "view",
|
|
69151
69385
|
role: "viewer"
|
|
69152
69386
|
},
|
|
69387
|
+
"groupActive.getStatus": {
|
|
69388
|
+
capName: "group-active",
|
|
69389
|
+
capScope: "device",
|
|
69390
|
+
addonId: null,
|
|
69391
|
+
access: "view",
|
|
69392
|
+
role: "viewer"
|
|
69393
|
+
},
|
|
69153
69394
|
"groupCommands.getStatus": {
|
|
69154
69395
|
capName: "group-commands",
|
|
69155
69396
|
capScope: "device",
|
|
@@ -79025,6 +79266,10 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
79025
79266
|
icon: "flame"
|
|
79026
79267
|
}]
|
|
79027
79268
|
},
|
|
79269
|
+
"group-active": {
|
|
79270
|
+
scope: "device",
|
|
79271
|
+
noun: t("Group state", "Stato del gruppo")
|
|
79272
|
+
},
|
|
79028
79273
|
"group-commands": {
|
|
79029
79274
|
scope: "device",
|
|
79030
79275
|
noun: t("Group command", "Comando di gruppo")
|
|
@@ -80571,6 +80816,11 @@ Object.freeze({
|
|
|
80571
80816
|
form: "single",
|
|
80572
80817
|
optional: false
|
|
80573
80818
|
}],
|
|
80819
|
+
"groupActive.getStatus": [{
|
|
80820
|
+
name: "deviceId",
|
|
80821
|
+
form: "single",
|
|
80822
|
+
optional: false
|
|
80823
|
+
}],
|
|
80574
80824
|
"groupCommands.getStatus": [{
|
|
80575
80825
|
name: "deviceId",
|
|
80576
80826
|
form: "single",
|
|
@@ -36,7 +36,7 @@ async function r() {
|
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
38
|
"@camstack/types": {
|
|
39
|
-
version: "1.2.
|
|
39
|
+
version: "1.2.427",
|
|
40
40
|
scope: "default",
|
|
41
41
|
shareConfig: {
|
|
42
42
|
singleton: !0,
|
|
@@ -81,7 +81,7 @@ async function r() {
|
|
|
81
81
|
}
|
|
82
82
|
},
|
|
83
83
|
"@camstack/ui-library": {
|
|
84
|
-
version: "1.2.
|
|
84
|
+
version: "1.2.336",
|
|
85
85
|
scope: "default",
|
|
86
86
|
shareConfig: {
|
|
87
87
|
singleton: !0,
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
require("./dist-
|
|
2
|
+
require("./dist-Cv8pFcIo.js");
|
|
3
3
|
const require_orchestrator_training_addon = require("./orchestrator/training.addon.js");
|
|
4
4
|
const require_providers_modal_training_modal_addon = require("./providers/modal/training-modal.addon.js");
|
|
5
5
|
//#region src/providers/fake/fake-provider.ts
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_dist = require("../dist-
|
|
2
|
+
const require_dist = require("../dist-Cv8pFcIo.js");
|
|
3
3
|
let node_path = require("node:path");
|
|
4
4
|
node_path = require_dist.__toESM(node_path);
|
|
5
5
|
let node_crypto = require("node:crypto");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as addonPagesSourceCapability, i as TrainingResultSchema, l as BaseAddon, m as defineRecordKinds, n as TrainingJobSchema, o as parseTrainingEventLine, r as TrainingJobSpecSchema, s as trainingCapability, t as TRAINING_JOB_SCHEMA, u as RECORD_MAX_DATA_BYTES } from "../dist-
|
|
1
|
+
import { a as addonPagesSourceCapability, i as TrainingResultSchema, l as BaseAddon, m as defineRecordKinds, n as TrainingJobSchema, o as parseTrainingEventLine, r as TrainingJobSpecSchema, s as trainingCapability, t as TRAINING_JOB_SCHEMA, u as RECORD_MAX_DATA_BYTES } from "../dist-Bna6QSX9.mjs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { createHash } from "node:crypto";
|
|
4
4
|
import { createReadStream } from "node:fs";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { d as e, u as t, w as n, y as r } from "./_virtual_mf___mfe_internal__addon_training_page__loadShare__react__loadShare__.js-CEvdvp1T.mjs";
|
|
2
2
|
import { n as i, r as a, t as o } from "./_virtual_mf___mfe_internal__addon_training_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DnrbBvrw.mjs";
|
|
3
3
|
import { n as s, t as c } from "./chevron-right-cA8Hucbi.mjs";
|
|
4
|
-
import { g as l } from "./responsive-
|
|
4
|
+
import { g as l } from "./responsive-Cx4quvGq.mjs";
|
|
5
5
|
//#region ../ui-library/src/composites/widget-panel.tsx
|
|
6
6
|
n();
|
|
7
7
|
function u({ title: e, icon: t, headerRight: n, collapsible: l = !1, defaultOpen: u = !0, open: d, onOpenChange: f, bodyClassName: p = "p-3", children: m }) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_dist = require("../../dist-
|
|
2
|
+
const require_dist = require("../../dist-Cv8pFcIo.js");
|
|
3
3
|
let node_path = require("node:path");
|
|
4
4
|
node_path = require_dist.__toESM(node_path, 1);
|
|
5
5
|
let node_crypto = require("node:crypto");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as record, S as object, _ as isSecretClear, b as boolean, c as trainingProviderCapability, d as SECRET_CLEAR, f as arrayItemFieldPath, g as globalSecretScope, h as entryBody, l as BaseAddon, p as defineEntryKind, v as isSecretMarker, w as string, x as number, y as toSecretFieldView } from "../../dist-
|
|
1
|
+
import { C as record, S as object, _ as isSecretClear, b as boolean, c as trainingProviderCapability, d as SECRET_CLEAR, f as arrayItemFieldPath, g as globalSecretScope, h as entryBody, l as BaseAddon, p as defineEntryKind, v as isSecretMarker, w as string, x as number, y as toSecretFieldView } from "../../dist-Bna6QSX9.mjs";
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
3
|
import path, { dirname, posix } from "node:path";
|
|
4
4
|
import { createHash, createPrivateKey, createPublicKey, createSign, randomBytes, randomUUID } from "node:crypto";
|
package/dist/remoteEntry.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-
|
|
1
|
+
import { n as e, t } from "./virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-C-gbqU_M.mjs";
|
|
2
2
|
export { t as get, e as init };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { b as e, d as t, g as n, l as r, n as i, u as a, w as o, y as s } from "./_virtual_mf___mfe_internal__addon_training_page__loadShare__react__loadShare__.js-CEvdvp1T.mjs";
|
|
2
2
|
import "./_virtual_mf___mfe_internal__addon_training_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DnrbBvrw.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { O as c } from "./_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-B6wwfPOo.mjs";
|
|
4
4
|
//#region ../ui-library/src/lib/shared-context.ts
|
|
5
5
|
o();
|
|
6
6
|
function l(e, t) {
|