@camstack/addon-import-alexa 0.2.161 → 0.2.163
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/_stub.js +43 -43
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_import_alexa_page-Bnkf_Vmt.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_import_alexa_page-CwP9H68T.mjs} +3 -3
- package/dist/addon.js +191 -170
- package/dist/addon.mjs +191 -170
- package/dist/{hostInit-B-oYnui8.mjs → hostInit-Dy4CxmqQ.mjs} +2 -2
- package/dist/remoteEntry.js +1 -1
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_import_alexa_page__remoteEntry_js-vE1TwKvP.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_import_alexa_page__remoteEntry_js-DarhMhK_.mjs} +1 -1
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -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
|
*
|
|
@@ -19173,7 +19169,7 @@ var CompositionEventPlanSchema = object({
|
|
|
19173
19169
|
stateField: string(),
|
|
19174
19170
|
fieldKey: string()
|
|
19175
19171
|
});
|
|
19176
|
-
/** 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`. */
|
|
19177
19173
|
var CompositionProblemSchema = object({
|
|
19178
19174
|
code: _enum([
|
|
19179
19175
|
"reserved-variant",
|
|
@@ -19492,7 +19488,7 @@ var GROUP_TEMPLATES = [
|
|
|
19492
19488
|
summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
|
|
19493
19489
|
role: DeviceRole.TemperatureSensor,
|
|
19494
19490
|
outputCap: "temperature-sensor",
|
|
19495
|
-
outputField: "
|
|
19491
|
+
outputField: "temperature",
|
|
19496
19492
|
quantity: "temperature",
|
|
19497
19493
|
defaultAggregate: "mean",
|
|
19498
19494
|
empty: "null",
|
|
@@ -19503,7 +19499,7 @@ var GROUP_TEMPLATES = [
|
|
|
19503
19499
|
summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
|
|
19504
19500
|
role: DeviceRole.HumiditySensor,
|
|
19505
19501
|
outputCap: "humidity-sensor",
|
|
19506
|
-
outputField: "
|
|
19502
|
+
outputField: "humidity",
|
|
19507
19503
|
quantity: "humidity",
|
|
19508
19504
|
defaultAggregate: "mean",
|
|
19509
19505
|
empty: "null",
|
|
@@ -19514,7 +19510,7 @@ var GROUP_TEMPLATES = [
|
|
|
19514
19510
|
summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
|
|
19515
19511
|
role: DeviceRole.PressureSensor,
|
|
19516
19512
|
outputCap: "pressure-sensor",
|
|
19517
|
-
outputField: "
|
|
19513
|
+
outputField: "pressure",
|
|
19518
19514
|
quantity: "pressure",
|
|
19519
19515
|
defaultAggregate: "mean",
|
|
19520
19516
|
empty: "null",
|
|
@@ -19525,7 +19521,7 @@ var GROUP_TEMPLATES = [
|
|
|
19525
19521
|
summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
|
|
19526
19522
|
role: DeviceRole.AmbientLightSensor,
|
|
19527
19523
|
outputCap: "ambient-light-sensor",
|
|
19528
|
-
outputField: "
|
|
19524
|
+
outputField: "illuminance",
|
|
19529
19525
|
quantity: "illuminance",
|
|
19530
19526
|
defaultAggregate: "mean",
|
|
19531
19527
|
empty: "null",
|
|
@@ -19536,7 +19532,7 @@ var GROUP_TEMPLATES = [
|
|
|
19536
19532
|
summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
|
|
19537
19533
|
role: DeviceRole.PowerSensor,
|
|
19538
19534
|
outputCap: "power-meter",
|
|
19539
|
-
outputField: "
|
|
19535
|
+
outputField: "power",
|
|
19540
19536
|
quantity: "power",
|
|
19541
19537
|
defaultAggregate: "sum",
|
|
19542
19538
|
empty: "omit",
|
|
@@ -19547,7 +19543,7 @@ var GROUP_TEMPLATES = [
|
|
|
19547
19543
|
summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
|
|
19548
19544
|
role: DeviceRole.EnergySensor,
|
|
19549
19545
|
outputCap: "power-meter",
|
|
19550
|
-
outputField: "
|
|
19546
|
+
outputField: "energy",
|
|
19551
19547
|
quantity: "energy",
|
|
19552
19548
|
defaultAggregate: "sum",
|
|
19553
19549
|
empty: "omit",
|
|
@@ -19558,7 +19554,7 @@ var GROUP_TEMPLATES = [
|
|
|
19558
19554
|
summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
|
|
19559
19555
|
role: DeviceRole.BatterySensor,
|
|
19560
19556
|
outputCap: "battery",
|
|
19561
|
-
outputField: "
|
|
19557
|
+
outputField: "level",
|
|
19562
19558
|
quantity: "percentage",
|
|
19563
19559
|
defaultAggregate: "mean",
|
|
19564
19560
|
empty: "null",
|
|
@@ -58037,9 +58033,9 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
|
|
|
58037
58033
|
*/
|
|
58038
58034
|
var AirQualitySensorStatusSchema = object({
|
|
58039
58035
|
/** Carbon dioxide concentration in ppm. */
|
|
58040
|
-
|
|
58036
|
+
co2: number().min(0).optional().meta(readingMeta("concentration-volume")),
|
|
58041
58037
|
/** Total volatile organic compounds in ppb. */
|
|
58042
|
-
|
|
58038
|
+
voc: number().min(0).optional().meta(readingMeta("concentration-ppb")),
|
|
58043
58039
|
/** Particulate matter ≤ 2.5 μm in µg/m³. */
|
|
58044
58040
|
pm25: number().min(0).optional().meta(readingMeta("concentration-mass")),
|
|
58045
58041
|
/** Particulate matter ≤ 10 μm in µg/m³. */
|
|
@@ -58072,12 +58068,12 @@ var airQualitySensorCapability = {
|
|
|
58072
58068
|
* History (D850): recorded series.
|
|
58073
58069
|
*/
|
|
58074
58070
|
history: { fields: {
|
|
58075
|
-
|
|
58071
|
+
co2: {
|
|
58076
58072
|
kind: "gauge",
|
|
58077
58073
|
unit: "ppm",
|
|
58078
58074
|
deadband: 5
|
|
58079
58075
|
},
|
|
58080
|
-
|
|
58076
|
+
voc: {
|
|
58081
58077
|
kind: "gauge",
|
|
58082
58078
|
unit: "ppb",
|
|
58083
58079
|
deadband: 5
|
|
@@ -58108,7 +58104,7 @@ var airQualitySensorCapability = {
|
|
|
58108
58104
|
*/
|
|
58109
58105
|
var AmbientLightSensorStatusSchema = object({
|
|
58110
58106
|
/** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
|
|
58111
|
-
|
|
58107
|
+
illuminance: number().min(0).nullable().meta(readingMeta("illuminance", {
|
|
58112
58108
|
precision: 0,
|
|
58113
58109
|
label: "Illuminance"
|
|
58114
58110
|
})),
|
|
@@ -58137,7 +58133,7 @@ var ambientLightSensorCapability = {
|
|
|
58137
58133
|
/**
|
|
58138
58134
|
* History (D850): recorded series. Wide range, so a RELATIVE deadband (10 %).
|
|
58139
58135
|
*/
|
|
58140
|
-
history: { fields: {
|
|
58136
|
+
history: { fields: { illuminance: {
|
|
58141
58137
|
kind: "gauge",
|
|
58142
58138
|
unit: "lx",
|
|
58143
58139
|
deadbandPct: 10,
|
|
@@ -58450,7 +58446,7 @@ var BatteryStatusSchema = object({
|
|
|
58450
58446
|
* Consumers must SKIP a null rather than coerce it — `battery-band` already
|
|
58451
58447
|
* declines to band a non-finite reading, which is the correct shape.
|
|
58452
58448
|
*/
|
|
58453
|
-
|
|
58449
|
+
level: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
|
|
58454
58450
|
/**
|
|
58455
58451
|
* Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
|
|
58456
58452
|
* Reolink-specific for the Solar Panel 2 accessory (will become
|
|
@@ -58460,7 +58456,7 @@ var BatteryStatusSchema = object({
|
|
|
58460
58456
|
* `'unknown'` is the absence of an answer: the provider has not read the
|
|
58461
58457
|
* power fields yet, or the firmware reported neither. Before it existed,
|
|
58462
58458
|
* two unreadable fields produced `'none'`, and a camera nobody had reached
|
|
58463
|
-
* was drawn "on battery alone" — the same D315 defect `
|
|
58459
|
+
* was drawn "on battery alone" — the same D315 defect `level` closed
|
|
58464
58460
|
* by going nullable. Consumers SKIP it (no charger state published, no
|
|
58465
58461
|
* glyph, no HomeKit ChargingState) rather than coerce it either way.
|
|
58466
58462
|
*/
|
|
@@ -58484,7 +58480,7 @@ var BatteryStatusSchema = object({
|
|
|
58484
58480
|
* that only report charge. A second reading on this cap, not a second
|
|
58485
58481
|
* `numeric-sensor` on the same device.
|
|
58486
58482
|
*/
|
|
58487
|
-
|
|
58483
|
+
voltage: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
|
|
58488
58484
|
/**
|
|
58489
58485
|
* Ms epoch of the last time the device PROVED it was reachable — a
|
|
58490
58486
|
* completed firmware round-trip, an observed wake, or an inbound push
|
|
@@ -58518,7 +58514,7 @@ var BatteryStatusSchema = object({
|
|
|
58518
58514
|
/**
|
|
58519
58515
|
* True when the source is a BINARY low-battery indicator (HA
|
|
58520
58516
|
* `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
|
|
58521
|
-
* charge level — `
|
|
58517
|
+
* charge level — `level` is then a coarse stand-in (100 = normal,
|
|
58522
58518
|
* sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
|
|
58523
58519
|
* misleading exact percentage. Absent/false → genuine 0–100 % reading.
|
|
58524
58520
|
*/
|
|
@@ -58538,15 +58534,15 @@ var BATTERY_DEVICE_TYPES = [
|
|
|
58538
58534
|
var batteryCustomize = {
|
|
58539
58535
|
version: 1,
|
|
58540
58536
|
targets: [{
|
|
58541
|
-
id: "
|
|
58537
|
+
id: "level",
|
|
58542
58538
|
cardinality: "scalar",
|
|
58543
58539
|
vocabulary: {
|
|
58544
58540
|
cap: "battery",
|
|
58545
|
-
stateField: "
|
|
58541
|
+
stateField: "level"
|
|
58546
58542
|
},
|
|
58547
58543
|
deviceTypes: BATTERY_DEVICE_TYPES,
|
|
58548
58544
|
apply: "add",
|
|
58549
|
-
path: "
|
|
58545
|
+
path: "level",
|
|
58550
58546
|
sources: [{
|
|
58551
58547
|
kind: "field",
|
|
58552
58548
|
valueKinds: ["number", "string"],
|
|
@@ -58640,7 +58636,7 @@ onStatusChanged: { data: object({
|
|
|
58640
58636
|
schema: BatteryStatusSchema,
|
|
58641
58637
|
kind: "push",
|
|
58642
58638
|
empty: {
|
|
58643
|
-
|
|
58639
|
+
level: null,
|
|
58644
58640
|
charging: "unknown",
|
|
58645
58641
|
sleeping: false,
|
|
58646
58642
|
lastUpdated: 0
|
|
@@ -58667,11 +58663,11 @@ onStatusChanged: { data: object({
|
|
|
58667
58663
|
* History (D850): recorded series. The generic capture replaces the `battery` series of `pipeline-analytics:stats-5m`.
|
|
58668
58664
|
*/
|
|
58669
58665
|
history: { fields: {
|
|
58670
|
-
|
|
58666
|
+
level: {
|
|
58671
58667
|
kind: "gauge",
|
|
58672
58668
|
unit: "%"
|
|
58673
58669
|
},
|
|
58674
|
-
|
|
58670
|
+
voltage: {
|
|
58675
58671
|
kind: "gauge",
|
|
58676
58672
|
unit: "V"
|
|
58677
58673
|
}
|
|
@@ -58731,14 +58727,14 @@ var binaryCapability = {
|
|
|
58731
58727
|
* controls to this single-method surface.
|
|
58732
58728
|
*
|
|
58733
58729
|
* The cap is intentionally minimal: a single `setBrightness({deviceId,
|
|
58734
|
-
*
|
|
58730
|
+
* level})` mutation plus the auto-injected `getStatus`. Drivers
|
|
58735
58731
|
* that expose richer controls (color temperature, scenes, schedules)
|
|
58736
58732
|
* should surface those via the device's `getSettingsUISchema()`
|
|
58737
58733
|
* instead of bloating this cap.
|
|
58738
58734
|
*/
|
|
58739
58735
|
var BrightnessStatusSchema = object({
|
|
58740
58736
|
/** Current level as 0..100 inclusive. Firmware-reported. */
|
|
58741
|
-
|
|
58737
|
+
level: number().min(0).max(100).meta(readingMeta("percentage")),
|
|
58742
58738
|
/** Ms epoch of the last operator-driven change. Useful for UI freshness. */
|
|
58743
58739
|
lastChangedAt: number()
|
|
58744
58740
|
});
|
|
@@ -58750,7 +58746,7 @@ var brightnessCapability = {
|
|
|
58750
58746
|
deviceTypes: [DeviceType.Light],
|
|
58751
58747
|
methods: { setBrightness: method(object({
|
|
58752
58748
|
deviceId: number().int().nonnegative(),
|
|
58753
|
-
|
|
58749
|
+
level: number().min(0).max(100)
|
|
58754
58750
|
}), _void(), {
|
|
58755
58751
|
kind: "mutation",
|
|
58756
58752
|
auth: "protected"
|
|
@@ -58763,7 +58759,7 @@ var brightnessCapability = {
|
|
|
58763
58759
|
*/
|
|
58764
58760
|
onBrightnessChanged: { data: object({
|
|
58765
58761
|
deviceId: number(),
|
|
58766
|
-
|
|
58762
|
+
level: number().min(0).max(100),
|
|
58767
58763
|
lastChangedAt: number()
|
|
58768
58764
|
}) } },
|
|
58769
58765
|
status: {
|
|
@@ -58786,7 +58782,7 @@ onBrightnessChanged: { data: object({
|
|
|
58786
58782
|
/**
|
|
58787
58783
|
* History (D850): recorded series. Actuator tier: level keeps every change.
|
|
58788
58784
|
*/
|
|
58789
|
-
history: { fields: {
|
|
58785
|
+
history: { fields: { level: {
|
|
58790
58786
|
kind: "gauge",
|
|
58791
58787
|
unit: "%",
|
|
58792
58788
|
minIntervalMs: 0
|
|
@@ -59400,11 +59396,11 @@ var ColorInputSchema = discriminatedUnion("mode", [
|
|
|
59400
59396
|
}),
|
|
59401
59397
|
object({
|
|
59402
59398
|
mode: literal("mired"),
|
|
59403
|
-
|
|
59399
|
+
colorTemperature: number().int().min(50).max(1e3)
|
|
59404
59400
|
})
|
|
59405
59401
|
]);
|
|
59406
59402
|
var ColorStatusSchema = object({
|
|
59407
|
-
/** Active color mode — which of `rgb` / `hsv` / `
|
|
59403
|
+
/** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
|
|
59408
59404
|
* the bulb's current state. */
|
|
59409
59405
|
mode: _enum([
|
|
59410
59406
|
"rgb",
|
|
@@ -59416,7 +59412,7 @@ var ColorStatusSchema = object({
|
|
|
59416
59412
|
/** Populated when `mode === 'hsv'`. */
|
|
59417
59413
|
hsv: HsvTripletSchema.optional(),
|
|
59418
59414
|
/** Populated when `mode === 'mired'`. */
|
|
59419
|
-
|
|
59415
|
+
colorTemperature: number().int().optional().meta(readingMeta("colour-temperature")),
|
|
59420
59416
|
/** Ms epoch of the last operator-driven change. */
|
|
59421
59417
|
lastChangedAt: number()
|
|
59422
59418
|
});
|
|
@@ -59448,7 +59444,7 @@ onColorChanged: { data: object({
|
|
|
59448
59444
|
]),
|
|
59449
59445
|
rgb: RgbTripletSchema.optional(),
|
|
59450
59446
|
hsv: HsvTripletSchema.optional(),
|
|
59451
|
-
|
|
59447
|
+
colorTemperature: number().int().optional(),
|
|
59452
59448
|
lastChangedAt: number()
|
|
59453
59449
|
}) } },
|
|
59454
59450
|
status: {
|
|
@@ -60325,11 +60321,11 @@ var DishwasherStatusSchema = object({
|
|
|
60325
60321
|
/** Feature keys of the programs the appliance currently offers — drives the UI selector. */
|
|
60326
60322
|
availablePrograms: array(string()),
|
|
60327
60323
|
/** Seconds remaining on the active cycle, or null when not running / not known. */
|
|
60328
|
-
|
|
60324
|
+
remaining: number().int().nonnegative().nullable().meta(readingMeta("duration")),
|
|
60329
60325
|
/** Seconds the delayed start is set to (time until the cycle starts), or null. */
|
|
60330
|
-
|
|
60326
|
+
delayedStart: number().int().nonnegative().nullable().meta(readingMeta("duration")),
|
|
60331
60327
|
/** Cycle completion 0..100, or null when not applicable. */
|
|
60332
|
-
|
|
60328
|
+
progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
60333
60329
|
/** True when the door is reported open; null when the door state is not known. */
|
|
60334
60330
|
doorOpen: boolean().nullable(),
|
|
60335
60331
|
/** True when the door is latched (locked) during a cycle; null when not reported. */
|
|
@@ -60548,14 +60544,14 @@ var dishwasherCapability = {
|
|
|
60548
60544
|
runtimeState: DishwasherStatusSchema,
|
|
60549
60545
|
durability: "session",
|
|
60550
60546
|
history: { fields: {
|
|
60551
|
-
|
|
60547
|
+
progress: {
|
|
60552
60548
|
kind: "gauge",
|
|
60553
60549
|
unit: "%",
|
|
60554
60550
|
deadband: 2
|
|
60555
60551
|
},
|
|
60556
60552
|
state: { kind: "enum" },
|
|
60557
60553
|
operationState: { kind: "enum" },
|
|
60558
|
-
|
|
60554
|
+
remaining: {
|
|
60559
60555
|
kind: "gauge",
|
|
60560
60556
|
unit: "s",
|
|
60561
60557
|
minIntervalMs: 6e4
|
|
@@ -61146,7 +61142,7 @@ var FanDirectionSchema = _enum(["forward", "reverse"]);
|
|
|
61146
61142
|
var FanControlStatusSchema = object({
|
|
61147
61143
|
/** Active speed as 0..100 inclusive. Null when the device has no
|
|
61148
61144
|
* speed surface (single-speed fan). */
|
|
61149
|
-
|
|
61145
|
+
speed: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
61150
61146
|
/** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
|
|
61151
61147
|
* a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
|
|
61152
61148
|
percentageStep: number().positive().optional().meta(readingMeta("percentage")),
|
|
@@ -61173,7 +61169,7 @@ var fanControlCapability = {
|
|
|
61173
61169
|
methods: {
|
|
61174
61170
|
setPercentage: method(object({
|
|
61175
61171
|
deviceId: number().int().nonnegative(),
|
|
61176
|
-
|
|
61172
|
+
speed: number().min(0).max(100)
|
|
61177
61173
|
}), _void(), {
|
|
61178
61174
|
kind: "mutation",
|
|
61179
61175
|
auth: "protected"
|
|
@@ -61206,7 +61202,7 @@ var fanControlCapability = {
|
|
|
61206
61202
|
},
|
|
61207
61203
|
/**
|
|
61208
61204
|
* Runtime-state slice — mirrored by the kernel. UI fan speed
|
|
61209
|
-
* sliders read `
|
|
61205
|
+
* sliders read `speed` for live updates.
|
|
61210
61206
|
*/
|
|
61211
61207
|
runtimeState: FanControlStatusSchema,
|
|
61212
61208
|
/**
|
|
@@ -61220,7 +61216,7 @@ var fanControlCapability = {
|
|
|
61220
61216
|
* History (D850): recorded series. Actuator tier: speed keeps every change.
|
|
61221
61217
|
*/
|
|
61222
61218
|
history: { fields: {
|
|
61223
|
-
|
|
61219
|
+
speed: {
|
|
61224
61220
|
kind: "gauge",
|
|
61225
61221
|
unit: "%",
|
|
61226
61222
|
minIntervalMs: 0
|
|
@@ -61665,7 +61661,7 @@ var humidifierCapability = {
|
|
|
61665
61661
|
*/
|
|
61666
61662
|
var HumiditySensorStatusSchema = object({
|
|
61667
61663
|
/** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
|
|
61668
|
-
|
|
61664
|
+
humidity: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
|
|
61669
61665
|
precision: 0,
|
|
61670
61666
|
label: "Humidity"
|
|
61671
61667
|
})),
|
|
@@ -61694,7 +61690,7 @@ var humiditySensorCapability = {
|
|
|
61694
61690
|
/**
|
|
61695
61691
|
* History (D850): recorded series.
|
|
61696
61692
|
*/
|
|
61697
|
-
history: { fields: {
|
|
61693
|
+
history: { fields: { humidity: {
|
|
61698
61694
|
kind: "gauge",
|
|
61699
61695
|
unit: "%",
|
|
61700
61696
|
deadband: .5
|
|
@@ -62334,7 +62330,7 @@ var LawnMowerControlStatusSchema = object({
|
|
|
62334
62330
|
batteryLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
62335
62331
|
/** 0..100 mowing-completion percentage of the current task, or null when no
|
|
62336
62332
|
* task is active / progress is unavailable. */
|
|
62337
|
-
|
|
62333
|
+
progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
62338
62334
|
/** Current device/event code (dynamic — mostly status, sometimes an error),
|
|
62339
62335
|
* or null when unknown. */
|
|
62340
62336
|
currentCode: number().nullable().meta(readingMeta("none")),
|
|
@@ -62834,7 +62830,7 @@ var lockControlCapability = {
|
|
|
62834
62830
|
volatileStateFields: ["lastChangedAt"]
|
|
62835
62831
|
};
|
|
62836
62832
|
/**
|
|
62837
|
-
* A monotonic total between resets (D944). Energy uses `power-meter.
|
|
62833
|
+
* A monotonic total between resets (D944). Energy uses `power-meter.energy`
|
|
62838
62834
|
* so dashboards keep one series; every other instantaneous reading lands here.
|
|
62839
62835
|
* `value` is the time integral in the source quantity's accumulated base
|
|
62840
62836
|
* (base-unit seconds, or kWh on the power meter). `null` is a gap, never zero.
|
|
@@ -62928,10 +62924,10 @@ var MediaPlayerStatusSchema = object({
|
|
|
62928
62924
|
currentMedia: MediaInfoSchema.nullable(),
|
|
62929
62925
|
/** Current playback position in ms. Null when not seekable or
|
|
62930
62926
|
* nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
|
|
62931
|
-
|
|
62927
|
+
position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
|
|
62932
62928
|
/** Total duration of the current media in ms. Null when unknown
|
|
62933
62929
|
* (live stream) or nothing is playing. */
|
|
62934
|
-
|
|
62930
|
+
duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
|
|
62935
62931
|
/** Shuffle toggle. Null when no shuffle surface.
|
|
62936
62932
|
* Pair with `DeviceFeature.MediaPlayerShuffle`. */
|
|
62937
62933
|
shuffle: boolean().nullable(),
|
|
@@ -62970,7 +62966,7 @@ var mediaPlayerCapability = {
|
|
|
62970
62966
|
}),
|
|
62971
62967
|
seek: method(object({
|
|
62972
62968
|
deviceId: number().int().nonnegative(),
|
|
62973
|
-
|
|
62969
|
+
position: number().int().nonnegative()
|
|
62974
62970
|
}), _void(), {
|
|
62975
62971
|
kind: "mutation",
|
|
62976
62972
|
auth: "protected"
|
|
@@ -63042,7 +63038,7 @@ var mediaPlayerCapability = {
|
|
|
63042
63038
|
/**
|
|
63043
63039
|
* History (D850): volume (a level an operator or an automation sets; the
|
|
63044
63040
|
* default 10 s floor folds a slider drag into its end value) and mute.
|
|
63045
|
-
* `
|
|
63041
|
+
* `position` is not recorded: it moves continuously while playing.
|
|
63046
63042
|
*/
|
|
63047
63043
|
history: { fields: {
|
|
63048
63044
|
volumeLevel: {
|
|
@@ -64004,9 +64000,9 @@ var NetworkLinkStatusSchema = object({
|
|
|
64004
64000
|
* one whose reading has not landed must not be drawn at 0 %. Consumers
|
|
64005
64001
|
* SKIP a null rather than coerce it.
|
|
64006
64002
|
*/
|
|
64007
|
-
|
|
64003
|
+
signal: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
64008
64004
|
/** Raw received signal strength in dBm, when the firmware reports one. */
|
|
64009
|
-
|
|
64005
|
+
rssi: number().optional().meta(readingMeta("signal-level")),
|
|
64010
64006
|
/** Network name of a wireless link, when the firmware reports it. */
|
|
64011
64007
|
ssid: string().optional(),
|
|
64012
64008
|
/** Ms epoch of the last observation. Lets consumers reason about freshness. */
|
|
@@ -64042,7 +64038,7 @@ onStatusChanged: { data: object({
|
|
|
64042
64038
|
kind: "push",
|
|
64043
64039
|
empty: {
|
|
64044
64040
|
type: "unknown",
|
|
64045
|
-
|
|
64041
|
+
signal: null,
|
|
64046
64042
|
lastUpdated: 0
|
|
64047
64043
|
}
|
|
64048
64044
|
},
|
|
@@ -64065,13 +64061,13 @@ onStatusChanged: { data: object({
|
|
|
64065
64061
|
* History (D850): recorded series.
|
|
64066
64062
|
*/
|
|
64067
64063
|
history: { fields: {
|
|
64068
|
-
|
|
64064
|
+
signal: {
|
|
64069
64065
|
kind: "gauge",
|
|
64070
64066
|
unit: "%",
|
|
64071
64067
|
deadband: 3,
|
|
64072
64068
|
minIntervalMs: 6e4
|
|
64073
64069
|
},
|
|
64074
|
-
|
|
64070
|
+
rssi: {
|
|
64075
64071
|
kind: "gauge",
|
|
64076
64072
|
unit: "dBm",
|
|
64077
64073
|
deadband: 2,
|
|
@@ -65391,16 +65387,16 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
|
|
|
65391
65387
|
* in real-world devices.
|
|
65392
65388
|
*/
|
|
65393
65389
|
var PowerMeterStatusSchema = object({
|
|
65394
|
-
/** Instantaneous power draw
|
|
65395
|
-
|
|
65390
|
+
/** Instantaneous power draw (watts). */
|
|
65391
|
+
power: number().optional().meta(readingMeta("power", { label: "Power" })),
|
|
65396
65392
|
/** Cumulative energy in kilowatt-hours since the meter was reset. */
|
|
65397
|
-
|
|
65398
|
-
/** Voltage
|
|
65399
|
-
|
|
65393
|
+
energy: number().optional().meta(readingMeta("energy", { label: "Energy" })),
|
|
65394
|
+
/** Voltage (volts). */
|
|
65395
|
+
voltage: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
|
|
65400
65396
|
/** Current in amperes. */
|
|
65401
|
-
|
|
65397
|
+
current: number().optional().meta(readingMeta("current", { label: "Current" })),
|
|
65402
65398
|
/** Apparent power in volt-amperes. */
|
|
65403
|
-
|
|
65399
|
+
apparentPower: number().optional().meta(readingMeta("apparent-power")),
|
|
65404
65400
|
/** Power factor (0..1) if reported. */
|
|
65405
65401
|
powerFactor: number().min(0).max(1).optional().meta(readingMeta("ratio")),
|
|
65406
65402
|
/** Ms epoch when the slice was last updated. */
|
|
@@ -65458,14 +65454,14 @@ function powerTarget(id, unit) {
|
|
|
65458
65454
|
advancedExpression: true
|
|
65459
65455
|
};
|
|
65460
65456
|
}
|
|
65461
|
-
/** "Power and energy" extension:
|
|
65457
|
+
/** "Power and energy" extension: power, energy, voltage and current from other devices (D951). */
|
|
65462
65458
|
var powerMeterCustomize = {
|
|
65463
65459
|
version: 1,
|
|
65464
65460
|
targets: [
|
|
65465
|
-
powerTarget("
|
|
65466
|
-
powerTarget("
|
|
65467
|
-
powerTarget("
|
|
65468
|
-
powerTarget("
|
|
65461
|
+
powerTarget("power", "W"),
|
|
65462
|
+
powerTarget("energy", "kWh"),
|
|
65463
|
+
powerTarget("voltage", "V"),
|
|
65464
|
+
powerTarget("current", "A")
|
|
65469
65465
|
]
|
|
65470
65466
|
};
|
|
65471
65467
|
var powerMeterCapability = {
|
|
@@ -65481,41 +65477,41 @@ var powerMeterCapability = {
|
|
|
65481
65477
|
},
|
|
65482
65478
|
runtimeState: PowerMeterStatusSchema,
|
|
65483
65479
|
/**
|
|
65484
|
-
* 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.
|
|
65485
65481
|
*
|
|
65486
65482
|
* See `RuntimeStateDurability`. Enforced by
|
|
65487
65483
|
* `scripts/check-runtime-state-durability.ts`.
|
|
65488
65484
|
*/
|
|
65489
65485
|
durability: "restored",
|
|
65490
65486
|
/**
|
|
65491
|
-
* 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).
|
|
65492
65488
|
*/
|
|
65493
65489
|
history: { fields: {
|
|
65494
|
-
|
|
65490
|
+
power: {
|
|
65495
65491
|
kind: "gauge",
|
|
65496
65492
|
unit: "W",
|
|
65497
65493
|
deadband: 1,
|
|
65498
65494
|
minIntervalMs: 3e4
|
|
65499
65495
|
},
|
|
65500
|
-
|
|
65496
|
+
energy: {
|
|
65501
65497
|
kind: "counter",
|
|
65502
65498
|
unit: "kWh",
|
|
65503
65499
|
deadband: .01,
|
|
65504
65500
|
minIntervalMs: 6e4
|
|
65505
65501
|
},
|
|
65506
|
-
|
|
65502
|
+
voltage: {
|
|
65507
65503
|
kind: "gauge",
|
|
65508
65504
|
unit: "V",
|
|
65509
65505
|
deadband: 1,
|
|
65510
65506
|
minIntervalMs: 3e4
|
|
65511
65507
|
},
|
|
65512
|
-
|
|
65508
|
+
current: {
|
|
65513
65509
|
kind: "gauge",
|
|
65514
65510
|
unit: "A",
|
|
65515
65511
|
deadband: .05,
|
|
65516
65512
|
minIntervalMs: 3e4
|
|
65517
65513
|
},
|
|
65518
|
-
|
|
65514
|
+
apparentPower: {
|
|
65519
65515
|
kind: "gauge",
|
|
65520
65516
|
unit: "VA",
|
|
65521
65517
|
deadband: 1,
|
|
@@ -65565,9 +65561,6 @@ var PresenceStatusSchema = object({
|
|
|
65565
65561
|
location: string().nullable(),
|
|
65566
65562
|
/** GPS coordinates when available. Null otherwise. */
|
|
65567
65563
|
gps: GpsLocationSchema.nullable(),
|
|
65568
|
-
/** Optional battery level of the tracking device (0..100). Null
|
|
65569
|
-
* when not reported. */
|
|
65570
|
-
batteryPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
65571
65564
|
/** Ms epoch when the slice was last updated. */
|
|
65572
65565
|
lastChangedAt: number()
|
|
65573
65566
|
});
|
|
@@ -65596,14 +65589,7 @@ var presenceCapability = {
|
|
|
65596
65589
|
* `scripts/check-runtime-state-durability.ts`.
|
|
65597
65590
|
*/
|
|
65598
65591
|
durability: "restored",
|
|
65599
|
-
|
|
65600
|
-
* History (D850): recorded series.
|
|
65601
|
-
*/
|
|
65602
|
-
history: { fields: { batteryPercent: {
|
|
65603
|
-
kind: "gauge",
|
|
65604
|
-
unit: "%",
|
|
65605
|
-
deadband: 1
|
|
65606
|
-
} } },
|
|
65592
|
+
history: "none",
|
|
65607
65593
|
/** Clock fields: written, but excluded from the compare that decides
|
|
65608
65594
|
* whether persisting is worth a SQLite commit. */
|
|
65609
65595
|
volatileStateFields: ["lastChangedAt"]
|
|
@@ -65618,7 +65604,7 @@ var presenceCapability = {
|
|
|
65618
65604
|
*/
|
|
65619
65605
|
var PressureSensorStatusSchema = object({
|
|
65620
65606
|
/** Current pressure in hPa. `null` when the sample was refused (D393). */
|
|
65621
|
-
|
|
65607
|
+
pressure: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
|
|
65622
65608
|
/** Ms epoch when the slice was last updated. */
|
|
65623
65609
|
lastFetchedAt: number()
|
|
65624
65610
|
});
|
|
@@ -65644,7 +65630,7 @@ var pressureSensorCapability = {
|
|
|
65644
65630
|
/**
|
|
65645
65631
|
* History (D850): recorded series.
|
|
65646
65632
|
*/
|
|
65647
|
-
history: { fields: {
|
|
65633
|
+
history: { fields: { pressure: {
|
|
65648
65634
|
kind: "gauge",
|
|
65649
65635
|
unit: "hPa",
|
|
65650
65636
|
deadband: .1
|
|
@@ -69343,7 +69329,7 @@ var tamperCapability = {
|
|
|
69343
69329
|
*/
|
|
69344
69330
|
var TemperatureSensorStatusSchema = object({
|
|
69345
69331
|
/** Current temperature in Celsius. `null` when the sample was refused (D393). */
|
|
69346
|
-
|
|
69332
|
+
temperature: number().nullable().meta(readingMeta("temperature", {
|
|
69347
69333
|
precision: 1,
|
|
69348
69334
|
label: "Temperature"
|
|
69349
69335
|
})),
|
|
@@ -69372,7 +69358,7 @@ var temperatureSensorCapability = {
|
|
|
69372
69358
|
/**
|
|
69373
69359
|
* History (D850): recorded series.
|
|
69374
69360
|
*/
|
|
69375
|
-
history: { fields: {
|
|
69361
|
+
history: { fields: { temperature: {
|
|
69376
69362
|
kind: "gauge",
|
|
69377
69363
|
unit: "°C",
|
|
69378
69364
|
deadband: .1
|
|
@@ -69669,7 +69655,7 @@ var VacuumControlStatusSchema = object({
|
|
|
69669
69655
|
/** Speed tokens the hardware accepts — drives the UI selector. */
|
|
69670
69656
|
availableFanSpeeds: array(string()),
|
|
69671
69657
|
/** 0..100 cleaning-completion percentage of the current task, or null. */
|
|
69672
|
-
|
|
69658
|
+
progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
69673
69659
|
/** Current error code (0 / null = no error). */
|
|
69674
69660
|
errorCode: number().nullable().meta(readingMeta("none")),
|
|
69675
69661
|
/** Human label for {@link errorCode}, or null when none / undecodable. */
|
|
@@ -71323,7 +71309,7 @@ var BaseDevice = class {
|
|
|
71323
71309
|
* `device-local-state.ts`. Drivers access via:
|
|
71324
71310
|
*
|
|
71325
71311
|
* `this.state.battery.sleeping = true` // patches the battery slice
|
|
71326
|
-
* `const pct = this.state.battery.
|
|
71312
|
+
* `const pct = this.state.battery.level` // reads the battery slice
|
|
71327
71313
|
* `this.state.deviceStatus.online = true` // mirrors `markOnline(true)`
|
|
71328
71314
|
*
|
|
71329
71315
|
* Adding a new cap with `runtimeState:` automatically extends this
|
|
@@ -71363,7 +71349,7 @@ var BaseDevice = class {
|
|
|
71363
71349
|
* shape; drivers don't redeclare it, they just write through.
|
|
71364
71350
|
*
|
|
71365
71351
|
* Read: `this.runtimeState.getCapState('battery')` →
|
|
71366
|
-
* `{
|
|
71352
|
+
* `{level, charging, sleeping, lastUpdated}` for any
|
|
71367
71353
|
* provider that registers `batteryCapability`.
|
|
71368
71354
|
* Write: `this.runtimeState.setCapState('battery', { … })`.
|
|
71369
71355
|
*
|
|
@@ -82566,7 +82552,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
82566
82552
|
label: t("Full brightness", "Luminosità massima"),
|
|
82567
82553
|
phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
|
|
82568
82554
|
icon: "sun",
|
|
82569
|
-
args: {
|
|
82555
|
+
args: { level: 100 }
|
|
82570
82556
|
},
|
|
82571
82557
|
{
|
|
82572
82558
|
id: "brightness.half",
|
|
@@ -82574,7 +82560,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
82574
82560
|
label: t("Half brightness", "Luminosità a metà"),
|
|
82575
82561
|
phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
|
|
82576
82562
|
icon: "sun-dim",
|
|
82577
|
-
args: {
|
|
82563
|
+
args: { level: 50 }
|
|
82578
82564
|
},
|
|
82579
82565
|
{
|
|
82580
82566
|
id: "brightness.off",
|
|
@@ -82582,16 +82568,16 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
82582
82568
|
label: t("Brightness off", "Luminosità a zero"),
|
|
82583
82569
|
phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
|
|
82584
82570
|
icon: "lightbulb-off",
|
|
82585
|
-
args: {
|
|
82571
|
+
args: { level: 0 }
|
|
82586
82572
|
},
|
|
82587
82573
|
{
|
|
82588
82574
|
id: "brightness.set",
|
|
82589
82575
|
method: "setBrightness",
|
|
82590
82576
|
label: t("Set brightness", "Imposta la luminosità"),
|
|
82591
|
-
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}"),
|
|
82592
82578
|
icon: "sun-medium",
|
|
82593
82579
|
openArgs: [{
|
|
82594
|
-
key: "
|
|
82580
|
+
key: "level",
|
|
82595
82581
|
label: PERCENT,
|
|
82596
82582
|
offer: {
|
|
82597
82583
|
kind: "number",
|
|
@@ -82605,13 +82591,13 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
82605
82591
|
],
|
|
82606
82592
|
state: [{
|
|
82607
82593
|
kind: "numeric",
|
|
82608
|
-
field: "
|
|
82594
|
+
field: "level",
|
|
82609
82595
|
quantity: t("the brightness", "la luminosità"),
|
|
82610
82596
|
label: t("Brightness", "Luminosità"),
|
|
82611
82597
|
unit: "%",
|
|
82612
82598
|
icon: "sun"
|
|
82613
82599
|
}],
|
|
82614
|
-
events: { onBrightnessChanged: { notOperatorFacing: "the `
|
|
82600
|
+
events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
|
|
82615
82601
|
},
|
|
82616
82602
|
color: {
|
|
82617
82603
|
scope: "device",
|
|
@@ -82625,7 +82611,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
82625
82611
|
icon: "sun",
|
|
82626
82612
|
args: { color: {
|
|
82627
82613
|
mode: "mired",
|
|
82628
|
-
|
|
82614
|
+
colorTemperature: 370
|
|
82629
82615
|
} }
|
|
82630
82616
|
},
|
|
82631
82617
|
{
|
|
@@ -82636,7 +82622,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
82636
82622
|
icon: "snowflake",
|
|
82637
82623
|
args: { color: {
|
|
82638
82624
|
mode: "mired",
|
|
82639
|
-
|
|
82625
|
+
colorTemperature: 200
|
|
82640
82626
|
} }
|
|
82641
82627
|
},
|
|
82642
82628
|
{
|
|
@@ -83250,7 +83236,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
83250
83236
|
label: t("Fan off", "Ventilatore spento"),
|
|
83251
83237
|
phrase: t("Stop {device}", "Ferma {device}"),
|
|
83252
83238
|
icon: "power-off",
|
|
83253
|
-
args: {
|
|
83239
|
+
args: { speed: 0 }
|
|
83254
83240
|
},
|
|
83255
83241
|
{
|
|
83256
83242
|
id: "fan.full",
|
|
@@ -83258,16 +83244,16 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
83258
83244
|
label: t("Fan full", "Ventilatore al massimo"),
|
|
83259
83245
|
phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
|
|
83260
83246
|
icon: "fan",
|
|
83261
|
-
args: {
|
|
83247
|
+
args: { speed: 100 }
|
|
83262
83248
|
},
|
|
83263
83249
|
{
|
|
83264
83250
|
id: "fan.speed",
|
|
83265
83251
|
method: "setPercentage",
|
|
83266
83252
|
label: t("Set speed", "Imposta la velocità"),
|
|
83267
|
-
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}"),
|
|
83268
83254
|
icon: "fan",
|
|
83269
83255
|
openArgs: [{
|
|
83270
|
-
key: "
|
|
83256
|
+
key: "speed",
|
|
83271
83257
|
label: t("Speed", "Velocità"),
|
|
83272
83258
|
offer: {
|
|
83273
83259
|
kind: "number",
|
|
@@ -83329,7 +83315,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
83329
83315
|
],
|
|
83330
83316
|
state: [{
|
|
83331
83317
|
kind: "numeric",
|
|
83332
|
-
field: "
|
|
83318
|
+
field: "speed",
|
|
83333
83319
|
quantity: t("the speed", "la velocità"),
|
|
83334
83320
|
label: t("Speed", "Velocità"),
|
|
83335
83321
|
unit: "%",
|
|
@@ -84127,7 +84113,7 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
84127
84113
|
},
|
|
84128
84114
|
{
|
|
84129
84115
|
kind: "numeric",
|
|
84130
|
-
field: "
|
|
84116
|
+
field: "progress",
|
|
84131
84117
|
quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
|
|
84132
84118
|
label: t("Progress", "Avanzamento"),
|
|
84133
84119
|
unit: "%",
|
|
@@ -84485,10 +84471,10 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
84485
84471
|
id: "media.seek",
|
|
84486
84472
|
method: "seek",
|
|
84487
84473
|
label: t("Seek", "Vai al punto"),
|
|
84488
|
-
phrase: t("Move {device} to {
|
|
84474
|
+
phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
|
|
84489
84475
|
icon: "fast-forward",
|
|
84490
84476
|
openArgs: [{
|
|
84491
|
-
key: "
|
|
84477
|
+
key: "position",
|
|
84492
84478
|
label: t("Position", "Posizione"),
|
|
84493
84479
|
offer: {
|
|
84494
84480
|
kind: "number",
|
|
@@ -85537,7 +85523,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85537
85523
|
state: [
|
|
85538
85524
|
{
|
|
85539
85525
|
kind: "numeric",
|
|
85540
|
-
field: "
|
|
85526
|
+
field: "co2",
|
|
85541
85527
|
quantity: t("the CO₂", "la CO₂"),
|
|
85542
85528
|
label: t("CO₂", "CO₂"),
|
|
85543
85529
|
unit: "ppm",
|
|
@@ -85545,7 +85531,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85545
85531
|
},
|
|
85546
85532
|
{
|
|
85547
85533
|
kind: "numeric",
|
|
85548
|
-
field: "
|
|
85534
|
+
field: "voc",
|
|
85549
85535
|
quantity: t("the VOC level", "il livello di COV"),
|
|
85550
85536
|
label: t("VOC", "COV"),
|
|
85551
85537
|
unit: "ppb",
|
|
@@ -85581,7 +85567,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85581
85567
|
noun: t("Light level", "Luminosità ambiente"),
|
|
85582
85568
|
state: [{
|
|
85583
85569
|
kind: "numeric",
|
|
85584
|
-
field: "
|
|
85570
|
+
field: "illuminance",
|
|
85585
85571
|
quantity: t("the light level", "la luminosità"),
|
|
85586
85572
|
label: t("Illuminance", "Illuminamento"),
|
|
85587
85573
|
unit: "lx",
|
|
@@ -85784,7 +85770,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85784
85770
|
noun: t("Humidity", "Umidità"),
|
|
85785
85771
|
state: [{
|
|
85786
85772
|
kind: "numeric",
|
|
85787
|
-
field: "
|
|
85773
|
+
field: "humidity",
|
|
85788
85774
|
quantity: t("the humidity", "l’umidità"),
|
|
85789
85775
|
label: t("Humidity", "Umidità"),
|
|
85790
85776
|
unit: "%",
|
|
@@ -85832,7 +85818,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85832
85818
|
state: [
|
|
85833
85819
|
{
|
|
85834
85820
|
kind: "numeric",
|
|
85835
|
-
field: "
|
|
85821
|
+
field: "power",
|
|
85836
85822
|
quantity: t("the power draw", "il consumo"),
|
|
85837
85823
|
label: t("Power", "Potenza"),
|
|
85838
85824
|
unit: "W",
|
|
@@ -85840,7 +85826,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85840
85826
|
},
|
|
85841
85827
|
{
|
|
85842
85828
|
kind: "numeric",
|
|
85843
|
-
field: "
|
|
85829
|
+
field: "energy",
|
|
85844
85830
|
quantity: t("the energy used", "l’energia consumata"),
|
|
85845
85831
|
label: t("Energy", "Energia"),
|
|
85846
85832
|
unit: "kWh",
|
|
@@ -85848,7 +85834,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85848
85834
|
},
|
|
85849
85835
|
{
|
|
85850
85836
|
kind: "numeric",
|
|
85851
|
-
field: "
|
|
85837
|
+
field: "voltage",
|
|
85852
85838
|
quantity: t("the voltage", "la tensione"),
|
|
85853
85839
|
label: t("Voltage", "Tensione"),
|
|
85854
85840
|
unit: "V",
|
|
@@ -85856,7 +85842,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85856
85842
|
},
|
|
85857
85843
|
{
|
|
85858
85844
|
kind: "numeric",
|
|
85859
|
-
field: "
|
|
85845
|
+
field: "current",
|
|
85860
85846
|
quantity: t("the current", "la corrente"),
|
|
85861
85847
|
label: t("Current", "Corrente"),
|
|
85862
85848
|
unit: "A",
|
|
@@ -85873,13 +85859,6 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85873
85859
|
label: t("Where", "Posizione"),
|
|
85874
85860
|
phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
|
|
85875
85861
|
icon: "map-pin"
|
|
85876
|
-
}, {
|
|
85877
|
-
kind: "numeric",
|
|
85878
|
-
field: "batteryPercent",
|
|
85879
|
-
quantity: t("the phone battery", "la batteria del telefono"),
|
|
85880
|
-
label: t("Battery", "Batteria"),
|
|
85881
|
-
unit: "%",
|
|
85882
|
-
icon: "battery"
|
|
85883
85862
|
}]
|
|
85884
85863
|
},
|
|
85885
85864
|
"pressure-sensor": {
|
|
@@ -85887,7 +85866,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85887
85866
|
noun: t("Pressure", "Pressione"),
|
|
85888
85867
|
state: [{
|
|
85889
85868
|
kind: "numeric",
|
|
85890
|
-
field: "
|
|
85869
|
+
field: "pressure",
|
|
85891
85870
|
quantity: t("the pressure", "la pressione"),
|
|
85892
85871
|
label: t("Pressure", "Pressione"),
|
|
85893
85872
|
unit: "hPa",
|
|
@@ -85923,7 +85902,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85923
85902
|
noun: t("Temperature", "Temperatura"),
|
|
85924
85903
|
state: [{
|
|
85925
85904
|
kind: "numeric",
|
|
85926
|
-
field: "
|
|
85905
|
+
field: "temperature",
|
|
85927
85906
|
quantity: t("the temperature", "la temperatura"),
|
|
85928
85907
|
label: t("Temperature", "Temperatura"),
|
|
85929
85908
|
unit: "°C",
|
|
@@ -85994,7 +85973,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
85994
85973
|
state: [
|
|
85995
85974
|
{
|
|
85996
85975
|
kind: "numeric",
|
|
85997
|
-
field: "
|
|
85976
|
+
field: "level",
|
|
85998
85977
|
quantity: t("the battery level", "il livello della batteria"),
|
|
85999
85978
|
label: t("Battery", "Batteria"),
|
|
86000
85979
|
unit: "%",
|
|
@@ -86036,7 +86015,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
86036
86015
|
icon: "battery-charging"
|
|
86037
86016
|
}
|
|
86038
86017
|
],
|
|
86039
|
-
events: { onStatusChanged: { notOperatorFacing: "the
|
|
86018
|
+
events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
|
|
86040
86019
|
extraEvents: [{
|
|
86041
86020
|
category: EventCategory.DeviceAwake,
|
|
86042
86021
|
label: t("Woke up", "Risvegliato"),
|
|
@@ -86054,7 +86033,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
86054
86033
|
noun: t("Network link", "Collegamento di rete"),
|
|
86055
86034
|
state: [{
|
|
86056
86035
|
kind: "numeric",
|
|
86057
|
-
field: "
|
|
86036
|
+
field: "signal",
|
|
86058
86037
|
quantity: t("the signal strength", "l’intensità del segnale"),
|
|
86059
86038
|
label: t("Signal", "Segnale"),
|
|
86060
86039
|
unit: "%",
|
|
@@ -132766,6 +132745,40 @@ var ALEXA_API_USER_AGENT_POSTFIX = `AlexaRemote/${{
|
|
|
132766
132745
|
readmeFilename: "readme.md"
|
|
132767
132746
|
}.version}`;
|
|
132768
132747
|
//#endregion
|
|
132748
|
+
//#region src/alexa-proxy-trace.ts
|
|
132749
|
+
/**
|
|
132750
|
+
* Sanitised one-line trace of the alexa-cookie2 proxy's own log lines.
|
|
132751
|
+
*
|
|
132752
|
+
* alexa-cookie2 logs every step it takes (routing, upstream request, redirect),
|
|
132753
|
+
* but its lines also carry headers, cookies and query values. This keeps only
|
|
132754
|
+
* what diagnoses a failed login: the method, the path or upstream host, and the
|
|
132755
|
+
* redirect target — always WITHOUT a query string or fragment. Any line that is
|
|
132756
|
+
* not one of the known step lines yields `null` and is never traced.
|
|
132757
|
+
*/
|
|
132758
|
+
var ROUTER_RE = /^Router: (\S+) \/ ([A-Z]+) \//;
|
|
132759
|
+
var PROXY_REQUEST_RE = /^Alexa-Cookie: Proxy-Request: ([A-Z]+) (\S+)$/;
|
|
132760
|
+
var PROXY_RESPONSE_RE = /^Alexa-Cookie: Proxy Response from Host: (\S+)$/;
|
|
132761
|
+
var REDIRECT_ORIGINAL_RE = /^Redirect: Original Location ----> (\S+)$/;
|
|
132762
|
+
var REDIRECT_FINAL_RE = /^Redirect: Final Location ----> (\S+)$/;
|
|
132763
|
+
/** Cut a URL or path at its query string or fragment. */
|
|
132764
|
+
function stripQuery(target) {
|
|
132765
|
+
const cut = target.search(/[?#]/);
|
|
132766
|
+
return cut === -1 ? target : target.slice(0, cut);
|
|
132767
|
+
}
|
|
132768
|
+
function sanitizeProxyTraceLine(line) {
|
|
132769
|
+
const router = ROUTER_RE.exec(line);
|
|
132770
|
+
if (router !== null) return `router ${router[2]} ${stripQuery(router[1] ?? "")}`;
|
|
132771
|
+
const request = PROXY_REQUEST_RE.exec(line);
|
|
132772
|
+
if (request !== null) return `proxy-request ${request[1]} ${stripQuery(request[2] ?? "")}`;
|
|
132773
|
+
const response = PROXY_RESPONSE_RE.exec(line);
|
|
132774
|
+
if (response !== null) return `proxy-response host=${response[1]}`;
|
|
132775
|
+
const original = REDIRECT_ORIGINAL_RE.exec(line);
|
|
132776
|
+
if (original !== null) return `redirect-original ${stripQuery(original[1] ?? "")}`;
|
|
132777
|
+
const final = REDIRECT_FINAL_RE.exec(line);
|
|
132778
|
+
if (final !== null) return `redirect-final ${stripQuery(final[1] ?? "")}`;
|
|
132779
|
+
return null;
|
|
132780
|
+
}
|
|
132781
|
+
//#endregion
|
|
132769
132782
|
//#region src/alexa-proxy-login.ts
|
|
132770
132783
|
/**
|
|
132771
132784
|
* INTERACTIVE Amazon login via `alexa-remote2`'s built-in proxy auth mode, behind the
|
|
@@ -132876,6 +132889,11 @@ var AlexaProxyLoginSession = class {
|
|
|
132876
132889
|
apiUserAgentPostfix: ALEXA_API_USER_AGENT_POSTFIX,
|
|
132877
132890
|
logger: (...args) => {
|
|
132878
132891
|
const line = args.map(String).join(" ");
|
|
132892
|
+
const trace = sanitizeProxyTraceLine(line);
|
|
132893
|
+
if (trace !== null) {
|
|
132894
|
+
this.#logger.info(`alexa proxy-login: ${trace}`, { meta: { sessionId: this.#opts.sessionId } });
|
|
132895
|
+
return;
|
|
132896
|
+
}
|
|
132879
132897
|
if (SECRET_LINE_RE.test(line)) return;
|
|
132880
132898
|
this.#logger.debug("alexa proxy-login", { meta: {
|
|
132881
132899
|
sessionId: this.#opts.sessionId,
|
|
@@ -132937,7 +132955,10 @@ var AlexaProxyLoginSession = class {
|
|
|
132937
132955
|
if (isProxyReadyError(err)) {
|
|
132938
132956
|
if (this.#phase === "starting") {
|
|
132939
132957
|
this.#phase = "awaiting-login";
|
|
132940
|
-
this.#logger.info("alexa proxy-login: proxy ready — awaiting Amazon login", { meta: {
|
|
132958
|
+
this.#logger.info("alexa proxy-login: proxy ready — awaiting Amazon login", { meta: {
|
|
132959
|
+
sessionId: this.#opts.sessionId,
|
|
132960
|
+
amazonDomain: this.#opts.amazonDomain
|
|
132961
|
+
} });
|
|
132941
132962
|
}
|
|
132942
132963
|
return;
|
|
132943
132964
|
}
|
|
@@ -134769,7 +134790,7 @@ var KNOWN_CAPS = new Set([
|
|
|
134769
134790
|
* {@link alexaAccounts}; each `getStatus` prefers the latest decoded live value
|
|
134770
134791
|
* (via `alexa-state-to-cap`) and falls back to the runtime/cold slice when a
|
|
134771
134792
|
* property hasn't been polled yet — e.g. PowerController.powerState 'ON' →
|
|
134772
|
-
* switch.on, BrightnessController.brightness 0..100 → brightness.
|
|
134793
|
+
* switch.on, BrightnessController.brightness 0..100 → brightness.level,
|
|
134773
134794
|
* ContactSensor.detectionState 'DETECTED' → contact.entryOpen.
|
|
134774
134795
|
*
|
|
134775
134796
|
* TODO(caps): 'climate-control' (ThermostatController), 'control'
|
|
@@ -134853,7 +134874,7 @@ var AlexaDevice = class extends BaseDevice {
|
|
|
134853
134874
|
}
|
|
134854
134875
|
registerBrightness() {
|
|
134855
134876
|
const COLD = {
|
|
134856
|
-
|
|
134877
|
+
level: 0,
|
|
134857
134878
|
lastChangedAt: 0
|
|
134858
134879
|
};
|
|
134859
134880
|
this.ctx.registerNativeCap(brightnessCapability, {
|
|
@@ -134862,14 +134883,14 @@ var AlexaDevice = class extends BaseDevice {
|
|
|
134862
134883
|
const live = decodePercentage(this.liveState("Alexa.BrightnessController", "brightness"));
|
|
134863
134884
|
return live === null ? cached : {
|
|
134864
134885
|
...cached,
|
|
134865
|
-
|
|
134886
|
+
level: live
|
|
134866
134887
|
};
|
|
134867
134888
|
},
|
|
134868
|
-
setBrightness: async ({ percentage }) => {
|
|
134889
|
+
setBrightness: async ({ level: percentage }) => {
|
|
134869
134890
|
const brightness = Math.round(Math.max(0, Math.min(100, percentage)));
|
|
134870
134891
|
await this.command("Alexa.BrightnessController", "SetBrightness", { brightness });
|
|
134871
134892
|
this.runtimeState.setCapState("brightness", {
|
|
134872
|
-
percentage,
|
|
134893
|
+
level: percentage,
|
|
134873
134894
|
lastChangedAt: Date.now()
|
|
134874
134895
|
});
|
|
134875
134896
|
}
|
|
@@ -135023,7 +135044,7 @@ var AlexaDevice = class extends BaseDevice {
|
|
|
135023
135044
|
}
|
|
135024
135045
|
registerTemperatureSensor() {
|
|
135025
135046
|
const COLD = {
|
|
135026
|
-
|
|
135047
|
+
temperature: 0,
|
|
135027
135048
|
lastFetchedAt: 0
|
|
135028
135049
|
};
|
|
135029
135050
|
this.ctx.registerNativeCap(temperatureSensorCapability, { getStatus: async () => {
|
|
@@ -135031,14 +135052,14 @@ var AlexaDevice = class extends BaseDevice {
|
|
|
135031
135052
|
const live = decodeTemperatureCelsius(this.liveState("Alexa.TemperatureSensor", "temperature"));
|
|
135032
135053
|
return live === null ? cached : {
|
|
135033
135054
|
...cached,
|
|
135034
|
-
|
|
135055
|
+
temperature: live
|
|
135035
135056
|
};
|
|
135036
135057
|
} });
|
|
135037
135058
|
this.runtimeState.setCapState("temperature-sensor", COLD);
|
|
135038
135059
|
}
|
|
135039
135060
|
registerHumiditySensor() {
|
|
135040
135061
|
const COLD = {
|
|
135041
|
-
|
|
135062
|
+
humidity: 0,
|
|
135042
135063
|
lastFetchedAt: 0
|
|
135043
135064
|
};
|
|
135044
135065
|
this.ctx.registerNativeCap(humiditySensorCapability, { getStatus: async () => {
|
|
@@ -135046,7 +135067,7 @@ var AlexaDevice = class extends BaseDevice {
|
|
|
135046
135067
|
const live = decodeHumidityPercent(this.liveState("Alexa.HumiditySensor", "humidity"));
|
|
135047
135068
|
return live === null ? cached : {
|
|
135048
135069
|
...cached,
|
|
135049
|
-
|
|
135070
|
+
humidity: live
|
|
135050
135071
|
};
|
|
135051
135072
|
} });
|
|
135052
135073
|
this.runtimeState.setCapState("humidity-sensor", COLD);
|