@camstack/addon-model-studio 1.1.303 → 1.1.305
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-DyZoYI0U.mjs → MotionZonesSettings-nwsYJ4LM.mjs} +2 -2
- package/dist/{PrivacyMaskSettings-B37uji0h.mjs → PrivacyMaskSettings-D44t-3Il.mjs} +4 -4
- package/dist/{SceneMonitorEditor-adwuwWhh.mjs → SceneMonitorEditor-B7GPFInk.mjs} +3 -3
- package/dist/_stub.js +37372 -16236
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BA1vPAiL.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-Dm-CsmsB.mjs} +3 -3
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-B5mcgboO.mjs +26 -0
- package/dist/{hostInit-C9Zvf9iV.mjs → hostInit-BCkvpKIY.mjs} +2 -2
- package/dist/model-studio.addon.js +273 -28
- package/dist/model-studio.addon.mjs +273 -28
- package/dist/{player-overlays-NWrAt23J.mjs → player-overlays-BmekT-lx.mjs} +1 -1
- package/dist/remoteEntry.js +1 -1
- package/dist/{responsive-D0VqJmUb.mjs → responsive-DEe2tyvb.mjs} +1 -1
- package/dist/{scene-monitor-copy-CFRppIGJ.mjs → scene-monitor-copy-0SI6bJjg.mjs} +1 -1
- package/dist/{square-0_tIf9AN.mjs → square-_3D14YQf.mjs} +1 -1
- package/dist/{trash-2-BLOVJO98.mjs → trash-2-CBnastSw.mjs} +1 -1
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-VzapIpwy.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-BVMDXJrt.mjs} +1 -1
- package/package.json +1 -1
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CrWbJfbZ.mjs +0 -26
|
@@ -5837,7 +5837,7 @@ var ZodIssueCode = {
|
|
|
5837
5837
|
var ZodFirstPartyTypeKind;
|
|
5838
5838
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5839
5839
|
//#endregion
|
|
5840
|
-
//#region ../types/dist/sleep-
|
|
5840
|
+
//#region ../types/dist/sleep-0sD_LHLI.mjs
|
|
5841
5841
|
/**
|
|
5842
5842
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5843
5843
|
* window to float samples (D455).
|
|
@@ -9062,6 +9062,7 @@ var CAP_NAMES = Object.freeze([
|
|
|
9062
9062
|
"login-method",
|
|
9063
9063
|
"media-player",
|
|
9064
9064
|
"mesh-network",
|
|
9065
|
+
"meter",
|
|
9065
9066
|
"metrics-provider",
|
|
9066
9067
|
"model-convert",
|
|
9067
9068
|
"model-distributor",
|
|
@@ -10119,6 +10120,10 @@ Object.freeze({
|
|
|
10119
10120
|
]
|
|
10120
10121
|
}
|
|
10121
10122
|
],
|
|
10123
|
+
"meter": [{
|
|
10124
|
+
"path": "value",
|
|
10125
|
+
"valueType": "number"
|
|
10126
|
+
}],
|
|
10122
10127
|
"motion": [
|
|
10123
10128
|
{
|
|
10124
10129
|
"path": "detected",
|
|
@@ -10862,7 +10867,7 @@ object({
|
|
|
10862
10867
|
params: record(string(), union([string(), number()])).optional()
|
|
10863
10868
|
});
|
|
10864
10869
|
//#endregion
|
|
10865
|
-
//#region ../types/dist/err-msg-
|
|
10870
|
+
//#region ../types/dist/err-msg-DIorGYeC.mjs
|
|
10866
10871
|
var DeviceType = /* @__PURE__ */ function(DeviceType) {
|
|
10867
10872
|
DeviceType["Camera"] = "camera";
|
|
10868
10873
|
DeviceType["Hub"] = "hub";
|
|
@@ -10956,8 +10961,14 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
|
|
|
10956
10961
|
DeviceType["PetFeeder"] = "pet-feeder";
|
|
10957
10962
|
/** Built-in dishwasher — program lifecycle, door / remote-start gates,
|
|
10958
10963
|
* salt and rinse-aid levels. Installed with the `dishwasher` cap.
|
|
10959
|
-
* Sources: native Bosch Home Connect, reusable by similar integrations.
|
|
10964
|
+
* Sources: native Bosch Home Connect, reusable by similar integrations.
|
|
10965
|
+
* A plug-built dishwasher carries running-state and power instead. */
|
|
10960
10966
|
DeviceType["Dishwasher"] = "dishwasher";
|
|
10967
|
+
/** Washing machine. A plug-built one is running while its power stays
|
|
10968
|
+
* above a threshold. No program cap — that surface is the dishwasher's. */
|
|
10969
|
+
DeviceType["Washer"] = "washer";
|
|
10970
|
+
/** Tumble dryer. Same plug-built running surface as {@link Washer}. */
|
|
10971
|
+
DeviceType["Dryer"] = "dryer";
|
|
10961
10972
|
return DeviceType;
|
|
10962
10973
|
}({});
|
|
10963
10974
|
var DeviceFeature = /* @__PURE__ */ function(DeviceFeature) {
|
|
@@ -11205,7 +11216,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
|
|
|
11205
11216
|
return DeviceRole;
|
|
11206
11217
|
}({});
|
|
11207
11218
|
//#endregion
|
|
11208
|
-
//#region ../types/dist/composition-
|
|
11219
|
+
//#region ../types/dist/composition-CpETZ4HL.mjs
|
|
11209
11220
|
/**
|
|
11210
11221
|
* The ffmpeg build every CamStack node downloads, per platform and arch.
|
|
11211
11222
|
*
|
|
@@ -11961,6 +11972,97 @@ function validateExpressionSource(src) {
|
|
|
11961
11972
|
return null;
|
|
11962
11973
|
}
|
|
11963
11974
|
/**
|
|
11975
|
+
* One power reading becomes a washer, dryer or dishwasher (D944 helper).
|
|
11976
|
+
*
|
|
11977
|
+
* Standby of the control board is under 5 W; a motor or a heater is far
|
|
11978
|
+
* above that, so 5 W is the line. A door lock or a short pump spike is not
|
|
11979
|
+
* a cycle, so running starts only after 30 s above the line.
|
|
11980
|
+
*
|
|
11981
|
+
* A wash, dry or dishwasher pause (soak, heat-wait, heater off between
|
|
11982
|
+
* bursts) lasts several minutes. Ending the cycle on the first dip would
|
|
11983
|
+
* report "finished" in the middle of the program, so the stop dwell is
|
|
11984
|
+
* 10 minutes on every type. The number is stored per type so one machine
|
|
11985
|
+
* can move later without moving the others.
|
|
11986
|
+
*/
|
|
11987
|
+
var APPLIANCE_TEMPLATE_ID = "appliance";
|
|
11988
|
+
var APPLIANCE_KINDS = [
|
|
11989
|
+
"washer",
|
|
11990
|
+
"dryer",
|
|
11991
|
+
"dishwasher"
|
|
11992
|
+
];
|
|
11993
|
+
DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher;
|
|
11994
|
+
/**
|
|
11995
|
+
* Statistics and integrals over a history read (D944).
|
|
11996
|
+
*
|
|
11997
|
+
* Pure: the same points always give the same answer, so a restart recomputes
|
|
11998
|
+
* rather than trusting a buffer. A gauge mean is time-weighted (value × ms),
|
|
11999
|
+
* never the mean of the samples. A hole with no held value is not integrated
|
|
12000
|
+
* as zero. A truncated read is not published.
|
|
12001
|
+
*/
|
|
12002
|
+
var STATISTIC_STATS = [
|
|
12003
|
+
"min",
|
|
12004
|
+
"max",
|
|
12005
|
+
"mean",
|
|
12006
|
+
"sum",
|
|
12007
|
+
"count",
|
|
12008
|
+
"change"
|
|
12009
|
+
];
|
|
12010
|
+
/**
|
|
12011
|
+
* The range a statistics or integral helper asks history for (D944).
|
|
12012
|
+
*
|
|
12013
|
+
* Calendar edges are the hub's timezone, never UTC midnight: a day is 23, 24
|
|
12014
|
+
* or 25 hours across a DST change. A tier is eligible only when its retention
|
|
12015
|
+
* is strictly longer than the longest that range can be. Forever qualifies.
|
|
12016
|
+
* Equal to a tier's retention is a refusal, not a short answer.
|
|
12017
|
+
*/
|
|
12018
|
+
var MINUTE_MS = 6e4;
|
|
12019
|
+
var HOUR_MS = 60 * MINUTE_MS;
|
|
12020
|
+
var DAY_MS = 24 * HOUR_MS;
|
|
12021
|
+
var ROLLING_SPANS = [
|
|
12022
|
+
"1h",
|
|
12023
|
+
"24h",
|
|
12024
|
+
"2d",
|
|
12025
|
+
"7d",
|
|
12026
|
+
"30d",
|
|
12027
|
+
"custom"
|
|
12028
|
+
];
|
|
12029
|
+
var CALENDAR_PERIODS = [
|
|
12030
|
+
"today",
|
|
12031
|
+
"yesterday",
|
|
12032
|
+
"this-week",
|
|
12033
|
+
"this-month"
|
|
12034
|
+
];
|
|
12035
|
+
var RESET_PERIODS = [
|
|
12036
|
+
"never",
|
|
12037
|
+
"daily",
|
|
12038
|
+
"weekly",
|
|
12039
|
+
"monthly"
|
|
12040
|
+
];
|
|
12041
|
+
5 * MINUTE_MS;
|
|
12042
|
+
24 * HOUR_MS, 2 * DAY_MS, 7 * DAY_MS, 30 * DAY_MS;
|
|
12043
|
+
7 * DAY_MS, 30 * DAY_MS, 365 * DAY_MS;
|
|
12044
|
+
var StatisticWindowSchema = discriminatedUnion("kind", [object({
|
|
12045
|
+
kind: literal("rolling"),
|
|
12046
|
+
span: _enum(ROLLING_SPANS),
|
|
12047
|
+
customMinutes: number().int().min(5).optional()
|
|
12048
|
+
}).check((payload) => {
|
|
12049
|
+
if (payload.value.span === "custom" && payload.value.customMinutes === void 0) payload.issues.push({
|
|
12050
|
+
code: "custom",
|
|
12051
|
+
message: "a custom range needs a duration in minutes",
|
|
12052
|
+
path: ["customMinutes"],
|
|
12053
|
+
input: payload.value
|
|
12054
|
+
});
|
|
12055
|
+
if (payload.value.span !== "custom" && payload.value.customMinutes !== void 0) payload.issues.push({
|
|
12056
|
+
code: "custom",
|
|
12057
|
+
message: "only a custom range carries a duration",
|
|
12058
|
+
path: ["customMinutes"],
|
|
12059
|
+
input: payload.value
|
|
12060
|
+
});
|
|
12061
|
+
}), object({
|
|
12062
|
+
kind: literal("calendar"),
|
|
12063
|
+
period: _enum(CALENDAR_PERIODS)
|
|
12064
|
+
})]);
|
|
12065
|
+
/**
|
|
11964
12066
|
* A composition source identity: `(addonId, stableId)`, never a numeric device
|
|
11965
12067
|
* id. Split out so helper schemas can name it without a cycle through
|
|
11966
12068
|
* `composition.ts` (D659).
|
|
@@ -12016,14 +12118,37 @@ var HelperMemberSchema = object({
|
|
|
12016
12118
|
cap: string().min(1),
|
|
12017
12119
|
fieldPath: string().min(1)
|
|
12018
12120
|
});
|
|
12019
|
-
var HelperSpecSchema = discriminatedUnion("kind", [
|
|
12020
|
-
|
|
12021
|
-
|
|
12022
|
-
|
|
12023
|
-
|
|
12024
|
-
|
|
12025
|
-
|
|
12026
|
-
|
|
12121
|
+
var HelperSpecSchema = discriminatedUnion("kind", [
|
|
12122
|
+
object({
|
|
12123
|
+
kind: literal("group"),
|
|
12124
|
+
templateId: GroupTemplateIdSchema,
|
|
12125
|
+
aggregate: AggregateReducerSchema,
|
|
12126
|
+
members: array(HelperMemberSchema).min(1).max(64),
|
|
12127
|
+
/** Actuator groups only. Readings leave this unset. */
|
|
12128
|
+
active: ActiveCriterionSchema.optional()
|
|
12129
|
+
}),
|
|
12130
|
+
object({
|
|
12131
|
+
kind: literal("appliance"),
|
|
12132
|
+
templateId: literal(APPLIANCE_TEMPLATE_ID),
|
|
12133
|
+
appliance: _enum(APPLIANCE_KINDS),
|
|
12134
|
+
thresholdWatts: number().positive(),
|
|
12135
|
+
startDwellMs: number().int().nonnegative(),
|
|
12136
|
+
stopDwellMs: number().int().nonnegative(),
|
|
12137
|
+
member: HelperMemberSchema
|
|
12138
|
+
}),
|
|
12139
|
+
object({
|
|
12140
|
+
kind: literal("statistic"),
|
|
12141
|
+
stat: _enum(STATISTIC_STATS),
|
|
12142
|
+
window: StatisticWindowSchema,
|
|
12143
|
+
source: HelperMemberSchema
|
|
12144
|
+
}),
|
|
12145
|
+
object({
|
|
12146
|
+
kind: literal("integral"),
|
|
12147
|
+
reset: _enum(RESET_PERIODS),
|
|
12148
|
+
output: _enum(["energy", "meter"]),
|
|
12149
|
+
source: HelperMemberSchema
|
|
12150
|
+
})
|
|
12151
|
+
]);
|
|
12027
12152
|
/** A composed device's stableId is this prefix plus the block id. */
|
|
12028
12153
|
var COMPOSED_DEVICE_STABLE_ID_PREFIX = "composed-";
|
|
12029
12154
|
/** Longest snippet a `code` source may carry (slice 4). */
|
|
@@ -12097,6 +12222,26 @@ var CompositionFieldSourceSchema = discriminatedUnion("kind", [
|
|
|
12097
12222
|
"omit",
|
|
12098
12223
|
"offline"
|
|
12099
12224
|
])
|
|
12225
|
+
}),
|
|
12226
|
+
object({
|
|
12227
|
+
kind: literal("series"),
|
|
12228
|
+
read: CompositionFieldReadSchema,
|
|
12229
|
+
/** `value` is the statistic or the integral. The others are the gap counts. */
|
|
12230
|
+
publish: _enum([
|
|
12231
|
+
"value",
|
|
12232
|
+
"included",
|
|
12233
|
+
"excluded",
|
|
12234
|
+
"total"
|
|
12235
|
+
]),
|
|
12236
|
+
/**
|
|
12237
|
+
* What an unanswered `value` does. Counts ignore this. `offline` leaves the
|
|
12238
|
+
* device unseeded until history answers, so a restart cannot publish 0.
|
|
12239
|
+
*/
|
|
12240
|
+
empty: _enum([
|
|
12241
|
+
"null",
|
|
12242
|
+
"omit",
|
|
12243
|
+
"offline"
|
|
12244
|
+
])
|
|
12100
12245
|
})
|
|
12101
12246
|
]);
|
|
12102
12247
|
var CompositionCommandTargetSchema = discriminatedUnion("kind", [object({
|
|
@@ -18411,7 +18556,8 @@ var CompositionProblemSchema = object({
|
|
|
18411
18556
|
"native-capability-replace",
|
|
18412
18557
|
"mixed-quantity",
|
|
18413
18558
|
"helper-mismatch",
|
|
18414
|
-
"member-constraint"
|
|
18559
|
+
"member-constraint",
|
|
18560
|
+
"retention"
|
|
18415
18561
|
]),
|
|
18416
18562
|
path: string(),
|
|
18417
18563
|
message: string()
|
|
@@ -18651,7 +18797,7 @@ Object.freeze({
|
|
|
18651
18797
|
* One catalog row per base reading a group helper can build (D944 §3).
|
|
18652
18798
|
* Data, not a form default written into the block.
|
|
18653
18799
|
*/
|
|
18654
|
-
var NOW = {
|
|
18800
|
+
var NOW$1 = {
|
|
18655
18801
|
fieldPath: "lastFetchedAt",
|
|
18656
18802
|
expr: "now"
|
|
18657
18803
|
};
|
|
@@ -18697,7 +18843,7 @@ var GROUP_TEMPLATES = [
|
|
|
18697
18843
|
quantity: "temperature",
|
|
18698
18844
|
defaultAggregate: "mean",
|
|
18699
18845
|
empty: "null",
|
|
18700
|
-
companions: [NOW]
|
|
18846
|
+
companions: [NOW$1]
|
|
18701
18847
|
}),
|
|
18702
18848
|
numeric({
|
|
18703
18849
|
id: "humidity",
|
|
@@ -18708,7 +18854,7 @@ var GROUP_TEMPLATES = [
|
|
|
18708
18854
|
quantity: "humidity",
|
|
18709
18855
|
defaultAggregate: "mean",
|
|
18710
18856
|
empty: "null",
|
|
18711
|
-
companions: [NOW]
|
|
18857
|
+
companions: [NOW$1]
|
|
18712
18858
|
}),
|
|
18713
18859
|
numeric({
|
|
18714
18860
|
id: "pressure",
|
|
@@ -18719,7 +18865,7 @@ var GROUP_TEMPLATES = [
|
|
|
18719
18865
|
quantity: "pressure",
|
|
18720
18866
|
defaultAggregate: "mean",
|
|
18721
18867
|
empty: "null",
|
|
18722
|
-
companions: [NOW]
|
|
18868
|
+
companions: [NOW$1]
|
|
18723
18869
|
}),
|
|
18724
18870
|
numeric({
|
|
18725
18871
|
id: "illuminance",
|
|
@@ -18730,7 +18876,7 @@ var GROUP_TEMPLATES = [
|
|
|
18730
18876
|
quantity: "illuminance",
|
|
18731
18877
|
defaultAggregate: "mean",
|
|
18732
18878
|
empty: "null",
|
|
18733
|
-
companions: [NOW]
|
|
18879
|
+
companions: [NOW$1]
|
|
18734
18880
|
}),
|
|
18735
18881
|
numeric({
|
|
18736
18882
|
id: "power",
|
|
@@ -18741,7 +18887,7 @@ var GROUP_TEMPLATES = [
|
|
|
18741
18887
|
quantity: "power",
|
|
18742
18888
|
defaultAggregate: "sum",
|
|
18743
18889
|
empty: "omit",
|
|
18744
|
-
companions: [NOW]
|
|
18890
|
+
companions: [NOW$1]
|
|
18745
18891
|
}),
|
|
18746
18892
|
numeric({
|
|
18747
18893
|
id: "energy",
|
|
@@ -18752,7 +18898,7 @@ var GROUP_TEMPLATES = [
|
|
|
18752
18898
|
quantity: "energy",
|
|
18753
18899
|
defaultAggregate: "sum",
|
|
18754
18900
|
empty: "omit",
|
|
18755
|
-
companions: [NOW]
|
|
18901
|
+
companions: [NOW$1]
|
|
18756
18902
|
}),
|
|
18757
18903
|
numeric({
|
|
18758
18904
|
id: "battery",
|
|
@@ -18787,7 +18933,7 @@ var GROUP_TEMPLATES = [
|
|
|
18787
18933
|
quantity: "device",
|
|
18788
18934
|
defaultAggregate: "mean",
|
|
18789
18935
|
empty: "null",
|
|
18790
|
-
companions: [NOW]
|
|
18936
|
+
companions: [NOW$1]
|
|
18791
18937
|
}),
|
|
18792
18938
|
binary({
|
|
18793
18939
|
id: "motion",
|
|
@@ -18916,6 +19062,7 @@ function actuator(input) {
|
|
|
18916
19062
|
}
|
|
18917
19063
|
new Map(GROUP_TEMPLATES.map((template) => [template.id, template]));
|
|
18918
19064
|
DeviceFeature.LightColorRgb, DeviceFeature.LightColorHsv, DeviceFeature.LightColorMired;
|
|
19065
|
+
DeviceType.Camera;
|
|
18919
19066
|
`${COMPOSED_DEVICE_STABLE_ID_PREFIX}`;
|
|
18920
19067
|
/**
|
|
18921
19068
|
* What a composition may BUILD on a device type (G2, D676): the caps a new
|
|
@@ -59741,6 +59888,11 @@ DeviceType.Lock, method(object({
|
|
|
59741
59888
|
kind: "mutation",
|
|
59742
59889
|
auth: "protected"
|
|
59743
59890
|
});
|
|
59891
|
+
object({
|
|
59892
|
+
value: number().nullable().meta(readingMeta("device", { label: "Total" })),
|
|
59893
|
+
lastFetchedAt: number()
|
|
59894
|
+
});
|
|
59895
|
+
DeviceType.Sensor;
|
|
59744
59896
|
/**
|
|
59745
59897
|
* Media-player cap. Models HA `media_player.*` (Sonos, Chromecast,
|
|
59746
59898
|
* Apple TV, Spotify, Roku, generic OTT receivers, …) on
|
|
@@ -61658,7 +61810,7 @@ object({
|
|
|
61658
61810
|
/** Ms epoch when the slice was last updated. */
|
|
61659
61811
|
lastFetchedAt: number()
|
|
61660
61812
|
});
|
|
61661
|
-
DeviceType.Sensor;
|
|
61813
|
+
DeviceType.Sensor, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher;
|
|
61662
61814
|
/**
|
|
61663
61815
|
* Presence cap. Models HA `person.*` and `device_tracker.*` entities
|
|
61664
61816
|
* on `DeviceType.Presence`. Read-only — no setters: presence is
|
|
@@ -62105,7 +62257,7 @@ object({
|
|
|
62105
62257
|
phase: string().nullable()
|
|
62106
62258
|
});
|
|
62107
62259
|
Object.values(DeviceType);
|
|
62108
|
-
DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
|
|
62260
|
+
DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
|
|
62109
62261
|
DeviceType.Camera, DeviceType.Sensor, DeviceType.Switch, method(object({ deviceId: number().int().nonnegative() }), object({ success: literal(true) }), {
|
|
62110
62262
|
kind: "mutation",
|
|
62111
62263
|
auth: "admin"
|
|
@@ -65837,7 +65989,7 @@ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" })
|
|
|
65837
65989
|
auth: "admin"
|
|
65838
65990
|
});
|
|
65839
65991
|
SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
|
|
65840
|
-
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;
|
|
65992
|
+
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;
|
|
65841
65993
|
String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
|
|
65842
65994
|
DeviceRole.BinarySensor, DeviceRole.MotionSensor;
|
|
65843
65995
|
new Set(CAP_NAMES);
|
|
@@ -65988,7 +66140,7 @@ var AccessoryKind = {
|
|
|
65988
66140
|
PrivacyMask: DeviceRole.PrivacyMask
|
|
65989
66141
|
};
|
|
65990
66142
|
AccessoryKind.Siren, AccessoryKind.Floodlight, AccessoryKind.Spotlight, AccessoryKind.PirSensor, AccessoryKind.Chime, AccessoryKind.Autotrack, AccessoryKind.Nightvision, AccessoryKind.PrivacyMask;
|
|
65991
|
-
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;
|
|
66143
|
+
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;
|
|
65992
66144
|
new Set(Object.values(DeviceType));
|
|
65993
66145
|
Object.freeze({
|
|
65994
66146
|
"accessories.getStatus": {
|
|
@@ -70177,6 +70329,13 @@ Object.freeze({
|
|
|
70177
70329
|
access: "create",
|
|
70178
70330
|
role: "admin"
|
|
70179
70331
|
},
|
|
70332
|
+
"meter.getStatus": {
|
|
70333
|
+
capName: "meter",
|
|
70334
|
+
capScope: "device",
|
|
70335
|
+
addonId: null,
|
|
70336
|
+
access: "view",
|
|
70337
|
+
role: "viewer"
|
|
70338
|
+
},
|
|
70180
70339
|
"metricsProvider.collectSnapshot": {
|
|
70181
70340
|
capName: "metrics-provider",
|
|
70182
70341
|
capScope: "system",
|
|
@@ -78275,7 +78434,39 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
78275
78434
|
phrase: t("When {device} finishes", "Quando {device} finisce"),
|
|
78276
78435
|
icon: "square"
|
|
78277
78436
|
}
|
|
78278
|
-
}
|
|
78437
|
+
},
|
|
78438
|
+
overrides: { byType: {
|
|
78439
|
+
[DeviceType.Washer]: {
|
|
78440
|
+
state: { running: {
|
|
78441
|
+
whenTrue: t("When the washing machine starts", "Quando la lavatrice inizia"),
|
|
78442
|
+
whenFalse: t("When the washing machine has finished", "Quando la lavatrice ha finito")
|
|
78443
|
+
} },
|
|
78444
|
+
events: {
|
|
78445
|
+
onStarted: { phrase: t("When the washing machine starts", "Quando la lavatrice inizia") },
|
|
78446
|
+
onFinished: { phrase: t("When the washing machine has finished", "Quando la lavatrice ha finito") }
|
|
78447
|
+
}
|
|
78448
|
+
},
|
|
78449
|
+
[DeviceType.Dryer]: {
|
|
78450
|
+
state: { running: {
|
|
78451
|
+
whenTrue: t("When the dryer starts", "Quando l'asciugatrice inizia"),
|
|
78452
|
+
whenFalse: t("When the dryer has finished", "Quando l'asciugatrice ha finito")
|
|
78453
|
+
} },
|
|
78454
|
+
events: {
|
|
78455
|
+
onStarted: { phrase: t("When the dryer starts", "Quando l'asciugatrice inizia") },
|
|
78456
|
+
onFinished: { phrase: t("When the dryer has finished", "Quando l'asciugatrice ha finito") }
|
|
78457
|
+
}
|
|
78458
|
+
},
|
|
78459
|
+
[DeviceType.Dishwasher]: {
|
|
78460
|
+
state: { running: {
|
|
78461
|
+
whenTrue: t("When the dishwasher starts", "Quando la lavastoviglie inizia"),
|
|
78462
|
+
whenFalse: t("When the dishwasher has finished", "Quando la lavastoviglie ha finito")
|
|
78463
|
+
} },
|
|
78464
|
+
events: {
|
|
78465
|
+
onStarted: { phrase: t("When the dishwasher starts", "Quando la lavastoviglie inizia") },
|
|
78466
|
+
onFinished: { phrase: t("When the dishwasher has finished", "Quando la lavastoviglie ha finito") }
|
|
78467
|
+
}
|
|
78468
|
+
}
|
|
78469
|
+
} }
|
|
78279
78470
|
},
|
|
78280
78471
|
update: {
|
|
78281
78472
|
scope: "device",
|
|
@@ -79103,6 +79294,17 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
79103
79294
|
}],
|
|
79104
79295
|
events: { onMotionChanged: { notOperatorFacing: "the `detected` state trigger phrases both edges, from the mirror that survives a dropped event (D49)" } }
|
|
79105
79296
|
},
|
|
79297
|
+
meter: {
|
|
79298
|
+
scope: "device",
|
|
79299
|
+
noun: t("Meter", "Contatore"),
|
|
79300
|
+
state: [{
|
|
79301
|
+
kind: "numeric",
|
|
79302
|
+
field: "value",
|
|
79303
|
+
quantity: t("the total", "il totale"),
|
|
79304
|
+
label: t("Total", "Totale"),
|
|
79305
|
+
icon: "gauge"
|
|
79306
|
+
}]
|
|
79307
|
+
},
|
|
79106
79308
|
"numeric-sensor": {
|
|
79107
79309
|
scope: "device",
|
|
79108
79310
|
noun: t("Sensor", "Sensore"),
|
|
@@ -79575,8 +79777,47 @@ function projectAction(cap, action) {
|
|
|
79575
79777
|
};
|
|
79576
79778
|
}
|
|
79577
79779
|
Object.entries(CAP_VOCABULARY_BY_NAME).flatMap(([cap, entry]) => entry.scope === "device" ? (entry.actions ?? []).map((a) => projectAction(cap, a)) : []);
|
|
79578
|
-
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;
|
|
79780
|
+
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;
|
|
79579
79781
|
DeviceFeature.BatteryOperated;
|
|
79782
|
+
DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher;
|
|
79783
|
+
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.";
|
|
79784
|
+
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.";
|
|
79785
|
+
var ALEXA_REASON = "Alexa has no laundry category in this export, and neither power nor running has an Alexa interface.";
|
|
79786
|
+
var GOOGLE_REASON = "Google WASHER, DRYER and DISHWASHER require RunCycle. A power threshold is not that trait, and this export does not publish RunCycle.";
|
|
79787
|
+
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.";
|
|
79788
|
+
function withheld(reason) {
|
|
79789
|
+
return {
|
|
79790
|
+
[DeviceType.Washer]: {
|
|
79791
|
+
exported: false,
|
|
79792
|
+
reason
|
|
79793
|
+
},
|
|
79794
|
+
[DeviceType.Dryer]: {
|
|
79795
|
+
exported: false,
|
|
79796
|
+
reason
|
|
79797
|
+
},
|
|
79798
|
+
[DeviceType.Dishwasher]: {
|
|
79799
|
+
exported: false,
|
|
79800
|
+
reason
|
|
79801
|
+
}
|
|
79802
|
+
};
|
|
79803
|
+
}
|
|
79804
|
+
function offered(received) {
|
|
79805
|
+
return {
|
|
79806
|
+
[DeviceType.Washer]: {
|
|
79807
|
+
exported: true,
|
|
79808
|
+
as: received
|
|
79809
|
+
},
|
|
79810
|
+
[DeviceType.Dryer]: {
|
|
79811
|
+
exported: true,
|
|
79812
|
+
as: received
|
|
79813
|
+
},
|
|
79814
|
+
[DeviceType.Dishwasher]: {
|
|
79815
|
+
exported: true,
|
|
79816
|
+
as: received
|
|
79817
|
+
}
|
|
79818
|
+
};
|
|
79819
|
+
}
|
|
79820
|
+
offered(HA_AS), withheld(HOMEKIT_REASON), withheld(ALEXA_REASON), withheld(GOOGLE_REASON), withheld(MATTER_REASON);
|
|
79580
79821
|
Object.freeze({
|
|
79581
79822
|
"accessories.getStatus": [{
|
|
79582
79823
|
name: "deviceId",
|
|
@@ -80753,6 +80994,11 @@ Object.freeze({
|
|
|
80753
80994
|
form: "single",
|
|
80754
80995
|
optional: false
|
|
80755
80996
|
}],
|
|
80997
|
+
"meter.getStatus": [{
|
|
80998
|
+
name: "deviceId",
|
|
80999
|
+
form: "single",
|
|
81000
|
+
optional: false
|
|
81001
|
+
}],
|
|
80756
81002
|
"motion.getStatus": [{
|
|
80757
81003
|
name: "deviceId",
|
|
80758
81004
|
form: "single",
|
|
@@ -82360,7 +82606,6 @@ Object.freeze({
|
|
|
82360
82606
|
"network-access": "ingress",
|
|
82361
82607
|
"smtp-provider": "email"
|
|
82362
82608
|
});
|
|
82363
|
-
DeviceType.Camera;
|
|
82364
82609
|
/**
|
|
82365
82610
|
* A saved Customize assignment (D936). The schema is the type: callers use
|
|
82366
82611
|
* `z.infer`, they do not restate the shape.
|