@camstack/addon-post-analysis 1.2.646 → 1.2.648
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/CHANGELOG.md +12 -0
- package/dist/{clip-model-registry-f9VyNPxT.mjs → clip-model-registry-CV0OM-KE.mjs} +164 -164
- package/dist/{clip-model-registry-52GHtVGU.js → clip-model-registry-Dz05U9H7.js} +164 -164
- package/dist/embedding-encoder/index.js +1 -1
- package/dist/embedding-encoder/index.mjs +1 -1
- package/dist/pipeline-analytics/_stub.js +1 -1
- package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-B6ySUn_6.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-DpZRdUNM.mjs} +2 -2
- package/dist/pipeline-analytics/{_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DDmbZknW.mjs → _virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D5tFxRsi.mjs} +1 -1
- package/dist/pipeline-analytics/{hostInit-DsERTEkD.mjs → hostInit-CJRlIsq_.mjs} +2 -2
- package/dist/pipeline-analytics/index.js +46 -21
- package/dist/pipeline-analytics/index.mjs +46 -21
- package/dist/pipeline-analytics/remoteEntry.js +1 -1
- package/package.json +1 -1
|
@@ -30,7 +30,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
30
30
|
}) : target, mod));
|
|
31
31
|
//#endregion
|
|
32
32
|
let node_crypto = require("node:crypto");
|
|
33
|
-
//#region ../types/dist/event-category-
|
|
33
|
+
//#region ../types/dist/event-category-DmZDPDf_.mjs
|
|
34
34
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
35
35
|
EventCategory["SystemBoot"] = "system.boot";
|
|
36
36
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -657,7 +657,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
657
657
|
* (a track was promoted to a stationary-registry entry) or departs (the
|
|
658
658
|
* object moved / was removed). Telemetry (D8): lossy, drives a UI refresh of
|
|
659
659
|
* the dedicated "Stationary" section — never the live event feed. Payload:
|
|
660
|
-
* `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp }`.
|
|
660
|
+
* `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp, observedAt, zones }`.
|
|
661
661
|
*/
|
|
662
662
|
EventCategory["PipelineAnalyticsStationaryChanged"] = "pipeline-analytics.stationary-changed";
|
|
663
663
|
/**
|
|
@@ -5676,7 +5676,7 @@ var ZodIssueCode = {
|
|
|
5676
5676
|
var ZodFirstPartyTypeKind;
|
|
5677
5677
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5678
5678
|
//#endregion
|
|
5679
|
-
//#region ../types/dist/sleep-
|
|
5679
|
+
//#region ../types/dist/sleep-Crlmu_tO.mjs
|
|
5680
5680
|
/**
|
|
5681
5681
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5682
5682
|
* window to float samples (D455).
|
|
@@ -9214,11 +9214,11 @@ var CAP_NAMES = Object.freeze([
|
|
|
9214
9214
|
Object.freeze({
|
|
9215
9215
|
"air-quality-sensor": [
|
|
9216
9216
|
{
|
|
9217
|
-
"path": "
|
|
9217
|
+
"path": "co2",
|
|
9218
9218
|
"valueType": "number"
|
|
9219
9219
|
},
|
|
9220
9220
|
{
|
|
9221
|
-
"path": "
|
|
9221
|
+
"path": "voc",
|
|
9222
9222
|
"valueType": "number"
|
|
9223
9223
|
},
|
|
9224
9224
|
{
|
|
@@ -9268,7 +9268,7 @@ Object.freeze({
|
|
|
9268
9268
|
}
|
|
9269
9269
|
],
|
|
9270
9270
|
"ambient-light-sensor": [{
|
|
9271
|
-
"path": "
|
|
9271
|
+
"path": "illuminance",
|
|
9272
9272
|
"valueType": "number"
|
|
9273
9273
|
}],
|
|
9274
9274
|
"audio-metrics": [
|
|
@@ -9329,7 +9329,7 @@ Object.freeze({
|
|
|
9329
9329
|
],
|
|
9330
9330
|
"battery": [
|
|
9331
9331
|
{
|
|
9332
|
-
"path": "
|
|
9332
|
+
"path": "level",
|
|
9333
9333
|
"valueType": "number"
|
|
9334
9334
|
},
|
|
9335
9335
|
{
|
|
@@ -9351,7 +9351,7 @@ Object.freeze({
|
|
|
9351
9351
|
"valueType": "number"
|
|
9352
9352
|
},
|
|
9353
9353
|
{
|
|
9354
|
-
"path": "
|
|
9354
|
+
"path": "voltage",
|
|
9355
9355
|
"valueType": "number"
|
|
9356
9356
|
},
|
|
9357
9357
|
{
|
|
@@ -9372,7 +9372,7 @@ Object.freeze({
|
|
|
9372
9372
|
"valueType": "boolean"
|
|
9373
9373
|
}],
|
|
9374
9374
|
"brightness": [{
|
|
9375
|
-
"path": "
|
|
9375
|
+
"path": "level",
|
|
9376
9376
|
"valueType": "number"
|
|
9377
9377
|
}],
|
|
9378
9378
|
"broker": [{
|
|
@@ -9573,7 +9573,7 @@ Object.freeze({
|
|
|
9573
9573
|
"valueType": "number"
|
|
9574
9574
|
},
|
|
9575
9575
|
{
|
|
9576
|
-
"path": "
|
|
9576
|
+
"path": "colorTemperature",
|
|
9577
9577
|
"valueType": "number"
|
|
9578
9578
|
}
|
|
9579
9579
|
],
|
|
@@ -9752,15 +9752,15 @@ Object.freeze({
|
|
|
9752
9752
|
"valueType": "string"
|
|
9753
9753
|
},
|
|
9754
9754
|
{
|
|
9755
|
-
"path": "
|
|
9755
|
+
"path": "remaining",
|
|
9756
9756
|
"valueType": "number"
|
|
9757
9757
|
},
|
|
9758
9758
|
{
|
|
9759
|
-
"path": "
|
|
9759
|
+
"path": "delayedStart",
|
|
9760
9760
|
"valueType": "number"
|
|
9761
9761
|
},
|
|
9762
9762
|
{
|
|
9763
|
-
"path": "
|
|
9763
|
+
"path": "progress",
|
|
9764
9764
|
"valueType": "number"
|
|
9765
9765
|
},
|
|
9766
9766
|
{
|
|
@@ -9874,7 +9874,7 @@ Object.freeze({
|
|
|
9874
9874
|
],
|
|
9875
9875
|
"fan-control": [
|
|
9876
9876
|
{
|
|
9877
|
-
"path": "
|
|
9877
|
+
"path": "speed",
|
|
9878
9878
|
"valueType": "number"
|
|
9879
9879
|
},
|
|
9880
9880
|
{
|
|
@@ -9974,7 +9974,7 @@ Object.freeze({
|
|
|
9974
9974
|
}
|
|
9975
9975
|
],
|
|
9976
9976
|
"humidity-sensor": [{
|
|
9977
|
-
"path": "
|
|
9977
|
+
"path": "humidity",
|
|
9978
9978
|
"valueType": "number"
|
|
9979
9979
|
}],
|
|
9980
9980
|
"image": [{
|
|
@@ -10084,7 +10084,7 @@ Object.freeze({
|
|
|
10084
10084
|
"valueType": "number"
|
|
10085
10085
|
},
|
|
10086
10086
|
{
|
|
10087
|
-
"path": "
|
|
10087
|
+
"path": "progress",
|
|
10088
10088
|
"valueType": "number"
|
|
10089
10089
|
},
|
|
10090
10090
|
{
|
|
@@ -10163,11 +10163,11 @@ Object.freeze({
|
|
|
10163
10163
|
"valueType": "string"
|
|
10164
10164
|
},
|
|
10165
10165
|
{
|
|
10166
|
-
"path": "
|
|
10166
|
+
"path": "position",
|
|
10167
10167
|
"valueType": "number"
|
|
10168
10168
|
},
|
|
10169
10169
|
{
|
|
10170
|
-
"path": "
|
|
10170
|
+
"path": "duration",
|
|
10171
10171
|
"valueType": "number"
|
|
10172
10172
|
},
|
|
10173
10173
|
{
|
|
@@ -10269,11 +10269,11 @@ Object.freeze({
|
|
|
10269
10269
|
]
|
|
10270
10270
|
},
|
|
10271
10271
|
{
|
|
10272
|
-
"path": "
|
|
10272
|
+
"path": "signal",
|
|
10273
10273
|
"valueType": "number"
|
|
10274
10274
|
},
|
|
10275
10275
|
{
|
|
10276
|
-
"path": "
|
|
10276
|
+
"path": "rssi",
|
|
10277
10277
|
"valueType": "number"
|
|
10278
10278
|
},
|
|
10279
10279
|
{
|
|
@@ -10404,23 +10404,23 @@ Object.freeze({
|
|
|
10404
10404
|
],
|
|
10405
10405
|
"power-meter": [
|
|
10406
10406
|
{
|
|
10407
|
-
"path": "
|
|
10407
|
+
"path": "power",
|
|
10408
10408
|
"valueType": "number"
|
|
10409
10409
|
},
|
|
10410
10410
|
{
|
|
10411
|
-
"path": "
|
|
10411
|
+
"path": "energy",
|
|
10412
10412
|
"valueType": "number"
|
|
10413
10413
|
},
|
|
10414
10414
|
{
|
|
10415
|
-
"path": "
|
|
10415
|
+
"path": "voltage",
|
|
10416
10416
|
"valueType": "number"
|
|
10417
10417
|
},
|
|
10418
10418
|
{
|
|
10419
|
-
"path": "
|
|
10419
|
+
"path": "current",
|
|
10420
10420
|
"valueType": "number"
|
|
10421
10421
|
},
|
|
10422
10422
|
{
|
|
10423
|
-
"path": "
|
|
10423
|
+
"path": "apparentPower",
|
|
10424
10424
|
"valueType": "number"
|
|
10425
10425
|
},
|
|
10426
10426
|
{
|
|
@@ -10448,14 +10448,10 @@ Object.freeze({
|
|
|
10448
10448
|
{
|
|
10449
10449
|
"path": "gps.accuracyMeters",
|
|
10450
10450
|
"valueType": "number"
|
|
10451
|
-
},
|
|
10452
|
-
{
|
|
10453
|
-
"path": "batteryPercent",
|
|
10454
|
-
"valueType": "number"
|
|
10455
10451
|
}
|
|
10456
10452
|
],
|
|
10457
10453
|
"pressure-sensor": [{
|
|
10458
|
-
"path": "
|
|
10454
|
+
"path": "pressure",
|
|
10459
10455
|
"valueType": "number"
|
|
10460
10456
|
}],
|
|
10461
10457
|
"privacy-mask": [{
|
|
@@ -10769,7 +10765,7 @@ Object.freeze({
|
|
|
10769
10765
|
"valueType": "boolean"
|
|
10770
10766
|
}],
|
|
10771
10767
|
"temperature-sensor": [{
|
|
10772
|
-
"path": "
|
|
10768
|
+
"path": "temperature",
|
|
10773
10769
|
"valueType": "number"
|
|
10774
10770
|
}],
|
|
10775
10771
|
"update": [
|
|
@@ -10817,7 +10813,7 @@ Object.freeze({
|
|
|
10817
10813
|
"valueType": "string"
|
|
10818
10814
|
},
|
|
10819
10815
|
{
|
|
10820
|
-
"path": "
|
|
10816
|
+
"path": "progress",
|
|
10821
10817
|
"valueType": "number"
|
|
10822
10818
|
},
|
|
10823
10819
|
{
|
|
@@ -11447,7 +11443,7 @@ function errMsg(err) {
|
|
|
11447
11443
|
return String(err);
|
|
11448
11444
|
}
|
|
11449
11445
|
//#endregion
|
|
11450
|
-
//#region ../types/dist/composition-
|
|
11446
|
+
//#region ../types/dist/composition-CZImLpOI.mjs
|
|
11451
11447
|
/**
|
|
11452
11448
|
* Deterministic SHA-256 hash of an arbitrary serialisable value. The
|
|
11453
11449
|
* canonical form sorts object keys alphabetically at every depth so two
|
|
@@ -16887,6 +16883,14 @@ var AutomationConditionLeafSchema = object({
|
|
|
16887
16883
|
array(union([string(), number()]))
|
|
16888
16884
|
])
|
|
16889
16885
|
});
|
|
16886
|
+
var AutomationConditionStationaryPresentSchema = object({
|
|
16887
|
+
kind: literal("stationary-present"),
|
|
16888
|
+
deviceId: number().int().nonnegative(),
|
|
16889
|
+
/** Class names; a macro class matches every raw class that maps to it. */
|
|
16890
|
+
classes: array(string().min(1)).min(1).optional(),
|
|
16891
|
+
/** The parked object must be in at least one of these zones. */
|
|
16892
|
+
zones: array(string().min(1)).min(1).optional()
|
|
16893
|
+
});
|
|
16890
16894
|
/**
|
|
16891
16895
|
* The expression leaf, declared as a plain object rather than an intersection
|
|
16892
16896
|
* with {@link ExpressionSourceSchema}: a discriminated union has to be able to
|
|
@@ -16920,7 +16924,8 @@ var AutomationConditionSchema = lazy(() => discriminatedUnion("kind", [
|
|
|
16920
16924
|
child: AutomationConditionSchema
|
|
16921
16925
|
}),
|
|
16922
16926
|
AutomationConditionLeafSchema,
|
|
16923
|
-
AutomationConditionExpressionSchema
|
|
16927
|
+
AutomationConditionExpressionSchema,
|
|
16928
|
+
AutomationConditionStationaryPresentSchema
|
|
16924
16929
|
]));
|
|
16925
16930
|
/**
|
|
16926
16931
|
* What starts a run.
|
|
@@ -16974,6 +16979,17 @@ var AutomationTriggerSchema = discriminatedUnion("kind", [
|
|
|
16974
16979
|
/** Best-so-far confidence the track must reach. */
|
|
16975
16980
|
minScore: number().min(0).max(1).optional()
|
|
16976
16981
|
}),
|
|
16982
|
+
object({
|
|
16983
|
+
kind: literal("stationary"),
|
|
16984
|
+
deviceIds: array(number().int().nonnegative()).min(1),
|
|
16985
|
+
/** Class names; a macro class matches like the detection trigger. */
|
|
16986
|
+
classes: array(string().min(1)).min(1).optional(),
|
|
16987
|
+
/** The parked object must be in at least one of these zones. */
|
|
16988
|
+
zones: array(string().min(1)).min(1).optional(),
|
|
16989
|
+
/** `appeared`: it became parked. `departed`: the registry retired it.
|
|
16990
|
+
* The vocabulary of `PipelineAnalyticsStationaryChanged`. */
|
|
16991
|
+
phase: _enum(["appeared", "departed"])
|
|
16992
|
+
}),
|
|
16977
16993
|
object({
|
|
16978
16994
|
kind: literal("interval"),
|
|
16979
16995
|
minutes: number().int().min(1).max(1440)
|
|
@@ -17205,7 +17221,8 @@ var AutomationConditionTraceNodeSchema = object({
|
|
|
17205
17221
|
"any",
|
|
17206
17222
|
"not",
|
|
17207
17223
|
"condition",
|
|
17208
|
-
"expression"
|
|
17224
|
+
"expression",
|
|
17225
|
+
"stationary-present"
|
|
17209
17226
|
]),
|
|
17210
17227
|
outcome: TraceNodeOutcomeSchema,
|
|
17211
17228
|
reason: string(),
|
|
@@ -20127,7 +20144,7 @@ var CompositionEventPlanSchema = object({
|
|
|
20127
20144
|
stateField: string(),
|
|
20128
20145
|
fieldKey: string()
|
|
20129
20146
|
});
|
|
20130
|
-
/** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.
|
|
20147
|
+
/** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.temperature`. */
|
|
20131
20148
|
var CompositionProblemSchema = object({
|
|
20132
20149
|
code: _enum([
|
|
20133
20150
|
"reserved-variant",
|
|
@@ -20446,7 +20463,7 @@ var GROUP_TEMPLATES = [
|
|
|
20446
20463
|
summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
|
|
20447
20464
|
role: DeviceRole.TemperatureSensor,
|
|
20448
20465
|
outputCap: "temperature-sensor",
|
|
20449
|
-
outputField: "
|
|
20466
|
+
outputField: "temperature",
|
|
20450
20467
|
quantity: "temperature",
|
|
20451
20468
|
defaultAggregate: "mean",
|
|
20452
20469
|
empty: "null",
|
|
@@ -20457,7 +20474,7 @@ var GROUP_TEMPLATES = [
|
|
|
20457
20474
|
summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
|
|
20458
20475
|
role: DeviceRole.HumiditySensor,
|
|
20459
20476
|
outputCap: "humidity-sensor",
|
|
20460
|
-
outputField: "
|
|
20477
|
+
outputField: "humidity",
|
|
20461
20478
|
quantity: "humidity",
|
|
20462
20479
|
defaultAggregate: "mean",
|
|
20463
20480
|
empty: "null",
|
|
@@ -20468,7 +20485,7 @@ var GROUP_TEMPLATES = [
|
|
|
20468
20485
|
summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
|
|
20469
20486
|
role: DeviceRole.PressureSensor,
|
|
20470
20487
|
outputCap: "pressure-sensor",
|
|
20471
|
-
outputField: "
|
|
20488
|
+
outputField: "pressure",
|
|
20472
20489
|
quantity: "pressure",
|
|
20473
20490
|
defaultAggregate: "mean",
|
|
20474
20491
|
empty: "null",
|
|
@@ -20479,7 +20496,7 @@ var GROUP_TEMPLATES = [
|
|
|
20479
20496
|
summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
|
|
20480
20497
|
role: DeviceRole.AmbientLightSensor,
|
|
20481
20498
|
outputCap: "ambient-light-sensor",
|
|
20482
|
-
outputField: "
|
|
20499
|
+
outputField: "illuminance",
|
|
20483
20500
|
quantity: "illuminance",
|
|
20484
20501
|
defaultAggregate: "mean",
|
|
20485
20502
|
empty: "null",
|
|
@@ -20490,7 +20507,7 @@ var GROUP_TEMPLATES = [
|
|
|
20490
20507
|
summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
|
|
20491
20508
|
role: DeviceRole.PowerSensor,
|
|
20492
20509
|
outputCap: "power-meter",
|
|
20493
|
-
outputField: "
|
|
20510
|
+
outputField: "power",
|
|
20494
20511
|
quantity: "power",
|
|
20495
20512
|
defaultAggregate: "sum",
|
|
20496
20513
|
empty: "omit",
|
|
@@ -20501,7 +20518,7 @@ var GROUP_TEMPLATES = [
|
|
|
20501
20518
|
summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
|
|
20502
20519
|
role: DeviceRole.EnergySensor,
|
|
20503
20520
|
outputCap: "power-meter",
|
|
20504
|
-
outputField: "
|
|
20521
|
+
outputField: "energy",
|
|
20505
20522
|
quantity: "energy",
|
|
20506
20523
|
defaultAggregate: "sum",
|
|
20507
20524
|
empty: "omit",
|
|
@@ -20512,7 +20529,7 @@ var GROUP_TEMPLATES = [
|
|
|
20512
20529
|
summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
|
|
20513
20530
|
role: DeviceRole.BatterySensor,
|
|
20514
20531
|
outputCap: "battery",
|
|
20515
|
-
outputField: "
|
|
20532
|
+
outputField: "level",
|
|
20516
20533
|
quantity: "percentage",
|
|
20517
20534
|
defaultAggregate: "mean",
|
|
20518
20535
|
empty: "null",
|
|
@@ -60937,9 +60954,9 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
|
|
|
60937
60954
|
*/
|
|
60938
60955
|
var AirQualitySensorStatusSchema = object({
|
|
60939
60956
|
/** Carbon dioxide concentration in ppm. */
|
|
60940
|
-
|
|
60957
|
+
co2: number().min(0).optional().meta(readingMeta("concentration-volume")),
|
|
60941
60958
|
/** Total volatile organic compounds in ppb. */
|
|
60942
|
-
|
|
60959
|
+
voc: number().min(0).optional().meta(readingMeta("concentration-ppb")),
|
|
60943
60960
|
/** Particulate matter ≤ 2.5 μm in µg/m³. */
|
|
60944
60961
|
pm25: number().min(0).optional().meta(readingMeta("concentration-mass")),
|
|
60945
60962
|
/** Particulate matter ≤ 10 μm in µg/m³. */
|
|
@@ -60972,12 +60989,12 @@ var airQualitySensorCapability = {
|
|
|
60972
60989
|
* History (D850): recorded series.
|
|
60973
60990
|
*/
|
|
60974
60991
|
history: { fields: {
|
|
60975
|
-
|
|
60992
|
+
co2: {
|
|
60976
60993
|
kind: "gauge",
|
|
60977
60994
|
unit: "ppm",
|
|
60978
60995
|
deadband: 5
|
|
60979
60996
|
},
|
|
60980
|
-
|
|
60997
|
+
voc: {
|
|
60981
60998
|
kind: "gauge",
|
|
60982
60999
|
unit: "ppb",
|
|
60983
61000
|
deadband: 5
|
|
@@ -61008,7 +61025,7 @@ var airQualitySensorCapability = {
|
|
|
61008
61025
|
*/
|
|
61009
61026
|
var AmbientLightSensorStatusSchema = object({
|
|
61010
61027
|
/** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
|
|
61011
|
-
|
|
61028
|
+
illuminance: number().min(0).nullable().meta(readingMeta("illuminance", {
|
|
61012
61029
|
precision: 0,
|
|
61013
61030
|
label: "Illuminance"
|
|
61014
61031
|
})),
|
|
@@ -61037,7 +61054,7 @@ var ambientLightSensorCapability = {
|
|
|
61037
61054
|
/**
|
|
61038
61055
|
* History (D850): recorded series. Wide range, so a RELATIVE deadband (10 %).
|
|
61039
61056
|
*/
|
|
61040
|
-
history: { fields: {
|
|
61057
|
+
history: { fields: { illuminance: {
|
|
61041
61058
|
kind: "gauge",
|
|
61042
61059
|
unit: "lx",
|
|
61043
61060
|
deadbandPct: 10,
|
|
@@ -61350,7 +61367,7 @@ var BatteryStatusSchema = object({
|
|
|
61350
61367
|
* Consumers must SKIP a null rather than coerce it — `battery-band` already
|
|
61351
61368
|
* declines to band a non-finite reading, which is the correct shape.
|
|
61352
61369
|
*/
|
|
61353
|
-
|
|
61370
|
+
level: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
|
|
61354
61371
|
/**
|
|
61355
61372
|
* Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
|
|
61356
61373
|
* Reolink-specific for the Solar Panel 2 accessory (will become
|
|
@@ -61360,7 +61377,7 @@ var BatteryStatusSchema = object({
|
|
|
61360
61377
|
* `'unknown'` is the absence of an answer: the provider has not read the
|
|
61361
61378
|
* power fields yet, or the firmware reported neither. Before it existed,
|
|
61362
61379
|
* two unreadable fields produced `'none'`, and a camera nobody had reached
|
|
61363
|
-
* was drawn "on battery alone" — the same D315 defect `
|
|
61380
|
+
* was drawn "on battery alone" — the same D315 defect `level` closed
|
|
61364
61381
|
* by going nullable. Consumers SKIP it (no charger state published, no
|
|
61365
61382
|
* glyph, no HomeKit ChargingState) rather than coerce it either way.
|
|
61366
61383
|
*/
|
|
@@ -61384,7 +61401,7 @@ var BatteryStatusSchema = object({
|
|
|
61384
61401
|
* that only report charge. A second reading on this cap, not a second
|
|
61385
61402
|
* `numeric-sensor` on the same device.
|
|
61386
61403
|
*/
|
|
61387
|
-
|
|
61404
|
+
voltage: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
|
|
61388
61405
|
/**
|
|
61389
61406
|
* Ms epoch of the last time the device PROVED it was reachable — a
|
|
61390
61407
|
* completed firmware round-trip, an observed wake, or an inbound push
|
|
@@ -61418,7 +61435,7 @@ var BatteryStatusSchema = object({
|
|
|
61418
61435
|
/**
|
|
61419
61436
|
* True when the source is a BINARY low-battery indicator (HA
|
|
61420
61437
|
* `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
|
|
61421
|
-
* charge level — `
|
|
61438
|
+
* charge level — `level` is then a coarse stand-in (100 = normal,
|
|
61422
61439
|
* sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
|
|
61423
61440
|
* misleading exact percentage. Absent/false → genuine 0–100 % reading.
|
|
61424
61441
|
*/
|
|
@@ -61438,15 +61455,15 @@ var BATTERY_DEVICE_TYPES = [
|
|
|
61438
61455
|
var batteryCustomize = {
|
|
61439
61456
|
version: 1,
|
|
61440
61457
|
targets: [{
|
|
61441
|
-
id: "
|
|
61458
|
+
id: "level",
|
|
61442
61459
|
cardinality: "scalar",
|
|
61443
61460
|
vocabulary: {
|
|
61444
61461
|
cap: "battery",
|
|
61445
|
-
stateField: "
|
|
61462
|
+
stateField: "level"
|
|
61446
61463
|
},
|
|
61447
61464
|
deviceTypes: BATTERY_DEVICE_TYPES,
|
|
61448
61465
|
apply: "add",
|
|
61449
|
-
path: "
|
|
61466
|
+
path: "level",
|
|
61450
61467
|
sources: [{
|
|
61451
61468
|
kind: "field",
|
|
61452
61469
|
valueKinds: ["number", "string"],
|
|
@@ -61540,7 +61557,7 @@ onStatusChanged: { data: object({
|
|
|
61540
61557
|
schema: BatteryStatusSchema,
|
|
61541
61558
|
kind: "push",
|
|
61542
61559
|
empty: {
|
|
61543
|
-
|
|
61560
|
+
level: null,
|
|
61544
61561
|
charging: "unknown",
|
|
61545
61562
|
sleeping: false,
|
|
61546
61563
|
lastUpdated: 0
|
|
@@ -61567,11 +61584,11 @@ onStatusChanged: { data: object({
|
|
|
61567
61584
|
* History (D850): recorded series. The generic capture replaces the `battery` series of `pipeline-analytics:stats-5m`.
|
|
61568
61585
|
*/
|
|
61569
61586
|
history: { fields: {
|
|
61570
|
-
|
|
61587
|
+
level: {
|
|
61571
61588
|
kind: "gauge",
|
|
61572
61589
|
unit: "%"
|
|
61573
61590
|
},
|
|
61574
|
-
|
|
61591
|
+
voltage: {
|
|
61575
61592
|
kind: "gauge",
|
|
61576
61593
|
unit: "V"
|
|
61577
61594
|
}
|
|
@@ -61631,14 +61648,14 @@ var binaryCapability = {
|
|
|
61631
61648
|
* controls to this single-method surface.
|
|
61632
61649
|
*
|
|
61633
61650
|
* The cap is intentionally minimal: a single `setBrightness({deviceId,
|
|
61634
|
-
*
|
|
61651
|
+
* level})` mutation plus the auto-injected `getStatus`. Drivers
|
|
61635
61652
|
* that expose richer controls (color temperature, scenes, schedules)
|
|
61636
61653
|
* should surface those via the device's `getSettingsUISchema()`
|
|
61637
61654
|
* instead of bloating this cap.
|
|
61638
61655
|
*/
|
|
61639
61656
|
var BrightnessStatusSchema = object({
|
|
61640
61657
|
/** Current level as 0..100 inclusive. Firmware-reported. */
|
|
61641
|
-
|
|
61658
|
+
level: number().min(0).max(100).meta(readingMeta("percentage")),
|
|
61642
61659
|
/** Ms epoch of the last operator-driven change. Useful for UI freshness. */
|
|
61643
61660
|
lastChangedAt: number()
|
|
61644
61661
|
});
|
|
@@ -61650,7 +61667,7 @@ var brightnessCapability = {
|
|
|
61650
61667
|
deviceTypes: [DeviceType.Light],
|
|
61651
61668
|
methods: { setBrightness: method(object({
|
|
61652
61669
|
deviceId: number().int().nonnegative(),
|
|
61653
|
-
|
|
61670
|
+
level: number().min(0).max(100)
|
|
61654
61671
|
}), _void(), {
|
|
61655
61672
|
kind: "mutation",
|
|
61656
61673
|
auth: "protected"
|
|
@@ -61663,7 +61680,7 @@ var brightnessCapability = {
|
|
|
61663
61680
|
*/
|
|
61664
61681
|
onBrightnessChanged: { data: object({
|
|
61665
61682
|
deviceId: number(),
|
|
61666
|
-
|
|
61683
|
+
level: number().min(0).max(100),
|
|
61667
61684
|
lastChangedAt: number()
|
|
61668
61685
|
}) } },
|
|
61669
61686
|
status: {
|
|
@@ -61686,7 +61703,7 @@ onBrightnessChanged: { data: object({
|
|
|
61686
61703
|
/**
|
|
61687
61704
|
* History (D850): recorded series. Actuator tier: level keeps every change.
|
|
61688
61705
|
*/
|
|
61689
|
-
history: { fields: {
|
|
61706
|
+
history: { fields: { level: {
|
|
61690
61707
|
kind: "gauge",
|
|
61691
61708
|
unit: "%",
|
|
61692
61709
|
minIntervalMs: 0
|
|
@@ -62310,11 +62327,11 @@ var ColorInputSchema = discriminatedUnion("mode", [
|
|
|
62310
62327
|
}),
|
|
62311
62328
|
object({
|
|
62312
62329
|
mode: literal("mired"),
|
|
62313
|
-
|
|
62330
|
+
colorTemperature: number().int().min(50).max(1e3)
|
|
62314
62331
|
})
|
|
62315
62332
|
]);
|
|
62316
62333
|
var ColorStatusSchema = object({
|
|
62317
|
-
/** Active color mode — which of `rgb` / `hsv` / `
|
|
62334
|
+
/** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
|
|
62318
62335
|
* the bulb's current state. */
|
|
62319
62336
|
mode: _enum([
|
|
62320
62337
|
"rgb",
|
|
@@ -62326,7 +62343,7 @@ var ColorStatusSchema = object({
|
|
|
62326
62343
|
/** Populated when `mode === 'hsv'`. */
|
|
62327
62344
|
hsv: HsvTripletSchema.optional(),
|
|
62328
62345
|
/** Populated when `mode === 'mired'`. */
|
|
62329
|
-
|
|
62346
|
+
colorTemperature: number().int().optional().meta(readingMeta("colour-temperature")),
|
|
62330
62347
|
/** Ms epoch of the last operator-driven change. */
|
|
62331
62348
|
lastChangedAt: number()
|
|
62332
62349
|
});
|
|
@@ -62358,7 +62375,7 @@ onColorChanged: { data: object({
|
|
|
62358
62375
|
]),
|
|
62359
62376
|
rgb: RgbTripletSchema.optional(),
|
|
62360
62377
|
hsv: HsvTripletSchema.optional(),
|
|
62361
|
-
|
|
62378
|
+
colorTemperature: number().int().optional(),
|
|
62362
62379
|
lastChangedAt: number()
|
|
62363
62380
|
}) } },
|
|
62364
62381
|
status: {
|
|
@@ -63271,11 +63288,11 @@ var DishwasherStatusSchema = object({
|
|
|
63271
63288
|
/** Feature keys of the programs the appliance currently offers — drives the UI selector. */
|
|
63272
63289
|
availablePrograms: array(string()),
|
|
63273
63290
|
/** Seconds remaining on the active cycle, or null when not running / not known. */
|
|
63274
|
-
|
|
63291
|
+
remaining: number().int().nonnegative().nullable().meta(readingMeta("duration")),
|
|
63275
63292
|
/** Seconds the delayed start is set to (time until the cycle starts), or null. */
|
|
63276
|
-
|
|
63293
|
+
delayedStart: number().int().nonnegative().nullable().meta(readingMeta("duration")),
|
|
63277
63294
|
/** Cycle completion 0..100, or null when not applicable. */
|
|
63278
|
-
|
|
63295
|
+
progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
63279
63296
|
/** True when the door is reported open; null when the door state is not known. */
|
|
63280
63297
|
doorOpen: boolean().nullable(),
|
|
63281
63298
|
/** True when the door is latched (locked) during a cycle; null when not reported. */
|
|
@@ -63494,14 +63511,14 @@ var dishwasherCapability = {
|
|
|
63494
63511
|
runtimeState: DishwasherStatusSchema,
|
|
63495
63512
|
durability: "session",
|
|
63496
63513
|
history: { fields: {
|
|
63497
|
-
|
|
63514
|
+
progress: {
|
|
63498
63515
|
kind: "gauge",
|
|
63499
63516
|
unit: "%",
|
|
63500
63517
|
deadband: 2
|
|
63501
63518
|
},
|
|
63502
63519
|
state: { kind: "enum" },
|
|
63503
63520
|
operationState: { kind: "enum" },
|
|
63504
|
-
|
|
63521
|
+
remaining: {
|
|
63505
63522
|
kind: "gauge",
|
|
63506
63523
|
unit: "s",
|
|
63507
63524
|
minIntervalMs: 6e4
|
|
@@ -64132,7 +64149,7 @@ var FanDirectionSchema = _enum(["forward", "reverse"]);
|
|
|
64132
64149
|
var FanControlStatusSchema = object({
|
|
64133
64150
|
/** Active speed as 0..100 inclusive. Null when the device has no
|
|
64134
64151
|
* speed surface (single-speed fan). */
|
|
64135
|
-
|
|
64152
|
+
speed: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
64136
64153
|
/** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
|
|
64137
64154
|
* a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
|
|
64138
64155
|
percentageStep: number().positive().optional().meta(readingMeta("percentage")),
|
|
@@ -64159,7 +64176,7 @@ var fanControlCapability = {
|
|
|
64159
64176
|
methods: {
|
|
64160
64177
|
setPercentage: method(object({
|
|
64161
64178
|
deviceId: number().int().nonnegative(),
|
|
64162
|
-
|
|
64179
|
+
speed: number().min(0).max(100)
|
|
64163
64180
|
}), _void(), {
|
|
64164
64181
|
kind: "mutation",
|
|
64165
64182
|
auth: "protected"
|
|
@@ -64192,7 +64209,7 @@ var fanControlCapability = {
|
|
|
64192
64209
|
},
|
|
64193
64210
|
/**
|
|
64194
64211
|
* Runtime-state slice — mirrored by the kernel. UI fan speed
|
|
64195
|
-
* sliders read `
|
|
64212
|
+
* sliders read `speed` for live updates.
|
|
64196
64213
|
*/
|
|
64197
64214
|
runtimeState: FanControlStatusSchema,
|
|
64198
64215
|
/**
|
|
@@ -64206,7 +64223,7 @@ var fanControlCapability = {
|
|
|
64206
64223
|
* History (D850): recorded series. Actuator tier: speed keeps every change.
|
|
64207
64224
|
*/
|
|
64208
64225
|
history: { fields: {
|
|
64209
|
-
|
|
64226
|
+
speed: {
|
|
64210
64227
|
kind: "gauge",
|
|
64211
64228
|
unit: "%",
|
|
64212
64229
|
minIntervalMs: 0
|
|
@@ -64651,7 +64668,7 @@ var humidifierCapability = {
|
|
|
64651
64668
|
*/
|
|
64652
64669
|
var HumiditySensorStatusSchema = object({
|
|
64653
64670
|
/** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
|
|
64654
|
-
|
|
64671
|
+
humidity: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
|
|
64655
64672
|
precision: 0,
|
|
64656
64673
|
label: "Humidity"
|
|
64657
64674
|
})),
|
|
@@ -64680,7 +64697,7 @@ var humiditySensorCapability = {
|
|
|
64680
64697
|
/**
|
|
64681
64698
|
* History (D850): recorded series.
|
|
64682
64699
|
*/
|
|
64683
|
-
history: { fields: {
|
|
64700
|
+
history: { fields: { humidity: {
|
|
64684
64701
|
kind: "gauge",
|
|
64685
64702
|
unit: "%",
|
|
64686
64703
|
deadband: .5
|
|
@@ -65320,7 +65337,7 @@ var LawnMowerControlStatusSchema = object({
|
|
|
65320
65337
|
batteryLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
65321
65338
|
/** 0..100 mowing-completion percentage of the current task, or null when no
|
|
65322
65339
|
* task is active / progress is unavailable. */
|
|
65323
|
-
|
|
65340
|
+
progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
65324
65341
|
/** Current device/event code (dynamic — mostly status, sometimes an error),
|
|
65325
65342
|
* or null when unknown. */
|
|
65326
65343
|
currentCode: number().nullable().meta(readingMeta("none")),
|
|
@@ -65841,7 +65858,7 @@ var lockControlCapability = {
|
|
|
65841
65858
|
volatileStateFields: ["lastChangedAt"]
|
|
65842
65859
|
};
|
|
65843
65860
|
/**
|
|
65844
|
-
* A monotonic total between resets (D944). Energy uses `power-meter.
|
|
65861
|
+
* A monotonic total between resets (D944). Energy uses `power-meter.energy`
|
|
65845
65862
|
* so dashboards keep one series; every other instantaneous reading lands here.
|
|
65846
65863
|
* `value` is the time integral in the source quantity's accumulated base
|
|
65847
65864
|
* (base-unit seconds, or kWh on the power meter). `null` is a gap, never zero.
|
|
@@ -65935,10 +65952,10 @@ var MediaPlayerStatusSchema = object({
|
|
|
65935
65952
|
currentMedia: MediaInfoSchema.nullable(),
|
|
65936
65953
|
/** Current playback position in ms. Null when not seekable or
|
|
65937
65954
|
* nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
|
|
65938
|
-
|
|
65955
|
+
position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
|
|
65939
65956
|
/** Total duration of the current media in ms. Null when unknown
|
|
65940
65957
|
* (live stream) or nothing is playing. */
|
|
65941
|
-
|
|
65958
|
+
duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
|
|
65942
65959
|
/** Shuffle toggle. Null when no shuffle surface.
|
|
65943
65960
|
* Pair with `DeviceFeature.MediaPlayerShuffle`. */
|
|
65944
65961
|
shuffle: boolean().nullable(),
|
|
@@ -65977,7 +65994,7 @@ var mediaPlayerCapability = {
|
|
|
65977
65994
|
}),
|
|
65978
65995
|
seek: method(object({
|
|
65979
65996
|
deviceId: number().int().nonnegative(),
|
|
65980
|
-
|
|
65997
|
+
position: number().int().nonnegative()
|
|
65981
65998
|
}), _void(), {
|
|
65982
65999
|
kind: "mutation",
|
|
65983
66000
|
auth: "protected"
|
|
@@ -66049,7 +66066,7 @@ var mediaPlayerCapability = {
|
|
|
66049
66066
|
/**
|
|
66050
66067
|
* History (D850): volume (a level an operator or an automation sets; the
|
|
66051
66068
|
* default 10 s floor folds a slider drag into its end value) and mute.
|
|
66052
|
-
* `
|
|
66069
|
+
* `position` is not recorded: it moves continuously while playing.
|
|
66053
66070
|
*/
|
|
66054
66071
|
history: { fields: {
|
|
66055
66072
|
volumeLevel: {
|
|
@@ -67036,9 +67053,9 @@ var NetworkLinkStatusSchema = object({
|
|
|
67036
67053
|
* one whose reading has not landed must not be drawn at 0 %. Consumers
|
|
67037
67054
|
* SKIP a null rather than coerce it.
|
|
67038
67055
|
*/
|
|
67039
|
-
|
|
67056
|
+
signal: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
67040
67057
|
/** Raw received signal strength in dBm, when the firmware reports one. */
|
|
67041
|
-
|
|
67058
|
+
rssi: number().optional().meta(readingMeta("signal-level")),
|
|
67042
67059
|
/** Network name of a wireless link, when the firmware reports it. */
|
|
67043
67060
|
ssid: string().optional(),
|
|
67044
67061
|
/** Ms epoch of the last observation. Lets consumers reason about freshness. */
|
|
@@ -67074,7 +67091,7 @@ onStatusChanged: { data: object({
|
|
|
67074
67091
|
kind: "push",
|
|
67075
67092
|
empty: {
|
|
67076
67093
|
type: "unknown",
|
|
67077
|
-
|
|
67094
|
+
signal: null,
|
|
67078
67095
|
lastUpdated: 0
|
|
67079
67096
|
}
|
|
67080
67097
|
},
|
|
@@ -67097,13 +67114,13 @@ onStatusChanged: { data: object({
|
|
|
67097
67114
|
* History (D850): recorded series.
|
|
67098
67115
|
*/
|
|
67099
67116
|
history: { fields: {
|
|
67100
|
-
|
|
67117
|
+
signal: {
|
|
67101
67118
|
kind: "gauge",
|
|
67102
67119
|
unit: "%",
|
|
67103
67120
|
deadband: 3,
|
|
67104
67121
|
minIntervalMs: 6e4
|
|
67105
67122
|
},
|
|
67106
|
-
|
|
67123
|
+
rssi: {
|
|
67107
67124
|
kind: "gauge",
|
|
67108
67125
|
unit: "dBm",
|
|
67109
67126
|
deadband: 2,
|
|
@@ -68458,16 +68475,16 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
|
|
|
68458
68475
|
* in real-world devices.
|
|
68459
68476
|
*/
|
|
68460
68477
|
var PowerMeterStatusSchema = object({
|
|
68461
|
-
/** Instantaneous power draw
|
|
68462
|
-
|
|
68478
|
+
/** Instantaneous power draw (watts). */
|
|
68479
|
+
power: number().optional().meta(readingMeta("power", { label: "Power" })),
|
|
68463
68480
|
/** Cumulative energy in kilowatt-hours since the meter was reset. */
|
|
68464
|
-
|
|
68465
|
-
/** Voltage
|
|
68466
|
-
|
|
68481
|
+
energy: number().optional().meta(readingMeta("energy", { label: "Energy" })),
|
|
68482
|
+
/** Voltage (volts). */
|
|
68483
|
+
voltage: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
|
|
68467
68484
|
/** Current in amperes. */
|
|
68468
|
-
|
|
68485
|
+
current: number().optional().meta(readingMeta("current", { label: "Current" })),
|
|
68469
68486
|
/** Apparent power in volt-amperes. */
|
|
68470
|
-
|
|
68487
|
+
apparentPower: number().optional().meta(readingMeta("apparent-power")),
|
|
68471
68488
|
/** Power factor (0..1) if reported. */
|
|
68472
68489
|
powerFactor: number().min(0).max(1).optional().meta(readingMeta("ratio")),
|
|
68473
68490
|
/** Ms epoch when the slice was last updated. */
|
|
@@ -68525,14 +68542,14 @@ function powerTarget(id, unit) {
|
|
|
68525
68542
|
advancedExpression: true
|
|
68526
68543
|
};
|
|
68527
68544
|
}
|
|
68528
|
-
/** "Power and energy" extension:
|
|
68545
|
+
/** "Power and energy" extension: power, energy, voltage and current from other devices (D951). */
|
|
68529
68546
|
var powerMeterCustomize = {
|
|
68530
68547
|
version: 1,
|
|
68531
68548
|
targets: [
|
|
68532
|
-
powerTarget("
|
|
68533
|
-
powerTarget("
|
|
68534
|
-
powerTarget("
|
|
68535
|
-
powerTarget("
|
|
68549
|
+
powerTarget("power", "W"),
|
|
68550
|
+
powerTarget("energy", "kWh"),
|
|
68551
|
+
powerTarget("voltage", "V"),
|
|
68552
|
+
powerTarget("current", "A")
|
|
68536
68553
|
]
|
|
68537
68554
|
};
|
|
68538
68555
|
var powerMeterCapability = {
|
|
@@ -68548,41 +68565,41 @@ var powerMeterCapability = {
|
|
|
68548
68565
|
},
|
|
68549
68566
|
runtimeState: PowerMeterStatusSchema,
|
|
68550
68567
|
/**
|
|
68551
|
-
* Runtime-state durability: **restored** — as `numeric-sensor`; `
|
|
68568
|
+
* Runtime-state durability: **restored** — as `numeric-sensor`; `energy` is an accumulator whose restored value is the baseline.
|
|
68552
68569
|
*
|
|
68553
68570
|
* See `RuntimeStateDurability`. Enforced by
|
|
68554
68571
|
* `scripts/check-runtime-state-durability.ts`.
|
|
68555
68572
|
*/
|
|
68556
68573
|
durability: "restored",
|
|
68557
68574
|
/**
|
|
68558
|
-
* History (D850): recorded series. Gauges are floored at 30 s; `
|
|
68575
|
+
* History (D850): recorded series. Gauges are floored at 30 s; `energy` is the one monotonic meter (counter).
|
|
68559
68576
|
*/
|
|
68560
68577
|
history: { fields: {
|
|
68561
|
-
|
|
68578
|
+
power: {
|
|
68562
68579
|
kind: "gauge",
|
|
68563
68580
|
unit: "W",
|
|
68564
68581
|
deadband: 1,
|
|
68565
68582
|
minIntervalMs: 3e4
|
|
68566
68583
|
},
|
|
68567
|
-
|
|
68584
|
+
energy: {
|
|
68568
68585
|
kind: "counter",
|
|
68569
68586
|
unit: "kWh",
|
|
68570
68587
|
deadband: .01,
|
|
68571
68588
|
minIntervalMs: 6e4
|
|
68572
68589
|
},
|
|
68573
|
-
|
|
68590
|
+
voltage: {
|
|
68574
68591
|
kind: "gauge",
|
|
68575
68592
|
unit: "V",
|
|
68576
68593
|
deadband: 1,
|
|
68577
68594
|
minIntervalMs: 3e4
|
|
68578
68595
|
},
|
|
68579
|
-
|
|
68596
|
+
current: {
|
|
68580
68597
|
kind: "gauge",
|
|
68581
68598
|
unit: "A",
|
|
68582
68599
|
deadband: .05,
|
|
68583
68600
|
minIntervalMs: 3e4
|
|
68584
68601
|
},
|
|
68585
|
-
|
|
68602
|
+
apparentPower: {
|
|
68586
68603
|
kind: "gauge",
|
|
68587
68604
|
unit: "VA",
|
|
68588
68605
|
deadband: 1,
|
|
@@ -68632,9 +68649,6 @@ var PresenceStatusSchema = object({
|
|
|
68632
68649
|
location: string().nullable(),
|
|
68633
68650
|
/** GPS coordinates when available. Null otherwise. */
|
|
68634
68651
|
gps: GpsLocationSchema.nullable(),
|
|
68635
|
-
/** Optional battery level of the tracking device (0..100). Null
|
|
68636
|
-
* when not reported. */
|
|
68637
|
-
batteryPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
68638
68652
|
/** Ms epoch when the slice was last updated. */
|
|
68639
68653
|
lastChangedAt: number()
|
|
68640
68654
|
});
|
|
@@ -68663,14 +68677,7 @@ var presenceCapability = {
|
|
|
68663
68677
|
* `scripts/check-runtime-state-durability.ts`.
|
|
68664
68678
|
*/
|
|
68665
68679
|
durability: "restored",
|
|
68666
|
-
|
|
68667
|
-
* History (D850): recorded series.
|
|
68668
|
-
*/
|
|
68669
|
-
history: { fields: { batteryPercent: {
|
|
68670
|
-
kind: "gauge",
|
|
68671
|
-
unit: "%",
|
|
68672
|
-
deadband: 1
|
|
68673
|
-
} } },
|
|
68680
|
+
history: "none",
|
|
68674
68681
|
/** Clock fields: written, but excluded from the compare that decides
|
|
68675
68682
|
* whether persisting is worth a SQLite commit. */
|
|
68676
68683
|
volatileStateFields: ["lastChangedAt"]
|
|
@@ -68685,7 +68692,7 @@ var presenceCapability = {
|
|
|
68685
68692
|
*/
|
|
68686
68693
|
var PressureSensorStatusSchema = object({
|
|
68687
68694
|
/** Current pressure in hPa. `null` when the sample was refused (D393). */
|
|
68688
|
-
|
|
68695
|
+
pressure: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
|
|
68689
68696
|
/** Ms epoch when the slice was last updated. */
|
|
68690
68697
|
lastFetchedAt: number()
|
|
68691
68698
|
});
|
|
@@ -68711,7 +68718,7 @@ var pressureSensorCapability = {
|
|
|
68711
68718
|
/**
|
|
68712
68719
|
* History (D850): recorded series.
|
|
68713
68720
|
*/
|
|
68714
|
-
history: { fields: {
|
|
68721
|
+
history: { fields: { pressure: {
|
|
68715
68722
|
kind: "gauge",
|
|
68716
68723
|
unit: "hPa",
|
|
68717
68724
|
deadband: .1
|
|
@@ -72460,7 +72467,7 @@ var tamperCapability = {
|
|
|
72460
72467
|
*/
|
|
72461
72468
|
var TemperatureSensorStatusSchema = object({
|
|
72462
72469
|
/** Current temperature in Celsius. `null` when the sample was refused (D393). */
|
|
72463
|
-
|
|
72470
|
+
temperature: number().nullable().meta(readingMeta("temperature", {
|
|
72464
72471
|
precision: 1,
|
|
72465
72472
|
label: "Temperature"
|
|
72466
72473
|
})),
|
|
@@ -72489,7 +72496,7 @@ var temperatureSensorCapability = {
|
|
|
72489
72496
|
/**
|
|
72490
72497
|
* History (D850): recorded series.
|
|
72491
72498
|
*/
|
|
72492
|
-
history: { fields: {
|
|
72499
|
+
history: { fields: { temperature: {
|
|
72493
72500
|
kind: "gauge",
|
|
72494
72501
|
unit: "°C",
|
|
72495
72502
|
deadband: .1
|
|
@@ -72786,7 +72793,7 @@ var VacuumControlStatusSchema = object({
|
|
|
72786
72793
|
/** Speed tokens the hardware accepts — drives the UI selector. */
|
|
72787
72794
|
availableFanSpeeds: array(string()),
|
|
72788
72795
|
/** 0..100 cleaning-completion percentage of the current task, or null. */
|
|
72789
|
-
|
|
72796
|
+
progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
72790
72797
|
/** Current error code (0 / null = no error). */
|
|
72791
72798
|
errorCode: number().nullable().meta(readingMeta("none")),
|
|
72792
72799
|
/** Human label for {@link errorCode}, or null when none / undecodable. */
|
|
@@ -74493,7 +74500,7 @@ var BaseDevice = class {
|
|
|
74493
74500
|
* `device-local-state.ts`. Drivers access via:
|
|
74494
74501
|
*
|
|
74495
74502
|
* `this.state.battery.sleeping = true` // patches the battery slice
|
|
74496
|
-
* `const pct = this.state.battery.
|
|
74503
|
+
* `const pct = this.state.battery.level` // reads the battery slice
|
|
74497
74504
|
* `this.state.deviceStatus.online = true` // mirrors `markOnline(true)`
|
|
74498
74505
|
*
|
|
74499
74506
|
* Adding a new cap with `runtimeState:` automatically extends this
|
|
@@ -74533,7 +74540,7 @@ var BaseDevice = class {
|
|
|
74533
74540
|
* shape; drivers don't redeclare it, they just write through.
|
|
74534
74541
|
*
|
|
74535
74542
|
* Read: `this.runtimeState.getCapState('battery')` →
|
|
74536
|
-
* `{
|
|
74543
|
+
* `{level, charging, sleeping, lastUpdated}` for any
|
|
74537
74544
|
* provider that registers `batteryCapability`.
|
|
74538
74545
|
* Write: `this.runtimeState.setCapState('battery', { … })`.
|
|
74539
74546
|
*
|
|
@@ -85253,7 +85260,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85253
85260
|
label: t("Full brightness", "Luminosità massima"),
|
|
85254
85261
|
phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
|
|
85255
85262
|
icon: "sun",
|
|
85256
|
-
args: {
|
|
85263
|
+
args: { level: 100 }
|
|
85257
85264
|
},
|
|
85258
85265
|
{
|
|
85259
85266
|
id: "brightness.half",
|
|
@@ -85261,7 +85268,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85261
85268
|
label: t("Half brightness", "Luminosità a metà"),
|
|
85262
85269
|
phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
|
|
85263
85270
|
icon: "sun-dim",
|
|
85264
|
-
args: {
|
|
85271
|
+
args: { level: 50 }
|
|
85265
85272
|
},
|
|
85266
85273
|
{
|
|
85267
85274
|
id: "brightness.off",
|
|
@@ -85269,16 +85276,16 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85269
85276
|
label: t("Brightness off", "Luminosità a zero"),
|
|
85270
85277
|
phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
|
|
85271
85278
|
icon: "lightbulb-off",
|
|
85272
|
-
args: {
|
|
85279
|
+
args: { level: 0 }
|
|
85273
85280
|
},
|
|
85274
85281
|
{
|
|
85275
85282
|
id: "brightness.set",
|
|
85276
85283
|
method: "setBrightness",
|
|
85277
85284
|
label: t("Set brightness", "Imposta la luminosità"),
|
|
85278
|
-
phrase: t("Set the brightness of {device} to {
|
|
85285
|
+
phrase: t("Set the brightness of {device} to {level}", "Imposta la luminosità di {device} a {level}"),
|
|
85279
85286
|
icon: "sun-medium",
|
|
85280
85287
|
openArgs: [{
|
|
85281
|
-
key: "
|
|
85288
|
+
key: "level",
|
|
85282
85289
|
label: PERCENT,
|
|
85283
85290
|
offer: {
|
|
85284
85291
|
kind: "number",
|
|
@@ -85292,13 +85299,13 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85292
85299
|
],
|
|
85293
85300
|
state: [{
|
|
85294
85301
|
kind: "numeric",
|
|
85295
|
-
field: "
|
|
85302
|
+
field: "level",
|
|
85296
85303
|
quantity: t("the brightness", "la luminosità"),
|
|
85297
85304
|
label: t("Brightness", "Luminosità"),
|
|
85298
85305
|
unit: "%",
|
|
85299
85306
|
icon: "sun"
|
|
85300
85307
|
}],
|
|
85301
|
-
events: { onBrightnessChanged: { notOperatorFacing: "the `
|
|
85308
|
+
events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
|
|
85302
85309
|
},
|
|
85303
85310
|
color: {
|
|
85304
85311
|
scope: "device",
|
|
@@ -85312,7 +85319,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85312
85319
|
icon: "sun",
|
|
85313
85320
|
args: { color: {
|
|
85314
85321
|
mode: "mired",
|
|
85315
|
-
|
|
85322
|
+
colorTemperature: 370
|
|
85316
85323
|
} }
|
|
85317
85324
|
},
|
|
85318
85325
|
{
|
|
@@ -85323,7 +85330,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85323
85330
|
icon: "snowflake",
|
|
85324
85331
|
args: { color: {
|
|
85325
85332
|
mode: "mired",
|
|
85326
|
-
|
|
85333
|
+
colorTemperature: 200
|
|
85327
85334
|
} }
|
|
85328
85335
|
},
|
|
85329
85336
|
{
|
|
@@ -85937,7 +85944,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85937
85944
|
label: t("Fan off", "Ventilatore spento"),
|
|
85938
85945
|
phrase: t("Stop {device}", "Ferma {device}"),
|
|
85939
85946
|
icon: "power-off",
|
|
85940
|
-
args: {
|
|
85947
|
+
args: { speed: 0 }
|
|
85941
85948
|
},
|
|
85942
85949
|
{
|
|
85943
85950
|
id: "fan.full",
|
|
@@ -85945,16 +85952,16 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85945
85952
|
label: t("Fan full", "Ventilatore al massimo"),
|
|
85946
85953
|
phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
|
|
85947
85954
|
icon: "fan",
|
|
85948
|
-
args: {
|
|
85955
|
+
args: { speed: 100 }
|
|
85949
85956
|
},
|
|
85950
85957
|
{
|
|
85951
85958
|
id: "fan.speed",
|
|
85952
85959
|
method: "setPercentage",
|
|
85953
85960
|
label: t("Set speed", "Imposta la velocità"),
|
|
85954
|
-
phrase: t("Set the speed of {device} to {
|
|
85961
|
+
phrase: t("Set the speed of {device} to {speed}", "Imposta la velocità di {device} al {speed}"),
|
|
85955
85962
|
icon: "fan",
|
|
85956
85963
|
openArgs: [{
|
|
85957
|
-
key: "
|
|
85964
|
+
key: "speed",
|
|
85958
85965
|
label: t("Speed", "Velocità"),
|
|
85959
85966
|
offer: {
|
|
85960
85967
|
kind: "number",
|
|
@@ -86016,7 +86023,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
86016
86023
|
],
|
|
86017
86024
|
state: [{
|
|
86018
86025
|
kind: "numeric",
|
|
86019
|
-
field: "
|
|
86026
|
+
field: "speed",
|
|
86020
86027
|
quantity: t("the speed", "la velocità"),
|
|
86021
86028
|
label: t("Speed", "Velocità"),
|
|
86022
86029
|
unit: "%",
|
|
@@ -86814,7 +86821,7 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
86814
86821
|
},
|
|
86815
86822
|
{
|
|
86816
86823
|
kind: "numeric",
|
|
86817
|
-
field: "
|
|
86824
|
+
field: "progress",
|
|
86818
86825
|
quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
|
|
86819
86826
|
label: t("Progress", "Avanzamento"),
|
|
86820
86827
|
unit: "%",
|
|
@@ -87172,10 +87179,10 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
87172
87179
|
id: "media.seek",
|
|
87173
87180
|
method: "seek",
|
|
87174
87181
|
label: t("Seek", "Vai al punto"),
|
|
87175
|
-
phrase: t("Move {device} to {
|
|
87182
|
+
phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
|
|
87176
87183
|
icon: "fast-forward",
|
|
87177
87184
|
openArgs: [{
|
|
87178
|
-
key: "
|
|
87185
|
+
key: "position",
|
|
87179
87186
|
label: t("Position", "Posizione"),
|
|
87180
87187
|
offer: {
|
|
87181
87188
|
kind: "number",
|
|
@@ -88224,7 +88231,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88224
88231
|
state: [
|
|
88225
88232
|
{
|
|
88226
88233
|
kind: "numeric",
|
|
88227
|
-
field: "
|
|
88234
|
+
field: "co2",
|
|
88228
88235
|
quantity: t("the CO₂", "la CO₂"),
|
|
88229
88236
|
label: t("CO₂", "CO₂"),
|
|
88230
88237
|
unit: "ppm",
|
|
@@ -88232,7 +88239,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88232
88239
|
},
|
|
88233
88240
|
{
|
|
88234
88241
|
kind: "numeric",
|
|
88235
|
-
field: "
|
|
88242
|
+
field: "voc",
|
|
88236
88243
|
quantity: t("the VOC level", "il livello di COV"),
|
|
88237
88244
|
label: t("VOC", "COV"),
|
|
88238
88245
|
unit: "ppb",
|
|
@@ -88268,7 +88275,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88268
88275
|
noun: t("Light level", "Luminosità ambiente"),
|
|
88269
88276
|
state: [{
|
|
88270
88277
|
kind: "numeric",
|
|
88271
|
-
field: "
|
|
88278
|
+
field: "illuminance",
|
|
88272
88279
|
quantity: t("the light level", "la luminosità"),
|
|
88273
88280
|
label: t("Illuminance", "Illuminamento"),
|
|
88274
88281
|
unit: "lx",
|
|
@@ -88471,7 +88478,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88471
88478
|
noun: t("Humidity", "Umidità"),
|
|
88472
88479
|
state: [{
|
|
88473
88480
|
kind: "numeric",
|
|
88474
|
-
field: "
|
|
88481
|
+
field: "humidity",
|
|
88475
88482
|
quantity: t("the humidity", "l’umidità"),
|
|
88476
88483
|
label: t("Humidity", "Umidità"),
|
|
88477
88484
|
unit: "%",
|
|
@@ -88519,7 +88526,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88519
88526
|
state: [
|
|
88520
88527
|
{
|
|
88521
88528
|
kind: "numeric",
|
|
88522
|
-
field: "
|
|
88529
|
+
field: "power",
|
|
88523
88530
|
quantity: t("the power draw", "il consumo"),
|
|
88524
88531
|
label: t("Power", "Potenza"),
|
|
88525
88532
|
unit: "W",
|
|
@@ -88527,7 +88534,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88527
88534
|
},
|
|
88528
88535
|
{
|
|
88529
88536
|
kind: "numeric",
|
|
88530
|
-
field: "
|
|
88537
|
+
field: "energy",
|
|
88531
88538
|
quantity: t("the energy used", "l’energia consumata"),
|
|
88532
88539
|
label: t("Energy", "Energia"),
|
|
88533
88540
|
unit: "kWh",
|
|
@@ -88535,7 +88542,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88535
88542
|
},
|
|
88536
88543
|
{
|
|
88537
88544
|
kind: "numeric",
|
|
88538
|
-
field: "
|
|
88545
|
+
field: "voltage",
|
|
88539
88546
|
quantity: t("the voltage", "la tensione"),
|
|
88540
88547
|
label: t("Voltage", "Tensione"),
|
|
88541
88548
|
unit: "V",
|
|
@@ -88543,7 +88550,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88543
88550
|
},
|
|
88544
88551
|
{
|
|
88545
88552
|
kind: "numeric",
|
|
88546
|
-
field: "
|
|
88553
|
+
field: "current",
|
|
88547
88554
|
quantity: t("the current", "la corrente"),
|
|
88548
88555
|
label: t("Current", "Corrente"),
|
|
88549
88556
|
unit: "A",
|
|
@@ -88560,13 +88567,6 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88560
88567
|
label: t("Where", "Posizione"),
|
|
88561
88568
|
phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
|
|
88562
88569
|
icon: "map-pin"
|
|
88563
|
-
}, {
|
|
88564
|
-
kind: "numeric",
|
|
88565
|
-
field: "batteryPercent",
|
|
88566
|
-
quantity: t("the phone battery", "la batteria del telefono"),
|
|
88567
|
-
label: t("Battery", "Batteria"),
|
|
88568
|
-
unit: "%",
|
|
88569
|
-
icon: "battery"
|
|
88570
88570
|
}]
|
|
88571
88571
|
},
|
|
88572
88572
|
"pressure-sensor": {
|
|
@@ -88574,7 +88574,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88574
88574
|
noun: t("Pressure", "Pressione"),
|
|
88575
88575
|
state: [{
|
|
88576
88576
|
kind: "numeric",
|
|
88577
|
-
field: "
|
|
88577
|
+
field: "pressure",
|
|
88578
88578
|
quantity: t("the pressure", "la pressione"),
|
|
88579
88579
|
label: t("Pressure", "Pressione"),
|
|
88580
88580
|
unit: "hPa",
|
|
@@ -88610,7 +88610,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88610
88610
|
noun: t("Temperature", "Temperatura"),
|
|
88611
88611
|
state: [{
|
|
88612
88612
|
kind: "numeric",
|
|
88613
|
-
field: "
|
|
88613
|
+
field: "temperature",
|
|
88614
88614
|
quantity: t("the temperature", "la temperatura"),
|
|
88615
88615
|
label: t("Temperature", "Temperatura"),
|
|
88616
88616
|
unit: "°C",
|
|
@@ -88681,7 +88681,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88681
88681
|
state: [
|
|
88682
88682
|
{
|
|
88683
88683
|
kind: "numeric",
|
|
88684
|
-
field: "
|
|
88684
|
+
field: "level",
|
|
88685
88685
|
quantity: t("the battery level", "il livello della batteria"),
|
|
88686
88686
|
label: t("Battery", "Batteria"),
|
|
88687
88687
|
unit: "%",
|
|
@@ -88723,7 +88723,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88723
88723
|
icon: "battery-charging"
|
|
88724
88724
|
}
|
|
88725
88725
|
],
|
|
88726
|
-
events: { onStatusChanged: { notOperatorFacing: "the
|
|
88726
|
+
events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
|
|
88727
88727
|
extraEvents: [{
|
|
88728
88728
|
category: EventCategory.DeviceAwake,
|
|
88729
88729
|
label: t("Woke up", "Risvegliato"),
|
|
@@ -88741,7 +88741,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88741
88741
|
noun: t("Network link", "Collegamento di rete"),
|
|
88742
88742
|
state: [{
|
|
88743
88743
|
kind: "numeric",
|
|
88744
|
-
field: "
|
|
88744
|
+
field: "signal",
|
|
88745
88745
|
quantity: t("the signal strength", "l’intensità del segnale"),
|
|
88746
88746
|
label: t("Signal", "Segnale"),
|
|
88747
88747
|
unit: "%",
|