@camstack/addon-training 0.1.91 → 0.1.92
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-Cli21_S4.mjs} +2 -2
- package/dist/{PrivacyMaskSettings-B3gzWS6Y.mjs → PrivacyMaskSettings-BqMnLgR4.mjs} +2 -2
- package/dist/{SceneMonitorEditor-CjxaItjN.mjs → SceneMonitorEditor-TOlMkkSx.mjs} +1 -1
- package/dist/_stub.js +55 -54
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-Cer78kD4.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-Ki3rRnXi.mjs} +3 -3
- package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-COkV6wxS.mjs +26 -0
- package/dist/{dist-B3Dz3xDZ.mjs → dist-BLeIfxL-.mjs} +243 -24
- package/dist/{dist-uLc6FQWF.js → dist-BYGiAfO5.js} +243 -24
- package/dist/{hostInit-C-l48gwp.mjs → hostInit-SSLNnzqp.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-CpnLw8Tf.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-wZ7jMF7F.mjs} +1 -1
- 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-CG3LeBz1.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",
|
|
@@ -18608,13 +18670,17 @@ Object.freeze({
|
|
|
18608
18670
|
latchedAt: {
|
|
18609
18671
|
kind: "fixed",
|
|
18610
18672
|
result: ["number", "null"]
|
|
18673
|
+
},
|
|
18674
|
+
schmitt: {
|
|
18675
|
+
kind: "fixed",
|
|
18676
|
+
result: ["boolean", "null"]
|
|
18611
18677
|
}
|
|
18612
18678
|
});
|
|
18613
18679
|
/**
|
|
18614
18680
|
* One catalog row per base reading a group helper can build (D944 §3).
|
|
18615
18681
|
* Data, not a form default written into the block.
|
|
18616
18682
|
*/
|
|
18617
|
-
var NOW$
|
|
18683
|
+
var NOW$2 = {
|
|
18618
18684
|
fieldPath: "lastFetchedAt",
|
|
18619
18685
|
expr: "now"
|
|
18620
18686
|
};
|
|
@@ -18628,6 +18694,8 @@ function numeric(input) {
|
|
|
18628
18694
|
family: "numeric",
|
|
18629
18695
|
deviceType: DeviceType.Sensor,
|
|
18630
18696
|
memberDeviceType: DeviceType.Sensor,
|
|
18697
|
+
memberDeviceTypes: [DeviceType.Sensor],
|
|
18698
|
+
activeWhen: void 0,
|
|
18631
18699
|
commandCaps: [],
|
|
18632
18700
|
baseUnit: baseUnitOf(input.quantity),
|
|
18633
18701
|
aggregates: NUMERIC_AGGREGATES,
|
|
@@ -18643,6 +18711,8 @@ function binary(input) {
|
|
|
18643
18711
|
family: "binary",
|
|
18644
18712
|
deviceType: DeviceType.Sensor,
|
|
18645
18713
|
memberDeviceType: DeviceType.Sensor,
|
|
18714
|
+
memberDeviceTypes: [DeviceType.Sensor],
|
|
18715
|
+
activeWhen: void 0,
|
|
18646
18716
|
commandCaps: [],
|
|
18647
18717
|
quantity: "none",
|
|
18648
18718
|
baseUnit: void 0,
|
|
@@ -18660,7 +18730,7 @@ var GROUP_TEMPLATES = [
|
|
|
18660
18730
|
quantity: "temperature",
|
|
18661
18731
|
defaultAggregate: "mean",
|
|
18662
18732
|
empty: "null",
|
|
18663
|
-
companions: [NOW$
|
|
18733
|
+
companions: [NOW$2]
|
|
18664
18734
|
}),
|
|
18665
18735
|
numeric({
|
|
18666
18736
|
id: "humidity",
|
|
@@ -18671,7 +18741,7 @@ var GROUP_TEMPLATES = [
|
|
|
18671
18741
|
quantity: "humidity",
|
|
18672
18742
|
defaultAggregate: "mean",
|
|
18673
18743
|
empty: "null",
|
|
18674
|
-
companions: [NOW$
|
|
18744
|
+
companions: [NOW$2]
|
|
18675
18745
|
}),
|
|
18676
18746
|
numeric({
|
|
18677
18747
|
id: "pressure",
|
|
@@ -18682,7 +18752,7 @@ var GROUP_TEMPLATES = [
|
|
|
18682
18752
|
quantity: "pressure",
|
|
18683
18753
|
defaultAggregate: "mean",
|
|
18684
18754
|
empty: "null",
|
|
18685
|
-
companions: [NOW$
|
|
18755
|
+
companions: [NOW$2]
|
|
18686
18756
|
}),
|
|
18687
18757
|
numeric({
|
|
18688
18758
|
id: "illuminance",
|
|
@@ -18693,7 +18763,7 @@ var GROUP_TEMPLATES = [
|
|
|
18693
18763
|
quantity: "illuminance",
|
|
18694
18764
|
defaultAggregate: "mean",
|
|
18695
18765
|
empty: "null",
|
|
18696
|
-
companions: [NOW$
|
|
18766
|
+
companions: [NOW$2]
|
|
18697
18767
|
}),
|
|
18698
18768
|
numeric({
|
|
18699
18769
|
id: "power",
|
|
@@ -18704,7 +18774,7 @@ var GROUP_TEMPLATES = [
|
|
|
18704
18774
|
quantity: "power",
|
|
18705
18775
|
defaultAggregate: "sum",
|
|
18706
18776
|
empty: "omit",
|
|
18707
|
-
companions: [NOW$
|
|
18777
|
+
companions: [NOW$2]
|
|
18708
18778
|
}),
|
|
18709
18779
|
numeric({
|
|
18710
18780
|
id: "energy",
|
|
@@ -18715,7 +18785,7 @@ var GROUP_TEMPLATES = [
|
|
|
18715
18785
|
quantity: "energy",
|
|
18716
18786
|
defaultAggregate: "sum",
|
|
18717
18787
|
empty: "omit",
|
|
18718
|
-
companions: [NOW$
|
|
18788
|
+
companions: [NOW$2]
|
|
18719
18789
|
}),
|
|
18720
18790
|
numeric({
|
|
18721
18791
|
id: "battery",
|
|
@@ -18750,7 +18820,7 @@ var GROUP_TEMPLATES = [
|
|
|
18750
18820
|
quantity: "device",
|
|
18751
18821
|
defaultAggregate: "mean",
|
|
18752
18822
|
empty: "null",
|
|
18753
|
-
companions: [NOW$
|
|
18823
|
+
companions: [NOW$2]
|
|
18754
18824
|
}),
|
|
18755
18825
|
binary({
|
|
18756
18826
|
id: "motion",
|
|
@@ -18844,6 +18914,11 @@ var GROUP_TEMPLATES = [
|
|
|
18844
18914
|
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
18915
|
deviceType: DeviceType.Switch,
|
|
18846
18916
|
outputCap: "switch",
|
|
18917
|
+
outputField: "on",
|
|
18918
|
+
member: {
|
|
18919
|
+
cap: "switch",
|
|
18920
|
+
fieldPath: "on"
|
|
18921
|
+
},
|
|
18847
18922
|
commandCaps: ["switch"]
|
|
18848
18923
|
}),
|
|
18849
18924
|
actuator({
|
|
@@ -18851,29 +18926,130 @@ var GROUP_TEMPLATES = [
|
|
|
18851
18926
|
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
18927
|
deviceType: DeviceType.Light,
|
|
18853
18928
|
outputCap: "switch",
|
|
18929
|
+
outputField: "on",
|
|
18930
|
+
member: {
|
|
18931
|
+
cap: "switch",
|
|
18932
|
+
fieldPath: "on"
|
|
18933
|
+
},
|
|
18854
18934
|
commandCaps: [
|
|
18855
18935
|
"switch",
|
|
18856
18936
|
"brightness",
|
|
18857
18937
|
"color"
|
|
18858
18938
|
]
|
|
18939
|
+
}),
|
|
18940
|
+
actuator({
|
|
18941
|
+
id: "fan",
|
|
18942
|
+
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.",
|
|
18943
|
+
deviceType: DeviceType.Fan,
|
|
18944
|
+
outputCap: "switch",
|
|
18945
|
+
outputField: "on",
|
|
18946
|
+
member: {
|
|
18947
|
+
cap: "switch",
|
|
18948
|
+
fieldPath: "on"
|
|
18949
|
+
},
|
|
18950
|
+
commandCaps: ["switch", "fan-control"]
|
|
18951
|
+
}),
|
|
18952
|
+
actuator({
|
|
18953
|
+
id: "cover",
|
|
18954
|
+
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.",
|
|
18955
|
+
deviceType: DeviceType.Cover,
|
|
18956
|
+
outputCap: "group-active",
|
|
18957
|
+
outputField: "active",
|
|
18958
|
+
member: {
|
|
18959
|
+
cap: "cover",
|
|
18960
|
+
fieldPath: "state"
|
|
18961
|
+
},
|
|
18962
|
+
activeWhen: [
|
|
18963
|
+
"open",
|
|
18964
|
+
"opening",
|
|
18965
|
+
"stopped"
|
|
18966
|
+
],
|
|
18967
|
+
commandCaps: ["cover"]
|
|
18968
|
+
}),
|
|
18969
|
+
actuator({
|
|
18970
|
+
id: "valve",
|
|
18971
|
+
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.",
|
|
18972
|
+
deviceType: DeviceType.Valve,
|
|
18973
|
+
outputCap: "group-active",
|
|
18974
|
+
outputField: "active",
|
|
18975
|
+
member: {
|
|
18976
|
+
cap: "valve",
|
|
18977
|
+
fieldPath: "state"
|
|
18978
|
+
},
|
|
18979
|
+
activeWhen: [
|
|
18980
|
+
"open",
|
|
18981
|
+
"opening",
|
|
18982
|
+
"stopped"
|
|
18983
|
+
],
|
|
18984
|
+
commandCaps: ["valve"]
|
|
18985
|
+
}),
|
|
18986
|
+
actuator({
|
|
18987
|
+
id: "lock",
|
|
18988
|
+
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.",
|
|
18989
|
+
deviceType: DeviceType.Lock,
|
|
18990
|
+
outputCap: "group-active",
|
|
18991
|
+
outputField: "active",
|
|
18992
|
+
member: {
|
|
18993
|
+
cap: "lock-control",
|
|
18994
|
+
fieldPath: "state"
|
|
18995
|
+
},
|
|
18996
|
+
activeWhen: ["locked"],
|
|
18997
|
+
commandCaps: ["lock-control"]
|
|
18998
|
+
}),
|
|
18999
|
+
actuator({
|
|
19000
|
+
id: "media-player",
|
|
19001
|
+
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.",
|
|
19002
|
+
deviceType: DeviceType.MediaPlayer,
|
|
19003
|
+
outputCap: "group-active",
|
|
19004
|
+
outputField: "active",
|
|
19005
|
+
member: {
|
|
19006
|
+
cap: "media-player",
|
|
19007
|
+
fieldPath: "state"
|
|
19008
|
+
},
|
|
19009
|
+
activeWhen: ["playing", "buffering"],
|
|
19010
|
+
commandCaps: ["media-player"]
|
|
19011
|
+
}),
|
|
19012
|
+
actuator({
|
|
19013
|
+
id: "climate",
|
|
19014
|
+
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.",
|
|
19015
|
+
deviceType: DeviceType.Thermostat,
|
|
19016
|
+
memberDeviceTypes: [DeviceType.Thermostat, DeviceType.Climate],
|
|
19017
|
+
outputCap: "group-active",
|
|
19018
|
+
outputField: "active",
|
|
19019
|
+
member: {
|
|
19020
|
+
cap: "climate-control",
|
|
19021
|
+
fieldPath: "mode"
|
|
19022
|
+
},
|
|
19023
|
+
activeWhen: [
|
|
19024
|
+
"heat",
|
|
19025
|
+
"cool",
|
|
19026
|
+
"auto",
|
|
19027
|
+
"heat_cool",
|
|
19028
|
+
"fan_only",
|
|
19029
|
+
"dry"
|
|
19030
|
+
],
|
|
19031
|
+
commandCaps: ["climate-control"]
|
|
18859
19032
|
})
|
|
18860
19033
|
];
|
|
18861
19034
|
function actuator(input) {
|
|
18862
19035
|
return {
|
|
18863
|
-
|
|
19036
|
+
id: input.id,
|
|
19037
|
+
summary: input.summary,
|
|
19038
|
+
deviceType: input.deviceType,
|
|
19039
|
+
outputCap: input.outputCap,
|
|
19040
|
+
outputField: input.outputField,
|
|
19041
|
+
commandCaps: input.commandCaps,
|
|
18864
19042
|
family: "actuator",
|
|
18865
19043
|
role: void 0,
|
|
18866
19044
|
memberDeviceType: input.deviceType,
|
|
18867
|
-
|
|
19045
|
+
memberDeviceTypes: input.memberDeviceTypes ?? [input.deviceType],
|
|
19046
|
+
activeWhen: input.activeWhen,
|
|
18868
19047
|
quantity: "none",
|
|
18869
19048
|
baseUnit: void 0,
|
|
18870
19049
|
aggregates: BINARY_AGGREGATES,
|
|
18871
19050
|
defaultAggregate: "any",
|
|
18872
19051
|
empty: "offline",
|
|
18873
|
-
accept: [
|
|
18874
|
-
cap: "switch",
|
|
18875
|
-
fieldPath: "on"
|
|
18876
|
-
}],
|
|
19052
|
+
accept: [input.member],
|
|
18877
19053
|
companions: [CHANGED]
|
|
18878
19054
|
};
|
|
18879
19055
|
}
|
|
@@ -46537,7 +46713,20 @@ var NcRuleInputSchema = object({
|
|
|
46537
46713
|
* save by the hub's grouping guard). `.optional()`, never `.default()`: the addon cap
|
|
46538
46714
|
* path does not run Zod defaults.
|
|
46539
46715
|
*/
|
|
46540
|
-
groupingSec: number().int().min(5).max(60).optional()
|
|
46716
|
+
groupingSec: number().int().min(5).max(60).optional(),
|
|
46717
|
+
/**
|
|
46718
|
+
* ASK ME TO CONFIRM DETECTIONS (#243): a DETECTION notification of this rule
|
|
46719
|
+
* carries "Correct" / "Wrong" buttons (and, where the channel has room, a
|
|
46720
|
+
* "Wrong, it is a <class>" choice). A tap marks the track for retraining, the
|
|
46721
|
+
* same mark the Library writes, and records whose notification it was and
|
|
46722
|
+
* when. A channel with no buttons gets the same two choices as links.
|
|
46723
|
+
*
|
|
46724
|
+
* `.optional()`, never `.default()` (a Zod default does not run on the addon
|
|
46725
|
+
* cap path): absent and `false` both mean off, which is what every rule
|
|
46726
|
+
* authored before this field meant. An editor turns it off by writing
|
|
46727
|
+
* `false`, so it needs no `clear` key.
|
|
46728
|
+
*/
|
|
46729
|
+
askVerdict: boolean().optional()
|
|
46541
46730
|
});
|
|
46542
46731
|
/**
|
|
46543
46732
|
* Partial patch for `updateRule` — any subset of the input fields, plus the
|
|
@@ -58738,7 +58927,13 @@ results: array(object({
|
|
|
58738
58927
|
/** Ms epoch of the attempt. */
|
|
58739
58928
|
at: number()
|
|
58740
58929
|
})) });
|
|
58741
|
-
DeviceType.Switch, DeviceType.Light;
|
|
58930
|
+
DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Cover, DeviceType.Valve, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.Thermostat, DeviceType.Climate;
|
|
58931
|
+
object({
|
|
58932
|
+
active: boolean().meta({ label: "Active" }),
|
|
58933
|
+
/** Ms epoch when the slice was last updated. */
|
|
58934
|
+
lastChangedAt: number()
|
|
58935
|
+
});
|
|
58936
|
+
DeviceType.Cover, DeviceType.Valve, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.Climate, DeviceType.Thermostat;
|
|
58742
58937
|
object({
|
|
58743
58938
|
/** Members whose current value entered the aggregate. */
|
|
58744
58939
|
included: number().int().nonnegative().meta(readingMeta("count", {
|
|
@@ -58756,7 +58951,7 @@ object({
|
|
|
58756
58951
|
label: "Members"
|
|
58757
58952
|
}))
|
|
58758
58953
|
});
|
|
58759
|
-
DeviceType.Sensor, DeviceType.Switch, DeviceType.Light;
|
|
58954
|
+
DeviceType.Sensor, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Cover, DeviceType.Valve, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.Thermostat, DeviceType.Climate;
|
|
58760
58955
|
object({
|
|
58761
58956
|
/** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
|
|
58762
58957
|
position: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
@@ -59663,7 +59858,14 @@ DeviceType.Lock, method(object({
|
|
|
59663
59858
|
auth: "protected"
|
|
59664
59859
|
}), method(object({
|
|
59665
59860
|
deviceId: number().int().nonnegative(),
|
|
59666
|
-
code: string().min(1).optional()
|
|
59861
|
+
code: string().min(1).optional(),
|
|
59862
|
+
/**
|
|
59863
|
+
* Honoured by a helper lock GROUP only (D944): unlocking several doors
|
|
59864
|
+
* with one call is refused unless the caller says it was confirmed. A
|
|
59865
|
+
* single lock ignores it. The refusal lives in the callee, so no
|
|
59866
|
+
* automation or API caller reaches the doors by skipping a dialog.
|
|
59867
|
+
*/
|
|
59868
|
+
confirm: boolean().optional()
|
|
59667
59869
|
}), _void(), {
|
|
59668
59870
|
kind: "mutation",
|
|
59669
59871
|
auth: "protected"
|
|
@@ -64079,7 +64281,7 @@ object({
|
|
|
64079
64281
|
/** Ms epoch of the last state change. Useful for UI "X minutes ago". */
|
|
64080
64282
|
lastChangedAt: number()
|
|
64081
64283
|
});
|
|
64082
|
-
DeviceType.Switch, DeviceType.Siren, DeviceType.Light, method(object({
|
|
64284
|
+
DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, method(object({
|
|
64083
64285
|
deviceId: number(),
|
|
64084
64286
|
on: boolean()
|
|
64085
64287
|
}), _void(), {
|
|
@@ -65873,6 +66075,7 @@ var trainingCapability = {
|
|
|
65873
66075
|
})
|
|
65874
66076
|
}
|
|
65875
66077
|
};
|
|
66078
|
+
DeviceFeature.FanSpeed, DeviceFeature.FanPreset, DeviceFeature.FanDirection, DeviceFeature.FanOscillating, DeviceFeature.CoverPositionable, DeviceFeature.CoverTilt, DeviceFeature.ValvePositionable, DeviceFeature.MediaPlayerVolume, DeviceFeature.ClimateFanMode;
|
|
65876
66079
|
SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
|
|
65877
66080
|
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;
|
|
65878
66081
|
String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
|
|
@@ -69150,6 +69353,13 @@ Object.freeze({
|
|
|
69150
69353
|
access: "view",
|
|
69151
69354
|
role: "viewer"
|
|
69152
69355
|
},
|
|
69356
|
+
"groupActive.getStatus": {
|
|
69357
|
+
capName: "group-active",
|
|
69358
|
+
capScope: "device",
|
|
69359
|
+
addonId: null,
|
|
69360
|
+
access: "view",
|
|
69361
|
+
role: "viewer"
|
|
69362
|
+
},
|
|
69153
69363
|
"groupCommands.getStatus": {
|
|
69154
69364
|
capName: "group-commands",
|
|
69155
69365
|
capScope: "device",
|
|
@@ -79025,6 +79235,10 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
79025
79235
|
icon: "flame"
|
|
79026
79236
|
}]
|
|
79027
79237
|
},
|
|
79238
|
+
"group-active": {
|
|
79239
|
+
scope: "device",
|
|
79240
|
+
noun: t("Group state", "Stato del gruppo")
|
|
79241
|
+
},
|
|
79028
79242
|
"group-commands": {
|
|
79029
79243
|
scope: "device",
|
|
79030
79244
|
noun: t("Group command", "Comando di gruppo")
|
|
@@ -80571,6 +80785,11 @@ Object.freeze({
|
|
|
80571
80785
|
form: "single",
|
|
80572
80786
|
optional: false
|
|
80573
80787
|
}],
|
|
80788
|
+
"groupActive.getStatus": [{
|
|
80789
|
+
name: "deviceId",
|
|
80790
|
+
form: "single",
|
|
80791
|
+
optional: false
|
|
80792
|
+
}],
|
|
80574
80793
|
"groupCommands.getStatus": [{
|
|
80575
80794
|
name: "deviceId",
|
|
80576
80795
|
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.424",
|
|
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.335",
|
|
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-BYGiAfO5.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-BYGiAfO5.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-BLeIfxL-.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-wZ7jMF7F.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-BYGiAfO5.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-BLeIfxL-.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-CG3LeBz1.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-COkV6wxS.mjs";
|
|
4
4
|
//#region ../ui-library/src/lib/shared-context.ts
|
|
5
5
|
o();
|
|
6
6
|
function l(e, t) {
|
|
@@ -2762,7 +2762,7 @@ async function or(e) {
|
|
|
2762
2762
|
}
|
|
2763
2763
|
}
|
|
2764
2764
|
async function sr() {
|
|
2765
|
-
return ir ||= or(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-
|
|
2765
|
+
return ir ||= or(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-Ki3rRnXi.mjs")).catch((e) => {
|
|
2766
2766
|
throw ir = void 0, e;
|
|
2767
2767
|
}), ir;
|
|
2768
2768
|
}
|
package/package.json
CHANGED