@camstack/addon-post-analysis 1.2.639 → 1.2.641
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/{clip-model-registry-B-Dv5y3Z.mjs → clip-model-registry-Cw7Iy7Qi.mjs} +315 -28
- package/dist/{clip-model-registry-DEcrrqRz.js → clip-model-registry-Qr0XipkX.js} +315 -28
- package/dist/embedding-encoder/index.js +1 -1
- package/dist/embedding-encoder/index.mjs +1 -1
- package/dist/pipeline-analytics/_stub.js +2 -2
- package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-DRZLmZDb.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-Cct0TMzC.mjs} +2 -2
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-_TUthUZh.mjs +26 -0
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CuNXxDlT.mjs +26 -0
- package/dist/pipeline-analytics/{hostInit-B07ueo2X.mjs → hostInit-B9c2FowI.mjs} +2 -2
- package/dist/pipeline-analytics/index.js +118 -23
- package/dist/pipeline-analytics/index.mjs +118 -23
- package/dist/pipeline-analytics/remoteEntry.js +1 -1
- package/package.json +1 -1
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D4TYbuPV.mjs +0 -26
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Cc4lAtK3.mjs +0 -26
|
@@ -5640,7 +5640,7 @@ var ZodIssueCode = {
|
|
|
5640
5640
|
var ZodFirstPartyTypeKind;
|
|
5641
5641
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5642
5642
|
//#endregion
|
|
5643
|
-
//#region ../types/dist/sleep-
|
|
5643
|
+
//#region ../types/dist/sleep-0sD_LHLI.mjs
|
|
5644
5644
|
/**
|
|
5645
5645
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5646
5646
|
* window to float samples (D455).
|
|
@@ -9083,6 +9083,7 @@ var CAP_NAMES = Object.freeze([
|
|
|
9083
9083
|
"login-method",
|
|
9084
9084
|
"media-player",
|
|
9085
9085
|
"mesh-network",
|
|
9086
|
+
"meter",
|
|
9086
9087
|
"metrics-provider",
|
|
9087
9088
|
"model-convert",
|
|
9088
9089
|
"model-distributor",
|
|
@@ -10140,6 +10141,10 @@ Object.freeze({
|
|
|
10140
10141
|
]
|
|
10141
10142
|
}
|
|
10142
10143
|
],
|
|
10144
|
+
"meter": [{
|
|
10145
|
+
"path": "value",
|
|
10146
|
+
"valueType": "number"
|
|
10147
|
+
}],
|
|
10143
10148
|
"motion": [
|
|
10144
10149
|
{
|
|
10145
10150
|
"path": "detected",
|
|
@@ -10885,7 +10890,7 @@ Object.freeze({
|
|
|
10885
10890
|
* can answer "may a rule actuate this?" without importing the schema barrel
|
|
10886
10891
|
* (~144MB RSS per runner, D28).
|
|
10887
10892
|
*
|
|
10888
|
-
* Coverage:
|
|
10893
|
+
* Coverage: 94 device-scoped capabilities.
|
|
10889
10894
|
*/
|
|
10890
10895
|
var DEVICE_SCOPED_CAPS = new Set([
|
|
10891
10896
|
"accessories",
|
|
@@ -10937,6 +10942,7 @@ var DEVICE_SCOPED_CAPS = new Set([
|
|
|
10937
10942
|
"lawn-mower-control",
|
|
10938
10943
|
"lock-control",
|
|
10939
10944
|
"media-player",
|
|
10945
|
+
"meter",
|
|
10940
10946
|
"motion",
|
|
10941
10947
|
"motion-detection",
|
|
10942
10948
|
"motion-trigger",
|
|
@@ -11026,7 +11032,7 @@ function sleep(ms) {
|
|
|
11026
11032
|
return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));
|
|
11027
11033
|
}
|
|
11028
11034
|
//#endregion
|
|
11029
|
-
//#region ../types/dist/err-msg-
|
|
11035
|
+
//#region ../types/dist/err-msg-DIorGYeC.mjs
|
|
11030
11036
|
var DeviceType = /* @__PURE__ */ function(DeviceType) {
|
|
11031
11037
|
DeviceType["Camera"] = "camera";
|
|
11032
11038
|
DeviceType["Hub"] = "hub";
|
|
@@ -11120,8 +11126,14 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
|
|
|
11120
11126
|
DeviceType["PetFeeder"] = "pet-feeder";
|
|
11121
11127
|
/** Built-in dishwasher — program lifecycle, door / remote-start gates,
|
|
11122
11128
|
* salt and rinse-aid levels. Installed with the `dishwasher` cap.
|
|
11123
|
-
* Sources: native Bosch Home Connect, reusable by similar integrations.
|
|
11129
|
+
* Sources: native Bosch Home Connect, reusable by similar integrations.
|
|
11130
|
+
* A plug-built dishwasher carries running-state and power instead. */
|
|
11124
11131
|
DeviceType["Dishwasher"] = "dishwasher";
|
|
11132
|
+
/** Washing machine. A plug-built one is running while its power stays
|
|
11133
|
+
* above a threshold. No program cap — that surface is the dishwasher's. */
|
|
11134
|
+
DeviceType["Washer"] = "washer";
|
|
11135
|
+
/** Tumble dryer. Same plug-built running surface as {@link Washer}. */
|
|
11136
|
+
DeviceType["Dryer"] = "dryer";
|
|
11125
11137
|
return DeviceType;
|
|
11126
11138
|
}({});
|
|
11127
11139
|
var DeviceFeature = /* @__PURE__ */ function(DeviceFeature) {
|
|
@@ -11379,7 +11391,7 @@ function errMsg(err) {
|
|
|
11379
11391
|
return String(err);
|
|
11380
11392
|
}
|
|
11381
11393
|
//#endregion
|
|
11382
|
-
//#region ../types/dist/composition-
|
|
11394
|
+
//#region ../types/dist/composition-CpETZ4HL.mjs
|
|
11383
11395
|
/**
|
|
11384
11396
|
* Deterministic SHA-256 hash of an arbitrary serialisable value. The
|
|
11385
11397
|
* canonical form sorts object keys alphabetically at every depth so two
|
|
@@ -12295,6 +12307,97 @@ function validateExpressionSource(src) {
|
|
|
12295
12307
|
return null;
|
|
12296
12308
|
}
|
|
12297
12309
|
/**
|
|
12310
|
+
* One power reading becomes a washer, dryer or dishwasher (D944 helper).
|
|
12311
|
+
*
|
|
12312
|
+
* Standby of the control board is under 5 W; a motor or a heater is far
|
|
12313
|
+
* above that, so 5 W is the line. A door lock or a short pump spike is not
|
|
12314
|
+
* a cycle, so running starts only after 30 s above the line.
|
|
12315
|
+
*
|
|
12316
|
+
* A wash, dry or dishwasher pause (soak, heat-wait, heater off between
|
|
12317
|
+
* bursts) lasts several minutes. Ending the cycle on the first dip would
|
|
12318
|
+
* report "finished" in the middle of the program, so the stop dwell is
|
|
12319
|
+
* 10 minutes on every type. The number is stored per type so one machine
|
|
12320
|
+
* can move later without moving the others.
|
|
12321
|
+
*/
|
|
12322
|
+
var APPLIANCE_TEMPLATE_ID = "appliance";
|
|
12323
|
+
var APPLIANCE_KINDS = [
|
|
12324
|
+
"washer",
|
|
12325
|
+
"dryer",
|
|
12326
|
+
"dishwasher"
|
|
12327
|
+
];
|
|
12328
|
+
DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher;
|
|
12329
|
+
/**
|
|
12330
|
+
* Statistics and integrals over a history read (D944).
|
|
12331
|
+
*
|
|
12332
|
+
* Pure: the same points always give the same answer, so a restart recomputes
|
|
12333
|
+
* rather than trusting a buffer. A gauge mean is time-weighted (value × ms),
|
|
12334
|
+
* never the mean of the samples. A hole with no held value is not integrated
|
|
12335
|
+
* as zero. A truncated read is not published.
|
|
12336
|
+
*/
|
|
12337
|
+
var STATISTIC_STATS = [
|
|
12338
|
+
"min",
|
|
12339
|
+
"max",
|
|
12340
|
+
"mean",
|
|
12341
|
+
"sum",
|
|
12342
|
+
"count",
|
|
12343
|
+
"change"
|
|
12344
|
+
];
|
|
12345
|
+
/**
|
|
12346
|
+
* The range a statistics or integral helper asks history for (D944).
|
|
12347
|
+
*
|
|
12348
|
+
* Calendar edges are the hub's timezone, never UTC midnight: a day is 23, 24
|
|
12349
|
+
* or 25 hours across a DST change. A tier is eligible only when its retention
|
|
12350
|
+
* is strictly longer than the longest that range can be. Forever qualifies.
|
|
12351
|
+
* Equal to a tier's retention is a refusal, not a short answer.
|
|
12352
|
+
*/
|
|
12353
|
+
var MINUTE_MS = 6e4;
|
|
12354
|
+
var HOUR_MS = 60 * MINUTE_MS;
|
|
12355
|
+
var DAY_MS = 24 * HOUR_MS;
|
|
12356
|
+
var ROLLING_SPANS = [
|
|
12357
|
+
"1h",
|
|
12358
|
+
"24h",
|
|
12359
|
+
"2d",
|
|
12360
|
+
"7d",
|
|
12361
|
+
"30d",
|
|
12362
|
+
"custom"
|
|
12363
|
+
];
|
|
12364
|
+
var CALENDAR_PERIODS = [
|
|
12365
|
+
"today",
|
|
12366
|
+
"yesterday",
|
|
12367
|
+
"this-week",
|
|
12368
|
+
"this-month"
|
|
12369
|
+
];
|
|
12370
|
+
var RESET_PERIODS = [
|
|
12371
|
+
"never",
|
|
12372
|
+
"daily",
|
|
12373
|
+
"weekly",
|
|
12374
|
+
"monthly"
|
|
12375
|
+
];
|
|
12376
|
+
5 * MINUTE_MS;
|
|
12377
|
+
24 * HOUR_MS, 2 * DAY_MS, 7 * DAY_MS, 30 * DAY_MS;
|
|
12378
|
+
7 * DAY_MS, 30 * DAY_MS, 365 * DAY_MS;
|
|
12379
|
+
var StatisticWindowSchema = discriminatedUnion("kind", [object({
|
|
12380
|
+
kind: literal("rolling"),
|
|
12381
|
+
span: _enum(ROLLING_SPANS),
|
|
12382
|
+
customMinutes: number().int().min(5).optional()
|
|
12383
|
+
}).check((payload) => {
|
|
12384
|
+
if (payload.value.span === "custom" && payload.value.customMinutes === void 0) payload.issues.push({
|
|
12385
|
+
code: "custom",
|
|
12386
|
+
message: "a custom range needs a duration in minutes",
|
|
12387
|
+
path: ["customMinutes"],
|
|
12388
|
+
input: payload.value
|
|
12389
|
+
});
|
|
12390
|
+
if (payload.value.span !== "custom" && payload.value.customMinutes !== void 0) payload.issues.push({
|
|
12391
|
+
code: "custom",
|
|
12392
|
+
message: "only a custom range carries a duration",
|
|
12393
|
+
path: ["customMinutes"],
|
|
12394
|
+
input: payload.value
|
|
12395
|
+
});
|
|
12396
|
+
}), object({
|
|
12397
|
+
kind: literal("calendar"),
|
|
12398
|
+
period: _enum(CALENDAR_PERIODS)
|
|
12399
|
+
})]);
|
|
12400
|
+
/**
|
|
12298
12401
|
* A composition source identity: `(addonId, stableId)`, never a numeric device
|
|
12299
12402
|
* id. Split out so helper schemas can name it without a cycle through
|
|
12300
12403
|
* `composition.ts` (D659).
|
|
@@ -12350,14 +12453,37 @@ var HelperMemberSchema = object({
|
|
|
12350
12453
|
cap: string().min(1),
|
|
12351
12454
|
fieldPath: string().min(1)
|
|
12352
12455
|
});
|
|
12353
|
-
var HelperSpecSchema = discriminatedUnion("kind", [
|
|
12354
|
-
|
|
12355
|
-
|
|
12356
|
-
|
|
12357
|
-
|
|
12358
|
-
|
|
12359
|
-
|
|
12360
|
-
|
|
12456
|
+
var HelperSpecSchema = discriminatedUnion("kind", [
|
|
12457
|
+
object({
|
|
12458
|
+
kind: literal("group"),
|
|
12459
|
+
templateId: GroupTemplateIdSchema,
|
|
12460
|
+
aggregate: AggregateReducerSchema,
|
|
12461
|
+
members: array(HelperMemberSchema).min(1).max(64),
|
|
12462
|
+
/** Actuator groups only. Readings leave this unset. */
|
|
12463
|
+
active: ActiveCriterionSchema.optional()
|
|
12464
|
+
}),
|
|
12465
|
+
object({
|
|
12466
|
+
kind: literal("appliance"),
|
|
12467
|
+
templateId: literal(APPLIANCE_TEMPLATE_ID),
|
|
12468
|
+
appliance: _enum(APPLIANCE_KINDS),
|
|
12469
|
+
thresholdWatts: number().positive(),
|
|
12470
|
+
startDwellMs: number().int().nonnegative(),
|
|
12471
|
+
stopDwellMs: number().int().nonnegative(),
|
|
12472
|
+
member: HelperMemberSchema
|
|
12473
|
+
}),
|
|
12474
|
+
object({
|
|
12475
|
+
kind: literal("statistic"),
|
|
12476
|
+
stat: _enum(STATISTIC_STATS),
|
|
12477
|
+
window: StatisticWindowSchema,
|
|
12478
|
+
source: HelperMemberSchema
|
|
12479
|
+
}),
|
|
12480
|
+
object({
|
|
12481
|
+
kind: literal("integral"),
|
|
12482
|
+
reset: _enum(RESET_PERIODS),
|
|
12483
|
+
output: _enum(["energy", "meter"]),
|
|
12484
|
+
source: HelperMemberSchema
|
|
12485
|
+
})
|
|
12486
|
+
]);
|
|
12361
12487
|
/** A composed device's stableId is this prefix plus the block id. */
|
|
12362
12488
|
var COMPOSED_DEVICE_STABLE_ID_PREFIX = "composed-";
|
|
12363
12489
|
/** Longest snippet a `code` source may carry (slice 4). */
|
|
@@ -12431,6 +12557,26 @@ var CompositionFieldSourceSchema = discriminatedUnion("kind", [
|
|
|
12431
12557
|
"omit",
|
|
12432
12558
|
"offline"
|
|
12433
12559
|
])
|
|
12560
|
+
}),
|
|
12561
|
+
object({
|
|
12562
|
+
kind: literal("series"),
|
|
12563
|
+
read: CompositionFieldReadSchema,
|
|
12564
|
+
/** `value` is the statistic or the integral. The others are the gap counts. */
|
|
12565
|
+
publish: _enum([
|
|
12566
|
+
"value",
|
|
12567
|
+
"included",
|
|
12568
|
+
"excluded",
|
|
12569
|
+
"total"
|
|
12570
|
+
]),
|
|
12571
|
+
/**
|
|
12572
|
+
* What an unanswered `value` does. Counts ignore this. `offline` leaves the
|
|
12573
|
+
* device unseeded until history answers, so a restart cannot publish 0.
|
|
12574
|
+
*/
|
|
12575
|
+
empty: _enum([
|
|
12576
|
+
"null",
|
|
12577
|
+
"omit",
|
|
12578
|
+
"offline"
|
|
12579
|
+
])
|
|
12434
12580
|
})
|
|
12435
12581
|
]);
|
|
12436
12582
|
var CompositionCommandTargetSchema = discriminatedUnion("kind", [object({
|
|
@@ -19478,7 +19624,8 @@ var CompositionProblemSchema = object({
|
|
|
19478
19624
|
"native-capability-replace",
|
|
19479
19625
|
"mixed-quantity",
|
|
19480
19626
|
"helper-mismatch",
|
|
19481
|
-
"member-constraint"
|
|
19627
|
+
"member-constraint",
|
|
19628
|
+
"retention"
|
|
19482
19629
|
]),
|
|
19483
19630
|
path: string(),
|
|
19484
19631
|
message: string()
|
|
@@ -19718,7 +19865,7 @@ Object.freeze({
|
|
|
19718
19865
|
* One catalog row per base reading a group helper can build (D944 §3).
|
|
19719
19866
|
* Data, not a form default written into the block.
|
|
19720
19867
|
*/
|
|
19721
|
-
var NOW = {
|
|
19868
|
+
var NOW$1 = {
|
|
19722
19869
|
fieldPath: "lastFetchedAt",
|
|
19723
19870
|
expr: "now"
|
|
19724
19871
|
};
|
|
@@ -19764,7 +19911,7 @@ var GROUP_TEMPLATES = [
|
|
|
19764
19911
|
quantity: "temperature",
|
|
19765
19912
|
defaultAggregate: "mean",
|
|
19766
19913
|
empty: "null",
|
|
19767
|
-
companions: [NOW]
|
|
19914
|
+
companions: [NOW$1]
|
|
19768
19915
|
}),
|
|
19769
19916
|
numeric({
|
|
19770
19917
|
id: "humidity",
|
|
@@ -19775,7 +19922,7 @@ var GROUP_TEMPLATES = [
|
|
|
19775
19922
|
quantity: "humidity",
|
|
19776
19923
|
defaultAggregate: "mean",
|
|
19777
19924
|
empty: "null",
|
|
19778
|
-
companions: [NOW]
|
|
19925
|
+
companions: [NOW$1]
|
|
19779
19926
|
}),
|
|
19780
19927
|
numeric({
|
|
19781
19928
|
id: "pressure",
|
|
@@ -19786,7 +19933,7 @@ var GROUP_TEMPLATES = [
|
|
|
19786
19933
|
quantity: "pressure",
|
|
19787
19934
|
defaultAggregate: "mean",
|
|
19788
19935
|
empty: "null",
|
|
19789
|
-
companions: [NOW]
|
|
19936
|
+
companions: [NOW$1]
|
|
19790
19937
|
}),
|
|
19791
19938
|
numeric({
|
|
19792
19939
|
id: "illuminance",
|
|
@@ -19797,7 +19944,7 @@ var GROUP_TEMPLATES = [
|
|
|
19797
19944
|
quantity: "illuminance",
|
|
19798
19945
|
defaultAggregate: "mean",
|
|
19799
19946
|
empty: "null",
|
|
19800
|
-
companions: [NOW]
|
|
19947
|
+
companions: [NOW$1]
|
|
19801
19948
|
}),
|
|
19802
19949
|
numeric({
|
|
19803
19950
|
id: "power",
|
|
@@ -19808,7 +19955,7 @@ var GROUP_TEMPLATES = [
|
|
|
19808
19955
|
quantity: "power",
|
|
19809
19956
|
defaultAggregate: "sum",
|
|
19810
19957
|
empty: "omit",
|
|
19811
|
-
companions: [NOW]
|
|
19958
|
+
companions: [NOW$1]
|
|
19812
19959
|
}),
|
|
19813
19960
|
numeric({
|
|
19814
19961
|
id: "energy",
|
|
@@ -19819,7 +19966,7 @@ var GROUP_TEMPLATES = [
|
|
|
19819
19966
|
quantity: "energy",
|
|
19820
19967
|
defaultAggregate: "sum",
|
|
19821
19968
|
empty: "omit",
|
|
19822
|
-
companions: [NOW]
|
|
19969
|
+
companions: [NOW$1]
|
|
19823
19970
|
}),
|
|
19824
19971
|
numeric({
|
|
19825
19972
|
id: "battery",
|
|
@@ -19854,7 +20001,7 @@ var GROUP_TEMPLATES = [
|
|
|
19854
20001
|
quantity: "device",
|
|
19855
20002
|
defaultAggregate: "mean",
|
|
19856
20003
|
empty: "null",
|
|
19857
|
-
companions: [NOW]
|
|
20004
|
+
companions: [NOW$1]
|
|
19858
20005
|
}),
|
|
19859
20006
|
binary({
|
|
19860
20007
|
id: "motion",
|
|
@@ -19983,6 +20130,7 @@ function actuator(input) {
|
|
|
19983
20130
|
}
|
|
19984
20131
|
new Map(GROUP_TEMPLATES.map((template) => [template.id, template]));
|
|
19985
20132
|
DeviceFeature.LightColorRgb, DeviceFeature.LightColorHsv, DeviceFeature.LightColorMired;
|
|
20133
|
+
DeviceType.Camera;
|
|
19986
20134
|
`${COMPOSED_DEVICE_STABLE_ID_PREFIX}`;
|
|
19987
20135
|
/**
|
|
19988
20136
|
* What a composition may BUILD on a device type (G2, D676): the caps a new
|
|
@@ -64945,6 +65093,44 @@ var lockControlCapability = {
|
|
|
64945
65093
|
volatileStateFields: ["lastChangedAt"]
|
|
64946
65094
|
};
|
|
64947
65095
|
/**
|
|
65096
|
+
* A monotonic total between resets (D944). Energy uses `power-meter.kwhTotal`
|
|
65097
|
+
* so dashboards keep one series; every other instantaneous reading lands here.
|
|
65098
|
+
* `value` is the time integral in the source quantity's accumulated base
|
|
65099
|
+
* (base-unit seconds, or kWh on the power meter). `null` is a gap, never zero.
|
|
65100
|
+
*/
|
|
65101
|
+
var MeterStatusSchema = object({
|
|
65102
|
+
value: number().nullable().meta(readingMeta("device", { label: "Total" })),
|
|
65103
|
+
lastFetchedAt: number()
|
|
65104
|
+
});
|
|
65105
|
+
var meterCapability = {
|
|
65106
|
+
name: "meter",
|
|
65107
|
+
scope: "device",
|
|
65108
|
+
deviceNative: true,
|
|
65109
|
+
mode: "singleton",
|
|
65110
|
+
deviceTypes: [DeviceType.Sensor],
|
|
65111
|
+
methods: {},
|
|
65112
|
+
status: {
|
|
65113
|
+
schema: MeterStatusSchema,
|
|
65114
|
+
kind: "push"
|
|
65115
|
+
},
|
|
65116
|
+
runtimeState: MeterStatusSchema,
|
|
65117
|
+
/**
|
|
65118
|
+
* Runtime-state durability: **restored** — the total is a cache of the
|
|
65119
|
+
* history integral. A restart shows it only until the history pass
|
|
65120
|
+
* recomputes the open period; it is not an in-memory buffer.
|
|
65121
|
+
*
|
|
65122
|
+
* See `RuntimeStateDurability`. Enforced by
|
|
65123
|
+
* `scripts/check-runtime-state-durability.ts`.
|
|
65124
|
+
*/
|
|
65125
|
+
durability: "restored",
|
|
65126
|
+
history: { fields: { value: {
|
|
65127
|
+
kind: "counter",
|
|
65128
|
+
deadband: .001,
|
|
65129
|
+
minIntervalMs: 6e4
|
|
65130
|
+
} } },
|
|
65131
|
+
volatileStateFields: ["lastFetchedAt"]
|
|
65132
|
+
};
|
|
65133
|
+
/**
|
|
64948
65134
|
* Media-player cap. Models HA `media_player.*` (Sonos, Chromecast,
|
|
64949
65135
|
* Apple TV, Spotify, Roku, generic OTT receivers, …) on
|
|
64950
65136
|
* `DeviceType.MediaPlayer`. Disjoint from the camera streaming
|
|
@@ -67531,7 +67717,12 @@ var powerMeterCapability = {
|
|
|
67531
67717
|
scope: "device",
|
|
67532
67718
|
deviceNative: true,
|
|
67533
67719
|
mode: "singleton",
|
|
67534
|
-
deviceTypes: [
|
|
67720
|
+
deviceTypes: [
|
|
67721
|
+
DeviceType.Sensor,
|
|
67722
|
+
DeviceType.Washer,
|
|
67723
|
+
DeviceType.Dryer,
|
|
67724
|
+
DeviceType.Dishwasher
|
|
67725
|
+
],
|
|
67535
67726
|
methods: {},
|
|
67536
67727
|
status: {
|
|
67537
67728
|
schema: PowerMeterStatusSchema,
|
|
@@ -68269,6 +68460,8 @@ var runningCustomize = {
|
|
|
68269
68460
|
stateField: "running"
|
|
68270
68461
|
},
|
|
68271
68462
|
deviceTypes: [
|
|
68463
|
+
DeviceType.Washer,
|
|
68464
|
+
DeviceType.Dryer,
|
|
68272
68465
|
DeviceType.Dishwasher,
|
|
68273
68466
|
DeviceType.Vacuum,
|
|
68274
68467
|
DeviceType.LawnMower,
|
|
@@ -73022,7 +73215,7 @@ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" })
|
|
|
73022
73215
|
auth: "admin"
|
|
73023
73216
|
});
|
|
73024
73217
|
SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
|
|
73025
|
-
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;
|
|
73218
|
+
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;
|
|
73026
73219
|
String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
|
|
73027
73220
|
DeviceRole.BinarySensor, DeviceRole.MotionSensor;
|
|
73028
73221
|
new Set(CAP_NAMES);
|
|
@@ -73415,6 +73608,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
|
|
|
73415
73608
|
lawnMowerControl: lawnMowerControlCapability,
|
|
73416
73609
|
lockControl: lockControlCapability,
|
|
73417
73610
|
mediaPlayer: mediaPlayerCapability,
|
|
73611
|
+
meter: meterCapability,
|
|
73418
73612
|
motion: motionCapability,
|
|
73419
73613
|
motionTrigger: motionTriggerCapability,
|
|
73420
73614
|
motionZones: motionZonesCapability,
|
|
@@ -74191,7 +74385,7 @@ var DeclaredDevices = class {
|
|
|
74191
74385
|
return removed;
|
|
74192
74386
|
}
|
|
74193
74387
|
};
|
|
74194
|
-
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;
|
|
74388
|
+
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;
|
|
74195
74389
|
new Set(Object.values(DeviceType));
|
|
74196
74390
|
Object.freeze({
|
|
74197
74391
|
"accessories.getStatus": {
|
|
@@ -78380,6 +78574,13 @@ Object.freeze({
|
|
|
78380
78574
|
access: "create",
|
|
78381
78575
|
role: "admin"
|
|
78382
78576
|
},
|
|
78577
|
+
"meter.getStatus": {
|
|
78578
|
+
capName: "meter",
|
|
78579
|
+
capScope: "device",
|
|
78580
|
+
addonId: null,
|
|
78581
|
+
access: "view",
|
|
78582
|
+
role: "viewer"
|
|
78583
|
+
},
|
|
78383
78584
|
"metricsProvider.collectSnapshot": {
|
|
78384
78585
|
capName: "metrics-provider",
|
|
78385
78586
|
capScope: "system",
|
|
@@ -86478,7 +86679,39 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
86478
86679
|
phrase: t("When {device} finishes", "Quando {device} finisce"),
|
|
86479
86680
|
icon: "square"
|
|
86480
86681
|
}
|
|
86481
|
-
}
|
|
86682
|
+
},
|
|
86683
|
+
overrides: { byType: {
|
|
86684
|
+
[DeviceType.Washer]: {
|
|
86685
|
+
state: { running: {
|
|
86686
|
+
whenTrue: t("When the washing machine starts", "Quando la lavatrice inizia"),
|
|
86687
|
+
whenFalse: t("When the washing machine has finished", "Quando la lavatrice ha finito")
|
|
86688
|
+
} },
|
|
86689
|
+
events: {
|
|
86690
|
+
onStarted: { phrase: t("When the washing machine starts", "Quando la lavatrice inizia") },
|
|
86691
|
+
onFinished: { phrase: t("When the washing machine has finished", "Quando la lavatrice ha finito") }
|
|
86692
|
+
}
|
|
86693
|
+
},
|
|
86694
|
+
[DeviceType.Dryer]: {
|
|
86695
|
+
state: { running: {
|
|
86696
|
+
whenTrue: t("When the dryer starts", "Quando l'asciugatrice inizia"),
|
|
86697
|
+
whenFalse: t("When the dryer has finished", "Quando l'asciugatrice ha finito")
|
|
86698
|
+
} },
|
|
86699
|
+
events: {
|
|
86700
|
+
onStarted: { phrase: t("When the dryer starts", "Quando l'asciugatrice inizia") },
|
|
86701
|
+
onFinished: { phrase: t("When the dryer has finished", "Quando l'asciugatrice ha finito") }
|
|
86702
|
+
}
|
|
86703
|
+
},
|
|
86704
|
+
[DeviceType.Dishwasher]: {
|
|
86705
|
+
state: { running: {
|
|
86706
|
+
whenTrue: t("When the dishwasher starts", "Quando la lavastoviglie inizia"),
|
|
86707
|
+
whenFalse: t("When the dishwasher has finished", "Quando la lavastoviglie ha finito")
|
|
86708
|
+
} },
|
|
86709
|
+
events: {
|
|
86710
|
+
onStarted: { phrase: t("When the dishwasher starts", "Quando la lavastoviglie inizia") },
|
|
86711
|
+
onFinished: { phrase: t("When the dishwasher has finished", "Quando la lavastoviglie ha finito") }
|
|
86712
|
+
}
|
|
86713
|
+
}
|
|
86714
|
+
} }
|
|
86482
86715
|
},
|
|
86483
86716
|
update: {
|
|
86484
86717
|
scope: "device",
|
|
@@ -87306,6 +87539,17 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
87306
87539
|
}],
|
|
87307
87540
|
events: { onMotionChanged: { notOperatorFacing: "the `detected` state trigger phrases both edges, from the mirror that survives a dropped event (D49)" } }
|
|
87308
87541
|
},
|
|
87542
|
+
meter: {
|
|
87543
|
+
scope: "device",
|
|
87544
|
+
noun: t("Meter", "Contatore"),
|
|
87545
|
+
state: [{
|
|
87546
|
+
kind: "numeric",
|
|
87547
|
+
field: "value",
|
|
87548
|
+
quantity: t("the total", "il totale"),
|
|
87549
|
+
label: t("Total", "Totale"),
|
|
87550
|
+
icon: "gauge"
|
|
87551
|
+
}]
|
|
87552
|
+
},
|
|
87309
87553
|
"numeric-sensor": {
|
|
87310
87554
|
scope: "device",
|
|
87311
87555
|
noun: t("Sensor", "Sensore"),
|
|
@@ -87778,8 +88022,47 @@ function projectAction(cap, action) {
|
|
|
87778
88022
|
};
|
|
87779
88023
|
}
|
|
87780
88024
|
Object.entries(CAP_VOCABULARY_BY_NAME).flatMap(([cap, entry]) => entry.scope === "device" ? (entry.actions ?? []).map((a) => projectAction(cap, a)) : []);
|
|
87781
|
-
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;
|
|
88025
|
+
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;
|
|
87782
88026
|
DeviceFeature.BatteryOperated;
|
|
88027
|
+
DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher;
|
|
88028
|
+
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.";
|
|
88029
|
+
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.";
|
|
88030
|
+
var ALEXA_REASON = "Alexa has no laundry category in this export, and neither power nor running has an Alexa interface.";
|
|
88031
|
+
var GOOGLE_REASON = "Google WASHER, DRYER and DISHWASHER require RunCycle. A power threshold is not that trait, and this export does not publish RunCycle.";
|
|
88032
|
+
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.";
|
|
88033
|
+
function withheld(reason) {
|
|
88034
|
+
return {
|
|
88035
|
+
[DeviceType.Washer]: {
|
|
88036
|
+
exported: false,
|
|
88037
|
+
reason
|
|
88038
|
+
},
|
|
88039
|
+
[DeviceType.Dryer]: {
|
|
88040
|
+
exported: false,
|
|
88041
|
+
reason
|
|
88042
|
+
},
|
|
88043
|
+
[DeviceType.Dishwasher]: {
|
|
88044
|
+
exported: false,
|
|
88045
|
+
reason
|
|
88046
|
+
}
|
|
88047
|
+
};
|
|
88048
|
+
}
|
|
88049
|
+
function offered(received) {
|
|
88050
|
+
return {
|
|
88051
|
+
[DeviceType.Washer]: {
|
|
88052
|
+
exported: true,
|
|
88053
|
+
as: received
|
|
88054
|
+
},
|
|
88055
|
+
[DeviceType.Dryer]: {
|
|
88056
|
+
exported: true,
|
|
88057
|
+
as: received
|
|
88058
|
+
},
|
|
88059
|
+
[DeviceType.Dishwasher]: {
|
|
88060
|
+
exported: true,
|
|
88061
|
+
as: received
|
|
88062
|
+
}
|
|
88063
|
+
};
|
|
88064
|
+
}
|
|
88065
|
+
offered(HA_AS), withheld(HOMEKIT_REASON), withheld(ALEXA_REASON), withheld(GOOGLE_REASON), withheld(MATTER_REASON);
|
|
87783
88066
|
Object.freeze({
|
|
87784
88067
|
"accessories.getStatus": [{
|
|
87785
88068
|
name: "deviceId",
|
|
@@ -88956,6 +89239,11 @@ Object.freeze({
|
|
|
88956
89239
|
form: "single",
|
|
88957
89240
|
optional: false
|
|
88958
89241
|
}],
|
|
89242
|
+
"meter.getStatus": [{
|
|
89243
|
+
name: "deviceId",
|
|
89244
|
+
form: "single",
|
|
89245
|
+
optional: false
|
|
89246
|
+
}],
|
|
88959
89247
|
"motion.getStatus": [{
|
|
88960
89248
|
name: "deviceId",
|
|
88961
89249
|
form: "single",
|
|
@@ -90660,7 +90948,6 @@ var BucketAccumulator = class {
|
|
|
90660
90948
|
return n;
|
|
90661
90949
|
}
|
|
90662
90950
|
};
|
|
90663
|
-
DeviceType.Camera;
|
|
90664
90951
|
/**
|
|
90665
90952
|
* A saved Customize assignment (D936). The schema is the type: callers use
|
|
90666
90953
|
* `z.infer`, they do not restate the shape.
|