@camstack/addon-training 0.1.89 → 0.1.91
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-1v53BmVJ.mjs → MotionZonesSettings-kbJlg0c5.mjs} +2 -2
- package/dist/{PrivacyMaskSettings-B1WrMGZy.mjs → PrivacyMaskSettings-B3gzWS6Y.mjs} +2 -2
- package/dist/{SceneMonitorEditor-wJjFFoHA.mjs → SceneMonitorEditor-CjxaItjN.mjs} +1 -1
- package/dist/_stub.js +44495 -23332
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-3rzzcUyu.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-Cer78kD4.mjs} +3 -3
- package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DM1LS5rC.mjs +26 -0
- package/dist/{dist-CUYMVsX0.mjs → dist-B3Dz3xDZ.mjs} +273 -28
- package/dist/{dist-CnS9QrjX.js → dist-uLc6FQWF.js} +273 -28
- package/dist/{hostInit-DNFhB54Y.mjs → hostInit-C-l48gwp.mjs} +2 -2
- package/dist/{icons-DGnDNIHD.mjs → icons-BQdiqxUM.mjs} +1482 -1509
- 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-BvnJqnez.mjs → player-overlays-DrA4TUe3.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-Dfx762zU.mjs → responsive-C46lpRSX.mjs} +1 -1
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-tkZ3pY5a.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-qVIpiQZD.mjs} +1 -1
- package/dist/{zoom-out-DzQMgNQw.mjs → zoom-out-YWRm0VbK.mjs} +38 -11
- package/package.json +1 -1
- package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-VNxr7qQe.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-0sD_LHLI.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).
|
|
@@ -9000,6 +9000,7 @@ var CAP_NAMES = Object.freeze([
|
|
|
9000
9000
|
"login-method",
|
|
9001
9001
|
"media-player",
|
|
9002
9002
|
"mesh-network",
|
|
9003
|
+
"meter",
|
|
9003
9004
|
"metrics-provider",
|
|
9004
9005
|
"model-convert",
|
|
9005
9006
|
"model-distributor",
|
|
@@ -10057,6 +10058,10 @@ Object.freeze({
|
|
|
10057
10058
|
]
|
|
10058
10059
|
}
|
|
10059
10060
|
],
|
|
10061
|
+
"meter": [{
|
|
10062
|
+
"path": "value",
|
|
10063
|
+
"valueType": "number"
|
|
10064
|
+
}],
|
|
10060
10065
|
"motion": [
|
|
10061
10066
|
{
|
|
10062
10067
|
"path": "detected",
|
|
@@ -10800,7 +10805,7 @@ object({
|
|
|
10800
10805
|
params: record(string(), union([string(), number()])).optional()
|
|
10801
10806
|
});
|
|
10802
10807
|
//#endregion
|
|
10803
|
-
//#region ../types/dist/err-msg-
|
|
10808
|
+
//#region ../types/dist/err-msg-DIorGYeC.mjs
|
|
10804
10809
|
var DeviceType = /* @__PURE__ */ function(DeviceType) {
|
|
10805
10810
|
DeviceType["Camera"] = "camera";
|
|
10806
10811
|
DeviceType["Hub"] = "hub";
|
|
@@ -10894,8 +10899,14 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
|
|
|
10894
10899
|
DeviceType["PetFeeder"] = "pet-feeder";
|
|
10895
10900
|
/** Built-in dishwasher — program lifecycle, door / remote-start gates,
|
|
10896
10901
|
* salt and rinse-aid levels. Installed with the `dishwasher` cap.
|
|
10897
|
-
* Sources: native Bosch Home Connect, reusable by similar integrations.
|
|
10902
|
+
* Sources: native Bosch Home Connect, reusable by similar integrations.
|
|
10903
|
+
* A plug-built dishwasher carries running-state and power instead. */
|
|
10898
10904
|
DeviceType["Dishwasher"] = "dishwasher";
|
|
10905
|
+
/** Washing machine. A plug-built one is running while its power stays
|
|
10906
|
+
* above a threshold. No program cap — that surface is the dishwasher's. */
|
|
10907
|
+
DeviceType["Washer"] = "washer";
|
|
10908
|
+
/** Tumble dryer. Same plug-built running surface as {@link Washer}. */
|
|
10909
|
+
DeviceType["Dryer"] = "dryer";
|
|
10899
10910
|
return DeviceType;
|
|
10900
10911
|
}({});
|
|
10901
10912
|
var DeviceFeature = /* @__PURE__ */ function(DeviceFeature) {
|
|
@@ -11143,7 +11154,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
|
|
|
11143
11154
|
return DeviceRole;
|
|
11144
11155
|
}({});
|
|
11145
11156
|
//#endregion
|
|
11146
|
-
//#region ../types/dist/composition-
|
|
11157
|
+
//#region ../types/dist/composition-CpETZ4HL.mjs
|
|
11147
11158
|
/**
|
|
11148
11159
|
* The ffmpeg build every CamStack node downloads, per platform and arch.
|
|
11149
11160
|
*
|
|
@@ -11899,6 +11910,97 @@ function validateExpressionSource(src) {
|
|
|
11899
11910
|
return null;
|
|
11900
11911
|
}
|
|
11901
11912
|
/**
|
|
11913
|
+
* One power reading becomes a washer, dryer or dishwasher (D944 helper).
|
|
11914
|
+
*
|
|
11915
|
+
* Standby of the control board is under 5 W; a motor or a heater is far
|
|
11916
|
+
* above that, so 5 W is the line. A door lock or a short pump spike is not
|
|
11917
|
+
* a cycle, so running starts only after 30 s above the line.
|
|
11918
|
+
*
|
|
11919
|
+
* A wash, dry or dishwasher pause (soak, heat-wait, heater off between
|
|
11920
|
+
* bursts) lasts several minutes. Ending the cycle on the first dip would
|
|
11921
|
+
* report "finished" in the middle of the program, so the stop dwell is
|
|
11922
|
+
* 10 minutes on every type. The number is stored per type so one machine
|
|
11923
|
+
* can move later without moving the others.
|
|
11924
|
+
*/
|
|
11925
|
+
var APPLIANCE_TEMPLATE_ID = "appliance";
|
|
11926
|
+
var APPLIANCE_KINDS = [
|
|
11927
|
+
"washer",
|
|
11928
|
+
"dryer",
|
|
11929
|
+
"dishwasher"
|
|
11930
|
+
];
|
|
11931
|
+
DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher;
|
|
11932
|
+
/**
|
|
11933
|
+
* Statistics and integrals over a history read (D944).
|
|
11934
|
+
*
|
|
11935
|
+
* Pure: the same points always give the same answer, so a restart recomputes
|
|
11936
|
+
* rather than trusting a buffer. A gauge mean is time-weighted (value × ms),
|
|
11937
|
+
* never the mean of the samples. A hole with no held value is not integrated
|
|
11938
|
+
* as zero. A truncated read is not published.
|
|
11939
|
+
*/
|
|
11940
|
+
var STATISTIC_STATS = [
|
|
11941
|
+
"min",
|
|
11942
|
+
"max",
|
|
11943
|
+
"mean",
|
|
11944
|
+
"sum",
|
|
11945
|
+
"count",
|
|
11946
|
+
"change"
|
|
11947
|
+
];
|
|
11948
|
+
/**
|
|
11949
|
+
* The range a statistics or integral helper asks history for (D944).
|
|
11950
|
+
*
|
|
11951
|
+
* Calendar edges are the hub's timezone, never UTC midnight: a day is 23, 24
|
|
11952
|
+
* or 25 hours across a DST change. A tier is eligible only when its retention
|
|
11953
|
+
* is strictly longer than the longest that range can be. Forever qualifies.
|
|
11954
|
+
* Equal to a tier's retention is a refusal, not a short answer.
|
|
11955
|
+
*/
|
|
11956
|
+
var MINUTE_MS = 6e4;
|
|
11957
|
+
var HOUR_MS = 60 * MINUTE_MS;
|
|
11958
|
+
var DAY_MS = 24 * HOUR_MS;
|
|
11959
|
+
var ROLLING_SPANS = [
|
|
11960
|
+
"1h",
|
|
11961
|
+
"24h",
|
|
11962
|
+
"2d",
|
|
11963
|
+
"7d",
|
|
11964
|
+
"30d",
|
|
11965
|
+
"custom"
|
|
11966
|
+
];
|
|
11967
|
+
var CALENDAR_PERIODS = [
|
|
11968
|
+
"today",
|
|
11969
|
+
"yesterday",
|
|
11970
|
+
"this-week",
|
|
11971
|
+
"this-month"
|
|
11972
|
+
];
|
|
11973
|
+
var RESET_PERIODS = [
|
|
11974
|
+
"never",
|
|
11975
|
+
"daily",
|
|
11976
|
+
"weekly",
|
|
11977
|
+
"monthly"
|
|
11978
|
+
];
|
|
11979
|
+
5 * MINUTE_MS;
|
|
11980
|
+
24 * HOUR_MS, 2 * DAY_MS, 7 * DAY_MS, 30 * DAY_MS;
|
|
11981
|
+
7 * DAY_MS, 30 * DAY_MS, 365 * DAY_MS;
|
|
11982
|
+
var StatisticWindowSchema = discriminatedUnion("kind", [object({
|
|
11983
|
+
kind: literal("rolling"),
|
|
11984
|
+
span: _enum(ROLLING_SPANS),
|
|
11985
|
+
customMinutes: number().int().min(5).optional()
|
|
11986
|
+
}).check((payload) => {
|
|
11987
|
+
if (payload.value.span === "custom" && payload.value.customMinutes === void 0) payload.issues.push({
|
|
11988
|
+
code: "custom",
|
|
11989
|
+
message: "a custom range needs a duration in minutes",
|
|
11990
|
+
path: ["customMinutes"],
|
|
11991
|
+
input: payload.value
|
|
11992
|
+
});
|
|
11993
|
+
if (payload.value.span !== "custom" && payload.value.customMinutes !== void 0) payload.issues.push({
|
|
11994
|
+
code: "custom",
|
|
11995
|
+
message: "only a custom range carries a duration",
|
|
11996
|
+
path: ["customMinutes"],
|
|
11997
|
+
input: payload.value
|
|
11998
|
+
});
|
|
11999
|
+
}), object({
|
|
12000
|
+
kind: literal("calendar"),
|
|
12001
|
+
period: _enum(CALENDAR_PERIODS)
|
|
12002
|
+
})]);
|
|
12003
|
+
/**
|
|
11902
12004
|
* A composition source identity: `(addonId, stableId)`, never a numeric device
|
|
11903
12005
|
* id. Split out so helper schemas can name it without a cycle through
|
|
11904
12006
|
* `composition.ts` (D659).
|
|
@@ -11954,14 +12056,37 @@ var HelperMemberSchema = object({
|
|
|
11954
12056
|
cap: string().min(1),
|
|
11955
12057
|
fieldPath: string().min(1)
|
|
11956
12058
|
});
|
|
11957
|
-
var HelperSpecSchema = discriminatedUnion("kind", [
|
|
11958
|
-
|
|
11959
|
-
|
|
11960
|
-
|
|
11961
|
-
|
|
11962
|
-
|
|
11963
|
-
|
|
11964
|
-
|
|
12059
|
+
var HelperSpecSchema = discriminatedUnion("kind", [
|
|
12060
|
+
object({
|
|
12061
|
+
kind: literal("group"),
|
|
12062
|
+
templateId: GroupTemplateIdSchema,
|
|
12063
|
+
aggregate: AggregateReducerSchema,
|
|
12064
|
+
members: array(HelperMemberSchema).min(1).max(64),
|
|
12065
|
+
/** Actuator groups only. Readings leave this unset. */
|
|
12066
|
+
active: ActiveCriterionSchema.optional()
|
|
12067
|
+
}),
|
|
12068
|
+
object({
|
|
12069
|
+
kind: literal("appliance"),
|
|
12070
|
+
templateId: literal(APPLIANCE_TEMPLATE_ID),
|
|
12071
|
+
appliance: _enum(APPLIANCE_KINDS),
|
|
12072
|
+
thresholdWatts: number().positive(),
|
|
12073
|
+
startDwellMs: number().int().nonnegative(),
|
|
12074
|
+
stopDwellMs: number().int().nonnegative(),
|
|
12075
|
+
member: HelperMemberSchema
|
|
12076
|
+
}),
|
|
12077
|
+
object({
|
|
12078
|
+
kind: literal("statistic"),
|
|
12079
|
+
stat: _enum(STATISTIC_STATS),
|
|
12080
|
+
window: StatisticWindowSchema,
|
|
12081
|
+
source: HelperMemberSchema
|
|
12082
|
+
}),
|
|
12083
|
+
object({
|
|
12084
|
+
kind: literal("integral"),
|
|
12085
|
+
reset: _enum(RESET_PERIODS),
|
|
12086
|
+
output: _enum(["energy", "meter"]),
|
|
12087
|
+
source: HelperMemberSchema
|
|
12088
|
+
})
|
|
12089
|
+
]);
|
|
11965
12090
|
/** A composed device's stableId is this prefix plus the block id. */
|
|
11966
12091
|
var COMPOSED_DEVICE_STABLE_ID_PREFIX = "composed-";
|
|
11967
12092
|
/** Longest snippet a `code` source may carry (slice 4). */
|
|
@@ -12035,6 +12160,26 @@ var CompositionFieldSourceSchema = discriminatedUnion("kind", [
|
|
|
12035
12160
|
"omit",
|
|
12036
12161
|
"offline"
|
|
12037
12162
|
])
|
|
12163
|
+
}),
|
|
12164
|
+
object({
|
|
12165
|
+
kind: literal("series"),
|
|
12166
|
+
read: CompositionFieldReadSchema,
|
|
12167
|
+
/** `value` is the statistic or the integral. The others are the gap counts. */
|
|
12168
|
+
publish: _enum([
|
|
12169
|
+
"value",
|
|
12170
|
+
"included",
|
|
12171
|
+
"excluded",
|
|
12172
|
+
"total"
|
|
12173
|
+
]),
|
|
12174
|
+
/**
|
|
12175
|
+
* What an unanswered `value` does. Counts ignore this. `offline` leaves the
|
|
12176
|
+
* device unseeded until history answers, so a restart cannot publish 0.
|
|
12177
|
+
*/
|
|
12178
|
+
empty: _enum([
|
|
12179
|
+
"null",
|
|
12180
|
+
"omit",
|
|
12181
|
+
"offline"
|
|
12182
|
+
])
|
|
12038
12183
|
})
|
|
12039
12184
|
]);
|
|
12040
12185
|
var CompositionCommandTargetSchema = discriminatedUnion("kind", [object({
|
|
@@ -18228,7 +18373,8 @@ var CompositionProblemSchema = object({
|
|
|
18228
18373
|
"native-capability-replace",
|
|
18229
18374
|
"mixed-quantity",
|
|
18230
18375
|
"helper-mismatch",
|
|
18231
|
-
"member-constraint"
|
|
18376
|
+
"member-constraint",
|
|
18377
|
+
"retention"
|
|
18232
18378
|
]),
|
|
18233
18379
|
path: string(),
|
|
18234
18380
|
message: string()
|
|
@@ -18468,7 +18614,7 @@ Object.freeze({
|
|
|
18468
18614
|
* One catalog row per base reading a group helper can build (D944 §3).
|
|
18469
18615
|
* Data, not a form default written into the block.
|
|
18470
18616
|
*/
|
|
18471
|
-
var NOW = {
|
|
18617
|
+
var NOW$1 = {
|
|
18472
18618
|
fieldPath: "lastFetchedAt",
|
|
18473
18619
|
expr: "now"
|
|
18474
18620
|
};
|
|
@@ -18514,7 +18660,7 @@ var GROUP_TEMPLATES = [
|
|
|
18514
18660
|
quantity: "temperature",
|
|
18515
18661
|
defaultAggregate: "mean",
|
|
18516
18662
|
empty: "null",
|
|
18517
|
-
companions: [NOW]
|
|
18663
|
+
companions: [NOW$1]
|
|
18518
18664
|
}),
|
|
18519
18665
|
numeric({
|
|
18520
18666
|
id: "humidity",
|
|
@@ -18525,7 +18671,7 @@ var GROUP_TEMPLATES = [
|
|
|
18525
18671
|
quantity: "humidity",
|
|
18526
18672
|
defaultAggregate: "mean",
|
|
18527
18673
|
empty: "null",
|
|
18528
|
-
companions: [NOW]
|
|
18674
|
+
companions: [NOW$1]
|
|
18529
18675
|
}),
|
|
18530
18676
|
numeric({
|
|
18531
18677
|
id: "pressure",
|
|
@@ -18536,7 +18682,7 @@ var GROUP_TEMPLATES = [
|
|
|
18536
18682
|
quantity: "pressure",
|
|
18537
18683
|
defaultAggregate: "mean",
|
|
18538
18684
|
empty: "null",
|
|
18539
|
-
companions: [NOW]
|
|
18685
|
+
companions: [NOW$1]
|
|
18540
18686
|
}),
|
|
18541
18687
|
numeric({
|
|
18542
18688
|
id: "illuminance",
|
|
@@ -18547,7 +18693,7 @@ var GROUP_TEMPLATES = [
|
|
|
18547
18693
|
quantity: "illuminance",
|
|
18548
18694
|
defaultAggregate: "mean",
|
|
18549
18695
|
empty: "null",
|
|
18550
|
-
companions: [NOW]
|
|
18696
|
+
companions: [NOW$1]
|
|
18551
18697
|
}),
|
|
18552
18698
|
numeric({
|
|
18553
18699
|
id: "power",
|
|
@@ -18558,7 +18704,7 @@ var GROUP_TEMPLATES = [
|
|
|
18558
18704
|
quantity: "power",
|
|
18559
18705
|
defaultAggregate: "sum",
|
|
18560
18706
|
empty: "omit",
|
|
18561
|
-
companions: [NOW]
|
|
18707
|
+
companions: [NOW$1]
|
|
18562
18708
|
}),
|
|
18563
18709
|
numeric({
|
|
18564
18710
|
id: "energy",
|
|
@@ -18569,7 +18715,7 @@ var GROUP_TEMPLATES = [
|
|
|
18569
18715
|
quantity: "energy",
|
|
18570
18716
|
defaultAggregate: "sum",
|
|
18571
18717
|
empty: "omit",
|
|
18572
|
-
companions: [NOW]
|
|
18718
|
+
companions: [NOW$1]
|
|
18573
18719
|
}),
|
|
18574
18720
|
numeric({
|
|
18575
18721
|
id: "battery",
|
|
@@ -18604,7 +18750,7 @@ var GROUP_TEMPLATES = [
|
|
|
18604
18750
|
quantity: "device",
|
|
18605
18751
|
defaultAggregate: "mean",
|
|
18606
18752
|
empty: "null",
|
|
18607
|
-
companions: [NOW]
|
|
18753
|
+
companions: [NOW$1]
|
|
18608
18754
|
}),
|
|
18609
18755
|
binary({
|
|
18610
18756
|
id: "motion",
|
|
@@ -18733,6 +18879,7 @@ function actuator(input) {
|
|
|
18733
18879
|
}
|
|
18734
18880
|
new Map(GROUP_TEMPLATES.map((template) => [template.id, template]));
|
|
18735
18881
|
DeviceFeature.LightColorRgb, DeviceFeature.LightColorHsv, DeviceFeature.LightColorMired;
|
|
18882
|
+
DeviceType.Camera;
|
|
18736
18883
|
`${COMPOSED_DEVICE_STABLE_ID_PREFIX}`;
|
|
18737
18884
|
/**
|
|
18738
18885
|
* What a composition may BUILD on a device type (G2, D676): the caps a new
|
|
@@ -59524,6 +59671,11 @@ DeviceType.Lock, method(object({
|
|
|
59524
59671
|
kind: "mutation",
|
|
59525
59672
|
auth: "protected"
|
|
59526
59673
|
});
|
|
59674
|
+
object({
|
|
59675
|
+
value: number().nullable().meta(readingMeta("device", { label: "Total" })),
|
|
59676
|
+
lastFetchedAt: number()
|
|
59677
|
+
});
|
|
59678
|
+
DeviceType.Sensor;
|
|
59527
59679
|
/**
|
|
59528
59680
|
* Media-player cap. Models HA `media_player.*` (Sonos, Chromecast,
|
|
59529
59681
|
* Apple TV, Spotify, Roku, generic OTT receivers, …) on
|
|
@@ -61441,7 +61593,7 @@ object({
|
|
|
61441
61593
|
/** Ms epoch when the slice was last updated. */
|
|
61442
61594
|
lastFetchedAt: number()
|
|
61443
61595
|
});
|
|
61444
|
-
DeviceType.Sensor;
|
|
61596
|
+
DeviceType.Sensor, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher;
|
|
61445
61597
|
/**
|
|
61446
61598
|
* Presence cap. Models HA `person.*` and `device_tracker.*` entities
|
|
61447
61599
|
* on `DeviceType.Presence`. Read-only — no setters: presence is
|
|
@@ -61888,7 +62040,7 @@ object({
|
|
|
61888
62040
|
phase: string().nullable()
|
|
61889
62041
|
});
|
|
61890
62042
|
Object.values(DeviceType);
|
|
61891
|
-
DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
|
|
62043
|
+
DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
|
|
61892
62044
|
DeviceType.Camera, DeviceType.Sensor, DeviceType.Switch, method(object({ deviceId: number().int().nonnegative() }), object({ success: literal(true) }), {
|
|
61893
62045
|
kind: "mutation",
|
|
61894
62046
|
auth: "admin"
|
|
@@ -65722,7 +65874,7 @@ var trainingCapability = {
|
|
|
65722
65874
|
}
|
|
65723
65875
|
};
|
|
65724
65876
|
SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
|
|
65725
|
-
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.Camera, DeviceType.Camera, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
|
|
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;
|
|
65726
65878
|
String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
|
|
65727
65879
|
DeviceRole.BinarySensor, DeviceRole.MotionSensor;
|
|
65728
65880
|
new Set(CAP_NAMES);
|
|
@@ -65775,7 +65927,7 @@ var AccessoryKind = {
|
|
|
65775
65927
|
PrivacyMask: DeviceRole.PrivacyMask
|
|
65776
65928
|
};
|
|
65777
65929
|
AccessoryKind.Siren, AccessoryKind.Floodlight, AccessoryKind.Spotlight, AccessoryKind.PirSensor, AccessoryKind.Chime, AccessoryKind.Autotrack, AccessoryKind.Nightvision, AccessoryKind.PrivacyMask;
|
|
65778
|
-
DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Camera, DeviceType.Hub, DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher;
|
|
65930
|
+
DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Camera, DeviceType.Hub, DeviceType.Switch, DeviceType.Siren, DeviceType.Light, DeviceType.Fan, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, 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;
|
|
65779
65931
|
new Set(Object.values(DeviceType));
|
|
65780
65932
|
Object.freeze({
|
|
65781
65933
|
"accessories.getStatus": {
|
|
@@ -69964,6 +70116,13 @@ Object.freeze({
|
|
|
69964
70116
|
access: "create",
|
|
69965
70117
|
role: "admin"
|
|
69966
70118
|
},
|
|
70119
|
+
"meter.getStatus": {
|
|
70120
|
+
capName: "meter",
|
|
70121
|
+
capScope: "device",
|
|
70122
|
+
addonId: null,
|
|
70123
|
+
access: "view",
|
|
70124
|
+
role: "viewer"
|
|
70125
|
+
},
|
|
69967
70126
|
"metricsProvider.collectSnapshot": {
|
|
69968
70127
|
capName: "metrics-provider",
|
|
69969
70128
|
capScope: "system",
|
|
@@ -78062,7 +78221,39 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
78062
78221
|
phrase: t("When {device} finishes", "Quando {device} finisce"),
|
|
78063
78222
|
icon: "square"
|
|
78064
78223
|
}
|
|
78065
|
-
}
|
|
78224
|
+
},
|
|
78225
|
+
overrides: { byType: {
|
|
78226
|
+
[DeviceType.Washer]: {
|
|
78227
|
+
state: { running: {
|
|
78228
|
+
whenTrue: t("When the washing machine starts", "Quando la lavatrice inizia"),
|
|
78229
|
+
whenFalse: t("When the washing machine has finished", "Quando la lavatrice ha finito")
|
|
78230
|
+
} },
|
|
78231
|
+
events: {
|
|
78232
|
+
onStarted: { phrase: t("When the washing machine starts", "Quando la lavatrice inizia") },
|
|
78233
|
+
onFinished: { phrase: t("When the washing machine has finished", "Quando la lavatrice ha finito") }
|
|
78234
|
+
}
|
|
78235
|
+
},
|
|
78236
|
+
[DeviceType.Dryer]: {
|
|
78237
|
+
state: { running: {
|
|
78238
|
+
whenTrue: t("When the dryer starts", "Quando l'asciugatrice inizia"),
|
|
78239
|
+
whenFalse: t("When the dryer has finished", "Quando l'asciugatrice ha finito")
|
|
78240
|
+
} },
|
|
78241
|
+
events: {
|
|
78242
|
+
onStarted: { phrase: t("When the dryer starts", "Quando l'asciugatrice inizia") },
|
|
78243
|
+
onFinished: { phrase: t("When the dryer has finished", "Quando l'asciugatrice ha finito") }
|
|
78244
|
+
}
|
|
78245
|
+
},
|
|
78246
|
+
[DeviceType.Dishwasher]: {
|
|
78247
|
+
state: { running: {
|
|
78248
|
+
whenTrue: t("When the dishwasher starts", "Quando la lavastoviglie inizia"),
|
|
78249
|
+
whenFalse: t("When the dishwasher has finished", "Quando la lavastoviglie ha finito")
|
|
78250
|
+
} },
|
|
78251
|
+
events: {
|
|
78252
|
+
onStarted: { phrase: t("When the dishwasher starts", "Quando la lavastoviglie inizia") },
|
|
78253
|
+
onFinished: { phrase: t("When the dishwasher has finished", "Quando la lavastoviglie ha finito") }
|
|
78254
|
+
}
|
|
78255
|
+
}
|
|
78256
|
+
} }
|
|
78066
78257
|
},
|
|
78067
78258
|
update: {
|
|
78068
78259
|
scope: "device",
|
|
@@ -78890,6 +79081,17 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
78890
79081
|
}],
|
|
78891
79082
|
events: { onMotionChanged: { notOperatorFacing: "the `detected` state trigger phrases both edges, from the mirror that survives a dropped event (D49)" } }
|
|
78892
79083
|
},
|
|
79084
|
+
meter: {
|
|
79085
|
+
scope: "device",
|
|
79086
|
+
noun: t("Meter", "Contatore"),
|
|
79087
|
+
state: [{
|
|
79088
|
+
kind: "numeric",
|
|
79089
|
+
field: "value",
|
|
79090
|
+
quantity: t("the total", "il totale"),
|
|
79091
|
+
label: t("Total", "Totale"),
|
|
79092
|
+
icon: "gauge"
|
|
79093
|
+
}]
|
|
79094
|
+
},
|
|
78893
79095
|
"numeric-sensor": {
|
|
78894
79096
|
scope: "device",
|
|
78895
79097
|
noun: t("Sensor", "Sensore"),
|
|
@@ -79362,8 +79564,47 @@ function projectAction(cap, action) {
|
|
|
79362
79564
|
};
|
|
79363
79565
|
}
|
|
79364
79566
|
Object.entries(CAP_VOCABULARY_BY_NAME).flatMap(([cap, entry]) => entry.scope === "device" ? (entry.actions ?? []).map((a) => projectAction(cap, a)) : []);
|
|
79365
|
-
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;
|
|
79567
|
+
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;
|
|
79366
79568
|
DeviceFeature.BatteryOperated;
|
|
79569
|
+
DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher;
|
|
79570
|
+
var HA_AS = "a power sensor (device_class power). Home Assistant has no laundry domain. running-state stays unexported until a null reading can be published as unavailable.";
|
|
79571
|
+
var HOMEKIT_REASON = "HomeKit has no laundry-appliance service. The export tab would pair an accessory with nothing on it: running-state is withheld until a null reading can be unavailable, and power is not a HomeKit service this export honours.";
|
|
79572
|
+
var ALEXA_REASON = "Alexa has no laundry category in this export, and neither power nor running has an Alexa interface.";
|
|
79573
|
+
var GOOGLE_REASON = "Google WASHER, DRYER and DISHWASHER require RunCycle. A power threshold is not that trait, and this export does not publish RunCycle.";
|
|
79574
|
+
var MATTER_REASON = "No Matter export is built. The closest device types are Laundry Washer (0x0073) and Laundry Dryer (0x0074); a power threshold is not the Laundry Washer Mode cluster.";
|
|
79575
|
+
function withheld(reason) {
|
|
79576
|
+
return {
|
|
79577
|
+
[DeviceType.Washer]: {
|
|
79578
|
+
exported: false,
|
|
79579
|
+
reason
|
|
79580
|
+
},
|
|
79581
|
+
[DeviceType.Dryer]: {
|
|
79582
|
+
exported: false,
|
|
79583
|
+
reason
|
|
79584
|
+
},
|
|
79585
|
+
[DeviceType.Dishwasher]: {
|
|
79586
|
+
exported: false,
|
|
79587
|
+
reason
|
|
79588
|
+
}
|
|
79589
|
+
};
|
|
79590
|
+
}
|
|
79591
|
+
function offered(received) {
|
|
79592
|
+
return {
|
|
79593
|
+
[DeviceType.Washer]: {
|
|
79594
|
+
exported: true,
|
|
79595
|
+
as: received
|
|
79596
|
+
},
|
|
79597
|
+
[DeviceType.Dryer]: {
|
|
79598
|
+
exported: true,
|
|
79599
|
+
as: received
|
|
79600
|
+
},
|
|
79601
|
+
[DeviceType.Dishwasher]: {
|
|
79602
|
+
exported: true,
|
|
79603
|
+
as: received
|
|
79604
|
+
}
|
|
79605
|
+
};
|
|
79606
|
+
}
|
|
79607
|
+
offered(HA_AS), withheld(HOMEKIT_REASON), withheld(ALEXA_REASON), withheld(GOOGLE_REASON), withheld(MATTER_REASON);
|
|
79367
79608
|
Object.freeze({
|
|
79368
79609
|
"accessories.getStatus": [{
|
|
79369
79610
|
name: "deviceId",
|
|
@@ -80540,6 +80781,11 @@ Object.freeze({
|
|
|
80540
80781
|
form: "single",
|
|
80541
80782
|
optional: false
|
|
80542
80783
|
}],
|
|
80784
|
+
"meter.getStatus": [{
|
|
80785
|
+
name: "deviceId",
|
|
80786
|
+
form: "single",
|
|
80787
|
+
optional: false
|
|
80788
|
+
}],
|
|
80543
80789
|
"motion.getStatus": [{
|
|
80544
80790
|
name: "deviceId",
|
|
80545
80791
|
form: "single",
|
|
@@ -82147,7 +82393,6 @@ Object.freeze({
|
|
|
82147
82393
|
"network-access": "ingress",
|
|
82148
82394
|
"smtp-provider": "email"
|
|
82149
82395
|
});
|
|
82150
|
-
DeviceType.Camera;
|
|
82151
82396
|
/**
|
|
82152
82397
|
* A saved Customize assignment (D936). The schema is the type: callers use
|
|
82153
82398
|
* `z.infer`, they do not restate the shape.
|
|
@@ -36,7 +36,7 @@ async function r() {
|
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
38
|
"@camstack/types": {
|
|
39
|
-
version: "1.2.
|
|
39
|
+
version: "1.2.422",
|
|
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.334",
|
|
85
85
|
scope: "default",
|
|
86
86
|
shareConfig: {
|
|
87
87
|
singleton: !0,
|