@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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
//#region ../types/dist/event-category-
|
|
2
|
+
//#region ../types/dist/event-category-DmZDPDf_.mjs
|
|
3
3
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4
4
|
EventCategory["SystemBoot"] = "system.boot";
|
|
5
5
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -626,7 +626,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
626
626
|
* (a track was promoted to a stationary-registry entry) or departs (the
|
|
627
627
|
* object moved / was removed). Telemetry (D8): lossy, drives a UI refresh of
|
|
628
628
|
* the dedicated "Stationary" section — never the live event feed. Payload:
|
|
629
|
-
* `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp }`.
|
|
629
|
+
* `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp, observedAt, zones }`.
|
|
630
630
|
*/
|
|
631
631
|
EventCategory["PipelineAnalyticsStationaryChanged"] = "pipeline-analytics.stationary-changed";
|
|
632
632
|
/**
|
|
@@ -5645,7 +5645,7 @@ var ZodIssueCode = {
|
|
|
5645
5645
|
var ZodFirstPartyTypeKind;
|
|
5646
5646
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5647
5647
|
//#endregion
|
|
5648
|
-
//#region ../types/dist/sleep-
|
|
5648
|
+
//#region ../types/dist/sleep-Crlmu_tO.mjs
|
|
5649
5649
|
/**
|
|
5650
5650
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5651
5651
|
* window to float samples (D455).
|
|
@@ -9183,11 +9183,11 @@ var CAP_NAMES = Object.freeze([
|
|
|
9183
9183
|
Object.freeze({
|
|
9184
9184
|
"air-quality-sensor": [
|
|
9185
9185
|
{
|
|
9186
|
-
"path": "
|
|
9186
|
+
"path": "co2",
|
|
9187
9187
|
"valueType": "number"
|
|
9188
9188
|
},
|
|
9189
9189
|
{
|
|
9190
|
-
"path": "
|
|
9190
|
+
"path": "voc",
|
|
9191
9191
|
"valueType": "number"
|
|
9192
9192
|
},
|
|
9193
9193
|
{
|
|
@@ -9237,7 +9237,7 @@ Object.freeze({
|
|
|
9237
9237
|
}
|
|
9238
9238
|
],
|
|
9239
9239
|
"ambient-light-sensor": [{
|
|
9240
|
-
"path": "
|
|
9240
|
+
"path": "illuminance",
|
|
9241
9241
|
"valueType": "number"
|
|
9242
9242
|
}],
|
|
9243
9243
|
"audio-metrics": [
|
|
@@ -9298,7 +9298,7 @@ Object.freeze({
|
|
|
9298
9298
|
],
|
|
9299
9299
|
"battery": [
|
|
9300
9300
|
{
|
|
9301
|
-
"path": "
|
|
9301
|
+
"path": "level",
|
|
9302
9302
|
"valueType": "number"
|
|
9303
9303
|
},
|
|
9304
9304
|
{
|
|
@@ -9320,7 +9320,7 @@ Object.freeze({
|
|
|
9320
9320
|
"valueType": "number"
|
|
9321
9321
|
},
|
|
9322
9322
|
{
|
|
9323
|
-
"path": "
|
|
9323
|
+
"path": "voltage",
|
|
9324
9324
|
"valueType": "number"
|
|
9325
9325
|
},
|
|
9326
9326
|
{
|
|
@@ -9341,7 +9341,7 @@ Object.freeze({
|
|
|
9341
9341
|
"valueType": "boolean"
|
|
9342
9342
|
}],
|
|
9343
9343
|
"brightness": [{
|
|
9344
|
-
"path": "
|
|
9344
|
+
"path": "level",
|
|
9345
9345
|
"valueType": "number"
|
|
9346
9346
|
}],
|
|
9347
9347
|
"broker": [{
|
|
@@ -9542,7 +9542,7 @@ Object.freeze({
|
|
|
9542
9542
|
"valueType": "number"
|
|
9543
9543
|
},
|
|
9544
9544
|
{
|
|
9545
|
-
"path": "
|
|
9545
|
+
"path": "colorTemperature",
|
|
9546
9546
|
"valueType": "number"
|
|
9547
9547
|
}
|
|
9548
9548
|
],
|
|
@@ -9721,15 +9721,15 @@ Object.freeze({
|
|
|
9721
9721
|
"valueType": "string"
|
|
9722
9722
|
},
|
|
9723
9723
|
{
|
|
9724
|
-
"path": "
|
|
9724
|
+
"path": "remaining",
|
|
9725
9725
|
"valueType": "number"
|
|
9726
9726
|
},
|
|
9727
9727
|
{
|
|
9728
|
-
"path": "
|
|
9728
|
+
"path": "delayedStart",
|
|
9729
9729
|
"valueType": "number"
|
|
9730
9730
|
},
|
|
9731
9731
|
{
|
|
9732
|
-
"path": "
|
|
9732
|
+
"path": "progress",
|
|
9733
9733
|
"valueType": "number"
|
|
9734
9734
|
},
|
|
9735
9735
|
{
|
|
@@ -9843,7 +9843,7 @@ Object.freeze({
|
|
|
9843
9843
|
],
|
|
9844
9844
|
"fan-control": [
|
|
9845
9845
|
{
|
|
9846
|
-
"path": "
|
|
9846
|
+
"path": "speed",
|
|
9847
9847
|
"valueType": "number"
|
|
9848
9848
|
},
|
|
9849
9849
|
{
|
|
@@ -9943,7 +9943,7 @@ Object.freeze({
|
|
|
9943
9943
|
}
|
|
9944
9944
|
],
|
|
9945
9945
|
"humidity-sensor": [{
|
|
9946
|
-
"path": "
|
|
9946
|
+
"path": "humidity",
|
|
9947
9947
|
"valueType": "number"
|
|
9948
9948
|
}],
|
|
9949
9949
|
"image": [{
|
|
@@ -10053,7 +10053,7 @@ Object.freeze({
|
|
|
10053
10053
|
"valueType": "number"
|
|
10054
10054
|
},
|
|
10055
10055
|
{
|
|
10056
|
-
"path": "
|
|
10056
|
+
"path": "progress",
|
|
10057
10057
|
"valueType": "number"
|
|
10058
10058
|
},
|
|
10059
10059
|
{
|
|
@@ -10132,11 +10132,11 @@ Object.freeze({
|
|
|
10132
10132
|
"valueType": "string"
|
|
10133
10133
|
},
|
|
10134
10134
|
{
|
|
10135
|
-
"path": "
|
|
10135
|
+
"path": "position",
|
|
10136
10136
|
"valueType": "number"
|
|
10137
10137
|
},
|
|
10138
10138
|
{
|
|
10139
|
-
"path": "
|
|
10139
|
+
"path": "duration",
|
|
10140
10140
|
"valueType": "number"
|
|
10141
10141
|
},
|
|
10142
10142
|
{
|
|
@@ -10238,11 +10238,11 @@ Object.freeze({
|
|
|
10238
10238
|
]
|
|
10239
10239
|
},
|
|
10240
10240
|
{
|
|
10241
|
-
"path": "
|
|
10241
|
+
"path": "signal",
|
|
10242
10242
|
"valueType": "number"
|
|
10243
10243
|
},
|
|
10244
10244
|
{
|
|
10245
|
-
"path": "
|
|
10245
|
+
"path": "rssi",
|
|
10246
10246
|
"valueType": "number"
|
|
10247
10247
|
},
|
|
10248
10248
|
{
|
|
@@ -10373,23 +10373,23 @@ Object.freeze({
|
|
|
10373
10373
|
],
|
|
10374
10374
|
"power-meter": [
|
|
10375
10375
|
{
|
|
10376
|
-
"path": "
|
|
10376
|
+
"path": "power",
|
|
10377
10377
|
"valueType": "number"
|
|
10378
10378
|
},
|
|
10379
10379
|
{
|
|
10380
|
-
"path": "
|
|
10380
|
+
"path": "energy",
|
|
10381
10381
|
"valueType": "number"
|
|
10382
10382
|
},
|
|
10383
10383
|
{
|
|
10384
|
-
"path": "
|
|
10384
|
+
"path": "voltage",
|
|
10385
10385
|
"valueType": "number"
|
|
10386
10386
|
},
|
|
10387
10387
|
{
|
|
10388
|
-
"path": "
|
|
10388
|
+
"path": "current",
|
|
10389
10389
|
"valueType": "number"
|
|
10390
10390
|
},
|
|
10391
10391
|
{
|
|
10392
|
-
"path": "
|
|
10392
|
+
"path": "apparentPower",
|
|
10393
10393
|
"valueType": "number"
|
|
10394
10394
|
},
|
|
10395
10395
|
{
|
|
@@ -10417,14 +10417,10 @@ Object.freeze({
|
|
|
10417
10417
|
{
|
|
10418
10418
|
"path": "gps.accuracyMeters",
|
|
10419
10419
|
"valueType": "number"
|
|
10420
|
-
},
|
|
10421
|
-
{
|
|
10422
|
-
"path": "batteryPercent",
|
|
10423
|
-
"valueType": "number"
|
|
10424
10420
|
}
|
|
10425
10421
|
],
|
|
10426
10422
|
"pressure-sensor": [{
|
|
10427
|
-
"path": "
|
|
10423
|
+
"path": "pressure",
|
|
10428
10424
|
"valueType": "number"
|
|
10429
10425
|
}],
|
|
10430
10426
|
"privacy-mask": [{
|
|
@@ -10738,7 +10734,7 @@ Object.freeze({
|
|
|
10738
10734
|
"valueType": "boolean"
|
|
10739
10735
|
}],
|
|
10740
10736
|
"temperature-sensor": [{
|
|
10741
|
-
"path": "
|
|
10737
|
+
"path": "temperature",
|
|
10742
10738
|
"valueType": "number"
|
|
10743
10739
|
}],
|
|
10744
10740
|
"update": [
|
|
@@ -10786,7 +10782,7 @@ Object.freeze({
|
|
|
10786
10782
|
"valueType": "string"
|
|
10787
10783
|
},
|
|
10788
10784
|
{
|
|
10789
|
-
"path": "
|
|
10785
|
+
"path": "progress",
|
|
10790
10786
|
"valueType": "number"
|
|
10791
10787
|
},
|
|
10792
10788
|
{
|
|
@@ -11416,7 +11412,7 @@ function errMsg(err) {
|
|
|
11416
11412
|
return String(err);
|
|
11417
11413
|
}
|
|
11418
11414
|
//#endregion
|
|
11419
|
-
//#region ../types/dist/composition-
|
|
11415
|
+
//#region ../types/dist/composition-CZImLpOI.mjs
|
|
11420
11416
|
/**
|
|
11421
11417
|
* Deterministic SHA-256 hash of an arbitrary serialisable value. The
|
|
11422
11418
|
* canonical form sorts object keys alphabetically at every depth so two
|
|
@@ -16856,6 +16852,14 @@ var AutomationConditionLeafSchema = object({
|
|
|
16856
16852
|
array(union([string(), number()]))
|
|
16857
16853
|
])
|
|
16858
16854
|
});
|
|
16855
|
+
var AutomationConditionStationaryPresentSchema = object({
|
|
16856
|
+
kind: literal("stationary-present"),
|
|
16857
|
+
deviceId: number().int().nonnegative(),
|
|
16858
|
+
/** Class names; a macro class matches every raw class that maps to it. */
|
|
16859
|
+
classes: array(string().min(1)).min(1).optional(),
|
|
16860
|
+
/** The parked object must be in at least one of these zones. */
|
|
16861
|
+
zones: array(string().min(1)).min(1).optional()
|
|
16862
|
+
});
|
|
16859
16863
|
/**
|
|
16860
16864
|
* The expression leaf, declared as a plain object rather than an intersection
|
|
16861
16865
|
* with {@link ExpressionSourceSchema}: a discriminated union has to be able to
|
|
@@ -16889,7 +16893,8 @@ var AutomationConditionSchema = lazy(() => discriminatedUnion("kind", [
|
|
|
16889
16893
|
child: AutomationConditionSchema
|
|
16890
16894
|
}),
|
|
16891
16895
|
AutomationConditionLeafSchema,
|
|
16892
|
-
AutomationConditionExpressionSchema
|
|
16896
|
+
AutomationConditionExpressionSchema,
|
|
16897
|
+
AutomationConditionStationaryPresentSchema
|
|
16893
16898
|
]));
|
|
16894
16899
|
/**
|
|
16895
16900
|
* What starts a run.
|
|
@@ -16943,6 +16948,17 @@ var AutomationTriggerSchema = discriminatedUnion("kind", [
|
|
|
16943
16948
|
/** Best-so-far confidence the track must reach. */
|
|
16944
16949
|
minScore: number().min(0).max(1).optional()
|
|
16945
16950
|
}),
|
|
16951
|
+
object({
|
|
16952
|
+
kind: literal("stationary"),
|
|
16953
|
+
deviceIds: array(number().int().nonnegative()).min(1),
|
|
16954
|
+
/** Class names; a macro class matches like the detection trigger. */
|
|
16955
|
+
classes: array(string().min(1)).min(1).optional(),
|
|
16956
|
+
/** The parked object must be in at least one of these zones. */
|
|
16957
|
+
zones: array(string().min(1)).min(1).optional(),
|
|
16958
|
+
/** `appeared`: it became parked. `departed`: the registry retired it.
|
|
16959
|
+
* The vocabulary of `PipelineAnalyticsStationaryChanged`. */
|
|
16960
|
+
phase: _enum(["appeared", "departed"])
|
|
16961
|
+
}),
|
|
16946
16962
|
object({
|
|
16947
16963
|
kind: literal("interval"),
|
|
16948
16964
|
minutes: number().int().min(1).max(1440)
|
|
@@ -17174,7 +17190,8 @@ var AutomationConditionTraceNodeSchema = object({
|
|
|
17174
17190
|
"any",
|
|
17175
17191
|
"not",
|
|
17176
17192
|
"condition",
|
|
17177
|
-
"expression"
|
|
17193
|
+
"expression",
|
|
17194
|
+
"stationary-present"
|
|
17178
17195
|
]),
|
|
17179
17196
|
outcome: TraceNodeOutcomeSchema,
|
|
17180
17197
|
reason: string(),
|
|
@@ -20096,7 +20113,7 @@ var CompositionEventPlanSchema = object({
|
|
|
20096
20113
|
stateField: string(),
|
|
20097
20114
|
fieldKey: string()
|
|
20098
20115
|
});
|
|
20099
|
-
/** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.
|
|
20116
|
+
/** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.temperature`. */
|
|
20100
20117
|
var CompositionProblemSchema = object({
|
|
20101
20118
|
code: _enum([
|
|
20102
20119
|
"reserved-variant",
|
|
@@ -20415,7 +20432,7 @@ var GROUP_TEMPLATES = [
|
|
|
20415
20432
|
summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
|
|
20416
20433
|
role: DeviceRole.TemperatureSensor,
|
|
20417
20434
|
outputCap: "temperature-sensor",
|
|
20418
|
-
outputField: "
|
|
20435
|
+
outputField: "temperature",
|
|
20419
20436
|
quantity: "temperature",
|
|
20420
20437
|
defaultAggregate: "mean",
|
|
20421
20438
|
empty: "null",
|
|
@@ -20426,7 +20443,7 @@ var GROUP_TEMPLATES = [
|
|
|
20426
20443
|
summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
|
|
20427
20444
|
role: DeviceRole.HumiditySensor,
|
|
20428
20445
|
outputCap: "humidity-sensor",
|
|
20429
|
-
outputField: "
|
|
20446
|
+
outputField: "humidity",
|
|
20430
20447
|
quantity: "humidity",
|
|
20431
20448
|
defaultAggregate: "mean",
|
|
20432
20449
|
empty: "null",
|
|
@@ -20437,7 +20454,7 @@ var GROUP_TEMPLATES = [
|
|
|
20437
20454
|
summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
|
|
20438
20455
|
role: DeviceRole.PressureSensor,
|
|
20439
20456
|
outputCap: "pressure-sensor",
|
|
20440
|
-
outputField: "
|
|
20457
|
+
outputField: "pressure",
|
|
20441
20458
|
quantity: "pressure",
|
|
20442
20459
|
defaultAggregate: "mean",
|
|
20443
20460
|
empty: "null",
|
|
@@ -20448,7 +20465,7 @@ var GROUP_TEMPLATES = [
|
|
|
20448
20465
|
summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
|
|
20449
20466
|
role: DeviceRole.AmbientLightSensor,
|
|
20450
20467
|
outputCap: "ambient-light-sensor",
|
|
20451
|
-
outputField: "
|
|
20468
|
+
outputField: "illuminance",
|
|
20452
20469
|
quantity: "illuminance",
|
|
20453
20470
|
defaultAggregate: "mean",
|
|
20454
20471
|
empty: "null",
|
|
@@ -20459,7 +20476,7 @@ var GROUP_TEMPLATES = [
|
|
|
20459
20476
|
summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
|
|
20460
20477
|
role: DeviceRole.PowerSensor,
|
|
20461
20478
|
outputCap: "power-meter",
|
|
20462
|
-
outputField: "
|
|
20479
|
+
outputField: "power",
|
|
20463
20480
|
quantity: "power",
|
|
20464
20481
|
defaultAggregate: "sum",
|
|
20465
20482
|
empty: "omit",
|
|
@@ -20470,7 +20487,7 @@ var GROUP_TEMPLATES = [
|
|
|
20470
20487
|
summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
|
|
20471
20488
|
role: DeviceRole.EnergySensor,
|
|
20472
20489
|
outputCap: "power-meter",
|
|
20473
|
-
outputField: "
|
|
20490
|
+
outputField: "energy",
|
|
20474
20491
|
quantity: "energy",
|
|
20475
20492
|
defaultAggregate: "sum",
|
|
20476
20493
|
empty: "omit",
|
|
@@ -20481,7 +20498,7 @@ var GROUP_TEMPLATES = [
|
|
|
20481
20498
|
summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
|
|
20482
20499
|
role: DeviceRole.BatterySensor,
|
|
20483
20500
|
outputCap: "battery",
|
|
20484
|
-
outputField: "
|
|
20501
|
+
outputField: "level",
|
|
20485
20502
|
quantity: "percentage",
|
|
20486
20503
|
defaultAggregate: "mean",
|
|
20487
20504
|
empty: "null",
|
|
@@ -60906,9 +60923,9 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
|
|
|
60906
60923
|
*/
|
|
60907
60924
|
var AirQualitySensorStatusSchema = object({
|
|
60908
60925
|
/** Carbon dioxide concentration in ppm. */
|
|
60909
|
-
|
|
60926
|
+
co2: number().min(0).optional().meta(readingMeta("concentration-volume")),
|
|
60910
60927
|
/** Total volatile organic compounds in ppb. */
|
|
60911
|
-
|
|
60928
|
+
voc: number().min(0).optional().meta(readingMeta("concentration-ppb")),
|
|
60912
60929
|
/** Particulate matter ≤ 2.5 μm in µg/m³. */
|
|
60913
60930
|
pm25: number().min(0).optional().meta(readingMeta("concentration-mass")),
|
|
60914
60931
|
/** Particulate matter ≤ 10 μm in µg/m³. */
|
|
@@ -60941,12 +60958,12 @@ var airQualitySensorCapability = {
|
|
|
60941
60958
|
* History (D850): recorded series.
|
|
60942
60959
|
*/
|
|
60943
60960
|
history: { fields: {
|
|
60944
|
-
|
|
60961
|
+
co2: {
|
|
60945
60962
|
kind: "gauge",
|
|
60946
60963
|
unit: "ppm",
|
|
60947
60964
|
deadband: 5
|
|
60948
60965
|
},
|
|
60949
|
-
|
|
60966
|
+
voc: {
|
|
60950
60967
|
kind: "gauge",
|
|
60951
60968
|
unit: "ppb",
|
|
60952
60969
|
deadband: 5
|
|
@@ -60977,7 +60994,7 @@ var airQualitySensorCapability = {
|
|
|
60977
60994
|
*/
|
|
60978
60995
|
var AmbientLightSensorStatusSchema = object({
|
|
60979
60996
|
/** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
|
|
60980
|
-
|
|
60997
|
+
illuminance: number().min(0).nullable().meta(readingMeta("illuminance", {
|
|
60981
60998
|
precision: 0,
|
|
60982
60999
|
label: "Illuminance"
|
|
60983
61000
|
})),
|
|
@@ -61006,7 +61023,7 @@ var ambientLightSensorCapability = {
|
|
|
61006
61023
|
/**
|
|
61007
61024
|
* History (D850): recorded series. Wide range, so a RELATIVE deadband (10 %).
|
|
61008
61025
|
*/
|
|
61009
|
-
history: { fields: {
|
|
61026
|
+
history: { fields: { illuminance: {
|
|
61010
61027
|
kind: "gauge",
|
|
61011
61028
|
unit: "lx",
|
|
61012
61029
|
deadbandPct: 10,
|
|
@@ -61319,7 +61336,7 @@ var BatteryStatusSchema = object({
|
|
|
61319
61336
|
* Consumers must SKIP a null rather than coerce it — `battery-band` already
|
|
61320
61337
|
* declines to band a non-finite reading, which is the correct shape.
|
|
61321
61338
|
*/
|
|
61322
|
-
|
|
61339
|
+
level: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
|
|
61323
61340
|
/**
|
|
61324
61341
|
* Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
|
|
61325
61342
|
* Reolink-specific for the Solar Panel 2 accessory (will become
|
|
@@ -61329,7 +61346,7 @@ var BatteryStatusSchema = object({
|
|
|
61329
61346
|
* `'unknown'` is the absence of an answer: the provider has not read the
|
|
61330
61347
|
* power fields yet, or the firmware reported neither. Before it existed,
|
|
61331
61348
|
* two unreadable fields produced `'none'`, and a camera nobody had reached
|
|
61332
|
-
* was drawn "on battery alone" — the same D315 defect `
|
|
61349
|
+
* was drawn "on battery alone" — the same D315 defect `level` closed
|
|
61333
61350
|
* by going nullable. Consumers SKIP it (no charger state published, no
|
|
61334
61351
|
* glyph, no HomeKit ChargingState) rather than coerce it either way.
|
|
61335
61352
|
*/
|
|
@@ -61353,7 +61370,7 @@ var BatteryStatusSchema = object({
|
|
|
61353
61370
|
* that only report charge. A second reading on this cap, not a second
|
|
61354
61371
|
* `numeric-sensor` on the same device.
|
|
61355
61372
|
*/
|
|
61356
|
-
|
|
61373
|
+
voltage: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
|
|
61357
61374
|
/**
|
|
61358
61375
|
* Ms epoch of the last time the device PROVED it was reachable — a
|
|
61359
61376
|
* completed firmware round-trip, an observed wake, or an inbound push
|
|
@@ -61387,7 +61404,7 @@ var BatteryStatusSchema = object({
|
|
|
61387
61404
|
/**
|
|
61388
61405
|
* True when the source is a BINARY low-battery indicator (HA
|
|
61389
61406
|
* `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
|
|
61390
|
-
* charge level — `
|
|
61407
|
+
* charge level — `level` is then a coarse stand-in (100 = normal,
|
|
61391
61408
|
* sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
|
|
61392
61409
|
* misleading exact percentage. Absent/false → genuine 0–100 % reading.
|
|
61393
61410
|
*/
|
|
@@ -61407,15 +61424,15 @@ var BATTERY_DEVICE_TYPES = [
|
|
|
61407
61424
|
var batteryCustomize = {
|
|
61408
61425
|
version: 1,
|
|
61409
61426
|
targets: [{
|
|
61410
|
-
id: "
|
|
61427
|
+
id: "level",
|
|
61411
61428
|
cardinality: "scalar",
|
|
61412
61429
|
vocabulary: {
|
|
61413
61430
|
cap: "battery",
|
|
61414
|
-
stateField: "
|
|
61431
|
+
stateField: "level"
|
|
61415
61432
|
},
|
|
61416
61433
|
deviceTypes: BATTERY_DEVICE_TYPES,
|
|
61417
61434
|
apply: "add",
|
|
61418
|
-
path: "
|
|
61435
|
+
path: "level",
|
|
61419
61436
|
sources: [{
|
|
61420
61437
|
kind: "field",
|
|
61421
61438
|
valueKinds: ["number", "string"],
|
|
@@ -61509,7 +61526,7 @@ onStatusChanged: { data: object({
|
|
|
61509
61526
|
schema: BatteryStatusSchema,
|
|
61510
61527
|
kind: "push",
|
|
61511
61528
|
empty: {
|
|
61512
|
-
|
|
61529
|
+
level: null,
|
|
61513
61530
|
charging: "unknown",
|
|
61514
61531
|
sleeping: false,
|
|
61515
61532
|
lastUpdated: 0
|
|
@@ -61536,11 +61553,11 @@ onStatusChanged: { data: object({
|
|
|
61536
61553
|
* History (D850): recorded series. The generic capture replaces the `battery` series of `pipeline-analytics:stats-5m`.
|
|
61537
61554
|
*/
|
|
61538
61555
|
history: { fields: {
|
|
61539
|
-
|
|
61556
|
+
level: {
|
|
61540
61557
|
kind: "gauge",
|
|
61541
61558
|
unit: "%"
|
|
61542
61559
|
},
|
|
61543
|
-
|
|
61560
|
+
voltage: {
|
|
61544
61561
|
kind: "gauge",
|
|
61545
61562
|
unit: "V"
|
|
61546
61563
|
}
|
|
@@ -61600,14 +61617,14 @@ var binaryCapability = {
|
|
|
61600
61617
|
* controls to this single-method surface.
|
|
61601
61618
|
*
|
|
61602
61619
|
* The cap is intentionally minimal: a single `setBrightness({deviceId,
|
|
61603
|
-
*
|
|
61620
|
+
* level})` mutation plus the auto-injected `getStatus`. Drivers
|
|
61604
61621
|
* that expose richer controls (color temperature, scenes, schedules)
|
|
61605
61622
|
* should surface those via the device's `getSettingsUISchema()`
|
|
61606
61623
|
* instead of bloating this cap.
|
|
61607
61624
|
*/
|
|
61608
61625
|
var BrightnessStatusSchema = object({
|
|
61609
61626
|
/** Current level as 0..100 inclusive. Firmware-reported. */
|
|
61610
|
-
|
|
61627
|
+
level: number().min(0).max(100).meta(readingMeta("percentage")),
|
|
61611
61628
|
/** Ms epoch of the last operator-driven change. Useful for UI freshness. */
|
|
61612
61629
|
lastChangedAt: number()
|
|
61613
61630
|
});
|
|
@@ -61619,7 +61636,7 @@ var brightnessCapability = {
|
|
|
61619
61636
|
deviceTypes: [DeviceType.Light],
|
|
61620
61637
|
methods: { setBrightness: method(object({
|
|
61621
61638
|
deviceId: number().int().nonnegative(),
|
|
61622
|
-
|
|
61639
|
+
level: number().min(0).max(100)
|
|
61623
61640
|
}), _void(), {
|
|
61624
61641
|
kind: "mutation",
|
|
61625
61642
|
auth: "protected"
|
|
@@ -61632,7 +61649,7 @@ var brightnessCapability = {
|
|
|
61632
61649
|
*/
|
|
61633
61650
|
onBrightnessChanged: { data: object({
|
|
61634
61651
|
deviceId: number(),
|
|
61635
|
-
|
|
61652
|
+
level: number().min(0).max(100),
|
|
61636
61653
|
lastChangedAt: number()
|
|
61637
61654
|
}) } },
|
|
61638
61655
|
status: {
|
|
@@ -61655,7 +61672,7 @@ onBrightnessChanged: { data: object({
|
|
|
61655
61672
|
/**
|
|
61656
61673
|
* History (D850): recorded series. Actuator tier: level keeps every change.
|
|
61657
61674
|
*/
|
|
61658
|
-
history: { fields: {
|
|
61675
|
+
history: { fields: { level: {
|
|
61659
61676
|
kind: "gauge",
|
|
61660
61677
|
unit: "%",
|
|
61661
61678
|
minIntervalMs: 0
|
|
@@ -62279,11 +62296,11 @@ var ColorInputSchema = discriminatedUnion("mode", [
|
|
|
62279
62296
|
}),
|
|
62280
62297
|
object({
|
|
62281
62298
|
mode: literal("mired"),
|
|
62282
|
-
|
|
62299
|
+
colorTemperature: number().int().min(50).max(1e3)
|
|
62283
62300
|
})
|
|
62284
62301
|
]);
|
|
62285
62302
|
var ColorStatusSchema = object({
|
|
62286
|
-
/** Active color mode — which of `rgb` / `hsv` / `
|
|
62303
|
+
/** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
|
|
62287
62304
|
* the bulb's current state. */
|
|
62288
62305
|
mode: _enum([
|
|
62289
62306
|
"rgb",
|
|
@@ -62295,7 +62312,7 @@ var ColorStatusSchema = object({
|
|
|
62295
62312
|
/** Populated when `mode === 'hsv'`. */
|
|
62296
62313
|
hsv: HsvTripletSchema.optional(),
|
|
62297
62314
|
/** Populated when `mode === 'mired'`. */
|
|
62298
|
-
|
|
62315
|
+
colorTemperature: number().int().optional().meta(readingMeta("colour-temperature")),
|
|
62299
62316
|
/** Ms epoch of the last operator-driven change. */
|
|
62300
62317
|
lastChangedAt: number()
|
|
62301
62318
|
});
|
|
@@ -62327,7 +62344,7 @@ onColorChanged: { data: object({
|
|
|
62327
62344
|
]),
|
|
62328
62345
|
rgb: RgbTripletSchema.optional(),
|
|
62329
62346
|
hsv: HsvTripletSchema.optional(),
|
|
62330
|
-
|
|
62347
|
+
colorTemperature: number().int().optional(),
|
|
62331
62348
|
lastChangedAt: number()
|
|
62332
62349
|
}) } },
|
|
62333
62350
|
status: {
|
|
@@ -63240,11 +63257,11 @@ var DishwasherStatusSchema = object({
|
|
|
63240
63257
|
/** Feature keys of the programs the appliance currently offers — drives the UI selector. */
|
|
63241
63258
|
availablePrograms: array(string()),
|
|
63242
63259
|
/** Seconds remaining on the active cycle, or null when not running / not known. */
|
|
63243
|
-
|
|
63260
|
+
remaining: number().int().nonnegative().nullable().meta(readingMeta("duration")),
|
|
63244
63261
|
/** Seconds the delayed start is set to (time until the cycle starts), or null. */
|
|
63245
|
-
|
|
63262
|
+
delayedStart: number().int().nonnegative().nullable().meta(readingMeta("duration")),
|
|
63246
63263
|
/** Cycle completion 0..100, or null when not applicable. */
|
|
63247
|
-
|
|
63264
|
+
progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
63248
63265
|
/** True when the door is reported open; null when the door state is not known. */
|
|
63249
63266
|
doorOpen: boolean().nullable(),
|
|
63250
63267
|
/** True when the door is latched (locked) during a cycle; null when not reported. */
|
|
@@ -63463,14 +63480,14 @@ var dishwasherCapability = {
|
|
|
63463
63480
|
runtimeState: DishwasherStatusSchema,
|
|
63464
63481
|
durability: "session",
|
|
63465
63482
|
history: { fields: {
|
|
63466
|
-
|
|
63483
|
+
progress: {
|
|
63467
63484
|
kind: "gauge",
|
|
63468
63485
|
unit: "%",
|
|
63469
63486
|
deadband: 2
|
|
63470
63487
|
},
|
|
63471
63488
|
state: { kind: "enum" },
|
|
63472
63489
|
operationState: { kind: "enum" },
|
|
63473
|
-
|
|
63490
|
+
remaining: {
|
|
63474
63491
|
kind: "gauge",
|
|
63475
63492
|
unit: "s",
|
|
63476
63493
|
minIntervalMs: 6e4
|
|
@@ -64101,7 +64118,7 @@ var FanDirectionSchema = _enum(["forward", "reverse"]);
|
|
|
64101
64118
|
var FanControlStatusSchema = object({
|
|
64102
64119
|
/** Active speed as 0..100 inclusive. Null when the device has no
|
|
64103
64120
|
* speed surface (single-speed fan). */
|
|
64104
|
-
|
|
64121
|
+
speed: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
64105
64122
|
/** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
|
|
64106
64123
|
* a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
|
|
64107
64124
|
percentageStep: number().positive().optional().meta(readingMeta("percentage")),
|
|
@@ -64128,7 +64145,7 @@ var fanControlCapability = {
|
|
|
64128
64145
|
methods: {
|
|
64129
64146
|
setPercentage: method(object({
|
|
64130
64147
|
deviceId: number().int().nonnegative(),
|
|
64131
|
-
|
|
64148
|
+
speed: number().min(0).max(100)
|
|
64132
64149
|
}), _void(), {
|
|
64133
64150
|
kind: "mutation",
|
|
64134
64151
|
auth: "protected"
|
|
@@ -64161,7 +64178,7 @@ var fanControlCapability = {
|
|
|
64161
64178
|
},
|
|
64162
64179
|
/**
|
|
64163
64180
|
* Runtime-state slice — mirrored by the kernel. UI fan speed
|
|
64164
|
-
* sliders read `
|
|
64181
|
+
* sliders read `speed` for live updates.
|
|
64165
64182
|
*/
|
|
64166
64183
|
runtimeState: FanControlStatusSchema,
|
|
64167
64184
|
/**
|
|
@@ -64175,7 +64192,7 @@ var fanControlCapability = {
|
|
|
64175
64192
|
* History (D850): recorded series. Actuator tier: speed keeps every change.
|
|
64176
64193
|
*/
|
|
64177
64194
|
history: { fields: {
|
|
64178
|
-
|
|
64195
|
+
speed: {
|
|
64179
64196
|
kind: "gauge",
|
|
64180
64197
|
unit: "%",
|
|
64181
64198
|
minIntervalMs: 0
|
|
@@ -64620,7 +64637,7 @@ var humidifierCapability = {
|
|
|
64620
64637
|
*/
|
|
64621
64638
|
var HumiditySensorStatusSchema = object({
|
|
64622
64639
|
/** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
|
|
64623
|
-
|
|
64640
|
+
humidity: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
|
|
64624
64641
|
precision: 0,
|
|
64625
64642
|
label: "Humidity"
|
|
64626
64643
|
})),
|
|
@@ -64649,7 +64666,7 @@ var humiditySensorCapability = {
|
|
|
64649
64666
|
/**
|
|
64650
64667
|
* History (D850): recorded series.
|
|
64651
64668
|
*/
|
|
64652
|
-
history: { fields: {
|
|
64669
|
+
history: { fields: { humidity: {
|
|
64653
64670
|
kind: "gauge",
|
|
64654
64671
|
unit: "%",
|
|
64655
64672
|
deadband: .5
|
|
@@ -65289,7 +65306,7 @@ var LawnMowerControlStatusSchema = object({
|
|
|
65289
65306
|
batteryLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
65290
65307
|
/** 0..100 mowing-completion percentage of the current task, or null when no
|
|
65291
65308
|
* task is active / progress is unavailable. */
|
|
65292
|
-
|
|
65309
|
+
progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
65293
65310
|
/** Current device/event code (dynamic — mostly status, sometimes an error),
|
|
65294
65311
|
* or null when unknown. */
|
|
65295
65312
|
currentCode: number().nullable().meta(readingMeta("none")),
|
|
@@ -65810,7 +65827,7 @@ var lockControlCapability = {
|
|
|
65810
65827
|
volatileStateFields: ["lastChangedAt"]
|
|
65811
65828
|
};
|
|
65812
65829
|
/**
|
|
65813
|
-
* A monotonic total between resets (D944). Energy uses `power-meter.
|
|
65830
|
+
* A monotonic total between resets (D944). Energy uses `power-meter.energy`
|
|
65814
65831
|
* so dashboards keep one series; every other instantaneous reading lands here.
|
|
65815
65832
|
* `value` is the time integral in the source quantity's accumulated base
|
|
65816
65833
|
* (base-unit seconds, or kWh on the power meter). `null` is a gap, never zero.
|
|
@@ -65904,10 +65921,10 @@ var MediaPlayerStatusSchema = object({
|
|
|
65904
65921
|
currentMedia: MediaInfoSchema.nullable(),
|
|
65905
65922
|
/** Current playback position in ms. Null when not seekable or
|
|
65906
65923
|
* nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
|
|
65907
|
-
|
|
65924
|
+
position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
|
|
65908
65925
|
/** Total duration of the current media in ms. Null when unknown
|
|
65909
65926
|
* (live stream) or nothing is playing. */
|
|
65910
|
-
|
|
65927
|
+
duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
|
|
65911
65928
|
/** Shuffle toggle. Null when no shuffle surface.
|
|
65912
65929
|
* Pair with `DeviceFeature.MediaPlayerShuffle`. */
|
|
65913
65930
|
shuffle: boolean().nullable(),
|
|
@@ -65946,7 +65963,7 @@ var mediaPlayerCapability = {
|
|
|
65946
65963
|
}),
|
|
65947
65964
|
seek: method(object({
|
|
65948
65965
|
deviceId: number().int().nonnegative(),
|
|
65949
|
-
|
|
65966
|
+
position: number().int().nonnegative()
|
|
65950
65967
|
}), _void(), {
|
|
65951
65968
|
kind: "mutation",
|
|
65952
65969
|
auth: "protected"
|
|
@@ -66018,7 +66035,7 @@ var mediaPlayerCapability = {
|
|
|
66018
66035
|
/**
|
|
66019
66036
|
* History (D850): volume (a level an operator or an automation sets; the
|
|
66020
66037
|
* default 10 s floor folds a slider drag into its end value) and mute.
|
|
66021
|
-
* `
|
|
66038
|
+
* `position` is not recorded: it moves continuously while playing.
|
|
66022
66039
|
*/
|
|
66023
66040
|
history: { fields: {
|
|
66024
66041
|
volumeLevel: {
|
|
@@ -67005,9 +67022,9 @@ var NetworkLinkStatusSchema = object({
|
|
|
67005
67022
|
* one whose reading has not landed must not be drawn at 0 %. Consumers
|
|
67006
67023
|
* SKIP a null rather than coerce it.
|
|
67007
67024
|
*/
|
|
67008
|
-
|
|
67025
|
+
signal: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
67009
67026
|
/** Raw received signal strength in dBm, when the firmware reports one. */
|
|
67010
|
-
|
|
67027
|
+
rssi: number().optional().meta(readingMeta("signal-level")),
|
|
67011
67028
|
/** Network name of a wireless link, when the firmware reports it. */
|
|
67012
67029
|
ssid: string().optional(),
|
|
67013
67030
|
/** Ms epoch of the last observation. Lets consumers reason about freshness. */
|
|
@@ -67043,7 +67060,7 @@ onStatusChanged: { data: object({
|
|
|
67043
67060
|
kind: "push",
|
|
67044
67061
|
empty: {
|
|
67045
67062
|
type: "unknown",
|
|
67046
|
-
|
|
67063
|
+
signal: null,
|
|
67047
67064
|
lastUpdated: 0
|
|
67048
67065
|
}
|
|
67049
67066
|
},
|
|
@@ -67066,13 +67083,13 @@ onStatusChanged: { data: object({
|
|
|
67066
67083
|
* History (D850): recorded series.
|
|
67067
67084
|
*/
|
|
67068
67085
|
history: { fields: {
|
|
67069
|
-
|
|
67086
|
+
signal: {
|
|
67070
67087
|
kind: "gauge",
|
|
67071
67088
|
unit: "%",
|
|
67072
67089
|
deadband: 3,
|
|
67073
67090
|
minIntervalMs: 6e4
|
|
67074
67091
|
},
|
|
67075
|
-
|
|
67092
|
+
rssi: {
|
|
67076
67093
|
kind: "gauge",
|
|
67077
67094
|
unit: "dBm",
|
|
67078
67095
|
deadband: 2,
|
|
@@ -68427,16 +68444,16 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
|
|
|
68427
68444
|
* in real-world devices.
|
|
68428
68445
|
*/
|
|
68429
68446
|
var PowerMeterStatusSchema = object({
|
|
68430
|
-
/** Instantaneous power draw
|
|
68431
|
-
|
|
68447
|
+
/** Instantaneous power draw (watts). */
|
|
68448
|
+
power: number().optional().meta(readingMeta("power", { label: "Power" })),
|
|
68432
68449
|
/** Cumulative energy in kilowatt-hours since the meter was reset. */
|
|
68433
|
-
|
|
68434
|
-
/** Voltage
|
|
68435
|
-
|
|
68450
|
+
energy: number().optional().meta(readingMeta("energy", { label: "Energy" })),
|
|
68451
|
+
/** Voltage (volts). */
|
|
68452
|
+
voltage: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
|
|
68436
68453
|
/** Current in amperes. */
|
|
68437
|
-
|
|
68454
|
+
current: number().optional().meta(readingMeta("current", { label: "Current" })),
|
|
68438
68455
|
/** Apparent power in volt-amperes. */
|
|
68439
|
-
|
|
68456
|
+
apparentPower: number().optional().meta(readingMeta("apparent-power")),
|
|
68440
68457
|
/** Power factor (0..1) if reported. */
|
|
68441
68458
|
powerFactor: number().min(0).max(1).optional().meta(readingMeta("ratio")),
|
|
68442
68459
|
/** Ms epoch when the slice was last updated. */
|
|
@@ -68494,14 +68511,14 @@ function powerTarget(id, unit) {
|
|
|
68494
68511
|
advancedExpression: true
|
|
68495
68512
|
};
|
|
68496
68513
|
}
|
|
68497
|
-
/** "Power and energy" extension:
|
|
68514
|
+
/** "Power and energy" extension: power, energy, voltage and current from other devices (D951). */
|
|
68498
68515
|
var powerMeterCustomize = {
|
|
68499
68516
|
version: 1,
|
|
68500
68517
|
targets: [
|
|
68501
|
-
powerTarget("
|
|
68502
|
-
powerTarget("
|
|
68503
|
-
powerTarget("
|
|
68504
|
-
powerTarget("
|
|
68518
|
+
powerTarget("power", "W"),
|
|
68519
|
+
powerTarget("energy", "kWh"),
|
|
68520
|
+
powerTarget("voltage", "V"),
|
|
68521
|
+
powerTarget("current", "A")
|
|
68505
68522
|
]
|
|
68506
68523
|
};
|
|
68507
68524
|
var powerMeterCapability = {
|
|
@@ -68517,41 +68534,41 @@ var powerMeterCapability = {
|
|
|
68517
68534
|
},
|
|
68518
68535
|
runtimeState: PowerMeterStatusSchema,
|
|
68519
68536
|
/**
|
|
68520
|
-
* Runtime-state durability: **restored** — as `numeric-sensor`; `
|
|
68537
|
+
* Runtime-state durability: **restored** — as `numeric-sensor`; `energy` is an accumulator whose restored value is the baseline.
|
|
68521
68538
|
*
|
|
68522
68539
|
* See `RuntimeStateDurability`. Enforced by
|
|
68523
68540
|
* `scripts/check-runtime-state-durability.ts`.
|
|
68524
68541
|
*/
|
|
68525
68542
|
durability: "restored",
|
|
68526
68543
|
/**
|
|
68527
|
-
* History (D850): recorded series. Gauges are floored at 30 s; `
|
|
68544
|
+
* History (D850): recorded series. Gauges are floored at 30 s; `energy` is the one monotonic meter (counter).
|
|
68528
68545
|
*/
|
|
68529
68546
|
history: { fields: {
|
|
68530
|
-
|
|
68547
|
+
power: {
|
|
68531
68548
|
kind: "gauge",
|
|
68532
68549
|
unit: "W",
|
|
68533
68550
|
deadband: 1,
|
|
68534
68551
|
minIntervalMs: 3e4
|
|
68535
68552
|
},
|
|
68536
|
-
|
|
68553
|
+
energy: {
|
|
68537
68554
|
kind: "counter",
|
|
68538
68555
|
unit: "kWh",
|
|
68539
68556
|
deadband: .01,
|
|
68540
68557
|
minIntervalMs: 6e4
|
|
68541
68558
|
},
|
|
68542
|
-
|
|
68559
|
+
voltage: {
|
|
68543
68560
|
kind: "gauge",
|
|
68544
68561
|
unit: "V",
|
|
68545
68562
|
deadband: 1,
|
|
68546
68563
|
minIntervalMs: 3e4
|
|
68547
68564
|
},
|
|
68548
|
-
|
|
68565
|
+
current: {
|
|
68549
68566
|
kind: "gauge",
|
|
68550
68567
|
unit: "A",
|
|
68551
68568
|
deadband: .05,
|
|
68552
68569
|
minIntervalMs: 3e4
|
|
68553
68570
|
},
|
|
68554
|
-
|
|
68571
|
+
apparentPower: {
|
|
68555
68572
|
kind: "gauge",
|
|
68556
68573
|
unit: "VA",
|
|
68557
68574
|
deadband: 1,
|
|
@@ -68601,9 +68618,6 @@ var PresenceStatusSchema = object({
|
|
|
68601
68618
|
location: string().nullable(),
|
|
68602
68619
|
/** GPS coordinates when available. Null otherwise. */
|
|
68603
68620
|
gps: GpsLocationSchema.nullable(),
|
|
68604
|
-
/** Optional battery level of the tracking device (0..100). Null
|
|
68605
|
-
* when not reported. */
|
|
68606
|
-
batteryPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
68607
68621
|
/** Ms epoch when the slice was last updated. */
|
|
68608
68622
|
lastChangedAt: number()
|
|
68609
68623
|
});
|
|
@@ -68632,14 +68646,7 @@ var presenceCapability = {
|
|
|
68632
68646
|
* `scripts/check-runtime-state-durability.ts`.
|
|
68633
68647
|
*/
|
|
68634
68648
|
durability: "restored",
|
|
68635
|
-
|
|
68636
|
-
* History (D850): recorded series.
|
|
68637
|
-
*/
|
|
68638
|
-
history: { fields: { batteryPercent: {
|
|
68639
|
-
kind: "gauge",
|
|
68640
|
-
unit: "%",
|
|
68641
|
-
deadband: 1
|
|
68642
|
-
} } },
|
|
68649
|
+
history: "none",
|
|
68643
68650
|
/** Clock fields: written, but excluded from the compare that decides
|
|
68644
68651
|
* whether persisting is worth a SQLite commit. */
|
|
68645
68652
|
volatileStateFields: ["lastChangedAt"]
|
|
@@ -68654,7 +68661,7 @@ var presenceCapability = {
|
|
|
68654
68661
|
*/
|
|
68655
68662
|
var PressureSensorStatusSchema = object({
|
|
68656
68663
|
/** Current pressure in hPa. `null` when the sample was refused (D393). */
|
|
68657
|
-
|
|
68664
|
+
pressure: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
|
|
68658
68665
|
/** Ms epoch when the slice was last updated. */
|
|
68659
68666
|
lastFetchedAt: number()
|
|
68660
68667
|
});
|
|
@@ -68680,7 +68687,7 @@ var pressureSensorCapability = {
|
|
|
68680
68687
|
/**
|
|
68681
68688
|
* History (D850): recorded series.
|
|
68682
68689
|
*/
|
|
68683
|
-
history: { fields: {
|
|
68690
|
+
history: { fields: { pressure: {
|
|
68684
68691
|
kind: "gauge",
|
|
68685
68692
|
unit: "hPa",
|
|
68686
68693
|
deadband: .1
|
|
@@ -72429,7 +72436,7 @@ var tamperCapability = {
|
|
|
72429
72436
|
*/
|
|
72430
72437
|
var TemperatureSensorStatusSchema = object({
|
|
72431
72438
|
/** Current temperature in Celsius. `null` when the sample was refused (D393). */
|
|
72432
|
-
|
|
72439
|
+
temperature: number().nullable().meta(readingMeta("temperature", {
|
|
72433
72440
|
precision: 1,
|
|
72434
72441
|
label: "Temperature"
|
|
72435
72442
|
})),
|
|
@@ -72458,7 +72465,7 @@ var temperatureSensorCapability = {
|
|
|
72458
72465
|
/**
|
|
72459
72466
|
* History (D850): recorded series.
|
|
72460
72467
|
*/
|
|
72461
|
-
history: { fields: {
|
|
72468
|
+
history: { fields: { temperature: {
|
|
72462
72469
|
kind: "gauge",
|
|
72463
72470
|
unit: "°C",
|
|
72464
72471
|
deadband: .1
|
|
@@ -72755,7 +72762,7 @@ var VacuumControlStatusSchema = object({
|
|
|
72755
72762
|
/** Speed tokens the hardware accepts — drives the UI selector. */
|
|
72756
72763
|
availableFanSpeeds: array(string()),
|
|
72757
72764
|
/** 0..100 cleaning-completion percentage of the current task, or null. */
|
|
72758
|
-
|
|
72765
|
+
progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
72759
72766
|
/** Current error code (0 / null = no error). */
|
|
72760
72767
|
errorCode: number().nullable().meta(readingMeta("none")),
|
|
72761
72768
|
/** Human label for {@link errorCode}, or null when none / undecodable. */
|
|
@@ -74462,7 +74469,7 @@ var BaseDevice = class {
|
|
|
74462
74469
|
* `device-local-state.ts`. Drivers access via:
|
|
74463
74470
|
*
|
|
74464
74471
|
* `this.state.battery.sleeping = true` // patches the battery slice
|
|
74465
|
-
* `const pct = this.state.battery.
|
|
74472
|
+
* `const pct = this.state.battery.level` // reads the battery slice
|
|
74466
74473
|
* `this.state.deviceStatus.online = true` // mirrors `markOnline(true)`
|
|
74467
74474
|
*
|
|
74468
74475
|
* Adding a new cap with `runtimeState:` automatically extends this
|
|
@@ -74502,7 +74509,7 @@ var BaseDevice = class {
|
|
|
74502
74509
|
* shape; drivers don't redeclare it, they just write through.
|
|
74503
74510
|
*
|
|
74504
74511
|
* Read: `this.runtimeState.getCapState('battery')` →
|
|
74505
|
-
* `{
|
|
74512
|
+
* `{level, charging, sleeping, lastUpdated}` for any
|
|
74506
74513
|
* provider that registers `batteryCapability`.
|
|
74507
74514
|
* Write: `this.runtimeState.setCapState('battery', { … })`.
|
|
74508
74515
|
*
|
|
@@ -85222,7 +85229,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85222
85229
|
label: t("Full brightness", "Luminosità massima"),
|
|
85223
85230
|
phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
|
|
85224
85231
|
icon: "sun",
|
|
85225
|
-
args: {
|
|
85232
|
+
args: { level: 100 }
|
|
85226
85233
|
},
|
|
85227
85234
|
{
|
|
85228
85235
|
id: "brightness.half",
|
|
@@ -85230,7 +85237,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85230
85237
|
label: t("Half brightness", "Luminosità a metà"),
|
|
85231
85238
|
phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
|
|
85232
85239
|
icon: "sun-dim",
|
|
85233
|
-
args: {
|
|
85240
|
+
args: { level: 50 }
|
|
85234
85241
|
},
|
|
85235
85242
|
{
|
|
85236
85243
|
id: "brightness.off",
|
|
@@ -85238,16 +85245,16 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85238
85245
|
label: t("Brightness off", "Luminosità a zero"),
|
|
85239
85246
|
phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
|
|
85240
85247
|
icon: "lightbulb-off",
|
|
85241
|
-
args: {
|
|
85248
|
+
args: { level: 0 }
|
|
85242
85249
|
},
|
|
85243
85250
|
{
|
|
85244
85251
|
id: "brightness.set",
|
|
85245
85252
|
method: "setBrightness",
|
|
85246
85253
|
label: t("Set brightness", "Imposta la luminosità"),
|
|
85247
|
-
phrase: t("Set the brightness of {device} to {
|
|
85254
|
+
phrase: t("Set the brightness of {device} to {level}", "Imposta la luminosità di {device} a {level}"),
|
|
85248
85255
|
icon: "sun-medium",
|
|
85249
85256
|
openArgs: [{
|
|
85250
|
-
key: "
|
|
85257
|
+
key: "level",
|
|
85251
85258
|
label: PERCENT,
|
|
85252
85259
|
offer: {
|
|
85253
85260
|
kind: "number",
|
|
@@ -85261,13 +85268,13 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85261
85268
|
],
|
|
85262
85269
|
state: [{
|
|
85263
85270
|
kind: "numeric",
|
|
85264
|
-
field: "
|
|
85271
|
+
field: "level",
|
|
85265
85272
|
quantity: t("the brightness", "la luminosità"),
|
|
85266
85273
|
label: t("Brightness", "Luminosità"),
|
|
85267
85274
|
unit: "%",
|
|
85268
85275
|
icon: "sun"
|
|
85269
85276
|
}],
|
|
85270
|
-
events: { onBrightnessChanged: { notOperatorFacing: "the `
|
|
85277
|
+
events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
|
|
85271
85278
|
},
|
|
85272
85279
|
color: {
|
|
85273
85280
|
scope: "device",
|
|
@@ -85281,7 +85288,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85281
85288
|
icon: "sun",
|
|
85282
85289
|
args: { color: {
|
|
85283
85290
|
mode: "mired",
|
|
85284
|
-
|
|
85291
|
+
colorTemperature: 370
|
|
85285
85292
|
} }
|
|
85286
85293
|
},
|
|
85287
85294
|
{
|
|
@@ -85292,7 +85299,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85292
85299
|
icon: "snowflake",
|
|
85293
85300
|
args: { color: {
|
|
85294
85301
|
mode: "mired",
|
|
85295
|
-
|
|
85302
|
+
colorTemperature: 200
|
|
85296
85303
|
} }
|
|
85297
85304
|
},
|
|
85298
85305
|
{
|
|
@@ -85906,7 +85913,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85906
85913
|
label: t("Fan off", "Ventilatore spento"),
|
|
85907
85914
|
phrase: t("Stop {device}", "Ferma {device}"),
|
|
85908
85915
|
icon: "power-off",
|
|
85909
|
-
args: {
|
|
85916
|
+
args: { speed: 0 }
|
|
85910
85917
|
},
|
|
85911
85918
|
{
|
|
85912
85919
|
id: "fan.full",
|
|
@@ -85914,16 +85921,16 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85914
85921
|
label: t("Fan full", "Ventilatore al massimo"),
|
|
85915
85922
|
phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
|
|
85916
85923
|
icon: "fan",
|
|
85917
|
-
args: {
|
|
85924
|
+
args: { speed: 100 }
|
|
85918
85925
|
},
|
|
85919
85926
|
{
|
|
85920
85927
|
id: "fan.speed",
|
|
85921
85928
|
method: "setPercentage",
|
|
85922
85929
|
label: t("Set speed", "Imposta la velocità"),
|
|
85923
|
-
phrase: t("Set the speed of {device} to {
|
|
85930
|
+
phrase: t("Set the speed of {device} to {speed}", "Imposta la velocità di {device} al {speed}"),
|
|
85924
85931
|
icon: "fan",
|
|
85925
85932
|
openArgs: [{
|
|
85926
|
-
key: "
|
|
85933
|
+
key: "speed",
|
|
85927
85934
|
label: t("Speed", "Velocità"),
|
|
85928
85935
|
offer: {
|
|
85929
85936
|
kind: "number",
|
|
@@ -85985,7 +85992,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85985
85992
|
],
|
|
85986
85993
|
state: [{
|
|
85987
85994
|
kind: "numeric",
|
|
85988
|
-
field: "
|
|
85995
|
+
field: "speed",
|
|
85989
85996
|
quantity: t("the speed", "la velocità"),
|
|
85990
85997
|
label: t("Speed", "Velocità"),
|
|
85991
85998
|
unit: "%",
|
|
@@ -86783,7 +86790,7 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
86783
86790
|
},
|
|
86784
86791
|
{
|
|
86785
86792
|
kind: "numeric",
|
|
86786
|
-
field: "
|
|
86793
|
+
field: "progress",
|
|
86787
86794
|
quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
|
|
86788
86795
|
label: t("Progress", "Avanzamento"),
|
|
86789
86796
|
unit: "%",
|
|
@@ -87141,10 +87148,10 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
87141
87148
|
id: "media.seek",
|
|
87142
87149
|
method: "seek",
|
|
87143
87150
|
label: t("Seek", "Vai al punto"),
|
|
87144
|
-
phrase: t("Move {device} to {
|
|
87151
|
+
phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
|
|
87145
87152
|
icon: "fast-forward",
|
|
87146
87153
|
openArgs: [{
|
|
87147
|
-
key: "
|
|
87154
|
+
key: "position",
|
|
87148
87155
|
label: t("Position", "Posizione"),
|
|
87149
87156
|
offer: {
|
|
87150
87157
|
kind: "number",
|
|
@@ -88193,7 +88200,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88193
88200
|
state: [
|
|
88194
88201
|
{
|
|
88195
88202
|
kind: "numeric",
|
|
88196
|
-
field: "
|
|
88203
|
+
field: "co2",
|
|
88197
88204
|
quantity: t("the CO₂", "la CO₂"),
|
|
88198
88205
|
label: t("CO₂", "CO₂"),
|
|
88199
88206
|
unit: "ppm",
|
|
@@ -88201,7 +88208,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88201
88208
|
},
|
|
88202
88209
|
{
|
|
88203
88210
|
kind: "numeric",
|
|
88204
|
-
field: "
|
|
88211
|
+
field: "voc",
|
|
88205
88212
|
quantity: t("the VOC level", "il livello di COV"),
|
|
88206
88213
|
label: t("VOC", "COV"),
|
|
88207
88214
|
unit: "ppb",
|
|
@@ -88237,7 +88244,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88237
88244
|
noun: t("Light level", "Luminosità ambiente"),
|
|
88238
88245
|
state: [{
|
|
88239
88246
|
kind: "numeric",
|
|
88240
|
-
field: "
|
|
88247
|
+
field: "illuminance",
|
|
88241
88248
|
quantity: t("the light level", "la luminosità"),
|
|
88242
88249
|
label: t("Illuminance", "Illuminamento"),
|
|
88243
88250
|
unit: "lx",
|
|
@@ -88440,7 +88447,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88440
88447
|
noun: t("Humidity", "Umidità"),
|
|
88441
88448
|
state: [{
|
|
88442
88449
|
kind: "numeric",
|
|
88443
|
-
field: "
|
|
88450
|
+
field: "humidity",
|
|
88444
88451
|
quantity: t("the humidity", "l’umidità"),
|
|
88445
88452
|
label: t("Humidity", "Umidità"),
|
|
88446
88453
|
unit: "%",
|
|
@@ -88488,7 +88495,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88488
88495
|
state: [
|
|
88489
88496
|
{
|
|
88490
88497
|
kind: "numeric",
|
|
88491
|
-
field: "
|
|
88498
|
+
field: "power",
|
|
88492
88499
|
quantity: t("the power draw", "il consumo"),
|
|
88493
88500
|
label: t("Power", "Potenza"),
|
|
88494
88501
|
unit: "W",
|
|
@@ -88496,7 +88503,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88496
88503
|
},
|
|
88497
88504
|
{
|
|
88498
88505
|
kind: "numeric",
|
|
88499
|
-
field: "
|
|
88506
|
+
field: "energy",
|
|
88500
88507
|
quantity: t("the energy used", "l’energia consumata"),
|
|
88501
88508
|
label: t("Energy", "Energia"),
|
|
88502
88509
|
unit: "kWh",
|
|
@@ -88504,7 +88511,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88504
88511
|
},
|
|
88505
88512
|
{
|
|
88506
88513
|
kind: "numeric",
|
|
88507
|
-
field: "
|
|
88514
|
+
field: "voltage",
|
|
88508
88515
|
quantity: t("the voltage", "la tensione"),
|
|
88509
88516
|
label: t("Voltage", "Tensione"),
|
|
88510
88517
|
unit: "V",
|
|
@@ -88512,7 +88519,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88512
88519
|
},
|
|
88513
88520
|
{
|
|
88514
88521
|
kind: "numeric",
|
|
88515
|
-
field: "
|
|
88522
|
+
field: "current",
|
|
88516
88523
|
quantity: t("the current", "la corrente"),
|
|
88517
88524
|
label: t("Current", "Corrente"),
|
|
88518
88525
|
unit: "A",
|
|
@@ -88529,13 +88536,6 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88529
88536
|
label: t("Where", "Posizione"),
|
|
88530
88537
|
phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
|
|
88531
88538
|
icon: "map-pin"
|
|
88532
|
-
}, {
|
|
88533
|
-
kind: "numeric",
|
|
88534
|
-
field: "batteryPercent",
|
|
88535
|
-
quantity: t("the phone battery", "la batteria del telefono"),
|
|
88536
|
-
label: t("Battery", "Batteria"),
|
|
88537
|
-
unit: "%",
|
|
88538
|
-
icon: "battery"
|
|
88539
88539
|
}]
|
|
88540
88540
|
},
|
|
88541
88541
|
"pressure-sensor": {
|
|
@@ -88543,7 +88543,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88543
88543
|
noun: t("Pressure", "Pressione"),
|
|
88544
88544
|
state: [{
|
|
88545
88545
|
kind: "numeric",
|
|
88546
|
-
field: "
|
|
88546
|
+
field: "pressure",
|
|
88547
88547
|
quantity: t("the pressure", "la pressione"),
|
|
88548
88548
|
label: t("Pressure", "Pressione"),
|
|
88549
88549
|
unit: "hPa",
|
|
@@ -88579,7 +88579,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88579
88579
|
noun: t("Temperature", "Temperatura"),
|
|
88580
88580
|
state: [{
|
|
88581
88581
|
kind: "numeric",
|
|
88582
|
-
field: "
|
|
88582
|
+
field: "temperature",
|
|
88583
88583
|
quantity: t("the temperature", "la temperatura"),
|
|
88584
88584
|
label: t("Temperature", "Temperatura"),
|
|
88585
88585
|
unit: "°C",
|
|
@@ -88650,7 +88650,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88650
88650
|
state: [
|
|
88651
88651
|
{
|
|
88652
88652
|
kind: "numeric",
|
|
88653
|
-
field: "
|
|
88653
|
+
field: "level",
|
|
88654
88654
|
quantity: t("the battery level", "il livello della batteria"),
|
|
88655
88655
|
label: t("Battery", "Batteria"),
|
|
88656
88656
|
unit: "%",
|
|
@@ -88692,7 +88692,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88692
88692
|
icon: "battery-charging"
|
|
88693
88693
|
}
|
|
88694
88694
|
],
|
|
88695
|
-
events: { onStatusChanged: { notOperatorFacing: "the
|
|
88695
|
+
events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
|
|
88696
88696
|
extraEvents: [{
|
|
88697
88697
|
category: EventCategory.DeviceAwake,
|
|
88698
88698
|
label: t("Woke up", "Risvegliato"),
|
|
@@ -88710,7 +88710,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88710
88710
|
noun: t("Network link", "Collegamento di rete"),
|
|
88711
88711
|
state: [{
|
|
88712
88712
|
kind: "numeric",
|
|
88713
|
-
field: "
|
|
88713
|
+
field: "signal",
|
|
88714
88714
|
quantity: t("the signal strength", "l’intensità del segnale"),
|
|
88715
88715
|
label: t("Signal", "Segnale"),
|
|
88716
88716
|
unit: "%",
|