@camstack/addon-import-alexa 0.2.160 → 0.2.162
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/{MotionZonesSettings-TwgbETGR.mjs → MotionZonesSettings-ByDKuk5o.mjs} +2 -2
- package/dist/{PrivacyMaskSettings-BoNkDD5o.mjs → PrivacyMaskSettings-Cn-_9Syv.mjs} +4 -4
- package/dist/{SceneMonitorEditor-4TxlnJK0.mjs → SceneMonitorEditor-jDMtE1yg.mjs} +3 -3
- package/dist/_stub.js +51 -51
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_import_alexa_page-CZPqws-b.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_import_alexa_page-Ck3EMdmv.mjs} +3 -3
- package/dist/{_virtual_mf___mfe_internal__addon_import_alexa_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Bj2TfHO6.mjs → _virtual_mf___mfe_internal__addon_import_alexa_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DE1dtKjc.mjs} +1 -1
- package/dist/addon.js +173 -173
- package/dist/addon.mjs +173 -173
- package/dist/{hostInit-Datq9hsz.mjs → hostInit-CoSVGWK6.mjs} +2 -2
- package/dist/{player-overlays-VaUrkkRt.mjs → player-overlays-CcdvNfxc.mjs} +1 -1
- package/dist/remoteEntry.js +1 -1
- package/dist/{responsive-D9B1kcZz.mjs → responsive-BmleF5y2.mjs} +1 -1
- package/dist/{scene-monitor-copy-CunyuMVK.mjs → scene-monitor-copy-BEZSY5WG.mjs} +1 -1
- package/dist/{square-CuVo4SNm.mjs → square-DZHhUhzl.mjs} +1 -1
- package/dist/{trash-2-Bjze04-b.mjs → trash-2-BVrrPiKB.mjs} +1 -1
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_import_alexa_page__remoteEntry_js-BY9vB6pT.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_import_alexa_page__remoteEntry_js-BA8fy0_J.mjs} +1 -1
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -46,7 +46,7 @@ node_os = __toESM(node_os, 1);
|
|
|
46
46
|
let node_child_process = require("node:child_process");
|
|
47
47
|
require("node:zlib");
|
|
48
48
|
let node_url = require("node:url");
|
|
49
|
-
//#region ../types/dist/event-category-
|
|
49
|
+
//#region ../types/dist/event-category-DmZDPDf_.mjs
|
|
50
50
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
51
51
|
EventCategory["SystemBoot"] = "system.boot";
|
|
52
52
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -673,7 +673,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
|
673
673
|
* (a track was promoted to a stationary-registry entry) or departs (the
|
|
674
674
|
* object moved / was removed). Telemetry (D8): lossy, drives a UI refresh of
|
|
675
675
|
* the dedicated "Stationary" section — never the live event feed. Payload:
|
|
676
|
-
* `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp }`.
|
|
676
|
+
* `{ deviceId, entryId, className, phase:'appeared'|'departed', timestamp, observedAt, zones }`.
|
|
677
677
|
*/
|
|
678
678
|
EventCategory["PipelineAnalyticsStationaryChanged"] = "pipeline-analytics.stationary-changed";
|
|
679
679
|
/**
|
|
@@ -5627,7 +5627,7 @@ var ZodIssueCode = {
|
|
|
5627
5627
|
var ZodFirstPartyTypeKind;
|
|
5628
5628
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5629
5629
|
//#endregion
|
|
5630
|
-
//#region ../types/dist/sleep-
|
|
5630
|
+
//#region ../types/dist/sleep-Crlmu_tO.mjs
|
|
5631
5631
|
/**
|
|
5632
5632
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5633
5633
|
* window to float samples (D455).
|
|
@@ -9147,11 +9147,11 @@ var CAP_NAMES = Object.freeze([
|
|
|
9147
9147
|
Object.freeze({
|
|
9148
9148
|
"air-quality-sensor": [
|
|
9149
9149
|
{
|
|
9150
|
-
"path": "
|
|
9150
|
+
"path": "co2",
|
|
9151
9151
|
"valueType": "number"
|
|
9152
9152
|
},
|
|
9153
9153
|
{
|
|
9154
|
-
"path": "
|
|
9154
|
+
"path": "voc",
|
|
9155
9155
|
"valueType": "number"
|
|
9156
9156
|
},
|
|
9157
9157
|
{
|
|
@@ -9201,7 +9201,7 @@ Object.freeze({
|
|
|
9201
9201
|
}
|
|
9202
9202
|
],
|
|
9203
9203
|
"ambient-light-sensor": [{
|
|
9204
|
-
"path": "
|
|
9204
|
+
"path": "illuminance",
|
|
9205
9205
|
"valueType": "number"
|
|
9206
9206
|
}],
|
|
9207
9207
|
"audio-metrics": [
|
|
@@ -9262,7 +9262,7 @@ Object.freeze({
|
|
|
9262
9262
|
],
|
|
9263
9263
|
"battery": [
|
|
9264
9264
|
{
|
|
9265
|
-
"path": "
|
|
9265
|
+
"path": "level",
|
|
9266
9266
|
"valueType": "number"
|
|
9267
9267
|
},
|
|
9268
9268
|
{
|
|
@@ -9284,7 +9284,7 @@ Object.freeze({
|
|
|
9284
9284
|
"valueType": "number"
|
|
9285
9285
|
},
|
|
9286
9286
|
{
|
|
9287
|
-
"path": "
|
|
9287
|
+
"path": "voltage",
|
|
9288
9288
|
"valueType": "number"
|
|
9289
9289
|
},
|
|
9290
9290
|
{
|
|
@@ -9305,7 +9305,7 @@ Object.freeze({
|
|
|
9305
9305
|
"valueType": "boolean"
|
|
9306
9306
|
}],
|
|
9307
9307
|
"brightness": [{
|
|
9308
|
-
"path": "
|
|
9308
|
+
"path": "level",
|
|
9309
9309
|
"valueType": "number"
|
|
9310
9310
|
}],
|
|
9311
9311
|
"broker": [{
|
|
@@ -9506,7 +9506,7 @@ Object.freeze({
|
|
|
9506
9506
|
"valueType": "number"
|
|
9507
9507
|
},
|
|
9508
9508
|
{
|
|
9509
|
-
"path": "
|
|
9509
|
+
"path": "colorTemperature",
|
|
9510
9510
|
"valueType": "number"
|
|
9511
9511
|
}
|
|
9512
9512
|
],
|
|
@@ -9685,15 +9685,15 @@ Object.freeze({
|
|
|
9685
9685
|
"valueType": "string"
|
|
9686
9686
|
},
|
|
9687
9687
|
{
|
|
9688
|
-
"path": "
|
|
9688
|
+
"path": "remaining",
|
|
9689
9689
|
"valueType": "number"
|
|
9690
9690
|
},
|
|
9691
9691
|
{
|
|
9692
|
-
"path": "
|
|
9692
|
+
"path": "delayedStart",
|
|
9693
9693
|
"valueType": "number"
|
|
9694
9694
|
},
|
|
9695
9695
|
{
|
|
9696
|
-
"path": "
|
|
9696
|
+
"path": "progress",
|
|
9697
9697
|
"valueType": "number"
|
|
9698
9698
|
},
|
|
9699
9699
|
{
|
|
@@ -9807,7 +9807,7 @@ Object.freeze({
|
|
|
9807
9807
|
],
|
|
9808
9808
|
"fan-control": [
|
|
9809
9809
|
{
|
|
9810
|
-
"path": "
|
|
9810
|
+
"path": "speed",
|
|
9811
9811
|
"valueType": "number"
|
|
9812
9812
|
},
|
|
9813
9813
|
{
|
|
@@ -9907,7 +9907,7 @@ Object.freeze({
|
|
|
9907
9907
|
}
|
|
9908
9908
|
],
|
|
9909
9909
|
"humidity-sensor": [{
|
|
9910
|
-
"path": "
|
|
9910
|
+
"path": "humidity",
|
|
9911
9911
|
"valueType": "number"
|
|
9912
9912
|
}],
|
|
9913
9913
|
"image": [{
|
|
@@ -10017,7 +10017,7 @@ Object.freeze({
|
|
|
10017
10017
|
"valueType": "number"
|
|
10018
10018
|
},
|
|
10019
10019
|
{
|
|
10020
|
-
"path": "
|
|
10020
|
+
"path": "progress",
|
|
10021
10021
|
"valueType": "number"
|
|
10022
10022
|
},
|
|
10023
10023
|
{
|
|
@@ -10096,11 +10096,11 @@ Object.freeze({
|
|
|
10096
10096
|
"valueType": "string"
|
|
10097
10097
|
},
|
|
10098
10098
|
{
|
|
10099
|
-
"path": "
|
|
10099
|
+
"path": "position",
|
|
10100
10100
|
"valueType": "number"
|
|
10101
10101
|
},
|
|
10102
10102
|
{
|
|
10103
|
-
"path": "
|
|
10103
|
+
"path": "duration",
|
|
10104
10104
|
"valueType": "number"
|
|
10105
10105
|
},
|
|
10106
10106
|
{
|
|
@@ -10202,11 +10202,11 @@ Object.freeze({
|
|
|
10202
10202
|
]
|
|
10203
10203
|
},
|
|
10204
10204
|
{
|
|
10205
|
-
"path": "
|
|
10205
|
+
"path": "signal",
|
|
10206
10206
|
"valueType": "number"
|
|
10207
10207
|
},
|
|
10208
10208
|
{
|
|
10209
|
-
"path": "
|
|
10209
|
+
"path": "rssi",
|
|
10210
10210
|
"valueType": "number"
|
|
10211
10211
|
},
|
|
10212
10212
|
{
|
|
@@ -10337,23 +10337,23 @@ Object.freeze({
|
|
|
10337
10337
|
],
|
|
10338
10338
|
"power-meter": [
|
|
10339
10339
|
{
|
|
10340
|
-
"path": "
|
|
10340
|
+
"path": "power",
|
|
10341
10341
|
"valueType": "number"
|
|
10342
10342
|
},
|
|
10343
10343
|
{
|
|
10344
|
-
"path": "
|
|
10344
|
+
"path": "energy",
|
|
10345
10345
|
"valueType": "number"
|
|
10346
10346
|
},
|
|
10347
10347
|
{
|
|
10348
|
-
"path": "
|
|
10348
|
+
"path": "voltage",
|
|
10349
10349
|
"valueType": "number"
|
|
10350
10350
|
},
|
|
10351
10351
|
{
|
|
10352
|
-
"path": "
|
|
10352
|
+
"path": "current",
|
|
10353
10353
|
"valueType": "number"
|
|
10354
10354
|
},
|
|
10355
10355
|
{
|
|
10356
|
-
"path": "
|
|
10356
|
+
"path": "apparentPower",
|
|
10357
10357
|
"valueType": "number"
|
|
10358
10358
|
},
|
|
10359
10359
|
{
|
|
@@ -10381,14 +10381,10 @@ Object.freeze({
|
|
|
10381
10381
|
{
|
|
10382
10382
|
"path": "gps.accuracyMeters",
|
|
10383
10383
|
"valueType": "number"
|
|
10384
|
-
},
|
|
10385
|
-
{
|
|
10386
|
-
"path": "batteryPercent",
|
|
10387
|
-
"valueType": "number"
|
|
10388
10384
|
}
|
|
10389
10385
|
],
|
|
10390
10386
|
"pressure-sensor": [{
|
|
10391
|
-
"path": "
|
|
10387
|
+
"path": "pressure",
|
|
10392
10388
|
"valueType": "number"
|
|
10393
10389
|
}],
|
|
10394
10390
|
"privacy-mask": [{
|
|
@@ -10702,7 +10698,7 @@ Object.freeze({
|
|
|
10702
10698
|
"valueType": "boolean"
|
|
10703
10699
|
}],
|
|
10704
10700
|
"temperature-sensor": [{
|
|
10705
|
-
"path": "
|
|
10701
|
+
"path": "temperature",
|
|
10706
10702
|
"valueType": "number"
|
|
10707
10703
|
}],
|
|
10708
10704
|
"update": [
|
|
@@ -10750,7 +10746,7 @@ Object.freeze({
|
|
|
10750
10746
|
"valueType": "string"
|
|
10751
10747
|
},
|
|
10752
10748
|
{
|
|
10753
|
-
"path": "
|
|
10749
|
+
"path": "progress",
|
|
10754
10750
|
"valueType": "number"
|
|
10755
10751
|
},
|
|
10756
10752
|
{
|
|
@@ -11235,7 +11231,7 @@ function errMsg(err) {
|
|
|
11235
11231
|
return String(err);
|
|
11236
11232
|
}
|
|
11237
11233
|
//#endregion
|
|
11238
|
-
//#region ../types/dist/composition-
|
|
11234
|
+
//#region ../types/dist/composition-CZImLpOI.mjs
|
|
11239
11235
|
/**
|
|
11240
11236
|
* The ffmpeg build every CamStack node downloads, per platform and arch.
|
|
11241
11237
|
*
|
|
@@ -15872,6 +15868,14 @@ var AutomationConditionLeafSchema = object({
|
|
|
15872
15868
|
array(union([string(), number()]))
|
|
15873
15869
|
])
|
|
15874
15870
|
});
|
|
15871
|
+
var AutomationConditionStationaryPresentSchema = object({
|
|
15872
|
+
kind: literal("stationary-present"),
|
|
15873
|
+
deviceId: number().int().nonnegative(),
|
|
15874
|
+
/** Class names; a macro class matches every raw class that maps to it. */
|
|
15875
|
+
classes: array(string().min(1)).min(1).optional(),
|
|
15876
|
+
/** The parked object must be in at least one of these zones. */
|
|
15877
|
+
zones: array(string().min(1)).min(1).optional()
|
|
15878
|
+
});
|
|
15875
15879
|
/**
|
|
15876
15880
|
* The expression leaf, declared as a plain object rather than an intersection
|
|
15877
15881
|
* with {@link ExpressionSourceSchema}: a discriminated union has to be able to
|
|
@@ -15905,7 +15909,8 @@ var AutomationConditionSchema = lazy(() => discriminatedUnion("kind", [
|
|
|
15905
15909
|
child: AutomationConditionSchema
|
|
15906
15910
|
}),
|
|
15907
15911
|
AutomationConditionLeafSchema,
|
|
15908
|
-
AutomationConditionExpressionSchema
|
|
15912
|
+
AutomationConditionExpressionSchema,
|
|
15913
|
+
AutomationConditionStationaryPresentSchema
|
|
15909
15914
|
]));
|
|
15910
15915
|
/**
|
|
15911
15916
|
* What starts a run.
|
|
@@ -15959,6 +15964,17 @@ var AutomationTriggerSchema = discriminatedUnion("kind", [
|
|
|
15959
15964
|
/** Best-so-far confidence the track must reach. */
|
|
15960
15965
|
minScore: number().min(0).max(1).optional()
|
|
15961
15966
|
}),
|
|
15967
|
+
object({
|
|
15968
|
+
kind: literal("stationary"),
|
|
15969
|
+
deviceIds: array(number().int().nonnegative()).min(1),
|
|
15970
|
+
/** Class names; a macro class matches like the detection trigger. */
|
|
15971
|
+
classes: array(string().min(1)).min(1).optional(),
|
|
15972
|
+
/** The parked object must be in at least one of these zones. */
|
|
15973
|
+
zones: array(string().min(1)).min(1).optional(),
|
|
15974
|
+
/** `appeared`: it became parked. `departed`: the registry retired it.
|
|
15975
|
+
* The vocabulary of `PipelineAnalyticsStationaryChanged`. */
|
|
15976
|
+
phase: _enum(["appeared", "departed"])
|
|
15977
|
+
}),
|
|
15962
15978
|
object({
|
|
15963
15979
|
kind: literal("interval"),
|
|
15964
15980
|
minutes: number().int().min(1).max(1440)
|
|
@@ -16168,7 +16184,8 @@ var AutomationConditionTraceNodeSchema = object({
|
|
|
16168
16184
|
"any",
|
|
16169
16185
|
"not",
|
|
16170
16186
|
"condition",
|
|
16171
|
-
"expression"
|
|
16187
|
+
"expression",
|
|
16188
|
+
"stationary-present"
|
|
16172
16189
|
]),
|
|
16173
16190
|
outcome: TraceNodeOutcomeSchema,
|
|
16174
16191
|
reason: string(),
|
|
@@ -19152,7 +19169,7 @@ var CompositionEventPlanSchema = object({
|
|
|
19152
19169
|
stateField: string(),
|
|
19153
19170
|
fieldKey: string()
|
|
19154
19171
|
});
|
|
19155
|
-
/** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.
|
|
19172
|
+
/** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.temperature`. */
|
|
19156
19173
|
var CompositionProblemSchema = object({
|
|
19157
19174
|
code: _enum([
|
|
19158
19175
|
"reserved-variant",
|
|
@@ -19471,7 +19488,7 @@ var GROUP_TEMPLATES = [
|
|
|
19471
19488
|
summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
|
|
19472
19489
|
role: DeviceRole.TemperatureSensor,
|
|
19473
19490
|
outputCap: "temperature-sensor",
|
|
19474
|
-
outputField: "
|
|
19491
|
+
outputField: "temperature",
|
|
19475
19492
|
quantity: "temperature",
|
|
19476
19493
|
defaultAggregate: "mean",
|
|
19477
19494
|
empty: "null",
|
|
@@ -19482,7 +19499,7 @@ var GROUP_TEMPLATES = [
|
|
|
19482
19499
|
summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
|
|
19483
19500
|
role: DeviceRole.HumiditySensor,
|
|
19484
19501
|
outputCap: "humidity-sensor",
|
|
19485
|
-
outputField: "
|
|
19502
|
+
outputField: "humidity",
|
|
19486
19503
|
quantity: "humidity",
|
|
19487
19504
|
defaultAggregate: "mean",
|
|
19488
19505
|
empty: "null",
|
|
@@ -19493,7 +19510,7 @@ var GROUP_TEMPLATES = [
|
|
|
19493
19510
|
summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
|
|
19494
19511
|
role: DeviceRole.PressureSensor,
|
|
19495
19512
|
outputCap: "pressure-sensor",
|
|
19496
|
-
outputField: "
|
|
19513
|
+
outputField: "pressure",
|
|
19497
19514
|
quantity: "pressure",
|
|
19498
19515
|
defaultAggregate: "mean",
|
|
19499
19516
|
empty: "null",
|
|
@@ -19504,7 +19521,7 @@ var GROUP_TEMPLATES = [
|
|
|
19504
19521
|
summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
|
|
19505
19522
|
role: DeviceRole.AmbientLightSensor,
|
|
19506
19523
|
outputCap: "ambient-light-sensor",
|
|
19507
|
-
outputField: "
|
|
19524
|
+
outputField: "illuminance",
|
|
19508
19525
|
quantity: "illuminance",
|
|
19509
19526
|
defaultAggregate: "mean",
|
|
19510
19527
|
empty: "null",
|
|
@@ -19515,7 +19532,7 @@ var GROUP_TEMPLATES = [
|
|
|
19515
19532
|
summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
|
|
19516
19533
|
role: DeviceRole.PowerSensor,
|
|
19517
19534
|
outputCap: "power-meter",
|
|
19518
|
-
outputField: "
|
|
19535
|
+
outputField: "power",
|
|
19519
19536
|
quantity: "power",
|
|
19520
19537
|
defaultAggregate: "sum",
|
|
19521
19538
|
empty: "omit",
|
|
@@ -19526,7 +19543,7 @@ var GROUP_TEMPLATES = [
|
|
|
19526
19543
|
summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
|
|
19527
19544
|
role: DeviceRole.EnergySensor,
|
|
19528
19545
|
outputCap: "power-meter",
|
|
19529
|
-
outputField: "
|
|
19546
|
+
outputField: "energy",
|
|
19530
19547
|
quantity: "energy",
|
|
19531
19548
|
defaultAggregate: "sum",
|
|
19532
19549
|
empty: "omit",
|
|
@@ -19537,7 +19554,7 @@ var GROUP_TEMPLATES = [
|
|
|
19537
19554
|
summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
|
|
19538
19555
|
role: DeviceRole.BatterySensor,
|
|
19539
19556
|
outputCap: "battery",
|
|
19540
|
-
outputField: "
|
|
19557
|
+
outputField: "level",
|
|
19541
19558
|
quantity: "percentage",
|
|
19542
19559
|
defaultAggregate: "mean",
|
|
19543
19560
|
empty: "null",
|
|
@@ -58016,9 +58033,9 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
|
|
|
58016
58033
|
*/
|
|
58017
58034
|
var AirQualitySensorStatusSchema = object({
|
|
58018
58035
|
/** Carbon dioxide concentration in ppm. */
|
|
58019
|
-
|
|
58036
|
+
co2: number().min(0).optional().meta(readingMeta("concentration-volume")),
|
|
58020
58037
|
/** Total volatile organic compounds in ppb. */
|
|
58021
|
-
|
|
58038
|
+
voc: number().min(0).optional().meta(readingMeta("concentration-ppb")),
|
|
58022
58039
|
/** Particulate matter ≤ 2.5 μm in µg/m³. */
|
|
58023
58040
|
pm25: number().min(0).optional().meta(readingMeta("concentration-mass")),
|
|
58024
58041
|
/** Particulate matter ≤ 10 μm in µg/m³. */
|
|
@@ -58051,12 +58068,12 @@ var airQualitySensorCapability = {
|
|
|
58051
58068
|
* History (D850): recorded series.
|
|
58052
58069
|
*/
|
|
58053
58070
|
history: { fields: {
|
|
58054
|
-
|
|
58071
|
+
co2: {
|
|
58055
58072
|
kind: "gauge",
|
|
58056
58073
|
unit: "ppm",
|
|
58057
58074
|
deadband: 5
|
|
58058
58075
|
},
|
|
58059
|
-
|
|
58076
|
+
voc: {
|
|
58060
58077
|
kind: "gauge",
|
|
58061
58078
|
unit: "ppb",
|
|
58062
58079
|
deadband: 5
|
|
@@ -58087,7 +58104,7 @@ var airQualitySensorCapability = {
|
|
|
58087
58104
|
*/
|
|
58088
58105
|
var AmbientLightSensorStatusSchema = object({
|
|
58089
58106
|
/** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
|
|
58090
|
-
|
|
58107
|
+
illuminance: number().min(0).nullable().meta(readingMeta("illuminance", {
|
|
58091
58108
|
precision: 0,
|
|
58092
58109
|
label: "Illuminance"
|
|
58093
58110
|
})),
|
|
@@ -58116,7 +58133,7 @@ var ambientLightSensorCapability = {
|
|
|
58116
58133
|
/**
|
|
58117
58134
|
* History (D850): recorded series. Wide range, so a RELATIVE deadband (10 %).
|
|
58118
58135
|
*/
|
|
58119
|
-
history: { fields: {
|
|
58136
|
+
history: { fields: { illuminance: {
|
|
58120
58137
|
kind: "gauge",
|
|
58121
58138
|
unit: "lx",
|
|
58122
58139
|
deadbandPct: 10,
|
|
@@ -58429,7 +58446,7 @@ var BatteryStatusSchema = object({
|
|
|
58429
58446
|
* Consumers must SKIP a null rather than coerce it — `battery-band` already
|
|
58430
58447
|
* declines to band a non-finite reading, which is the correct shape.
|
|
58431
58448
|
*/
|
|
58432
|
-
|
|
58449
|
+
level: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
|
|
58433
58450
|
/**
|
|
58434
58451
|
* Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
|
|
58435
58452
|
* Reolink-specific for the Solar Panel 2 accessory (will become
|
|
@@ -58439,7 +58456,7 @@ var BatteryStatusSchema = object({
|
|
|
58439
58456
|
* `'unknown'` is the absence of an answer: the provider has not read the
|
|
58440
58457
|
* power fields yet, or the firmware reported neither. Before it existed,
|
|
58441
58458
|
* two unreadable fields produced `'none'`, and a camera nobody had reached
|
|
58442
|
-
* was drawn "on battery alone" — the same D315 defect `
|
|
58459
|
+
* was drawn "on battery alone" — the same D315 defect `level` closed
|
|
58443
58460
|
* by going nullable. Consumers SKIP it (no charger state published, no
|
|
58444
58461
|
* glyph, no HomeKit ChargingState) rather than coerce it either way.
|
|
58445
58462
|
*/
|
|
@@ -58463,7 +58480,7 @@ var BatteryStatusSchema = object({
|
|
|
58463
58480
|
* that only report charge. A second reading on this cap, not a second
|
|
58464
58481
|
* `numeric-sensor` on the same device.
|
|
58465
58482
|
*/
|
|
58466
|
-
|
|
58483
|
+
voltage: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
|
|
58467
58484
|
/**
|
|
58468
58485
|
* Ms epoch of the last time the device PROVED it was reachable — a
|
|
58469
58486
|
* completed firmware round-trip, an observed wake, or an inbound push
|
|
@@ -58497,7 +58514,7 @@ var BatteryStatusSchema = object({
|
|
|
58497
58514
|
/**
|
|
58498
58515
|
* True when the source is a BINARY low-battery indicator (HA
|
|
58499
58516
|
* `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
|
|
58500
|
-
* charge level — `
|
|
58517
|
+
* charge level — `level` is then a coarse stand-in (100 = normal,
|
|
58501
58518
|
* sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
|
|
58502
58519
|
* misleading exact percentage. Absent/false → genuine 0–100 % reading.
|
|
58503
58520
|
*/
|
|
@@ -58517,15 +58534,15 @@ var BATTERY_DEVICE_TYPES = [
|
|
|
58517
58534
|
var batteryCustomize = {
|
|
58518
58535
|
version: 1,
|
|
58519
58536
|
targets: [{
|
|
58520
|
-
id: "
|
|
58537
|
+
id: "level",
|
|
58521
58538
|
cardinality: "scalar",
|
|
58522
58539
|
vocabulary: {
|
|
58523
58540
|
cap: "battery",
|
|
58524
|
-
stateField: "
|
|
58541
|
+
stateField: "level"
|
|
58525
58542
|
},
|
|
58526
58543
|
deviceTypes: BATTERY_DEVICE_TYPES,
|
|
58527
58544
|
apply: "add",
|
|
58528
|
-
path: "
|
|
58545
|
+
path: "level",
|
|
58529
58546
|
sources: [{
|
|
58530
58547
|
kind: "field",
|
|
58531
58548
|
valueKinds: ["number", "string"],
|
|
@@ -58619,7 +58636,7 @@ onStatusChanged: { data: object({
|
|
|
58619
58636
|
schema: BatteryStatusSchema,
|
|
58620
58637
|
kind: "push",
|
|
58621
58638
|
empty: {
|
|
58622
|
-
|
|
58639
|
+
level: null,
|
|
58623
58640
|
charging: "unknown",
|
|
58624
58641
|
sleeping: false,
|
|
58625
58642
|
lastUpdated: 0
|
|
@@ -58646,11 +58663,11 @@ onStatusChanged: { data: object({
|
|
|
58646
58663
|
* History (D850): recorded series. The generic capture replaces the `battery` series of `pipeline-analytics:stats-5m`.
|
|
58647
58664
|
*/
|
|
58648
58665
|
history: { fields: {
|
|
58649
|
-
|
|
58666
|
+
level: {
|
|
58650
58667
|
kind: "gauge",
|
|
58651
58668
|
unit: "%"
|
|
58652
58669
|
},
|
|
58653
|
-
|
|
58670
|
+
voltage: {
|
|
58654
58671
|
kind: "gauge",
|
|
58655
58672
|
unit: "V"
|
|
58656
58673
|
}
|
|
@@ -58710,14 +58727,14 @@ var binaryCapability = {
|
|
|
58710
58727
|
* controls to this single-method surface.
|
|
58711
58728
|
*
|
|
58712
58729
|
* The cap is intentionally minimal: a single `setBrightness({deviceId,
|
|
58713
|
-
*
|
|
58730
|
+
* level})` mutation plus the auto-injected `getStatus`. Drivers
|
|
58714
58731
|
* that expose richer controls (color temperature, scenes, schedules)
|
|
58715
58732
|
* should surface those via the device's `getSettingsUISchema()`
|
|
58716
58733
|
* instead of bloating this cap.
|
|
58717
58734
|
*/
|
|
58718
58735
|
var BrightnessStatusSchema = object({
|
|
58719
58736
|
/** Current level as 0..100 inclusive. Firmware-reported. */
|
|
58720
|
-
|
|
58737
|
+
level: number().min(0).max(100).meta(readingMeta("percentage")),
|
|
58721
58738
|
/** Ms epoch of the last operator-driven change. Useful for UI freshness. */
|
|
58722
58739
|
lastChangedAt: number()
|
|
58723
58740
|
});
|
|
@@ -58729,7 +58746,7 @@ var brightnessCapability = {
|
|
|
58729
58746
|
deviceTypes: [DeviceType.Light],
|
|
58730
58747
|
methods: { setBrightness: method(object({
|
|
58731
58748
|
deviceId: number().int().nonnegative(),
|
|
58732
|
-
|
|
58749
|
+
level: number().min(0).max(100)
|
|
58733
58750
|
}), _void(), {
|
|
58734
58751
|
kind: "mutation",
|
|
58735
58752
|
auth: "protected"
|
|
@@ -58742,7 +58759,7 @@ var brightnessCapability = {
|
|
|
58742
58759
|
*/
|
|
58743
58760
|
onBrightnessChanged: { data: object({
|
|
58744
58761
|
deviceId: number(),
|
|
58745
|
-
|
|
58762
|
+
level: number().min(0).max(100),
|
|
58746
58763
|
lastChangedAt: number()
|
|
58747
58764
|
}) } },
|
|
58748
58765
|
status: {
|
|
@@ -58765,7 +58782,7 @@ onBrightnessChanged: { data: object({
|
|
|
58765
58782
|
/**
|
|
58766
58783
|
* History (D850): recorded series. Actuator tier: level keeps every change.
|
|
58767
58784
|
*/
|
|
58768
|
-
history: { fields: {
|
|
58785
|
+
history: { fields: { level: {
|
|
58769
58786
|
kind: "gauge",
|
|
58770
58787
|
unit: "%",
|
|
58771
58788
|
minIntervalMs: 0
|
|
@@ -59379,11 +59396,11 @@ var ColorInputSchema = discriminatedUnion("mode", [
|
|
|
59379
59396
|
}),
|
|
59380
59397
|
object({
|
|
59381
59398
|
mode: literal("mired"),
|
|
59382
|
-
|
|
59399
|
+
colorTemperature: number().int().min(50).max(1e3)
|
|
59383
59400
|
})
|
|
59384
59401
|
]);
|
|
59385
59402
|
var ColorStatusSchema = object({
|
|
59386
|
-
/** Active color mode — which of `rgb` / `hsv` / `
|
|
59403
|
+
/** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
|
|
59387
59404
|
* the bulb's current state. */
|
|
59388
59405
|
mode: _enum([
|
|
59389
59406
|
"rgb",
|
|
@@ -59395,7 +59412,7 @@ var ColorStatusSchema = object({
|
|
|
59395
59412
|
/** Populated when `mode === 'hsv'`. */
|
|
59396
59413
|
hsv: HsvTripletSchema.optional(),
|
|
59397
59414
|
/** Populated when `mode === 'mired'`. */
|
|
59398
|
-
|
|
59415
|
+
colorTemperature: number().int().optional().meta(readingMeta("colour-temperature")),
|
|
59399
59416
|
/** Ms epoch of the last operator-driven change. */
|
|
59400
59417
|
lastChangedAt: number()
|
|
59401
59418
|
});
|
|
@@ -59427,7 +59444,7 @@ onColorChanged: { data: object({
|
|
|
59427
59444
|
]),
|
|
59428
59445
|
rgb: RgbTripletSchema.optional(),
|
|
59429
59446
|
hsv: HsvTripletSchema.optional(),
|
|
59430
|
-
|
|
59447
|
+
colorTemperature: number().int().optional(),
|
|
59431
59448
|
lastChangedAt: number()
|
|
59432
59449
|
}) } },
|
|
59433
59450
|
status: {
|
|
@@ -60304,11 +60321,11 @@ var DishwasherStatusSchema = object({
|
|
|
60304
60321
|
/** Feature keys of the programs the appliance currently offers — drives the UI selector. */
|
|
60305
60322
|
availablePrograms: array(string()),
|
|
60306
60323
|
/** Seconds remaining on the active cycle, or null when not running / not known. */
|
|
60307
|
-
|
|
60324
|
+
remaining: number().int().nonnegative().nullable().meta(readingMeta("duration")),
|
|
60308
60325
|
/** Seconds the delayed start is set to (time until the cycle starts), or null. */
|
|
60309
|
-
|
|
60326
|
+
delayedStart: number().int().nonnegative().nullable().meta(readingMeta("duration")),
|
|
60310
60327
|
/** Cycle completion 0..100, or null when not applicable. */
|
|
60311
|
-
|
|
60328
|
+
progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
60312
60329
|
/** True when the door is reported open; null when the door state is not known. */
|
|
60313
60330
|
doorOpen: boolean().nullable(),
|
|
60314
60331
|
/** True when the door is latched (locked) during a cycle; null when not reported. */
|
|
@@ -60527,14 +60544,14 @@ var dishwasherCapability = {
|
|
|
60527
60544
|
runtimeState: DishwasherStatusSchema,
|
|
60528
60545
|
durability: "session",
|
|
60529
60546
|
history: { fields: {
|
|
60530
|
-
|
|
60547
|
+
progress: {
|
|
60531
60548
|
kind: "gauge",
|
|
60532
60549
|
unit: "%",
|
|
60533
60550
|
deadband: 2
|
|
60534
60551
|
},
|
|
60535
60552
|
state: { kind: "enum" },
|
|
60536
60553
|
operationState: { kind: "enum" },
|
|
60537
|
-
|
|
60554
|
+
remaining: {
|
|
60538
60555
|
kind: "gauge",
|
|
60539
60556
|
unit: "s",
|
|
60540
60557
|
minIntervalMs: 6e4
|
|
@@ -61125,7 +61142,7 @@ var FanDirectionSchema = _enum(["forward", "reverse"]);
|
|
|
61125
61142
|
var FanControlStatusSchema = object({
|
|
61126
61143
|
/** Active speed as 0..100 inclusive. Null when the device has no
|
|
61127
61144
|
* speed surface (single-speed fan). */
|
|
61128
|
-
|
|
61145
|
+
speed: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
61129
61146
|
/** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
|
|
61130
61147
|
* a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
|
|
61131
61148
|
percentageStep: number().positive().optional().meta(readingMeta("percentage")),
|
|
@@ -61152,7 +61169,7 @@ var fanControlCapability = {
|
|
|
61152
61169
|
methods: {
|
|
61153
61170
|
setPercentage: method(object({
|
|
61154
61171
|
deviceId: number().int().nonnegative(),
|
|
61155
|
-
|
|
61172
|
+
speed: number().min(0).max(100)
|
|
61156
61173
|
}), _void(), {
|
|
61157
61174
|
kind: "mutation",
|
|
61158
61175
|
auth: "protected"
|
|
@@ -61185,7 +61202,7 @@ var fanControlCapability = {
|
|
|
61185
61202
|
},
|
|
61186
61203
|
/**
|
|
61187
61204
|
* Runtime-state slice — mirrored by the kernel. UI fan speed
|
|
61188
|
-
* sliders read `
|
|
61205
|
+
* sliders read `speed` for live updates.
|
|
61189
61206
|
*/
|
|
61190
61207
|
runtimeState: FanControlStatusSchema,
|
|
61191
61208
|
/**
|
|
@@ -61199,7 +61216,7 @@ var fanControlCapability = {
|
|
|
61199
61216
|
* History (D850): recorded series. Actuator tier: speed keeps every change.
|
|
61200
61217
|
*/
|
|
61201
61218
|
history: { fields: {
|
|
61202
|
-
|
|
61219
|
+
speed: {
|
|
61203
61220
|
kind: "gauge",
|
|
61204
61221
|
unit: "%",
|
|
61205
61222
|
minIntervalMs: 0
|
|
@@ -61644,7 +61661,7 @@ var humidifierCapability = {
|
|
|
61644
61661
|
*/
|
|
61645
61662
|
var HumiditySensorStatusSchema = object({
|
|
61646
61663
|
/** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
|
|
61647
|
-
|
|
61664
|
+
humidity: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
|
|
61648
61665
|
precision: 0,
|
|
61649
61666
|
label: "Humidity"
|
|
61650
61667
|
})),
|
|
@@ -61673,7 +61690,7 @@ var humiditySensorCapability = {
|
|
|
61673
61690
|
/**
|
|
61674
61691
|
* History (D850): recorded series.
|
|
61675
61692
|
*/
|
|
61676
|
-
history: { fields: {
|
|
61693
|
+
history: { fields: { humidity: {
|
|
61677
61694
|
kind: "gauge",
|
|
61678
61695
|
unit: "%",
|
|
61679
61696
|
deadband: .5
|
|
@@ -62313,7 +62330,7 @@ var LawnMowerControlStatusSchema = object({
|
|
|
62313
62330
|
batteryLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
62314
62331
|
/** 0..100 mowing-completion percentage of the current task, or null when no
|
|
62315
62332
|
* task is active / progress is unavailable. */
|
|
62316
|
-
|
|
62333
|
+
progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
62317
62334
|
/** Current device/event code (dynamic — mostly status, sometimes an error),
|
|
62318
62335
|
* or null when unknown. */
|
|
62319
62336
|
currentCode: number().nullable().meta(readingMeta("none")),
|
|
@@ -62813,7 +62830,7 @@ var lockControlCapability = {
|
|
|
62813
62830
|
volatileStateFields: ["lastChangedAt"]
|
|
62814
62831
|
};
|
|
62815
62832
|
/**
|
|
62816
|
-
* A monotonic total between resets (D944). Energy uses `power-meter.
|
|
62833
|
+
* A monotonic total between resets (D944). Energy uses `power-meter.energy`
|
|
62817
62834
|
* so dashboards keep one series; every other instantaneous reading lands here.
|
|
62818
62835
|
* `value` is the time integral in the source quantity's accumulated base
|
|
62819
62836
|
* (base-unit seconds, or kWh on the power meter). `null` is a gap, never zero.
|
|
@@ -62907,10 +62924,10 @@ var MediaPlayerStatusSchema = object({
|
|
|
62907
62924
|
currentMedia: MediaInfoSchema.nullable(),
|
|
62908
62925
|
/** Current playback position in ms. Null when not seekable or
|
|
62909
62926
|
* nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
|
|
62910
|
-
|
|
62927
|
+
position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
|
|
62911
62928
|
/** Total duration of the current media in ms. Null when unknown
|
|
62912
62929
|
* (live stream) or nothing is playing. */
|
|
62913
|
-
|
|
62930
|
+
duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
|
|
62914
62931
|
/** Shuffle toggle. Null when no shuffle surface.
|
|
62915
62932
|
* Pair with `DeviceFeature.MediaPlayerShuffle`. */
|
|
62916
62933
|
shuffle: boolean().nullable(),
|
|
@@ -62949,7 +62966,7 @@ var mediaPlayerCapability = {
|
|
|
62949
62966
|
}),
|
|
62950
62967
|
seek: method(object({
|
|
62951
62968
|
deviceId: number().int().nonnegative(),
|
|
62952
|
-
|
|
62969
|
+
position: number().int().nonnegative()
|
|
62953
62970
|
}), _void(), {
|
|
62954
62971
|
kind: "mutation",
|
|
62955
62972
|
auth: "protected"
|
|
@@ -63021,7 +63038,7 @@ var mediaPlayerCapability = {
|
|
|
63021
63038
|
/**
|
|
63022
63039
|
* History (D850): volume (a level an operator or an automation sets; the
|
|
63023
63040
|
* default 10 s floor folds a slider drag into its end value) and mute.
|
|
63024
|
-
* `
|
|
63041
|
+
* `position` is not recorded: it moves continuously while playing.
|
|
63025
63042
|
*/
|
|
63026
63043
|
history: { fields: {
|
|
63027
63044
|
volumeLevel: {
|
|
@@ -63983,9 +64000,9 @@ var NetworkLinkStatusSchema = object({
|
|
|
63983
64000
|
* one whose reading has not landed must not be drawn at 0 %. Consumers
|
|
63984
64001
|
* SKIP a null rather than coerce it.
|
|
63985
64002
|
*/
|
|
63986
|
-
|
|
64003
|
+
signal: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
63987
64004
|
/** Raw received signal strength in dBm, when the firmware reports one. */
|
|
63988
|
-
|
|
64005
|
+
rssi: number().optional().meta(readingMeta("signal-level")),
|
|
63989
64006
|
/** Network name of a wireless link, when the firmware reports it. */
|
|
63990
64007
|
ssid: string().optional(),
|
|
63991
64008
|
/** Ms epoch of the last observation. Lets consumers reason about freshness. */
|
|
@@ -64021,7 +64038,7 @@ onStatusChanged: { data: object({
|
|
|
64021
64038
|
kind: "push",
|
|
64022
64039
|
empty: {
|
|
64023
64040
|
type: "unknown",
|
|
64024
|
-
|
|
64041
|
+
signal: null,
|
|
64025
64042
|
lastUpdated: 0
|
|
64026
64043
|
}
|
|
64027
64044
|
},
|
|
@@ -64044,13 +64061,13 @@ onStatusChanged: { data: object({
|
|
|
64044
64061
|
* History (D850): recorded series.
|
|
64045
64062
|
*/
|
|
64046
64063
|
history: { fields: {
|
|
64047
|
-
|
|
64064
|
+
signal: {
|
|
64048
64065
|
kind: "gauge",
|
|
64049
64066
|
unit: "%",
|
|
64050
64067
|
deadband: 3,
|
|
64051
64068
|
minIntervalMs: 6e4
|
|
64052
64069
|
},
|
|
64053
|
-
|
|
64070
|
+
rssi: {
|
|
64054
64071
|
kind: "gauge",
|
|
64055
64072
|
unit: "dBm",
|
|
64056
64073
|
deadband: 2,
|
|
@@ -65370,16 +65387,16 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
|
|
|
65370
65387
|
* in real-world devices.
|
|
65371
65388
|
*/
|
|
65372
65389
|
var PowerMeterStatusSchema = object({
|
|
65373
|
-
/** Instantaneous power draw
|
|
65374
|
-
|
|
65390
|
+
/** Instantaneous power draw (watts). */
|
|
65391
|
+
power: number().optional().meta(readingMeta("power", { label: "Power" })),
|
|
65375
65392
|
/** Cumulative energy in kilowatt-hours since the meter was reset. */
|
|
65376
|
-
|
|
65377
|
-
/** Voltage
|
|
65378
|
-
|
|
65393
|
+
energy: number().optional().meta(readingMeta("energy", { label: "Energy" })),
|
|
65394
|
+
/** Voltage (volts). */
|
|
65395
|
+
voltage: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
|
|
65379
65396
|
/** Current in amperes. */
|
|
65380
|
-
|
|
65397
|
+
current: number().optional().meta(readingMeta("current", { label: "Current" })),
|
|
65381
65398
|
/** Apparent power in volt-amperes. */
|
|
65382
|
-
|
|
65399
|
+
apparentPower: number().optional().meta(readingMeta("apparent-power")),
|
|
65383
65400
|
/** Power factor (0..1) if reported. */
|
|
65384
65401
|
powerFactor: number().min(0).max(1).optional().meta(readingMeta("ratio")),
|
|
65385
65402
|
/** Ms epoch when the slice was last updated. */
|
|
@@ -65437,14 +65454,14 @@ function powerTarget(id, unit) {
|
|
|
65437
65454
|
advancedExpression: true
|
|
65438
65455
|
};
|
|
65439
65456
|
}
|
|
65440
|
-
/** "Power and energy" extension:
|
|
65457
|
+
/** "Power and energy" extension: power, energy, voltage and current from other devices (D951). */
|
|
65441
65458
|
var powerMeterCustomize = {
|
|
65442
65459
|
version: 1,
|
|
65443
65460
|
targets: [
|
|
65444
|
-
powerTarget("
|
|
65445
|
-
powerTarget("
|
|
65446
|
-
powerTarget("
|
|
65447
|
-
powerTarget("
|
|
65461
|
+
powerTarget("power", "W"),
|
|
65462
|
+
powerTarget("energy", "kWh"),
|
|
65463
|
+
powerTarget("voltage", "V"),
|
|
65464
|
+
powerTarget("current", "A")
|
|
65448
65465
|
]
|
|
65449
65466
|
};
|
|
65450
65467
|
var powerMeterCapability = {
|
|
@@ -65460,41 +65477,41 @@ var powerMeterCapability = {
|
|
|
65460
65477
|
},
|
|
65461
65478
|
runtimeState: PowerMeterStatusSchema,
|
|
65462
65479
|
/**
|
|
65463
|
-
* Runtime-state durability: **restored** — as `numeric-sensor`; `
|
|
65480
|
+
* Runtime-state durability: **restored** — as `numeric-sensor`; `energy` is an accumulator whose restored value is the baseline.
|
|
65464
65481
|
*
|
|
65465
65482
|
* See `RuntimeStateDurability`. Enforced by
|
|
65466
65483
|
* `scripts/check-runtime-state-durability.ts`.
|
|
65467
65484
|
*/
|
|
65468
65485
|
durability: "restored",
|
|
65469
65486
|
/**
|
|
65470
|
-
* History (D850): recorded series. Gauges are floored at 30 s; `
|
|
65487
|
+
* History (D850): recorded series. Gauges are floored at 30 s; `energy` is the one monotonic meter (counter).
|
|
65471
65488
|
*/
|
|
65472
65489
|
history: { fields: {
|
|
65473
|
-
|
|
65490
|
+
power: {
|
|
65474
65491
|
kind: "gauge",
|
|
65475
65492
|
unit: "W",
|
|
65476
65493
|
deadband: 1,
|
|
65477
65494
|
minIntervalMs: 3e4
|
|
65478
65495
|
},
|
|
65479
|
-
|
|
65496
|
+
energy: {
|
|
65480
65497
|
kind: "counter",
|
|
65481
65498
|
unit: "kWh",
|
|
65482
65499
|
deadband: .01,
|
|
65483
65500
|
minIntervalMs: 6e4
|
|
65484
65501
|
},
|
|
65485
|
-
|
|
65502
|
+
voltage: {
|
|
65486
65503
|
kind: "gauge",
|
|
65487
65504
|
unit: "V",
|
|
65488
65505
|
deadband: 1,
|
|
65489
65506
|
minIntervalMs: 3e4
|
|
65490
65507
|
},
|
|
65491
|
-
|
|
65508
|
+
current: {
|
|
65492
65509
|
kind: "gauge",
|
|
65493
65510
|
unit: "A",
|
|
65494
65511
|
deadband: .05,
|
|
65495
65512
|
minIntervalMs: 3e4
|
|
65496
65513
|
},
|
|
65497
|
-
|
|
65514
|
+
apparentPower: {
|
|
65498
65515
|
kind: "gauge",
|
|
65499
65516
|
unit: "VA",
|
|
65500
65517
|
deadband: 1,
|
|
@@ -65544,9 +65561,6 @@ var PresenceStatusSchema = object({
|
|
|
65544
65561
|
location: string().nullable(),
|
|
65545
65562
|
/** GPS coordinates when available. Null otherwise. */
|
|
65546
65563
|
gps: GpsLocationSchema.nullable(),
|
|
65547
|
-
/** Optional battery level of the tracking device (0..100). Null
|
|
65548
|
-
* when not reported. */
|
|
65549
|
-
batteryPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
65550
65564
|
/** Ms epoch when the slice was last updated. */
|
|
65551
65565
|
lastChangedAt: number()
|
|
65552
65566
|
});
|
|
@@ -65575,14 +65589,7 @@ var presenceCapability = {
|
|
|
65575
65589
|
* `scripts/check-runtime-state-durability.ts`.
|
|
65576
65590
|
*/
|
|
65577
65591
|
durability: "restored",
|
|
65578
|
-
|
|
65579
|
-
* History (D850): recorded series.
|
|
65580
|
-
*/
|
|
65581
|
-
history: { fields: { batteryPercent: {
|
|
65582
|
-
kind: "gauge",
|
|
65583
|
-
unit: "%",
|
|
65584
|
-
deadband: 1
|
|
65585
|
-
} } },
|
|
65592
|
+
history: "none",
|
|
65586
65593
|
/** Clock fields: written, but excluded from the compare that decides
|
|
65587
65594
|
* whether persisting is worth a SQLite commit. */
|
|
65588
65595
|
volatileStateFields: ["lastChangedAt"]
|
|
@@ -65597,7 +65604,7 @@ var presenceCapability = {
|
|
|
65597
65604
|
*/
|
|
65598
65605
|
var PressureSensorStatusSchema = object({
|
|
65599
65606
|
/** Current pressure in hPa. `null` when the sample was refused (D393). */
|
|
65600
|
-
|
|
65607
|
+
pressure: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
|
|
65601
65608
|
/** Ms epoch when the slice was last updated. */
|
|
65602
65609
|
lastFetchedAt: number()
|
|
65603
65610
|
});
|
|
@@ -65623,7 +65630,7 @@ var pressureSensorCapability = {
|
|
|
65623
65630
|
/**
|
|
65624
65631
|
* History (D850): recorded series.
|
|
65625
65632
|
*/
|
|
65626
|
-
history: { fields: {
|
|
65633
|
+
history: { fields: { pressure: {
|
|
65627
65634
|
kind: "gauge",
|
|
65628
65635
|
unit: "hPa",
|
|
65629
65636
|
deadband: .1
|
|
@@ -69322,7 +69329,7 @@ var tamperCapability = {
|
|
|
69322
69329
|
*/
|
|
69323
69330
|
var TemperatureSensorStatusSchema = object({
|
|
69324
69331
|
/** Current temperature in Celsius. `null` when the sample was refused (D393). */
|
|
69325
|
-
|
|
69332
|
+
temperature: number().nullable().meta(readingMeta("temperature", {
|
|
69326
69333
|
precision: 1,
|
|
69327
69334
|
label: "Temperature"
|
|
69328
69335
|
})),
|
|
@@ -69351,7 +69358,7 @@ var temperatureSensorCapability = {
|
|
|
69351
69358
|
/**
|
|
69352
69359
|
* History (D850): recorded series.
|
|
69353
69360
|
*/
|
|
69354
|
-
history: { fields: {
|
|
69361
|
+
history: { fields: { temperature: {
|
|
69355
69362
|
kind: "gauge",
|
|
69356
69363
|
unit: "°C",
|
|
69357
69364
|
deadband: .1
|
|
@@ -69648,7 +69655,7 @@ var VacuumControlStatusSchema = object({
|
|
|
69648
69655
|
/** Speed tokens the hardware accepts — drives the UI selector. */
|
|
69649
69656
|
availableFanSpeeds: array(string()),
|
|
69650
69657
|
/** 0..100 cleaning-completion percentage of the current task, or null. */
|
|
69651
|
-
|
|
69658
|
+
progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
69652
69659
|
/** Current error code (0 / null = no error). */
|
|
69653
69660
|
errorCode: number().nullable().meta(readingMeta("none")),
|
|
69654
69661
|
/** Human label for {@link errorCode}, or null when none / undecodable. */
|
|
@@ -71302,7 +71309,7 @@ var BaseDevice = class {
|
|
|
71302
71309
|
* `device-local-state.ts`. Drivers access via:
|
|
71303
71310
|
*
|
|
71304
71311
|
* `this.state.battery.sleeping = true` // patches the battery slice
|
|
71305
|
-
* `const pct = this.state.battery.
|
|
71312
|
+
* `const pct = this.state.battery.level` // reads the battery slice
|
|
71306
71313
|
* `this.state.deviceStatus.online = true` // mirrors `markOnline(true)`
|
|
71307
71314
|
*
|
|
71308
71315
|
* Adding a new cap with `runtimeState:` automatically extends this
|
|
@@ -71342,7 +71349,7 @@ var BaseDevice = class {
|
|
|
71342
71349
|
* shape; drivers don't redeclare it, they just write through.
|
|
71343
71350
|
*
|
|
71344
71351
|
* Read: `this.runtimeState.getCapState('battery')` →
|
|
71345
|
-
* `{
|
|
71352
|
+
* `{level, charging, sleeping, lastUpdated}` for any
|
|
71346
71353
|
* provider that registers `batteryCapability`.
|
|
71347
71354
|
* Write: `this.runtimeState.setCapState('battery', { … })`.
|
|
71348
71355
|
*
|
|
@@ -82545,7 +82552,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
82545
82552
|
label: t("Full brightness", "Luminosità massima"),
|
|
82546
82553
|
phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
|
|
82547
82554
|
icon: "sun",
|
|
82548
|
-
args: {
|
|
82555
|
+
args: { level: 100 }
|
|
82549
82556
|
},
|
|
82550
82557
|
{
|
|
82551
82558
|
id: "brightness.half",
|
|
@@ -82553,7 +82560,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
82553
82560
|
label: t("Half brightness", "Luminosità a metà"),
|
|
82554
82561
|
phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
|
|
82555
82562
|
icon: "sun-dim",
|
|
82556
|
-
args: {
|
|
82563
|
+
args: { level: 50 }
|
|
82557
82564
|
},
|
|
82558
82565
|
{
|
|
82559
82566
|
id: "brightness.off",
|
|
@@ -82561,16 +82568,16 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
82561
82568
|
label: t("Brightness off", "Luminosità a zero"),
|
|
82562
82569
|
phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
|
|
82563
82570
|
icon: "lightbulb-off",
|
|
82564
|
-
args: {
|
|
82571
|
+
args: { level: 0 }
|
|
82565
82572
|
},
|
|
82566
82573
|
{
|
|
82567
82574
|
id: "brightness.set",
|
|
82568
82575
|
method: "setBrightness",
|
|
82569
82576
|
label: t("Set brightness", "Imposta la luminosità"),
|
|
82570
|
-
phrase: t("Set the brightness of {device} to {
|
|
82577
|
+
phrase: t("Set the brightness of {device} to {level}", "Imposta la luminosità di {device} a {level}"),
|
|
82571
82578
|
icon: "sun-medium",
|
|
82572
82579
|
openArgs: [{
|
|
82573
|
-
key: "
|
|
82580
|
+
key: "level",
|
|
82574
82581
|
label: PERCENT,
|
|
82575
82582
|
offer: {
|
|
82576
82583
|
kind: "number",
|
|
@@ -82584,13 +82591,13 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
82584
82591
|
],
|
|
82585
82592
|
state: [{
|
|
82586
82593
|
kind: "numeric",
|
|
82587
|
-
field: "
|
|
82594
|
+
field: "level",
|
|
82588
82595
|
quantity: t("the brightness", "la luminosità"),
|
|
82589
82596
|
label: t("Brightness", "Luminosità"),
|
|
82590
82597
|
unit: "%",
|
|
82591
82598
|
icon: "sun"
|
|
82592
82599
|
}],
|
|
82593
|
-
events: { onBrightnessChanged: { notOperatorFacing: "the `
|
|
82600
|
+
events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
|
|
82594
82601
|
},
|
|
82595
82602
|
color: {
|
|
82596
82603
|
scope: "device",
|
|
@@ -82604,7 +82611,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
82604
82611
|
icon: "sun",
|
|
82605
82612
|
args: { color: {
|
|
82606
82613
|
mode: "mired",
|
|
82607
|
-
|
|
82614
|
+
colorTemperature: 370
|
|
82608
82615
|
} }
|
|
82609
82616
|
},
|
|
82610
82617
|
{
|
|
@@ -82615,7 +82622,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
82615
82622
|
icon: "snowflake",
|
|
82616
82623
|
args: { color: {
|
|
82617
82624
|
mode: "mired",
|
|
82618
|
-
|
|
82625
|
+
colorTemperature: 200
|
|
82619
82626
|
} }
|
|
82620
82627
|
},
|
|
82621
82628
|
{
|
|
@@ -83229,7 +83236,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
83229
83236
|
label: t("Fan off", "Ventilatore spento"),
|
|
83230
83237
|
phrase: t("Stop {device}", "Ferma {device}"),
|
|
83231
83238
|
icon: "power-off",
|
|
83232
|
-
args: {
|
|
83239
|
+
args: { speed: 0 }
|
|
83233
83240
|
},
|
|
83234
83241
|
{
|
|
83235
83242
|
id: "fan.full",
|
|
@@ -83237,16 +83244,16 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
83237
83244
|
label: t("Fan full", "Ventilatore al massimo"),
|
|
83238
83245
|
phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
|
|
83239
83246
|
icon: "fan",
|
|
83240
|
-
args: {
|
|
83247
|
+
args: { speed: 100 }
|
|
83241
83248
|
},
|
|
83242
83249
|
{
|
|
83243
83250
|
id: "fan.speed",
|
|
83244
83251
|
method: "setPercentage",
|
|
83245
83252
|
label: t("Set speed", "Imposta la velocità"),
|
|
83246
|
-
phrase: t("Set the speed of {device} to {
|
|
83253
|
+
phrase: t("Set the speed of {device} to {speed}", "Imposta la velocità di {device} al {speed}"),
|
|
83247
83254
|
icon: "fan",
|
|
83248
83255
|
openArgs: [{
|
|
83249
|
-
key: "
|
|
83256
|
+
key: "speed",
|
|
83250
83257
|
label: t("Speed", "Velocità"),
|
|
83251
83258
|
offer: {
|
|
83252
83259
|
kind: "number",
|
|
@@ -83308,7 +83315,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
83308
83315
|
],
|
|
83309
83316
|
state: [{
|
|
83310
83317
|
kind: "numeric",
|
|
83311
|
-
field: "
|
|
83318
|
+
field: "speed",
|
|
83312
83319
|
quantity: t("the speed", "la velocità"),
|
|
83313
83320
|
label: t("Speed", "Velocità"),
|
|
83314
83321
|
unit: "%",
|
|
@@ -84106,7 +84113,7 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
84106
84113
|
},
|
|
84107
84114
|
{
|
|
84108
84115
|
kind: "numeric",
|
|
84109
|
-
field: "
|
|
84116
|
+
field: "progress",
|
|
84110
84117
|
quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
|
|
84111
84118
|
label: t("Progress", "Avanzamento"),
|
|
84112
84119
|
unit: "%",
|
|
@@ -84464,10 +84471,10 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
84464
84471
|
id: "media.seek",
|
|
84465
84472
|
method: "seek",
|
|
84466
84473
|
label: t("Seek", "Vai al punto"),
|
|
84467
|
-
phrase: t("Move {device} to {
|
|
84474
|
+
phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
|
|
84468
84475
|
icon: "fast-forward",
|
|
84469
84476
|
openArgs: [{
|
|
84470
|
-
key: "
|
|
84477
|
+
key: "position",
|
|
84471
84478
|
label: t("Position", "Posizione"),
|
|
84472
84479
|
offer: {
|
|
84473
84480
|
kind: "number",
|
|
@@ -85516,7 +85523,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85516
85523
|
state: [
|
|
85517
85524
|
{
|
|
85518
85525
|
kind: "numeric",
|
|
85519
|
-
field: "
|
|
85526
|
+
field: "co2",
|
|
85520
85527
|
quantity: t("the CO₂", "la CO₂"),
|
|
85521
85528
|
label: t("CO₂", "CO₂"),
|
|
85522
85529
|
unit: "ppm",
|
|
@@ -85524,7 +85531,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85524
85531
|
},
|
|
85525
85532
|
{
|
|
85526
85533
|
kind: "numeric",
|
|
85527
|
-
field: "
|
|
85534
|
+
field: "voc",
|
|
85528
85535
|
quantity: t("the VOC level", "il livello di COV"),
|
|
85529
85536
|
label: t("VOC", "COV"),
|
|
85530
85537
|
unit: "ppb",
|
|
@@ -85560,7 +85567,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85560
85567
|
noun: t("Light level", "Luminosità ambiente"),
|
|
85561
85568
|
state: [{
|
|
85562
85569
|
kind: "numeric",
|
|
85563
|
-
field: "
|
|
85570
|
+
field: "illuminance",
|
|
85564
85571
|
quantity: t("the light level", "la luminosità"),
|
|
85565
85572
|
label: t("Illuminance", "Illuminamento"),
|
|
85566
85573
|
unit: "lx",
|
|
@@ -85763,7 +85770,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85763
85770
|
noun: t("Humidity", "Umidità"),
|
|
85764
85771
|
state: [{
|
|
85765
85772
|
kind: "numeric",
|
|
85766
|
-
field: "
|
|
85773
|
+
field: "humidity",
|
|
85767
85774
|
quantity: t("the humidity", "l’umidità"),
|
|
85768
85775
|
label: t("Humidity", "Umidità"),
|
|
85769
85776
|
unit: "%",
|
|
@@ -85811,7 +85818,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85811
85818
|
state: [
|
|
85812
85819
|
{
|
|
85813
85820
|
kind: "numeric",
|
|
85814
|
-
field: "
|
|
85821
|
+
field: "power",
|
|
85815
85822
|
quantity: t("the power draw", "il consumo"),
|
|
85816
85823
|
label: t("Power", "Potenza"),
|
|
85817
85824
|
unit: "W",
|
|
@@ -85819,7 +85826,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85819
85826
|
},
|
|
85820
85827
|
{
|
|
85821
85828
|
kind: "numeric",
|
|
85822
|
-
field: "
|
|
85829
|
+
field: "energy",
|
|
85823
85830
|
quantity: t("the energy used", "l’energia consumata"),
|
|
85824
85831
|
label: t("Energy", "Energia"),
|
|
85825
85832
|
unit: "kWh",
|
|
@@ -85827,7 +85834,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85827
85834
|
},
|
|
85828
85835
|
{
|
|
85829
85836
|
kind: "numeric",
|
|
85830
|
-
field: "
|
|
85837
|
+
field: "voltage",
|
|
85831
85838
|
quantity: t("the voltage", "la tensione"),
|
|
85832
85839
|
label: t("Voltage", "Tensione"),
|
|
85833
85840
|
unit: "V",
|
|
@@ -85835,7 +85842,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85835
85842
|
},
|
|
85836
85843
|
{
|
|
85837
85844
|
kind: "numeric",
|
|
85838
|
-
field: "
|
|
85845
|
+
field: "current",
|
|
85839
85846
|
quantity: t("the current", "la corrente"),
|
|
85840
85847
|
label: t("Current", "Corrente"),
|
|
85841
85848
|
unit: "A",
|
|
@@ -85852,13 +85859,6 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85852
85859
|
label: t("Where", "Posizione"),
|
|
85853
85860
|
phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
|
|
85854
85861
|
icon: "map-pin"
|
|
85855
|
-
}, {
|
|
85856
|
-
kind: "numeric",
|
|
85857
|
-
field: "batteryPercent",
|
|
85858
|
-
quantity: t("the phone battery", "la batteria del telefono"),
|
|
85859
|
-
label: t("Battery", "Batteria"),
|
|
85860
|
-
unit: "%",
|
|
85861
|
-
icon: "battery"
|
|
85862
85862
|
}]
|
|
85863
85863
|
},
|
|
85864
85864
|
"pressure-sensor": {
|
|
@@ -85866,7 +85866,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85866
85866
|
noun: t("Pressure", "Pressione"),
|
|
85867
85867
|
state: [{
|
|
85868
85868
|
kind: "numeric",
|
|
85869
|
-
field: "
|
|
85869
|
+
field: "pressure",
|
|
85870
85870
|
quantity: t("the pressure", "la pressione"),
|
|
85871
85871
|
label: t("Pressure", "Pressione"),
|
|
85872
85872
|
unit: "hPa",
|
|
@@ -85902,7 +85902,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85902
85902
|
noun: t("Temperature", "Temperatura"),
|
|
85903
85903
|
state: [{
|
|
85904
85904
|
kind: "numeric",
|
|
85905
|
-
field: "
|
|
85905
|
+
field: "temperature",
|
|
85906
85906
|
quantity: t("the temperature", "la temperatura"),
|
|
85907
85907
|
label: t("Temperature", "Temperatura"),
|
|
85908
85908
|
unit: "°C",
|
|
@@ -85973,7 +85973,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85973
85973
|
state: [
|
|
85974
85974
|
{
|
|
85975
85975
|
kind: "numeric",
|
|
85976
|
-
field: "
|
|
85976
|
+
field: "level",
|
|
85977
85977
|
quantity: t("the battery level", "il livello della batteria"),
|
|
85978
85978
|
label: t("Battery", "Batteria"),
|
|
85979
85979
|
unit: "%",
|
|
@@ -86015,7 +86015,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
86015
86015
|
icon: "battery-charging"
|
|
86016
86016
|
}
|
|
86017
86017
|
],
|
|
86018
|
-
events: { onStatusChanged: { notOperatorFacing: "the
|
|
86018
|
+
events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
|
|
86019
86019
|
extraEvents: [{
|
|
86020
86020
|
category: EventCategory.DeviceAwake,
|
|
86021
86021
|
label: t("Woke up", "Risvegliato"),
|
|
@@ -86033,7 +86033,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
86033
86033
|
noun: t("Network link", "Collegamento di rete"),
|
|
86034
86034
|
state: [{
|
|
86035
86035
|
kind: "numeric",
|
|
86036
|
-
field: "
|
|
86036
|
+
field: "signal",
|
|
86037
86037
|
quantity: t("the signal strength", "l’intensità del segnale"),
|
|
86038
86038
|
label: t("Signal", "Segnale"),
|
|
86039
86039
|
unit: "%",
|
|
@@ -134748,7 +134748,7 @@ var KNOWN_CAPS = new Set([
|
|
|
134748
134748
|
* {@link alexaAccounts}; each `getStatus` prefers the latest decoded live value
|
|
134749
134749
|
* (via `alexa-state-to-cap`) and falls back to the runtime/cold slice when a
|
|
134750
134750
|
* property hasn't been polled yet — e.g. PowerController.powerState 'ON' →
|
|
134751
|
-
* switch.on, BrightnessController.brightness 0..100 → brightness.
|
|
134751
|
+
* switch.on, BrightnessController.brightness 0..100 → brightness.level,
|
|
134752
134752
|
* ContactSensor.detectionState 'DETECTED' → contact.entryOpen.
|
|
134753
134753
|
*
|
|
134754
134754
|
* TODO(caps): 'climate-control' (ThermostatController), 'control'
|
|
@@ -134832,7 +134832,7 @@ var AlexaDevice = class extends BaseDevice {
|
|
|
134832
134832
|
}
|
|
134833
134833
|
registerBrightness() {
|
|
134834
134834
|
const COLD = {
|
|
134835
|
-
|
|
134835
|
+
level: 0,
|
|
134836
134836
|
lastChangedAt: 0
|
|
134837
134837
|
};
|
|
134838
134838
|
this.ctx.registerNativeCap(brightnessCapability, {
|
|
@@ -134841,14 +134841,14 @@ var AlexaDevice = class extends BaseDevice {
|
|
|
134841
134841
|
const live = decodePercentage(this.liveState("Alexa.BrightnessController", "brightness"));
|
|
134842
134842
|
return live === null ? cached : {
|
|
134843
134843
|
...cached,
|
|
134844
|
-
|
|
134844
|
+
level: live
|
|
134845
134845
|
};
|
|
134846
134846
|
},
|
|
134847
|
-
setBrightness: async ({ percentage }) => {
|
|
134847
|
+
setBrightness: async ({ level: percentage }) => {
|
|
134848
134848
|
const brightness = Math.round(Math.max(0, Math.min(100, percentage)));
|
|
134849
134849
|
await this.command("Alexa.BrightnessController", "SetBrightness", { brightness });
|
|
134850
134850
|
this.runtimeState.setCapState("brightness", {
|
|
134851
|
-
percentage,
|
|
134851
|
+
level: percentage,
|
|
134852
134852
|
lastChangedAt: Date.now()
|
|
134853
134853
|
});
|
|
134854
134854
|
}
|
|
@@ -135002,7 +135002,7 @@ var AlexaDevice = class extends BaseDevice {
|
|
|
135002
135002
|
}
|
|
135003
135003
|
registerTemperatureSensor() {
|
|
135004
135004
|
const COLD = {
|
|
135005
|
-
|
|
135005
|
+
temperature: 0,
|
|
135006
135006
|
lastFetchedAt: 0
|
|
135007
135007
|
};
|
|
135008
135008
|
this.ctx.registerNativeCap(temperatureSensorCapability, { getStatus: async () => {
|
|
@@ -135010,14 +135010,14 @@ var AlexaDevice = class extends BaseDevice {
|
|
|
135010
135010
|
const live = decodeTemperatureCelsius(this.liveState("Alexa.TemperatureSensor", "temperature"));
|
|
135011
135011
|
return live === null ? cached : {
|
|
135012
135012
|
...cached,
|
|
135013
|
-
|
|
135013
|
+
temperature: live
|
|
135014
135014
|
};
|
|
135015
135015
|
} });
|
|
135016
135016
|
this.runtimeState.setCapState("temperature-sensor", COLD);
|
|
135017
135017
|
}
|
|
135018
135018
|
registerHumiditySensor() {
|
|
135019
135019
|
const COLD = {
|
|
135020
|
-
|
|
135020
|
+
humidity: 0,
|
|
135021
135021
|
lastFetchedAt: 0
|
|
135022
135022
|
};
|
|
135023
135023
|
this.ctx.registerNativeCap(humiditySensorCapability, { getStatus: async () => {
|
|
@@ -135025,7 +135025,7 @@ var AlexaDevice = class extends BaseDevice {
|
|
|
135025
135025
|
const live = decodeHumidityPercent(this.liveState("Alexa.HumiditySensor", "humidity"));
|
|
135026
135026
|
return live === null ? cached : {
|
|
135027
135027
|
...cached,
|
|
135028
|
-
|
|
135028
|
+
humidity: live
|
|
135029
135029
|
};
|
|
135030
135030
|
} });
|
|
135031
135031
|
this.runtimeState.setCapState("humidity-sensor", COLD);
|