@camstack/addon-provider-bosch 0.1.31 → 0.1.32
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 +6 -0
- package/dist/{account-integration-offline-IvvrXQDg.js → account-integration-offline-B9C4OAHn.js} +1 -1
- package/dist/{account-integration-offline-Cfcp8s5x.mjs → account-integration-offline-CSmJOed1.mjs} +1 -1
- package/dist/{dist-NdDwxHvT.js → dist-CStkg32S.js} +164 -164
- package/dist/{dist-DxO4cucS.mjs → dist-n4Mk3Uu1.mjs} +164 -164
- package/dist/home-connect/addon.js +10 -10
- package/dist/home-connect/addon.mjs +10 -10
- package/dist/homecom/addon.js +2 -2
- package/dist/homecom/addon.mjs +2 -2
- package/dist/shc/addon.js +7 -7
- package/dist/shc/addon.mjs +7 -7
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "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
|
/**
|
|
@@ -5447,7 +5447,7 @@ var ZodIssueCode = {
|
|
|
5447
5447
|
var ZodFirstPartyTypeKind;
|
|
5448
5448
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5449
5449
|
//#endregion
|
|
5450
|
-
//#region ../types/dist/sleep-
|
|
5450
|
+
//#region ../types/dist/sleep-Crlmu_tO.mjs
|
|
5451
5451
|
/**
|
|
5452
5452
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5453
5453
|
* window to float samples (D455).
|
|
@@ -8783,11 +8783,11 @@ var CAP_NAMES = Object.freeze([
|
|
|
8783
8783
|
Object.freeze({
|
|
8784
8784
|
"air-quality-sensor": [
|
|
8785
8785
|
{
|
|
8786
|
-
"path": "
|
|
8786
|
+
"path": "co2",
|
|
8787
8787
|
"valueType": "number"
|
|
8788
8788
|
},
|
|
8789
8789
|
{
|
|
8790
|
-
"path": "
|
|
8790
|
+
"path": "voc",
|
|
8791
8791
|
"valueType": "number"
|
|
8792
8792
|
},
|
|
8793
8793
|
{
|
|
@@ -8837,7 +8837,7 @@ Object.freeze({
|
|
|
8837
8837
|
}
|
|
8838
8838
|
],
|
|
8839
8839
|
"ambient-light-sensor": [{
|
|
8840
|
-
"path": "
|
|
8840
|
+
"path": "illuminance",
|
|
8841
8841
|
"valueType": "number"
|
|
8842
8842
|
}],
|
|
8843
8843
|
"audio-metrics": [
|
|
@@ -8898,7 +8898,7 @@ Object.freeze({
|
|
|
8898
8898
|
],
|
|
8899
8899
|
"battery": [
|
|
8900
8900
|
{
|
|
8901
|
-
"path": "
|
|
8901
|
+
"path": "level",
|
|
8902
8902
|
"valueType": "number"
|
|
8903
8903
|
},
|
|
8904
8904
|
{
|
|
@@ -8920,7 +8920,7 @@ Object.freeze({
|
|
|
8920
8920
|
"valueType": "number"
|
|
8921
8921
|
},
|
|
8922
8922
|
{
|
|
8923
|
-
"path": "
|
|
8923
|
+
"path": "voltage",
|
|
8924
8924
|
"valueType": "number"
|
|
8925
8925
|
},
|
|
8926
8926
|
{
|
|
@@ -8941,7 +8941,7 @@ Object.freeze({
|
|
|
8941
8941
|
"valueType": "boolean"
|
|
8942
8942
|
}],
|
|
8943
8943
|
"brightness": [{
|
|
8944
|
-
"path": "
|
|
8944
|
+
"path": "level",
|
|
8945
8945
|
"valueType": "number"
|
|
8946
8946
|
}],
|
|
8947
8947
|
"broker": [{
|
|
@@ -9142,7 +9142,7 @@ Object.freeze({
|
|
|
9142
9142
|
"valueType": "number"
|
|
9143
9143
|
},
|
|
9144
9144
|
{
|
|
9145
|
-
"path": "
|
|
9145
|
+
"path": "colorTemperature",
|
|
9146
9146
|
"valueType": "number"
|
|
9147
9147
|
}
|
|
9148
9148
|
],
|
|
@@ -9321,15 +9321,15 @@ Object.freeze({
|
|
|
9321
9321
|
"valueType": "string"
|
|
9322
9322
|
},
|
|
9323
9323
|
{
|
|
9324
|
-
"path": "
|
|
9324
|
+
"path": "remaining",
|
|
9325
9325
|
"valueType": "number"
|
|
9326
9326
|
},
|
|
9327
9327
|
{
|
|
9328
|
-
"path": "
|
|
9328
|
+
"path": "delayedStart",
|
|
9329
9329
|
"valueType": "number"
|
|
9330
9330
|
},
|
|
9331
9331
|
{
|
|
9332
|
-
"path": "
|
|
9332
|
+
"path": "progress",
|
|
9333
9333
|
"valueType": "number"
|
|
9334
9334
|
},
|
|
9335
9335
|
{
|
|
@@ -9443,7 +9443,7 @@ Object.freeze({
|
|
|
9443
9443
|
],
|
|
9444
9444
|
"fan-control": [
|
|
9445
9445
|
{
|
|
9446
|
-
"path": "
|
|
9446
|
+
"path": "speed",
|
|
9447
9447
|
"valueType": "number"
|
|
9448
9448
|
},
|
|
9449
9449
|
{
|
|
@@ -9543,7 +9543,7 @@ Object.freeze({
|
|
|
9543
9543
|
}
|
|
9544
9544
|
],
|
|
9545
9545
|
"humidity-sensor": [{
|
|
9546
|
-
"path": "
|
|
9546
|
+
"path": "humidity",
|
|
9547
9547
|
"valueType": "number"
|
|
9548
9548
|
}],
|
|
9549
9549
|
"image": [{
|
|
@@ -9653,7 +9653,7 @@ Object.freeze({
|
|
|
9653
9653
|
"valueType": "number"
|
|
9654
9654
|
},
|
|
9655
9655
|
{
|
|
9656
|
-
"path": "
|
|
9656
|
+
"path": "progress",
|
|
9657
9657
|
"valueType": "number"
|
|
9658
9658
|
},
|
|
9659
9659
|
{
|
|
@@ -9732,11 +9732,11 @@ Object.freeze({
|
|
|
9732
9732
|
"valueType": "string"
|
|
9733
9733
|
},
|
|
9734
9734
|
{
|
|
9735
|
-
"path": "
|
|
9735
|
+
"path": "position",
|
|
9736
9736
|
"valueType": "number"
|
|
9737
9737
|
},
|
|
9738
9738
|
{
|
|
9739
|
-
"path": "
|
|
9739
|
+
"path": "duration",
|
|
9740
9740
|
"valueType": "number"
|
|
9741
9741
|
},
|
|
9742
9742
|
{
|
|
@@ -9838,11 +9838,11 @@ Object.freeze({
|
|
|
9838
9838
|
]
|
|
9839
9839
|
},
|
|
9840
9840
|
{
|
|
9841
|
-
"path": "
|
|
9841
|
+
"path": "signal",
|
|
9842
9842
|
"valueType": "number"
|
|
9843
9843
|
},
|
|
9844
9844
|
{
|
|
9845
|
-
"path": "
|
|
9845
|
+
"path": "rssi",
|
|
9846
9846
|
"valueType": "number"
|
|
9847
9847
|
},
|
|
9848
9848
|
{
|
|
@@ -9973,23 +9973,23 @@ Object.freeze({
|
|
|
9973
9973
|
],
|
|
9974
9974
|
"power-meter": [
|
|
9975
9975
|
{
|
|
9976
|
-
"path": "
|
|
9976
|
+
"path": "power",
|
|
9977
9977
|
"valueType": "number"
|
|
9978
9978
|
},
|
|
9979
9979
|
{
|
|
9980
|
-
"path": "
|
|
9980
|
+
"path": "energy",
|
|
9981
9981
|
"valueType": "number"
|
|
9982
9982
|
},
|
|
9983
9983
|
{
|
|
9984
|
-
"path": "
|
|
9984
|
+
"path": "voltage",
|
|
9985
9985
|
"valueType": "number"
|
|
9986
9986
|
},
|
|
9987
9987
|
{
|
|
9988
|
-
"path": "
|
|
9988
|
+
"path": "current",
|
|
9989
9989
|
"valueType": "number"
|
|
9990
9990
|
},
|
|
9991
9991
|
{
|
|
9992
|
-
"path": "
|
|
9992
|
+
"path": "apparentPower",
|
|
9993
9993
|
"valueType": "number"
|
|
9994
9994
|
},
|
|
9995
9995
|
{
|
|
@@ -10017,14 +10017,10 @@ Object.freeze({
|
|
|
10017
10017
|
{
|
|
10018
10018
|
"path": "gps.accuracyMeters",
|
|
10019
10019
|
"valueType": "number"
|
|
10020
|
-
},
|
|
10021
|
-
{
|
|
10022
|
-
"path": "batteryPercent",
|
|
10023
|
-
"valueType": "number"
|
|
10024
10020
|
}
|
|
10025
10021
|
],
|
|
10026
10022
|
"pressure-sensor": [{
|
|
10027
|
-
"path": "
|
|
10023
|
+
"path": "pressure",
|
|
10028
10024
|
"valueType": "number"
|
|
10029
10025
|
}],
|
|
10030
10026
|
"privacy-mask": [{
|
|
@@ -10338,7 +10334,7 @@ Object.freeze({
|
|
|
10338
10334
|
"valueType": "boolean"
|
|
10339
10335
|
}],
|
|
10340
10336
|
"temperature-sensor": [{
|
|
10341
|
-
"path": "
|
|
10337
|
+
"path": "temperature",
|
|
10342
10338
|
"valueType": "number"
|
|
10343
10339
|
}],
|
|
10344
10340
|
"update": [
|
|
@@ -10386,7 +10382,7 @@ Object.freeze({
|
|
|
10386
10382
|
"valueType": "string"
|
|
10387
10383
|
},
|
|
10388
10384
|
{
|
|
10389
|
-
"path": "
|
|
10385
|
+
"path": "progress",
|
|
10390
10386
|
"valueType": "number"
|
|
10391
10387
|
},
|
|
10392
10388
|
{
|
|
@@ -10871,7 +10867,7 @@ function errMsg(err) {
|
|
|
10871
10867
|
return String(err);
|
|
10872
10868
|
}
|
|
10873
10869
|
//#endregion
|
|
10874
|
-
//#region ../types/dist/composition-
|
|
10870
|
+
//#region ../types/dist/composition-CZImLpOI.mjs
|
|
10875
10871
|
/**
|
|
10876
10872
|
* The ffmpeg build every CamStack node downloads, per platform and arch.
|
|
10877
10873
|
*
|
|
@@ -15391,6 +15387,14 @@ var AutomationConditionLeafSchema = object({
|
|
|
15391
15387
|
array(union([string(), number()]))
|
|
15392
15388
|
])
|
|
15393
15389
|
});
|
|
15390
|
+
var AutomationConditionStationaryPresentSchema = object({
|
|
15391
|
+
kind: literal("stationary-present"),
|
|
15392
|
+
deviceId: number().int().nonnegative(),
|
|
15393
|
+
/** Class names; a macro class matches every raw class that maps to it. */
|
|
15394
|
+
classes: array(string().min(1)).min(1).optional(),
|
|
15395
|
+
/** The parked object must be in at least one of these zones. */
|
|
15396
|
+
zones: array(string().min(1)).min(1).optional()
|
|
15397
|
+
});
|
|
15394
15398
|
/**
|
|
15395
15399
|
* The expression leaf, declared as a plain object rather than an intersection
|
|
15396
15400
|
* with {@link ExpressionSourceSchema}: a discriminated union has to be able to
|
|
@@ -15424,7 +15428,8 @@ var AutomationConditionSchema = lazy(() => discriminatedUnion("kind", [
|
|
|
15424
15428
|
child: AutomationConditionSchema
|
|
15425
15429
|
}),
|
|
15426
15430
|
AutomationConditionLeafSchema,
|
|
15427
|
-
AutomationConditionExpressionSchema
|
|
15431
|
+
AutomationConditionExpressionSchema,
|
|
15432
|
+
AutomationConditionStationaryPresentSchema
|
|
15428
15433
|
]));
|
|
15429
15434
|
/**
|
|
15430
15435
|
* What starts a run.
|
|
@@ -15478,6 +15483,17 @@ var AutomationTriggerSchema = discriminatedUnion("kind", [
|
|
|
15478
15483
|
/** Best-so-far confidence the track must reach. */
|
|
15479
15484
|
minScore: number().min(0).max(1).optional()
|
|
15480
15485
|
}),
|
|
15486
|
+
object({
|
|
15487
|
+
kind: literal("stationary"),
|
|
15488
|
+
deviceIds: array(number().int().nonnegative()).min(1),
|
|
15489
|
+
/** Class names; a macro class matches like the detection trigger. */
|
|
15490
|
+
classes: array(string().min(1)).min(1).optional(),
|
|
15491
|
+
/** The parked object must be in at least one of these zones. */
|
|
15492
|
+
zones: array(string().min(1)).min(1).optional(),
|
|
15493
|
+
/** `appeared`: it became parked. `departed`: the registry retired it.
|
|
15494
|
+
* The vocabulary of `PipelineAnalyticsStationaryChanged`. */
|
|
15495
|
+
phase: _enum(["appeared", "departed"])
|
|
15496
|
+
}),
|
|
15481
15497
|
object({
|
|
15482
15498
|
kind: literal("interval"),
|
|
15483
15499
|
minutes: number().int().min(1).max(1440)
|
|
@@ -15687,7 +15703,8 @@ var AutomationConditionTraceNodeSchema = object({
|
|
|
15687
15703
|
"any",
|
|
15688
15704
|
"not",
|
|
15689
15705
|
"condition",
|
|
15690
|
-
"expression"
|
|
15706
|
+
"expression",
|
|
15707
|
+
"stationary-present"
|
|
15691
15708
|
]),
|
|
15692
15709
|
outcome: TraceNodeOutcomeSchema,
|
|
15693
15710
|
reason: string(),
|
|
@@ -18586,7 +18603,7 @@ var CompositionEventPlanSchema = object({
|
|
|
18586
18603
|
stateField: string(),
|
|
18587
18604
|
fieldKey: string()
|
|
18588
18605
|
});
|
|
18589
|
-
/** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.
|
|
18606
|
+
/** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.temperature`. */
|
|
18590
18607
|
var CompositionProblemSchema = object({
|
|
18591
18608
|
code: _enum([
|
|
18592
18609
|
"reserved-variant",
|
|
@@ -18905,7 +18922,7 @@ var GROUP_TEMPLATES = [
|
|
|
18905
18922
|
summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
|
|
18906
18923
|
role: DeviceRole.TemperatureSensor,
|
|
18907
18924
|
outputCap: "temperature-sensor",
|
|
18908
|
-
outputField: "
|
|
18925
|
+
outputField: "temperature",
|
|
18909
18926
|
quantity: "temperature",
|
|
18910
18927
|
defaultAggregate: "mean",
|
|
18911
18928
|
empty: "null",
|
|
@@ -18916,7 +18933,7 @@ var GROUP_TEMPLATES = [
|
|
|
18916
18933
|
summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
|
|
18917
18934
|
role: DeviceRole.HumiditySensor,
|
|
18918
18935
|
outputCap: "humidity-sensor",
|
|
18919
|
-
outputField: "
|
|
18936
|
+
outputField: "humidity",
|
|
18920
18937
|
quantity: "humidity",
|
|
18921
18938
|
defaultAggregate: "mean",
|
|
18922
18939
|
empty: "null",
|
|
@@ -18927,7 +18944,7 @@ var GROUP_TEMPLATES = [
|
|
|
18927
18944
|
summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
|
|
18928
18945
|
role: DeviceRole.PressureSensor,
|
|
18929
18946
|
outputCap: "pressure-sensor",
|
|
18930
|
-
outputField: "
|
|
18947
|
+
outputField: "pressure",
|
|
18931
18948
|
quantity: "pressure",
|
|
18932
18949
|
defaultAggregate: "mean",
|
|
18933
18950
|
empty: "null",
|
|
@@ -18938,7 +18955,7 @@ var GROUP_TEMPLATES = [
|
|
|
18938
18955
|
summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
|
|
18939
18956
|
role: DeviceRole.AmbientLightSensor,
|
|
18940
18957
|
outputCap: "ambient-light-sensor",
|
|
18941
|
-
outputField: "
|
|
18958
|
+
outputField: "illuminance",
|
|
18942
18959
|
quantity: "illuminance",
|
|
18943
18960
|
defaultAggregate: "mean",
|
|
18944
18961
|
empty: "null",
|
|
@@ -18949,7 +18966,7 @@ var GROUP_TEMPLATES = [
|
|
|
18949
18966
|
summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
|
|
18950
18967
|
role: DeviceRole.PowerSensor,
|
|
18951
18968
|
outputCap: "power-meter",
|
|
18952
|
-
outputField: "
|
|
18969
|
+
outputField: "power",
|
|
18953
18970
|
quantity: "power",
|
|
18954
18971
|
defaultAggregate: "sum",
|
|
18955
18972
|
empty: "omit",
|
|
@@ -18960,7 +18977,7 @@ var GROUP_TEMPLATES = [
|
|
|
18960
18977
|
summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
|
|
18961
18978
|
role: DeviceRole.EnergySensor,
|
|
18962
18979
|
outputCap: "power-meter",
|
|
18963
|
-
outputField: "
|
|
18980
|
+
outputField: "energy",
|
|
18964
18981
|
quantity: "energy",
|
|
18965
18982
|
defaultAggregate: "sum",
|
|
18966
18983
|
empty: "omit",
|
|
@@ -18971,7 +18988,7 @@ var GROUP_TEMPLATES = [
|
|
|
18971
18988
|
summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
|
|
18972
18989
|
role: DeviceRole.BatterySensor,
|
|
18973
18990
|
outputCap: "battery",
|
|
18974
|
-
outputField: "
|
|
18991
|
+
outputField: "level",
|
|
18975
18992
|
quantity: "percentage",
|
|
18976
18993
|
defaultAggregate: "mean",
|
|
18977
18994
|
empty: "null",
|
|
@@ -57502,9 +57519,9 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
|
|
|
57502
57519
|
*/
|
|
57503
57520
|
var AirQualitySensorStatusSchema = object({
|
|
57504
57521
|
/** Carbon dioxide concentration in ppm. */
|
|
57505
|
-
|
|
57522
|
+
co2: number().min(0).optional().meta(readingMeta("concentration-volume")),
|
|
57506
57523
|
/** Total volatile organic compounds in ppb. */
|
|
57507
|
-
|
|
57524
|
+
voc: number().min(0).optional().meta(readingMeta("concentration-ppb")),
|
|
57508
57525
|
/** Particulate matter ≤ 2.5 μm in µg/m³. */
|
|
57509
57526
|
pm25: number().min(0).optional().meta(readingMeta("concentration-mass")),
|
|
57510
57527
|
/** Particulate matter ≤ 10 μm in µg/m³. */
|
|
@@ -57537,12 +57554,12 @@ var airQualitySensorCapability = {
|
|
|
57537
57554
|
* History (D850): recorded series.
|
|
57538
57555
|
*/
|
|
57539
57556
|
history: { fields: {
|
|
57540
|
-
|
|
57557
|
+
co2: {
|
|
57541
57558
|
kind: "gauge",
|
|
57542
57559
|
unit: "ppm",
|
|
57543
57560
|
deadband: 5
|
|
57544
57561
|
},
|
|
57545
|
-
|
|
57562
|
+
voc: {
|
|
57546
57563
|
kind: "gauge",
|
|
57547
57564
|
unit: "ppb",
|
|
57548
57565
|
deadband: 5
|
|
@@ -57573,7 +57590,7 @@ var airQualitySensorCapability = {
|
|
|
57573
57590
|
*/
|
|
57574
57591
|
var AmbientLightSensorStatusSchema = object({
|
|
57575
57592
|
/** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
|
|
57576
|
-
|
|
57593
|
+
illuminance: number().min(0).nullable().meta(readingMeta("illuminance", {
|
|
57577
57594
|
precision: 0,
|
|
57578
57595
|
label: "Illuminance"
|
|
57579
57596
|
})),
|
|
@@ -57602,7 +57619,7 @@ var ambientLightSensorCapability = {
|
|
|
57602
57619
|
/**
|
|
57603
57620
|
* History (D850): recorded series. Wide range, so a RELATIVE deadband (10 %).
|
|
57604
57621
|
*/
|
|
57605
|
-
history: { fields: {
|
|
57622
|
+
history: { fields: { illuminance: {
|
|
57606
57623
|
kind: "gauge",
|
|
57607
57624
|
unit: "lx",
|
|
57608
57625
|
deadbandPct: 10,
|
|
@@ -57915,7 +57932,7 @@ var BatteryStatusSchema = object({
|
|
|
57915
57932
|
* Consumers must SKIP a null rather than coerce it — `battery-band` already
|
|
57916
57933
|
* declines to band a non-finite reading, which is the correct shape.
|
|
57917
57934
|
*/
|
|
57918
|
-
|
|
57935
|
+
level: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
|
|
57919
57936
|
/**
|
|
57920
57937
|
* Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
|
|
57921
57938
|
* Reolink-specific for the Solar Panel 2 accessory (will become
|
|
@@ -57925,7 +57942,7 @@ var BatteryStatusSchema = object({
|
|
|
57925
57942
|
* `'unknown'` is the absence of an answer: the provider has not read the
|
|
57926
57943
|
* power fields yet, or the firmware reported neither. Before it existed,
|
|
57927
57944
|
* two unreadable fields produced `'none'`, and a camera nobody had reached
|
|
57928
|
-
* was drawn "on battery alone" — the same D315 defect `
|
|
57945
|
+
* was drawn "on battery alone" — the same D315 defect `level` closed
|
|
57929
57946
|
* by going nullable. Consumers SKIP it (no charger state published, no
|
|
57930
57947
|
* glyph, no HomeKit ChargingState) rather than coerce it either way.
|
|
57931
57948
|
*/
|
|
@@ -57949,7 +57966,7 @@ var BatteryStatusSchema = object({
|
|
|
57949
57966
|
* that only report charge. A second reading on this cap, not a second
|
|
57950
57967
|
* `numeric-sensor` on the same device.
|
|
57951
57968
|
*/
|
|
57952
|
-
|
|
57969
|
+
voltage: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
|
|
57953
57970
|
/**
|
|
57954
57971
|
* Ms epoch of the last time the device PROVED it was reachable — a
|
|
57955
57972
|
* completed firmware round-trip, an observed wake, or an inbound push
|
|
@@ -57983,7 +58000,7 @@ var BatteryStatusSchema = object({
|
|
|
57983
58000
|
/**
|
|
57984
58001
|
* True when the source is a BINARY low-battery indicator (HA
|
|
57985
58002
|
* `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
|
|
57986
|
-
* charge level — `
|
|
58003
|
+
* charge level — `level` is then a coarse stand-in (100 = normal,
|
|
57987
58004
|
* sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
|
|
57988
58005
|
* misleading exact percentage. Absent/false → genuine 0–100 % reading.
|
|
57989
58006
|
*/
|
|
@@ -58003,15 +58020,15 @@ var BATTERY_DEVICE_TYPES = [
|
|
|
58003
58020
|
var batteryCustomize = {
|
|
58004
58021
|
version: 1,
|
|
58005
58022
|
targets: [{
|
|
58006
|
-
id: "
|
|
58023
|
+
id: "level",
|
|
58007
58024
|
cardinality: "scalar",
|
|
58008
58025
|
vocabulary: {
|
|
58009
58026
|
cap: "battery",
|
|
58010
|
-
stateField: "
|
|
58027
|
+
stateField: "level"
|
|
58011
58028
|
},
|
|
58012
58029
|
deviceTypes: BATTERY_DEVICE_TYPES,
|
|
58013
58030
|
apply: "add",
|
|
58014
|
-
path: "
|
|
58031
|
+
path: "level",
|
|
58015
58032
|
sources: [{
|
|
58016
58033
|
kind: "field",
|
|
58017
58034
|
valueKinds: ["number", "string"],
|
|
@@ -58105,7 +58122,7 @@ onStatusChanged: { data: object({
|
|
|
58105
58122
|
schema: BatteryStatusSchema,
|
|
58106
58123
|
kind: "push",
|
|
58107
58124
|
empty: {
|
|
58108
|
-
|
|
58125
|
+
level: null,
|
|
58109
58126
|
charging: "unknown",
|
|
58110
58127
|
sleeping: false,
|
|
58111
58128
|
lastUpdated: 0
|
|
@@ -58132,11 +58149,11 @@ onStatusChanged: { data: object({
|
|
|
58132
58149
|
* History (D850): recorded series. The generic capture replaces the `battery` series of `pipeline-analytics:stats-5m`.
|
|
58133
58150
|
*/
|
|
58134
58151
|
history: { fields: {
|
|
58135
|
-
|
|
58152
|
+
level: {
|
|
58136
58153
|
kind: "gauge",
|
|
58137
58154
|
unit: "%"
|
|
58138
58155
|
},
|
|
58139
|
-
|
|
58156
|
+
voltage: {
|
|
58140
58157
|
kind: "gauge",
|
|
58141
58158
|
unit: "V"
|
|
58142
58159
|
}
|
|
@@ -58196,14 +58213,14 @@ var binaryCapability = {
|
|
|
58196
58213
|
* controls to this single-method surface.
|
|
58197
58214
|
*
|
|
58198
58215
|
* The cap is intentionally minimal: a single `setBrightness({deviceId,
|
|
58199
|
-
*
|
|
58216
|
+
* level})` mutation plus the auto-injected `getStatus`. Drivers
|
|
58200
58217
|
* that expose richer controls (color temperature, scenes, schedules)
|
|
58201
58218
|
* should surface those via the device's `getSettingsUISchema()`
|
|
58202
58219
|
* instead of bloating this cap.
|
|
58203
58220
|
*/
|
|
58204
58221
|
var BrightnessStatusSchema = object({
|
|
58205
58222
|
/** Current level as 0..100 inclusive. Firmware-reported. */
|
|
58206
|
-
|
|
58223
|
+
level: number().min(0).max(100).meta(readingMeta("percentage")),
|
|
58207
58224
|
/** Ms epoch of the last operator-driven change. Useful for UI freshness. */
|
|
58208
58225
|
lastChangedAt: number()
|
|
58209
58226
|
});
|
|
@@ -58215,7 +58232,7 @@ var brightnessCapability = {
|
|
|
58215
58232
|
deviceTypes: [DeviceType.Light],
|
|
58216
58233
|
methods: { setBrightness: method(object({
|
|
58217
58234
|
deviceId: number().int().nonnegative(),
|
|
58218
|
-
|
|
58235
|
+
level: number().min(0).max(100)
|
|
58219
58236
|
}), _void(), {
|
|
58220
58237
|
kind: "mutation",
|
|
58221
58238
|
auth: "protected"
|
|
@@ -58228,7 +58245,7 @@ var brightnessCapability = {
|
|
|
58228
58245
|
*/
|
|
58229
58246
|
onBrightnessChanged: { data: object({
|
|
58230
58247
|
deviceId: number(),
|
|
58231
|
-
|
|
58248
|
+
level: number().min(0).max(100),
|
|
58232
58249
|
lastChangedAt: number()
|
|
58233
58250
|
}) } },
|
|
58234
58251
|
status: {
|
|
@@ -58251,7 +58268,7 @@ onBrightnessChanged: { data: object({
|
|
|
58251
58268
|
/**
|
|
58252
58269
|
* History (D850): recorded series. Actuator tier: level keeps every change.
|
|
58253
58270
|
*/
|
|
58254
|
-
history: { fields: {
|
|
58271
|
+
history: { fields: { level: {
|
|
58255
58272
|
kind: "gauge",
|
|
58256
58273
|
unit: "%",
|
|
58257
58274
|
minIntervalMs: 0
|
|
@@ -58848,11 +58865,11 @@ var ColorInputSchema = discriminatedUnion("mode", [
|
|
|
58848
58865
|
}),
|
|
58849
58866
|
object({
|
|
58850
58867
|
mode: literal("mired"),
|
|
58851
|
-
|
|
58868
|
+
colorTemperature: number().int().min(50).max(1e3)
|
|
58852
58869
|
})
|
|
58853
58870
|
]);
|
|
58854
58871
|
var ColorStatusSchema = object({
|
|
58855
|
-
/** Active color mode — which of `rgb` / `hsv` / `
|
|
58872
|
+
/** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
|
|
58856
58873
|
* the bulb's current state. */
|
|
58857
58874
|
mode: _enum([
|
|
58858
58875
|
"rgb",
|
|
@@ -58864,7 +58881,7 @@ var ColorStatusSchema = object({
|
|
|
58864
58881
|
/** Populated when `mode === 'hsv'`. */
|
|
58865
58882
|
hsv: HsvTripletSchema.optional(),
|
|
58866
58883
|
/** Populated when `mode === 'mired'`. */
|
|
58867
|
-
|
|
58884
|
+
colorTemperature: number().int().optional().meta(readingMeta("colour-temperature")),
|
|
58868
58885
|
/** Ms epoch of the last operator-driven change. */
|
|
58869
58886
|
lastChangedAt: number()
|
|
58870
58887
|
});
|
|
@@ -58896,7 +58913,7 @@ onColorChanged: { data: object({
|
|
|
58896
58913
|
]),
|
|
58897
58914
|
rgb: RgbTripletSchema.optional(),
|
|
58898
58915
|
hsv: HsvTripletSchema.optional(),
|
|
58899
|
-
|
|
58916
|
+
colorTemperature: number().int().optional(),
|
|
58900
58917
|
lastChangedAt: number()
|
|
58901
58918
|
}) } },
|
|
58902
58919
|
status: {
|
|
@@ -59781,11 +59798,11 @@ var DishwasherStatusSchema = object({
|
|
|
59781
59798
|
/** Feature keys of the programs the appliance currently offers — drives the UI selector. */
|
|
59782
59799
|
availablePrograms: array(string()),
|
|
59783
59800
|
/** Seconds remaining on the active cycle, or null when not running / not known. */
|
|
59784
|
-
|
|
59801
|
+
remaining: number().int().nonnegative().nullable().meta(readingMeta("duration")),
|
|
59785
59802
|
/** Seconds the delayed start is set to (time until the cycle starts), or null. */
|
|
59786
|
-
|
|
59803
|
+
delayedStart: number().int().nonnegative().nullable().meta(readingMeta("duration")),
|
|
59787
59804
|
/** Cycle completion 0..100, or null when not applicable. */
|
|
59788
|
-
|
|
59805
|
+
progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
59789
59806
|
/** True when the door is reported open; null when the door state is not known. */
|
|
59790
59807
|
doorOpen: boolean().nullable(),
|
|
59791
59808
|
/** True when the door is latched (locked) during a cycle; null when not reported. */
|
|
@@ -60004,14 +60021,14 @@ var dishwasherCapability = {
|
|
|
60004
60021
|
runtimeState: DishwasherStatusSchema,
|
|
60005
60022
|
durability: "session",
|
|
60006
60023
|
history: { fields: {
|
|
60007
|
-
|
|
60024
|
+
progress: {
|
|
60008
60025
|
kind: "gauge",
|
|
60009
60026
|
unit: "%",
|
|
60010
60027
|
deadband: 2
|
|
60011
60028
|
},
|
|
60012
60029
|
state: { kind: "enum" },
|
|
60013
60030
|
operationState: { kind: "enum" },
|
|
60014
|
-
|
|
60031
|
+
remaining: {
|
|
60015
60032
|
kind: "gauge",
|
|
60016
60033
|
unit: "s",
|
|
60017
60034
|
minIntervalMs: 6e4
|
|
@@ -60602,7 +60619,7 @@ var FanDirectionSchema = _enum(["forward", "reverse"]);
|
|
|
60602
60619
|
var FanControlStatusSchema = object({
|
|
60603
60620
|
/** Active speed as 0..100 inclusive. Null when the device has no
|
|
60604
60621
|
* speed surface (single-speed fan). */
|
|
60605
|
-
|
|
60622
|
+
speed: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
60606
60623
|
/** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
|
|
60607
60624
|
* a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
|
|
60608
60625
|
percentageStep: number().positive().optional().meta(readingMeta("percentage")),
|
|
@@ -60629,7 +60646,7 @@ var fanControlCapability = {
|
|
|
60629
60646
|
methods: {
|
|
60630
60647
|
setPercentage: method(object({
|
|
60631
60648
|
deviceId: number().int().nonnegative(),
|
|
60632
|
-
|
|
60649
|
+
speed: number().min(0).max(100)
|
|
60633
60650
|
}), _void(), {
|
|
60634
60651
|
kind: "mutation",
|
|
60635
60652
|
auth: "protected"
|
|
@@ -60662,7 +60679,7 @@ var fanControlCapability = {
|
|
|
60662
60679
|
},
|
|
60663
60680
|
/**
|
|
60664
60681
|
* Runtime-state slice — mirrored by the kernel. UI fan speed
|
|
60665
|
-
* sliders read `
|
|
60682
|
+
* sliders read `speed` for live updates.
|
|
60666
60683
|
*/
|
|
60667
60684
|
runtimeState: FanControlStatusSchema,
|
|
60668
60685
|
/**
|
|
@@ -60676,7 +60693,7 @@ var fanControlCapability = {
|
|
|
60676
60693
|
* History (D850): recorded series. Actuator tier: speed keeps every change.
|
|
60677
60694
|
*/
|
|
60678
60695
|
history: { fields: {
|
|
60679
|
-
|
|
60696
|
+
speed: {
|
|
60680
60697
|
kind: "gauge",
|
|
60681
60698
|
unit: "%",
|
|
60682
60699
|
minIntervalMs: 0
|
|
@@ -61121,7 +61138,7 @@ var humidifierCapability = {
|
|
|
61121
61138
|
*/
|
|
61122
61139
|
var HumiditySensorStatusSchema = object({
|
|
61123
61140
|
/** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
|
|
61124
|
-
|
|
61141
|
+
humidity: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
|
|
61125
61142
|
precision: 0,
|
|
61126
61143
|
label: "Humidity"
|
|
61127
61144
|
})),
|
|
@@ -61150,7 +61167,7 @@ var humiditySensorCapability = {
|
|
|
61150
61167
|
/**
|
|
61151
61168
|
* History (D850): recorded series.
|
|
61152
61169
|
*/
|
|
61153
|
-
history: { fields: {
|
|
61170
|
+
history: { fields: { humidity: {
|
|
61154
61171
|
kind: "gauge",
|
|
61155
61172
|
unit: "%",
|
|
61156
61173
|
deadband: .5
|
|
@@ -61790,7 +61807,7 @@ var LawnMowerControlStatusSchema = object({
|
|
|
61790
61807
|
batteryLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
61791
61808
|
/** 0..100 mowing-completion percentage of the current task, or null when no
|
|
61792
61809
|
* task is active / progress is unavailable. */
|
|
61793
|
-
|
|
61810
|
+
progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
61794
61811
|
/** Current device/event code (dynamic — mostly status, sometimes an error),
|
|
61795
61812
|
* or null when unknown. */
|
|
61796
61813
|
currentCode: number().nullable().meta(readingMeta("none")),
|
|
@@ -62290,7 +62307,7 @@ var lockControlCapability = {
|
|
|
62290
62307
|
volatileStateFields: ["lastChangedAt"]
|
|
62291
62308
|
};
|
|
62292
62309
|
/**
|
|
62293
|
-
* A monotonic total between resets (D944). Energy uses `power-meter.
|
|
62310
|
+
* A monotonic total between resets (D944). Energy uses `power-meter.energy`
|
|
62294
62311
|
* so dashboards keep one series; every other instantaneous reading lands here.
|
|
62295
62312
|
* `value` is the time integral in the source quantity's accumulated base
|
|
62296
62313
|
* (base-unit seconds, or kWh on the power meter). `null` is a gap, never zero.
|
|
@@ -62384,10 +62401,10 @@ var MediaPlayerStatusSchema = object({
|
|
|
62384
62401
|
currentMedia: MediaInfoSchema.nullable(),
|
|
62385
62402
|
/** Current playback position in ms. Null when not seekable or
|
|
62386
62403
|
* nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
|
|
62387
|
-
|
|
62404
|
+
position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
|
|
62388
62405
|
/** Total duration of the current media in ms. Null when unknown
|
|
62389
62406
|
* (live stream) or nothing is playing. */
|
|
62390
|
-
|
|
62407
|
+
duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
|
|
62391
62408
|
/** Shuffle toggle. Null when no shuffle surface.
|
|
62392
62409
|
* Pair with `DeviceFeature.MediaPlayerShuffle`. */
|
|
62393
62410
|
shuffle: boolean().nullable(),
|
|
@@ -62426,7 +62443,7 @@ var mediaPlayerCapability = {
|
|
|
62426
62443
|
}),
|
|
62427
62444
|
seek: method(object({
|
|
62428
62445
|
deviceId: number().int().nonnegative(),
|
|
62429
|
-
|
|
62446
|
+
position: number().int().nonnegative()
|
|
62430
62447
|
}), _void(), {
|
|
62431
62448
|
kind: "mutation",
|
|
62432
62449
|
auth: "protected"
|
|
@@ -62498,7 +62515,7 @@ var mediaPlayerCapability = {
|
|
|
62498
62515
|
/**
|
|
62499
62516
|
* History (D850): volume (a level an operator or an automation sets; the
|
|
62500
62517
|
* default 10 s floor folds a slider drag into its end value) and mute.
|
|
62501
|
-
* `
|
|
62518
|
+
* `position` is not recorded: it moves continuously while playing.
|
|
62502
62519
|
*/
|
|
62503
62520
|
history: { fields: {
|
|
62504
62521
|
volumeLevel: {
|
|
@@ -63460,9 +63477,9 @@ var NetworkLinkStatusSchema = object({
|
|
|
63460
63477
|
* one whose reading has not landed must not be drawn at 0 %. Consumers
|
|
63461
63478
|
* SKIP a null rather than coerce it.
|
|
63462
63479
|
*/
|
|
63463
|
-
|
|
63480
|
+
signal: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
63464
63481
|
/** Raw received signal strength in dBm, when the firmware reports one. */
|
|
63465
|
-
|
|
63482
|
+
rssi: number().optional().meta(readingMeta("signal-level")),
|
|
63466
63483
|
/** Network name of a wireless link, when the firmware reports it. */
|
|
63467
63484
|
ssid: string().optional(),
|
|
63468
63485
|
/** Ms epoch of the last observation. Lets consumers reason about freshness. */
|
|
@@ -63498,7 +63515,7 @@ onStatusChanged: { data: object({
|
|
|
63498
63515
|
kind: "push",
|
|
63499
63516
|
empty: {
|
|
63500
63517
|
type: "unknown",
|
|
63501
|
-
|
|
63518
|
+
signal: null,
|
|
63502
63519
|
lastUpdated: 0
|
|
63503
63520
|
}
|
|
63504
63521
|
},
|
|
@@ -63521,13 +63538,13 @@ onStatusChanged: { data: object({
|
|
|
63521
63538
|
* History (D850): recorded series.
|
|
63522
63539
|
*/
|
|
63523
63540
|
history: { fields: {
|
|
63524
|
-
|
|
63541
|
+
signal: {
|
|
63525
63542
|
kind: "gauge",
|
|
63526
63543
|
unit: "%",
|
|
63527
63544
|
deadband: 3,
|
|
63528
63545
|
minIntervalMs: 6e4
|
|
63529
63546
|
},
|
|
63530
|
-
|
|
63547
|
+
rssi: {
|
|
63531
63548
|
kind: "gauge",
|
|
63532
63549
|
unit: "dBm",
|
|
63533
63550
|
deadband: 2,
|
|
@@ -64847,16 +64864,16 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
|
|
|
64847
64864
|
* in real-world devices.
|
|
64848
64865
|
*/
|
|
64849
64866
|
var PowerMeterStatusSchema = object({
|
|
64850
|
-
/** Instantaneous power draw
|
|
64851
|
-
|
|
64867
|
+
/** Instantaneous power draw (watts). */
|
|
64868
|
+
power: number().optional().meta(readingMeta("power", { label: "Power" })),
|
|
64852
64869
|
/** Cumulative energy in kilowatt-hours since the meter was reset. */
|
|
64853
|
-
|
|
64854
|
-
/** Voltage
|
|
64855
|
-
|
|
64870
|
+
energy: number().optional().meta(readingMeta("energy", { label: "Energy" })),
|
|
64871
|
+
/** Voltage (volts). */
|
|
64872
|
+
voltage: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
|
|
64856
64873
|
/** Current in amperes. */
|
|
64857
|
-
|
|
64874
|
+
current: number().optional().meta(readingMeta("current", { label: "Current" })),
|
|
64858
64875
|
/** Apparent power in volt-amperes. */
|
|
64859
|
-
|
|
64876
|
+
apparentPower: number().optional().meta(readingMeta("apparent-power")),
|
|
64860
64877
|
/** Power factor (0..1) if reported. */
|
|
64861
64878
|
powerFactor: number().min(0).max(1).optional().meta(readingMeta("ratio")),
|
|
64862
64879
|
/** Ms epoch when the slice was last updated. */
|
|
@@ -64914,14 +64931,14 @@ function powerTarget(id, unit) {
|
|
|
64914
64931
|
advancedExpression: true
|
|
64915
64932
|
};
|
|
64916
64933
|
}
|
|
64917
|
-
/** "Power and energy" extension:
|
|
64934
|
+
/** "Power and energy" extension: power, energy, voltage and current from other devices (D951). */
|
|
64918
64935
|
var powerMeterCustomize = {
|
|
64919
64936
|
version: 1,
|
|
64920
64937
|
targets: [
|
|
64921
|
-
powerTarget("
|
|
64922
|
-
powerTarget("
|
|
64923
|
-
powerTarget("
|
|
64924
|
-
powerTarget("
|
|
64938
|
+
powerTarget("power", "W"),
|
|
64939
|
+
powerTarget("energy", "kWh"),
|
|
64940
|
+
powerTarget("voltage", "V"),
|
|
64941
|
+
powerTarget("current", "A")
|
|
64925
64942
|
]
|
|
64926
64943
|
};
|
|
64927
64944
|
var powerMeterCapability = {
|
|
@@ -64937,41 +64954,41 @@ var powerMeterCapability = {
|
|
|
64937
64954
|
},
|
|
64938
64955
|
runtimeState: PowerMeterStatusSchema,
|
|
64939
64956
|
/**
|
|
64940
|
-
* Runtime-state durability: **restored** — as `numeric-sensor`; `
|
|
64957
|
+
* Runtime-state durability: **restored** — as `numeric-sensor`; `energy` is an accumulator whose restored value is the baseline.
|
|
64941
64958
|
*
|
|
64942
64959
|
* See `RuntimeStateDurability`. Enforced by
|
|
64943
64960
|
* `scripts/check-runtime-state-durability.ts`.
|
|
64944
64961
|
*/
|
|
64945
64962
|
durability: "restored",
|
|
64946
64963
|
/**
|
|
64947
|
-
* History (D850): recorded series. Gauges are floored at 30 s; `
|
|
64964
|
+
* History (D850): recorded series. Gauges are floored at 30 s; `energy` is the one monotonic meter (counter).
|
|
64948
64965
|
*/
|
|
64949
64966
|
history: { fields: {
|
|
64950
|
-
|
|
64967
|
+
power: {
|
|
64951
64968
|
kind: "gauge",
|
|
64952
64969
|
unit: "W",
|
|
64953
64970
|
deadband: 1,
|
|
64954
64971
|
minIntervalMs: 3e4
|
|
64955
64972
|
},
|
|
64956
|
-
|
|
64973
|
+
energy: {
|
|
64957
64974
|
kind: "counter",
|
|
64958
64975
|
unit: "kWh",
|
|
64959
64976
|
deadband: .01,
|
|
64960
64977
|
minIntervalMs: 6e4
|
|
64961
64978
|
},
|
|
64962
|
-
|
|
64979
|
+
voltage: {
|
|
64963
64980
|
kind: "gauge",
|
|
64964
64981
|
unit: "V",
|
|
64965
64982
|
deadband: 1,
|
|
64966
64983
|
minIntervalMs: 3e4
|
|
64967
64984
|
},
|
|
64968
|
-
|
|
64985
|
+
current: {
|
|
64969
64986
|
kind: "gauge",
|
|
64970
64987
|
unit: "A",
|
|
64971
64988
|
deadband: .05,
|
|
64972
64989
|
minIntervalMs: 3e4
|
|
64973
64990
|
},
|
|
64974
|
-
|
|
64991
|
+
apparentPower: {
|
|
64975
64992
|
kind: "gauge",
|
|
64976
64993
|
unit: "VA",
|
|
64977
64994
|
deadband: 1,
|
|
@@ -65021,9 +65038,6 @@ var PresenceStatusSchema = object({
|
|
|
65021
65038
|
location: string().nullable(),
|
|
65022
65039
|
/** GPS coordinates when available. Null otherwise. */
|
|
65023
65040
|
gps: GpsLocationSchema.nullable(),
|
|
65024
|
-
/** Optional battery level of the tracking device (0..100). Null
|
|
65025
|
-
* when not reported. */
|
|
65026
|
-
batteryPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
65027
65041
|
/** Ms epoch when the slice was last updated. */
|
|
65028
65042
|
lastChangedAt: number()
|
|
65029
65043
|
});
|
|
@@ -65052,14 +65066,7 @@ var presenceCapability = {
|
|
|
65052
65066
|
* `scripts/check-runtime-state-durability.ts`.
|
|
65053
65067
|
*/
|
|
65054
65068
|
durability: "restored",
|
|
65055
|
-
|
|
65056
|
-
* History (D850): recorded series.
|
|
65057
|
-
*/
|
|
65058
|
-
history: { fields: { batteryPercent: {
|
|
65059
|
-
kind: "gauge",
|
|
65060
|
-
unit: "%",
|
|
65061
|
-
deadband: 1
|
|
65062
|
-
} } },
|
|
65069
|
+
history: "none",
|
|
65063
65070
|
/** Clock fields: written, but excluded from the compare that decides
|
|
65064
65071
|
* whether persisting is worth a SQLite commit. */
|
|
65065
65072
|
volatileStateFields: ["lastChangedAt"]
|
|
@@ -65074,7 +65081,7 @@ var presenceCapability = {
|
|
|
65074
65081
|
*/
|
|
65075
65082
|
var PressureSensorStatusSchema = object({
|
|
65076
65083
|
/** Current pressure in hPa. `null` when the sample was refused (D393). */
|
|
65077
|
-
|
|
65084
|
+
pressure: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
|
|
65078
65085
|
/** Ms epoch when the slice was last updated. */
|
|
65079
65086
|
lastFetchedAt: number()
|
|
65080
65087
|
});
|
|
@@ -65100,7 +65107,7 @@ var pressureSensorCapability = {
|
|
|
65100
65107
|
/**
|
|
65101
65108
|
* History (D850): recorded series.
|
|
65102
65109
|
*/
|
|
65103
|
-
history: { fields: {
|
|
65110
|
+
history: { fields: { pressure: {
|
|
65104
65111
|
kind: "gauge",
|
|
65105
65112
|
unit: "hPa",
|
|
65106
65113
|
deadband: .1
|
|
@@ -68807,7 +68814,7 @@ var tamperCapability = {
|
|
|
68807
68814
|
*/
|
|
68808
68815
|
var TemperatureSensorStatusSchema = object({
|
|
68809
68816
|
/** Current temperature in Celsius. `null` when the sample was refused (D393). */
|
|
68810
|
-
|
|
68817
|
+
temperature: number().nullable().meta(readingMeta("temperature", {
|
|
68811
68818
|
precision: 1,
|
|
68812
68819
|
label: "Temperature"
|
|
68813
68820
|
})),
|
|
@@ -68836,7 +68843,7 @@ var temperatureSensorCapability = {
|
|
|
68836
68843
|
/**
|
|
68837
68844
|
* History (D850): recorded series.
|
|
68838
68845
|
*/
|
|
68839
|
-
history: { fields: {
|
|
68846
|
+
history: { fields: { temperature: {
|
|
68840
68847
|
kind: "gauge",
|
|
68841
68848
|
unit: "°C",
|
|
68842
68849
|
deadband: .1
|
|
@@ -69133,7 +69140,7 @@ var VacuumControlStatusSchema = object({
|
|
|
69133
69140
|
/** Speed tokens the hardware accepts — drives the UI selector. */
|
|
69134
69141
|
availableFanSpeeds: array(string()),
|
|
69135
69142
|
/** 0..100 cleaning-completion percentage of the current task, or null. */
|
|
69136
|
-
|
|
69143
|
+
progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
69137
69144
|
/** Current error code (0 / null = no error). */
|
|
69138
69145
|
errorCode: number().nullable().meta(readingMeta("none")),
|
|
69139
69146
|
/** Human label for {@link errorCode}, or null when none / undecodable. */
|
|
@@ -71201,7 +71208,7 @@ var BaseDevice = class {
|
|
|
71201
71208
|
* `device-local-state.ts`. Drivers access via:
|
|
71202
71209
|
*
|
|
71203
71210
|
* `this.state.battery.sleeping = true` // patches the battery slice
|
|
71204
|
-
* `const pct = this.state.battery.
|
|
71211
|
+
* `const pct = this.state.battery.level` // reads the battery slice
|
|
71205
71212
|
* `this.state.deviceStatus.online = true` // mirrors `markOnline(true)`
|
|
71206
71213
|
*
|
|
71207
71214
|
* Adding a new cap with `runtimeState:` automatically extends this
|
|
@@ -71241,7 +71248,7 @@ var BaseDevice = class {
|
|
|
71241
71248
|
* shape; drivers don't redeclare it, they just write through.
|
|
71242
71249
|
*
|
|
71243
71250
|
* Read: `this.runtimeState.getCapState('battery')` →
|
|
71244
|
-
* `{
|
|
71251
|
+
* `{level, charging, sleeping, lastUpdated}` for any
|
|
71245
71252
|
* provider that registers `batteryCapability`.
|
|
71246
71253
|
* Write: `this.runtimeState.setCapState('battery', { … })`.
|
|
71247
71254
|
*
|
|
@@ -82444,7 +82451,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
82444
82451
|
label: t("Full brightness", "Luminosità massima"),
|
|
82445
82452
|
phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
|
|
82446
82453
|
icon: "sun",
|
|
82447
|
-
args: {
|
|
82454
|
+
args: { level: 100 }
|
|
82448
82455
|
},
|
|
82449
82456
|
{
|
|
82450
82457
|
id: "brightness.half",
|
|
@@ -82452,7 +82459,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
82452
82459
|
label: t("Half brightness", "Luminosità a metà"),
|
|
82453
82460
|
phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
|
|
82454
82461
|
icon: "sun-dim",
|
|
82455
|
-
args: {
|
|
82462
|
+
args: { level: 50 }
|
|
82456
82463
|
},
|
|
82457
82464
|
{
|
|
82458
82465
|
id: "brightness.off",
|
|
@@ -82460,16 +82467,16 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
82460
82467
|
label: t("Brightness off", "Luminosità a zero"),
|
|
82461
82468
|
phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
|
|
82462
82469
|
icon: "lightbulb-off",
|
|
82463
|
-
args: {
|
|
82470
|
+
args: { level: 0 }
|
|
82464
82471
|
},
|
|
82465
82472
|
{
|
|
82466
82473
|
id: "brightness.set",
|
|
82467
82474
|
method: "setBrightness",
|
|
82468
82475
|
label: t("Set brightness", "Imposta la luminosità"),
|
|
82469
|
-
phrase: t("Set the brightness of {device} to {
|
|
82476
|
+
phrase: t("Set the brightness of {device} to {level}", "Imposta la luminosità di {device} a {level}"),
|
|
82470
82477
|
icon: "sun-medium",
|
|
82471
82478
|
openArgs: [{
|
|
82472
|
-
key: "
|
|
82479
|
+
key: "level",
|
|
82473
82480
|
label: PERCENT,
|
|
82474
82481
|
offer: {
|
|
82475
82482
|
kind: "number",
|
|
@@ -82483,13 +82490,13 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
82483
82490
|
],
|
|
82484
82491
|
state: [{
|
|
82485
82492
|
kind: "numeric",
|
|
82486
|
-
field: "
|
|
82493
|
+
field: "level",
|
|
82487
82494
|
quantity: t("the brightness", "la luminosità"),
|
|
82488
82495
|
label: t("Brightness", "Luminosità"),
|
|
82489
82496
|
unit: "%",
|
|
82490
82497
|
icon: "sun"
|
|
82491
82498
|
}],
|
|
82492
|
-
events: { onBrightnessChanged: { notOperatorFacing: "the `
|
|
82499
|
+
events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
|
|
82493
82500
|
},
|
|
82494
82501
|
color: {
|
|
82495
82502
|
scope: "device",
|
|
@@ -82503,7 +82510,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
82503
82510
|
icon: "sun",
|
|
82504
82511
|
args: { color: {
|
|
82505
82512
|
mode: "mired",
|
|
82506
|
-
|
|
82513
|
+
colorTemperature: 370
|
|
82507
82514
|
} }
|
|
82508
82515
|
},
|
|
82509
82516
|
{
|
|
@@ -82514,7 +82521,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
82514
82521
|
icon: "snowflake",
|
|
82515
82522
|
args: { color: {
|
|
82516
82523
|
mode: "mired",
|
|
82517
|
-
|
|
82524
|
+
colorTemperature: 200
|
|
82518
82525
|
} }
|
|
82519
82526
|
},
|
|
82520
82527
|
{
|
|
@@ -83128,7 +83135,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
83128
83135
|
label: t("Fan off", "Ventilatore spento"),
|
|
83129
83136
|
phrase: t("Stop {device}", "Ferma {device}"),
|
|
83130
83137
|
icon: "power-off",
|
|
83131
|
-
args: {
|
|
83138
|
+
args: { speed: 0 }
|
|
83132
83139
|
},
|
|
83133
83140
|
{
|
|
83134
83141
|
id: "fan.full",
|
|
@@ -83136,16 +83143,16 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
83136
83143
|
label: t("Fan full", "Ventilatore al massimo"),
|
|
83137
83144
|
phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
|
|
83138
83145
|
icon: "fan",
|
|
83139
|
-
args: {
|
|
83146
|
+
args: { speed: 100 }
|
|
83140
83147
|
},
|
|
83141
83148
|
{
|
|
83142
83149
|
id: "fan.speed",
|
|
83143
83150
|
method: "setPercentage",
|
|
83144
83151
|
label: t("Set speed", "Imposta la velocità"),
|
|
83145
|
-
phrase: t("Set the speed of {device} to {
|
|
83152
|
+
phrase: t("Set the speed of {device} to {speed}", "Imposta la velocità di {device} al {speed}"),
|
|
83146
83153
|
icon: "fan",
|
|
83147
83154
|
openArgs: [{
|
|
83148
|
-
key: "
|
|
83155
|
+
key: "speed",
|
|
83149
83156
|
label: t("Speed", "Velocità"),
|
|
83150
83157
|
offer: {
|
|
83151
83158
|
kind: "number",
|
|
@@ -83207,7 +83214,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
83207
83214
|
],
|
|
83208
83215
|
state: [{
|
|
83209
83216
|
kind: "numeric",
|
|
83210
|
-
field: "
|
|
83217
|
+
field: "speed",
|
|
83211
83218
|
quantity: t("the speed", "la velocità"),
|
|
83212
83219
|
label: t("Speed", "Velocità"),
|
|
83213
83220
|
unit: "%",
|
|
@@ -84005,7 +84012,7 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
84005
84012
|
},
|
|
84006
84013
|
{
|
|
84007
84014
|
kind: "numeric",
|
|
84008
|
-
field: "
|
|
84015
|
+
field: "progress",
|
|
84009
84016
|
quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
|
|
84010
84017
|
label: t("Progress", "Avanzamento"),
|
|
84011
84018
|
unit: "%",
|
|
@@ -84363,10 +84370,10 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
84363
84370
|
id: "media.seek",
|
|
84364
84371
|
method: "seek",
|
|
84365
84372
|
label: t("Seek", "Vai al punto"),
|
|
84366
|
-
phrase: t("Move {device} to {
|
|
84373
|
+
phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
|
|
84367
84374
|
icon: "fast-forward",
|
|
84368
84375
|
openArgs: [{
|
|
84369
|
-
key: "
|
|
84376
|
+
key: "position",
|
|
84370
84377
|
label: t("Position", "Posizione"),
|
|
84371
84378
|
offer: {
|
|
84372
84379
|
kind: "number",
|
|
@@ -85415,7 +85422,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85415
85422
|
state: [
|
|
85416
85423
|
{
|
|
85417
85424
|
kind: "numeric",
|
|
85418
|
-
field: "
|
|
85425
|
+
field: "co2",
|
|
85419
85426
|
quantity: t("the CO₂", "la CO₂"),
|
|
85420
85427
|
label: t("CO₂", "CO₂"),
|
|
85421
85428
|
unit: "ppm",
|
|
@@ -85423,7 +85430,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85423
85430
|
},
|
|
85424
85431
|
{
|
|
85425
85432
|
kind: "numeric",
|
|
85426
|
-
field: "
|
|
85433
|
+
field: "voc",
|
|
85427
85434
|
quantity: t("the VOC level", "il livello di COV"),
|
|
85428
85435
|
label: t("VOC", "COV"),
|
|
85429
85436
|
unit: "ppb",
|
|
@@ -85459,7 +85466,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85459
85466
|
noun: t("Light level", "Luminosità ambiente"),
|
|
85460
85467
|
state: [{
|
|
85461
85468
|
kind: "numeric",
|
|
85462
|
-
field: "
|
|
85469
|
+
field: "illuminance",
|
|
85463
85470
|
quantity: t("the light level", "la luminosità"),
|
|
85464
85471
|
label: t("Illuminance", "Illuminamento"),
|
|
85465
85472
|
unit: "lx",
|
|
@@ -85662,7 +85669,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85662
85669
|
noun: t("Humidity", "Umidità"),
|
|
85663
85670
|
state: [{
|
|
85664
85671
|
kind: "numeric",
|
|
85665
|
-
field: "
|
|
85672
|
+
field: "humidity",
|
|
85666
85673
|
quantity: t("the humidity", "l’umidità"),
|
|
85667
85674
|
label: t("Humidity", "Umidità"),
|
|
85668
85675
|
unit: "%",
|
|
@@ -85710,7 +85717,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85710
85717
|
state: [
|
|
85711
85718
|
{
|
|
85712
85719
|
kind: "numeric",
|
|
85713
|
-
field: "
|
|
85720
|
+
field: "power",
|
|
85714
85721
|
quantity: t("the power draw", "il consumo"),
|
|
85715
85722
|
label: t("Power", "Potenza"),
|
|
85716
85723
|
unit: "W",
|
|
@@ -85718,7 +85725,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85718
85725
|
},
|
|
85719
85726
|
{
|
|
85720
85727
|
kind: "numeric",
|
|
85721
|
-
field: "
|
|
85728
|
+
field: "energy",
|
|
85722
85729
|
quantity: t("the energy used", "l’energia consumata"),
|
|
85723
85730
|
label: t("Energy", "Energia"),
|
|
85724
85731
|
unit: "kWh",
|
|
@@ -85726,7 +85733,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85726
85733
|
},
|
|
85727
85734
|
{
|
|
85728
85735
|
kind: "numeric",
|
|
85729
|
-
field: "
|
|
85736
|
+
field: "voltage",
|
|
85730
85737
|
quantity: t("the voltage", "la tensione"),
|
|
85731
85738
|
label: t("Voltage", "Tensione"),
|
|
85732
85739
|
unit: "V",
|
|
@@ -85734,7 +85741,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85734
85741
|
},
|
|
85735
85742
|
{
|
|
85736
85743
|
kind: "numeric",
|
|
85737
|
-
field: "
|
|
85744
|
+
field: "current",
|
|
85738
85745
|
quantity: t("the current", "la corrente"),
|
|
85739
85746
|
label: t("Current", "Corrente"),
|
|
85740
85747
|
unit: "A",
|
|
@@ -85751,13 +85758,6 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85751
85758
|
label: t("Where", "Posizione"),
|
|
85752
85759
|
phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
|
|
85753
85760
|
icon: "map-pin"
|
|
85754
|
-
}, {
|
|
85755
|
-
kind: "numeric",
|
|
85756
|
-
field: "batteryPercent",
|
|
85757
|
-
quantity: t("the phone battery", "la batteria del telefono"),
|
|
85758
|
-
label: t("Battery", "Batteria"),
|
|
85759
|
-
unit: "%",
|
|
85760
|
-
icon: "battery"
|
|
85761
85761
|
}]
|
|
85762
85762
|
},
|
|
85763
85763
|
"pressure-sensor": {
|
|
@@ -85765,7 +85765,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85765
85765
|
noun: t("Pressure", "Pressione"),
|
|
85766
85766
|
state: [{
|
|
85767
85767
|
kind: "numeric",
|
|
85768
|
-
field: "
|
|
85768
|
+
field: "pressure",
|
|
85769
85769
|
quantity: t("the pressure", "la pressione"),
|
|
85770
85770
|
label: t("Pressure", "Pressione"),
|
|
85771
85771
|
unit: "hPa",
|
|
@@ -85801,7 +85801,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85801
85801
|
noun: t("Temperature", "Temperatura"),
|
|
85802
85802
|
state: [{
|
|
85803
85803
|
kind: "numeric",
|
|
85804
|
-
field: "
|
|
85804
|
+
field: "temperature",
|
|
85805
85805
|
quantity: t("the temperature", "la temperatura"),
|
|
85806
85806
|
label: t("Temperature", "Temperatura"),
|
|
85807
85807
|
unit: "°C",
|
|
@@ -85872,7 +85872,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85872
85872
|
state: [
|
|
85873
85873
|
{
|
|
85874
85874
|
kind: "numeric",
|
|
85875
|
-
field: "
|
|
85875
|
+
field: "level",
|
|
85876
85876
|
quantity: t("the battery level", "il livello della batteria"),
|
|
85877
85877
|
label: t("Battery", "Batteria"),
|
|
85878
85878
|
unit: "%",
|
|
@@ -85914,7 +85914,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85914
85914
|
icon: "battery-charging"
|
|
85915
85915
|
}
|
|
85916
85916
|
],
|
|
85917
|
-
events: { onStatusChanged: { notOperatorFacing: "the
|
|
85917
|
+
events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
|
|
85918
85918
|
extraEvents: [{
|
|
85919
85919
|
category: EventCategory.DeviceAwake,
|
|
85920
85920
|
label: t("Woke up", "Risvegliato"),
|
|
@@ -85932,7 +85932,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85932
85932
|
noun: t("Network link", "Collegamento di rete"),
|
|
85933
85933
|
state: [{
|
|
85934
85934
|
kind: "numeric",
|
|
85935
|
-
field: "
|
|
85935
|
+
field: "signal",
|
|
85936
85936
|
quantity: t("the signal strength", "l’intensità del segnale"),
|
|
85937
85937
|
label: t("Signal", "Segnale"),
|
|
85938
85938
|
unit: "%",
|