@camstack/addon-post-analysis 1.2.647 → 1.2.649
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 +13 -0
- package/dist/{clip-model-registry-Bi5DcV3d.js → clip-model-registry-BweA9zEK.js} +245 -167
- package/dist/{clip-model-registry-Baro8DSl.mjs → clip-model-registry-DLCu17dL.mjs} +240 -168
- package/dist/embedding-encoder/index.js +1 -1
- package/dist/embedding-encoder/index.mjs +1 -1
- package/dist/pipeline-analytics/_stub.js +2 -2
- package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-M_XNqkOs.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-DFq-lnbD.mjs} +2 -2
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-YDf26qsN.mjs +26 -0
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DQTr4r2P.mjs +26 -0
- package/dist/pipeline-analytics/{hostInit-DRa7YSGg.mjs → hostInit-Dog0wpFI.mjs} +2 -2
- package/dist/pipeline-analytics/index.js +10 -5
- package/dist/pipeline-analytics/index.mjs +10 -5
- package/dist/pipeline-analytics/remoteEntry.js +1 -1
- package/package.json +2 -1
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-D5tFxRsi.mjs +0 -26
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DgC84J8L.mjs +0 -26
|
@@ -5676,7 +5676,7 @@ var ZodIssueCode = {
|
|
|
5676
5676
|
var ZodFirstPartyTypeKind;
|
|
5677
5677
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5678
5678
|
//#endregion
|
|
5679
|
-
//#region ../types/dist/sleep-
|
|
5679
|
+
//#region ../types/dist/sleep-Crlmu_tO.mjs
|
|
5680
5680
|
/**
|
|
5681
5681
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5682
5682
|
* window to float samples (D455).
|
|
@@ -9214,11 +9214,11 @@ var CAP_NAMES = Object.freeze([
|
|
|
9214
9214
|
Object.freeze({
|
|
9215
9215
|
"air-quality-sensor": [
|
|
9216
9216
|
{
|
|
9217
|
-
"path": "
|
|
9217
|
+
"path": "co2",
|
|
9218
9218
|
"valueType": "number"
|
|
9219
9219
|
},
|
|
9220
9220
|
{
|
|
9221
|
-
"path": "
|
|
9221
|
+
"path": "voc",
|
|
9222
9222
|
"valueType": "number"
|
|
9223
9223
|
},
|
|
9224
9224
|
{
|
|
@@ -9268,7 +9268,7 @@ Object.freeze({
|
|
|
9268
9268
|
}
|
|
9269
9269
|
],
|
|
9270
9270
|
"ambient-light-sensor": [{
|
|
9271
|
-
"path": "
|
|
9271
|
+
"path": "illuminance",
|
|
9272
9272
|
"valueType": "number"
|
|
9273
9273
|
}],
|
|
9274
9274
|
"audio-metrics": [
|
|
@@ -9329,7 +9329,7 @@ Object.freeze({
|
|
|
9329
9329
|
],
|
|
9330
9330
|
"battery": [
|
|
9331
9331
|
{
|
|
9332
|
-
"path": "
|
|
9332
|
+
"path": "level",
|
|
9333
9333
|
"valueType": "number"
|
|
9334
9334
|
},
|
|
9335
9335
|
{
|
|
@@ -9351,7 +9351,7 @@ Object.freeze({
|
|
|
9351
9351
|
"valueType": "number"
|
|
9352
9352
|
},
|
|
9353
9353
|
{
|
|
9354
|
-
"path": "
|
|
9354
|
+
"path": "voltage",
|
|
9355
9355
|
"valueType": "number"
|
|
9356
9356
|
},
|
|
9357
9357
|
{
|
|
@@ -9372,7 +9372,7 @@ Object.freeze({
|
|
|
9372
9372
|
"valueType": "boolean"
|
|
9373
9373
|
}],
|
|
9374
9374
|
"brightness": [{
|
|
9375
|
-
"path": "
|
|
9375
|
+
"path": "level",
|
|
9376
9376
|
"valueType": "number"
|
|
9377
9377
|
}],
|
|
9378
9378
|
"broker": [{
|
|
@@ -9573,7 +9573,7 @@ Object.freeze({
|
|
|
9573
9573
|
"valueType": "number"
|
|
9574
9574
|
},
|
|
9575
9575
|
{
|
|
9576
|
-
"path": "
|
|
9576
|
+
"path": "colorTemperature",
|
|
9577
9577
|
"valueType": "number"
|
|
9578
9578
|
}
|
|
9579
9579
|
],
|
|
@@ -9752,15 +9752,15 @@ Object.freeze({
|
|
|
9752
9752
|
"valueType": "string"
|
|
9753
9753
|
},
|
|
9754
9754
|
{
|
|
9755
|
-
"path": "
|
|
9755
|
+
"path": "remaining",
|
|
9756
9756
|
"valueType": "number"
|
|
9757
9757
|
},
|
|
9758
9758
|
{
|
|
9759
|
-
"path": "
|
|
9759
|
+
"path": "delayedStart",
|
|
9760
9760
|
"valueType": "number"
|
|
9761
9761
|
},
|
|
9762
9762
|
{
|
|
9763
|
-
"path": "
|
|
9763
|
+
"path": "progress",
|
|
9764
9764
|
"valueType": "number"
|
|
9765
9765
|
},
|
|
9766
9766
|
{
|
|
@@ -9874,7 +9874,7 @@ Object.freeze({
|
|
|
9874
9874
|
],
|
|
9875
9875
|
"fan-control": [
|
|
9876
9876
|
{
|
|
9877
|
-
"path": "
|
|
9877
|
+
"path": "speed",
|
|
9878
9878
|
"valueType": "number"
|
|
9879
9879
|
},
|
|
9880
9880
|
{
|
|
@@ -9974,7 +9974,7 @@ Object.freeze({
|
|
|
9974
9974
|
}
|
|
9975
9975
|
],
|
|
9976
9976
|
"humidity-sensor": [{
|
|
9977
|
-
"path": "
|
|
9977
|
+
"path": "humidity",
|
|
9978
9978
|
"valueType": "number"
|
|
9979
9979
|
}],
|
|
9980
9980
|
"image": [{
|
|
@@ -10084,7 +10084,7 @@ Object.freeze({
|
|
|
10084
10084
|
"valueType": "number"
|
|
10085
10085
|
},
|
|
10086
10086
|
{
|
|
10087
|
-
"path": "
|
|
10087
|
+
"path": "progress",
|
|
10088
10088
|
"valueType": "number"
|
|
10089
10089
|
},
|
|
10090
10090
|
{
|
|
@@ -10163,11 +10163,11 @@ Object.freeze({
|
|
|
10163
10163
|
"valueType": "string"
|
|
10164
10164
|
},
|
|
10165
10165
|
{
|
|
10166
|
-
"path": "
|
|
10166
|
+
"path": "position",
|
|
10167
10167
|
"valueType": "number"
|
|
10168
10168
|
},
|
|
10169
10169
|
{
|
|
10170
|
-
"path": "
|
|
10170
|
+
"path": "duration",
|
|
10171
10171
|
"valueType": "number"
|
|
10172
10172
|
},
|
|
10173
10173
|
{
|
|
@@ -10269,11 +10269,11 @@ Object.freeze({
|
|
|
10269
10269
|
]
|
|
10270
10270
|
},
|
|
10271
10271
|
{
|
|
10272
|
-
"path": "
|
|
10272
|
+
"path": "signal",
|
|
10273
10273
|
"valueType": "number"
|
|
10274
10274
|
},
|
|
10275
10275
|
{
|
|
10276
|
-
"path": "
|
|
10276
|
+
"path": "rssi",
|
|
10277
10277
|
"valueType": "number"
|
|
10278
10278
|
},
|
|
10279
10279
|
{
|
|
@@ -10404,23 +10404,23 @@ Object.freeze({
|
|
|
10404
10404
|
],
|
|
10405
10405
|
"power-meter": [
|
|
10406
10406
|
{
|
|
10407
|
-
"path": "
|
|
10407
|
+
"path": "power",
|
|
10408
10408
|
"valueType": "number"
|
|
10409
10409
|
},
|
|
10410
10410
|
{
|
|
10411
|
-
"path": "
|
|
10411
|
+
"path": "energy",
|
|
10412
10412
|
"valueType": "number"
|
|
10413
10413
|
},
|
|
10414
10414
|
{
|
|
10415
|
-
"path": "
|
|
10415
|
+
"path": "voltage",
|
|
10416
10416
|
"valueType": "number"
|
|
10417
10417
|
},
|
|
10418
10418
|
{
|
|
10419
|
-
"path": "
|
|
10419
|
+
"path": "current",
|
|
10420
10420
|
"valueType": "number"
|
|
10421
10421
|
},
|
|
10422
10422
|
{
|
|
10423
|
-
"path": "
|
|
10423
|
+
"path": "apparentPower",
|
|
10424
10424
|
"valueType": "number"
|
|
10425
10425
|
},
|
|
10426
10426
|
{
|
|
@@ -10448,14 +10448,10 @@ Object.freeze({
|
|
|
10448
10448
|
{
|
|
10449
10449
|
"path": "gps.accuracyMeters",
|
|
10450
10450
|
"valueType": "number"
|
|
10451
|
-
},
|
|
10452
|
-
{
|
|
10453
|
-
"path": "batteryPercent",
|
|
10454
|
-
"valueType": "number"
|
|
10455
10451
|
}
|
|
10456
10452
|
],
|
|
10457
10453
|
"pressure-sensor": [{
|
|
10458
|
-
"path": "
|
|
10454
|
+
"path": "pressure",
|
|
10459
10455
|
"valueType": "number"
|
|
10460
10456
|
}],
|
|
10461
10457
|
"privacy-mask": [{
|
|
@@ -10769,7 +10765,7 @@ Object.freeze({
|
|
|
10769
10765
|
"valueType": "boolean"
|
|
10770
10766
|
}],
|
|
10771
10767
|
"temperature-sensor": [{
|
|
10772
|
-
"path": "
|
|
10768
|
+
"path": "temperature",
|
|
10773
10769
|
"valueType": "number"
|
|
10774
10770
|
}],
|
|
10775
10771
|
"update": [
|
|
@@ -10817,7 +10813,7 @@ Object.freeze({
|
|
|
10817
10813
|
"valueType": "string"
|
|
10818
10814
|
},
|
|
10819
10815
|
{
|
|
10820
|
-
"path": "
|
|
10816
|
+
"path": "progress",
|
|
10821
10817
|
"valueType": "number"
|
|
10822
10818
|
},
|
|
10823
10819
|
{
|
|
@@ -11447,7 +11443,7 @@ function errMsg(err) {
|
|
|
11447
11443
|
return String(err);
|
|
11448
11444
|
}
|
|
11449
11445
|
//#endregion
|
|
11450
|
-
//#region ../types/dist/composition-
|
|
11446
|
+
//#region ../types/dist/composition-DwA0uVW5.mjs
|
|
11451
11447
|
/**
|
|
11452
11448
|
* Deterministic SHA-256 hash of an arbitrary serialisable value. The
|
|
11453
11449
|
* canonical form sorts object keys alphabetically at every depth so two
|
|
@@ -20148,7 +20144,7 @@ var CompositionEventPlanSchema = object({
|
|
|
20148
20144
|
stateField: string(),
|
|
20149
20145
|
fieldKey: string()
|
|
20150
20146
|
});
|
|
20151
|
-
/** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.
|
|
20147
|
+
/** One refusal, named (D391). `path` points into the composition, e.g. `features[0].fields.temperature`. */
|
|
20152
20148
|
var CompositionProblemSchema = object({
|
|
20153
20149
|
code: _enum([
|
|
20154
20150
|
"reserved-variant",
|
|
@@ -20430,12 +20426,13 @@ var CHANGED = {
|
|
|
20430
20426
|
expr: "now"
|
|
20431
20427
|
};
|
|
20432
20428
|
function numeric(input) {
|
|
20429
|
+
const { alsoFrom, ...base } = input;
|
|
20433
20430
|
return {
|
|
20434
|
-
...
|
|
20431
|
+
...base,
|
|
20435
20432
|
family: "numeric",
|
|
20436
20433
|
deviceType: DeviceType.Sensor,
|
|
20437
20434
|
memberDeviceType: DeviceType.Sensor,
|
|
20438
|
-
memberDeviceTypes: [DeviceType.Sensor],
|
|
20435
|
+
memberDeviceTypes: [DeviceType.Sensor, ...alsoFrom?.deviceTypes ?? []],
|
|
20439
20436
|
activeWhen: void 0,
|
|
20440
20437
|
commandCaps: [],
|
|
20441
20438
|
baseUnit: baseUnitOf(input.quantity),
|
|
@@ -20443,9 +20440,10 @@ function numeric(input) {
|
|
|
20443
20440
|
accept: [{
|
|
20444
20441
|
cap: input.outputCap,
|
|
20445
20442
|
fieldPath: input.outputField
|
|
20446
|
-
}]
|
|
20443
|
+
}, ...alsoFrom === void 0 ? [] : [alsoFrom.accept]]
|
|
20447
20444
|
};
|
|
20448
20445
|
}
|
|
20446
|
+
var CLIMATE_DEVICES = [DeviceType.Thermostat, DeviceType.Climate];
|
|
20449
20447
|
function binary(input) {
|
|
20450
20448
|
return {
|
|
20451
20449
|
...input,
|
|
@@ -20467,29 +20465,43 @@ var GROUP_TEMPLATES = [
|
|
|
20467
20465
|
summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
|
|
20468
20466
|
role: DeviceRole.TemperatureSensor,
|
|
20469
20467
|
outputCap: "temperature-sensor",
|
|
20470
|
-
outputField: "
|
|
20468
|
+
outputField: "temperature",
|
|
20471
20469
|
quantity: "temperature",
|
|
20472
20470
|
defaultAggregate: "mean",
|
|
20473
20471
|
empty: "null",
|
|
20474
|
-
companions: [NOW$2]
|
|
20472
|
+
companions: [NOW$2],
|
|
20473
|
+
alsoFrom: {
|
|
20474
|
+
deviceTypes: CLIMATE_DEVICES,
|
|
20475
|
+
accept: {
|
|
20476
|
+
cap: "climate-control",
|
|
20477
|
+
fieldPath: "currentTemp"
|
|
20478
|
+
}
|
|
20479
|
+
}
|
|
20475
20480
|
}),
|
|
20476
20481
|
numeric({
|
|
20477
20482
|
id: "humidity",
|
|
20478
20483
|
summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
|
|
20479
20484
|
role: DeviceRole.HumiditySensor,
|
|
20480
20485
|
outputCap: "humidity-sensor",
|
|
20481
|
-
outputField: "
|
|
20486
|
+
outputField: "humidity",
|
|
20482
20487
|
quantity: "humidity",
|
|
20483
20488
|
defaultAggregate: "mean",
|
|
20484
20489
|
empty: "null",
|
|
20485
|
-
companions: [NOW$2]
|
|
20490
|
+
companions: [NOW$2],
|
|
20491
|
+
alsoFrom: {
|
|
20492
|
+
deviceTypes: CLIMATE_DEVICES,
|
|
20493
|
+
accept: {
|
|
20494
|
+
cap: "climate-control",
|
|
20495
|
+
fieldPath: "currentHumidity"
|
|
20496
|
+
}
|
|
20497
|
+
}
|
|
20486
20498
|
}),
|
|
20487
20499
|
numeric({
|
|
20488
20500
|
id: "pressure",
|
|
20489
20501
|
summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
|
|
20490
20502
|
role: DeviceRole.PressureSensor,
|
|
20491
20503
|
outputCap: "pressure-sensor",
|
|
20492
|
-
outputField: "
|
|
20504
|
+
outputField: "pressure",
|
|
20493
20505
|
quantity: "pressure",
|
|
20494
20506
|
defaultAggregate: "mean",
|
|
20495
20507
|
empty: "null",
|
|
@@ -20500,7 +20512,7 @@ var GROUP_TEMPLATES = [
|
|
|
20500
20512
|
summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
|
|
20501
20513
|
role: DeviceRole.AmbientLightSensor,
|
|
20502
20514
|
outputCap: "ambient-light-sensor",
|
|
20503
|
-
outputField: "
|
|
20515
|
+
outputField: "illuminance",
|
|
20504
20516
|
quantity: "illuminance",
|
|
20505
20517
|
defaultAggregate: "mean",
|
|
20506
20518
|
empty: "null",
|
|
@@ -20511,7 +20523,7 @@ var GROUP_TEMPLATES = [
|
|
|
20511
20523
|
summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
|
|
20512
20524
|
role: DeviceRole.PowerSensor,
|
|
20513
20525
|
outputCap: "power-meter",
|
|
20514
|
-
outputField: "
|
|
20526
|
+
outputField: "power",
|
|
20515
20527
|
quantity: "power",
|
|
20516
20528
|
defaultAggregate: "sum",
|
|
20517
20529
|
empty: "omit",
|
|
@@ -20522,7 +20534,7 @@ var GROUP_TEMPLATES = [
|
|
|
20522
20534
|
summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
|
|
20523
20535
|
role: DeviceRole.EnergySensor,
|
|
20524
20536
|
outputCap: "power-meter",
|
|
20525
|
-
outputField: "
|
|
20537
|
+
outputField: "energy",
|
|
20526
20538
|
quantity: "energy",
|
|
20527
20539
|
defaultAggregate: "sum",
|
|
20528
20540
|
empty: "omit",
|
|
@@ -20533,7 +20545,7 @@ var GROUP_TEMPLATES = [
|
|
|
20533
20545
|
summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
|
|
20534
20546
|
role: DeviceRole.BatterySensor,
|
|
20535
20547
|
outputCap: "battery",
|
|
20536
|
-
outputField: "
|
|
20548
|
+
outputField: "level",
|
|
20537
20549
|
quantity: "percentage",
|
|
20538
20550
|
defaultAggregate: "mean",
|
|
20539
20551
|
empty: "null",
|
|
@@ -46303,6 +46315,43 @@ var NotificationActionSchema = object({
|
|
|
46303
46315
|
*/
|
|
46304
46316
|
mode: _enum(["navigate", "background"]).optional()
|
|
46305
46317
|
});
|
|
46318
|
+
/** A delivery parameter value: what a notifier declared it takes. */
|
|
46319
|
+
var DeliveryParamValueSchema = union([
|
|
46320
|
+
string(),
|
|
46321
|
+
number(),
|
|
46322
|
+
boolean()
|
|
46323
|
+
]);
|
|
46324
|
+
/**
|
|
46325
|
+
* One extra delivery parameter a notifier KIND declares (D938). A rule that
|
|
46326
|
+
* addresses a target of that kind may set it; a kind that declares nothing is
|
|
46327
|
+
* never handed one. The admin UI derives its control from this descriptor —
|
|
46328
|
+
* no editor knows a service by name.
|
|
46329
|
+
*
|
|
46330
|
+
* Optional fields are `.optional()`, never `.default()` (a Zod default does not
|
|
46331
|
+
* run on the addon cap path).
|
|
46332
|
+
*/
|
|
46333
|
+
var DeliveryParamSchema = object({
|
|
46334
|
+
key: string().min(1),
|
|
46335
|
+
label: string(),
|
|
46336
|
+
/** i18n key of the label, resolved by the declaring addon's namespace. */
|
|
46337
|
+
labelKey: string().optional(),
|
|
46338
|
+
type: _enum([
|
|
46339
|
+
"enum",
|
|
46340
|
+
"number",
|
|
46341
|
+
"boolean",
|
|
46342
|
+
"string"
|
|
46343
|
+
]),
|
|
46344
|
+
/** `enum` only: the closed set of accepted values. */
|
|
46345
|
+
options: array(object({
|
|
46346
|
+
value: string(),
|
|
46347
|
+
label: string()
|
|
46348
|
+
})).optional(),
|
|
46349
|
+
/** `number` only. */
|
|
46350
|
+
min: number().optional(),
|
|
46351
|
+
max: number().optional(),
|
|
46352
|
+
/** What the notifier does when the rule sets nothing; shown as the placeholder. */
|
|
46353
|
+
default: DeliveryParamValueSchema.optional()
|
|
46354
|
+
});
|
|
46306
46355
|
/**
|
|
46307
46356
|
* The canonical notification. `body` is the only hard field (Apprise model).
|
|
46308
46357
|
* `priority` is a 5-level ORDINAL (1=lowest … 3=normal(default) … 5=urgent),
|
|
@@ -46325,7 +46374,13 @@ var NotificationSchema = object({
|
|
|
46325
46374
|
tag: string().optional(),
|
|
46326
46375
|
deviceId: number().optional(),
|
|
46327
46376
|
eventId: string().optional(),
|
|
46328
|
-
metadata: record(string(), unknown()).optional()
|
|
46377
|
+
metadata: record(string(), unknown()).optional(),
|
|
46378
|
+
/**
|
|
46379
|
+
* Values for the parameters the target's kind DECLARES in
|
|
46380
|
+
* {@link TargetKindSchema} `deliveryParams`. Already validated against the
|
|
46381
|
+
* declaration by the sender; a notifier reads only the keys it declared.
|
|
46382
|
+
*/
|
|
46383
|
+
delivery: record(string(), DeliveryParamValueSchema).optional()
|
|
46329
46384
|
});
|
|
46330
46385
|
/** One declared native severity/priority level for a kind. */
|
|
46331
46386
|
var TargetKindLevelSchema = object({
|
|
@@ -46431,6 +46486,11 @@ var TargetKindSchema = object({
|
|
|
46431
46486
|
*/
|
|
46432
46487
|
destinationKeys: array(string()).optional(),
|
|
46433
46488
|
supportsDiscovery: boolean(),
|
|
46489
|
+
/**
|
|
46490
|
+
* Extra delivery parameters a rule may set for a target of this kind (D938).
|
|
46491
|
+
* Absent = none; the rule editor then offers nothing.
|
|
46492
|
+
*/
|
|
46493
|
+
deliveryParams: array(DeliveryParamSchema).optional(),
|
|
46434
46494
|
caps: TargetKindCapsSchema
|
|
46435
46495
|
});
|
|
46436
46496
|
/**
|
|
@@ -60584,7 +60644,9 @@ var ManifestShapeSchema = object({
|
|
|
60584
60644
|
icon: string().optional()
|
|
60585
60645
|
}).optional(),
|
|
60586
60646
|
protected: boolean().optional(),
|
|
60587
|
-
removable: boolean().optional()
|
|
60647
|
+
removable: boolean().optional(),
|
|
60648
|
+
/** Declared Integrations-page block (mirror of `AddonDeclaration.integrationSection`). */
|
|
60649
|
+
integrationSection: _enum(["system", "providers"]).optional()
|
|
60588
60650
|
});
|
|
60589
60651
|
var AddonProcessSchema = object({
|
|
60590
60652
|
pid: number().optional(),
|
|
@@ -60958,9 +61020,9 @@ method(object({ nodeId: string().optional() }).optional(), array(AddonListItemSc
|
|
|
60958
61020
|
*/
|
|
60959
61021
|
var AirQualitySensorStatusSchema = object({
|
|
60960
61022
|
/** Carbon dioxide concentration in ppm. */
|
|
60961
|
-
|
|
61023
|
+
co2: number().min(0).optional().meta(readingMeta("concentration-volume")),
|
|
60962
61024
|
/** Total volatile organic compounds in ppb. */
|
|
60963
|
-
|
|
61025
|
+
voc: number().min(0).optional().meta(readingMeta("concentration-ppb")),
|
|
60964
61026
|
/** Particulate matter ≤ 2.5 μm in µg/m³. */
|
|
60965
61027
|
pm25: number().min(0).optional().meta(readingMeta("concentration-mass")),
|
|
60966
61028
|
/** Particulate matter ≤ 10 μm in µg/m³. */
|
|
@@ -60993,12 +61055,12 @@ var airQualitySensorCapability = {
|
|
|
60993
61055
|
* History (D850): recorded series.
|
|
60994
61056
|
*/
|
|
60995
61057
|
history: { fields: {
|
|
60996
|
-
|
|
61058
|
+
co2: {
|
|
60997
61059
|
kind: "gauge",
|
|
60998
61060
|
unit: "ppm",
|
|
60999
61061
|
deadband: 5
|
|
61000
61062
|
},
|
|
61001
|
-
|
|
61063
|
+
voc: {
|
|
61002
61064
|
kind: "gauge",
|
|
61003
61065
|
unit: "ppb",
|
|
61004
61066
|
deadband: 5
|
|
@@ -61029,7 +61091,7 @@ var airQualitySensorCapability = {
|
|
|
61029
61091
|
*/
|
|
61030
61092
|
var AmbientLightSensorStatusSchema = object({
|
|
61031
61093
|
/** Current illuminance in lux (lx). `null` when the sample was refused (D393). */
|
|
61032
|
-
|
|
61094
|
+
illuminance: number().min(0).nullable().meta(readingMeta("illuminance", {
|
|
61033
61095
|
precision: 0,
|
|
61034
61096
|
label: "Illuminance"
|
|
61035
61097
|
})),
|
|
@@ -61058,7 +61120,7 @@ var ambientLightSensorCapability = {
|
|
|
61058
61120
|
/**
|
|
61059
61121
|
* History (D850): recorded series. Wide range, so a RELATIVE deadband (10 %).
|
|
61060
61122
|
*/
|
|
61061
|
-
history: { fields: {
|
|
61123
|
+
history: { fields: { illuminance: {
|
|
61062
61124
|
kind: "gauge",
|
|
61063
61125
|
unit: "lx",
|
|
61064
61126
|
deadbandPct: 10,
|
|
@@ -61371,7 +61433,7 @@ var BatteryStatusSchema = object({
|
|
|
61371
61433
|
* Consumers must SKIP a null rather than coerce it — `battery-band` already
|
|
61372
61434
|
* declines to band a non-finite reading, which is the correct shape.
|
|
61373
61435
|
*/
|
|
61374
|
-
|
|
61436
|
+
level: number().min(0).max(100).nullable().meta(readingMeta("percentage", { label: "Charge" })),
|
|
61375
61437
|
/**
|
|
61376
61438
|
* Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
|
|
61377
61439
|
* Reolink-specific for the Solar Panel 2 accessory (will become
|
|
@@ -61381,7 +61443,7 @@ var BatteryStatusSchema = object({
|
|
|
61381
61443
|
* `'unknown'` is the absence of an answer: the provider has not read the
|
|
61382
61444
|
* power fields yet, or the firmware reported neither. Before it existed,
|
|
61383
61445
|
* two unreadable fields produced `'none'`, and a camera nobody had reached
|
|
61384
|
-
* was drawn "on battery alone" — the same D315 defect `
|
|
61446
|
+
* was drawn "on battery alone" — the same D315 defect `level` closed
|
|
61385
61447
|
* by going nullable. Consumers SKIP it (no charger state published, no
|
|
61386
61448
|
* glyph, no HomeKit ChargingState) rather than coerce it either way.
|
|
61387
61449
|
*/
|
|
@@ -61405,7 +61467,7 @@ var BatteryStatusSchema = object({
|
|
|
61405
61467
|
* that only report charge. A second reading on this cap, not a second
|
|
61406
61468
|
* `numeric-sensor` on the same device.
|
|
61407
61469
|
*/
|
|
61408
|
-
|
|
61470
|
+
voltage: number().nullable().optional().meta(readingMeta("voltage", { label: "Voltage" })),
|
|
61409
61471
|
/**
|
|
61410
61472
|
* Ms epoch of the last time the device PROVED it was reachable — a
|
|
61411
61473
|
* completed firmware round-trip, an observed wake, or an inbound push
|
|
@@ -61439,7 +61501,7 @@ var BatteryStatusSchema = object({
|
|
|
61439
61501
|
/**
|
|
61440
61502
|
* True when the source is a BINARY low-battery indicator (HA
|
|
61441
61503
|
* `binary_sensor` device_class=battery / `LOW_BAT`) that has no real
|
|
61442
|
-
* charge level — `
|
|
61504
|
+
* charge level — `level` is then a coarse stand-in (100 = normal,
|
|
61443
61505
|
* sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
|
|
61444
61506
|
* misleading exact percentage. Absent/false → genuine 0–100 % reading.
|
|
61445
61507
|
*/
|
|
@@ -61459,15 +61521,15 @@ var BATTERY_DEVICE_TYPES = [
|
|
|
61459
61521
|
var batteryCustomize = {
|
|
61460
61522
|
version: 1,
|
|
61461
61523
|
targets: [{
|
|
61462
|
-
id: "
|
|
61524
|
+
id: "level",
|
|
61463
61525
|
cardinality: "scalar",
|
|
61464
61526
|
vocabulary: {
|
|
61465
61527
|
cap: "battery",
|
|
61466
|
-
stateField: "
|
|
61528
|
+
stateField: "level"
|
|
61467
61529
|
},
|
|
61468
61530
|
deviceTypes: BATTERY_DEVICE_TYPES,
|
|
61469
61531
|
apply: "add",
|
|
61470
|
-
path: "
|
|
61532
|
+
path: "level",
|
|
61471
61533
|
sources: [{
|
|
61472
61534
|
kind: "field",
|
|
61473
61535
|
valueKinds: ["number", "string"],
|
|
@@ -61561,7 +61623,7 @@ onStatusChanged: { data: object({
|
|
|
61561
61623
|
schema: BatteryStatusSchema,
|
|
61562
61624
|
kind: "push",
|
|
61563
61625
|
empty: {
|
|
61564
|
-
|
|
61626
|
+
level: null,
|
|
61565
61627
|
charging: "unknown",
|
|
61566
61628
|
sleeping: false,
|
|
61567
61629
|
lastUpdated: 0
|
|
@@ -61588,11 +61650,11 @@ onStatusChanged: { data: object({
|
|
|
61588
61650
|
* History (D850): recorded series. The generic capture replaces the `battery` series of `pipeline-analytics:stats-5m`.
|
|
61589
61651
|
*/
|
|
61590
61652
|
history: { fields: {
|
|
61591
|
-
|
|
61653
|
+
level: {
|
|
61592
61654
|
kind: "gauge",
|
|
61593
61655
|
unit: "%"
|
|
61594
61656
|
},
|
|
61595
|
-
|
|
61657
|
+
voltage: {
|
|
61596
61658
|
kind: "gauge",
|
|
61597
61659
|
unit: "V"
|
|
61598
61660
|
}
|
|
@@ -61652,14 +61714,14 @@ var binaryCapability = {
|
|
|
61652
61714
|
* controls to this single-method surface.
|
|
61653
61715
|
*
|
|
61654
61716
|
* The cap is intentionally minimal: a single `setBrightness({deviceId,
|
|
61655
|
-
*
|
|
61717
|
+
* level})` mutation plus the auto-injected `getStatus`. Drivers
|
|
61656
61718
|
* that expose richer controls (color temperature, scenes, schedules)
|
|
61657
61719
|
* should surface those via the device's `getSettingsUISchema()`
|
|
61658
61720
|
* instead of bloating this cap.
|
|
61659
61721
|
*/
|
|
61660
61722
|
var BrightnessStatusSchema = object({
|
|
61661
61723
|
/** Current level as 0..100 inclusive. Firmware-reported. */
|
|
61662
|
-
|
|
61724
|
+
level: number().min(0).max(100).meta(readingMeta("percentage")),
|
|
61663
61725
|
/** Ms epoch of the last operator-driven change. Useful for UI freshness. */
|
|
61664
61726
|
lastChangedAt: number()
|
|
61665
61727
|
});
|
|
@@ -61671,7 +61733,7 @@ var brightnessCapability = {
|
|
|
61671
61733
|
deviceTypes: [DeviceType.Light],
|
|
61672
61734
|
methods: { setBrightness: method(object({
|
|
61673
61735
|
deviceId: number().int().nonnegative(),
|
|
61674
|
-
|
|
61736
|
+
level: number().min(0).max(100)
|
|
61675
61737
|
}), _void(), {
|
|
61676
61738
|
kind: "mutation",
|
|
61677
61739
|
auth: "protected"
|
|
@@ -61684,7 +61746,7 @@ var brightnessCapability = {
|
|
|
61684
61746
|
*/
|
|
61685
61747
|
onBrightnessChanged: { data: object({
|
|
61686
61748
|
deviceId: number(),
|
|
61687
|
-
|
|
61749
|
+
level: number().min(0).max(100),
|
|
61688
61750
|
lastChangedAt: number()
|
|
61689
61751
|
}) } },
|
|
61690
61752
|
status: {
|
|
@@ -61707,7 +61769,7 @@ onBrightnessChanged: { data: object({
|
|
|
61707
61769
|
/**
|
|
61708
61770
|
* History (D850): recorded series. Actuator tier: level keeps every change.
|
|
61709
61771
|
*/
|
|
61710
|
-
history: { fields: {
|
|
61772
|
+
history: { fields: { level: {
|
|
61711
61773
|
kind: "gauge",
|
|
61712
61774
|
unit: "%",
|
|
61713
61775
|
minIntervalMs: 0
|
|
@@ -62331,11 +62393,11 @@ var ColorInputSchema = discriminatedUnion("mode", [
|
|
|
62331
62393
|
}),
|
|
62332
62394
|
object({
|
|
62333
62395
|
mode: literal("mired"),
|
|
62334
|
-
|
|
62396
|
+
colorTemperature: number().int().min(50).max(1e3)
|
|
62335
62397
|
})
|
|
62336
62398
|
]);
|
|
62337
62399
|
var ColorStatusSchema = object({
|
|
62338
|
-
/** Active color mode — which of `rgb` / `hsv` / `
|
|
62400
|
+
/** Active color mode — which of `rgb` / `hsv` / `colorTemperature` reflects
|
|
62339
62401
|
* the bulb's current state. */
|
|
62340
62402
|
mode: _enum([
|
|
62341
62403
|
"rgb",
|
|
@@ -62347,7 +62409,7 @@ var ColorStatusSchema = object({
|
|
|
62347
62409
|
/** Populated when `mode === 'hsv'`. */
|
|
62348
62410
|
hsv: HsvTripletSchema.optional(),
|
|
62349
62411
|
/** Populated when `mode === 'mired'`. */
|
|
62350
|
-
|
|
62412
|
+
colorTemperature: number().int().optional().meta(readingMeta("colour-temperature")),
|
|
62351
62413
|
/** Ms epoch of the last operator-driven change. */
|
|
62352
62414
|
lastChangedAt: number()
|
|
62353
62415
|
});
|
|
@@ -62379,7 +62441,7 @@ onColorChanged: { data: object({
|
|
|
62379
62441
|
]),
|
|
62380
62442
|
rgb: RgbTripletSchema.optional(),
|
|
62381
62443
|
hsv: HsvTripletSchema.optional(),
|
|
62382
|
-
|
|
62444
|
+
colorTemperature: number().int().optional(),
|
|
62383
62445
|
lastChangedAt: number()
|
|
62384
62446
|
}) } },
|
|
62385
62447
|
status: {
|
|
@@ -63292,11 +63354,11 @@ var DishwasherStatusSchema = object({
|
|
|
63292
63354
|
/** Feature keys of the programs the appliance currently offers — drives the UI selector. */
|
|
63293
63355
|
availablePrograms: array(string()),
|
|
63294
63356
|
/** Seconds remaining on the active cycle, or null when not running / not known. */
|
|
63295
|
-
|
|
63357
|
+
remaining: number().int().nonnegative().nullable().meta(readingMeta("duration")),
|
|
63296
63358
|
/** Seconds the delayed start is set to (time until the cycle starts), or null. */
|
|
63297
|
-
|
|
63359
|
+
delayedStart: number().int().nonnegative().nullable().meta(readingMeta("duration")),
|
|
63298
63360
|
/** Cycle completion 0..100, or null when not applicable. */
|
|
63299
|
-
|
|
63361
|
+
progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
63300
63362
|
/** True when the door is reported open; null when the door state is not known. */
|
|
63301
63363
|
doorOpen: boolean().nullable(),
|
|
63302
63364
|
/** True when the door is latched (locked) during a cycle; null when not reported. */
|
|
@@ -63515,14 +63577,14 @@ var dishwasherCapability = {
|
|
|
63515
63577
|
runtimeState: DishwasherStatusSchema,
|
|
63516
63578
|
durability: "session",
|
|
63517
63579
|
history: { fields: {
|
|
63518
|
-
|
|
63580
|
+
progress: {
|
|
63519
63581
|
kind: "gauge",
|
|
63520
63582
|
unit: "%",
|
|
63521
63583
|
deadband: 2
|
|
63522
63584
|
},
|
|
63523
63585
|
state: { kind: "enum" },
|
|
63524
63586
|
operationState: { kind: "enum" },
|
|
63525
|
-
|
|
63587
|
+
remaining: {
|
|
63526
63588
|
kind: "gauge",
|
|
63527
63589
|
unit: "s",
|
|
63528
63590
|
minIntervalMs: 6e4
|
|
@@ -64153,7 +64215,7 @@ var FanDirectionSchema = _enum(["forward", "reverse"]);
|
|
|
64153
64215
|
var FanControlStatusSchema = object({
|
|
64154
64216
|
/** Active speed as 0..100 inclusive. Null when the device has no
|
|
64155
64217
|
* speed surface (single-speed fan). */
|
|
64156
|
-
|
|
64218
|
+
speed: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
64157
64219
|
/** Speed granularity the device accepts (HA `percentage_step`, e.g. 25 for
|
|
64158
64220
|
* a 4-speed fan). Absent when unknown — the UI then falls back to step 1. */
|
|
64159
64221
|
percentageStep: number().positive().optional().meta(readingMeta("percentage")),
|
|
@@ -64180,7 +64242,7 @@ var fanControlCapability = {
|
|
|
64180
64242
|
methods: {
|
|
64181
64243
|
setPercentage: method(object({
|
|
64182
64244
|
deviceId: number().int().nonnegative(),
|
|
64183
|
-
|
|
64245
|
+
speed: number().min(0).max(100)
|
|
64184
64246
|
}), _void(), {
|
|
64185
64247
|
kind: "mutation",
|
|
64186
64248
|
auth: "protected"
|
|
@@ -64213,7 +64275,7 @@ var fanControlCapability = {
|
|
|
64213
64275
|
},
|
|
64214
64276
|
/**
|
|
64215
64277
|
* Runtime-state slice — mirrored by the kernel. UI fan speed
|
|
64216
|
-
* sliders read `
|
|
64278
|
+
* sliders read `speed` for live updates.
|
|
64217
64279
|
*/
|
|
64218
64280
|
runtimeState: FanControlStatusSchema,
|
|
64219
64281
|
/**
|
|
@@ -64227,7 +64289,7 @@ var fanControlCapability = {
|
|
|
64227
64289
|
* History (D850): recorded series. Actuator tier: speed keeps every change.
|
|
64228
64290
|
*/
|
|
64229
64291
|
history: { fields: {
|
|
64230
|
-
|
|
64292
|
+
speed: {
|
|
64231
64293
|
kind: "gauge",
|
|
64232
64294
|
unit: "%",
|
|
64233
64295
|
minIntervalMs: 0
|
|
@@ -64672,7 +64734,7 @@ var humidifierCapability = {
|
|
|
64672
64734
|
*/
|
|
64673
64735
|
var HumiditySensorStatusSchema = object({
|
|
64674
64736
|
/** Current relative humidity, 0..100. `null` when the sample was refused (D393). */
|
|
64675
|
-
|
|
64737
|
+
humidity: number().min(0).max(100).nullable().meta(readingMeta("humidity", {
|
|
64676
64738
|
precision: 0,
|
|
64677
64739
|
label: "Humidity"
|
|
64678
64740
|
})),
|
|
@@ -64701,7 +64763,7 @@ var humiditySensorCapability = {
|
|
|
64701
64763
|
/**
|
|
64702
64764
|
* History (D850): recorded series.
|
|
64703
64765
|
*/
|
|
64704
|
-
history: { fields: {
|
|
64766
|
+
history: { fields: { humidity: {
|
|
64705
64767
|
kind: "gauge",
|
|
64706
64768
|
unit: "%",
|
|
64707
64769
|
deadband: .5
|
|
@@ -65341,7 +65403,7 @@ var LawnMowerControlStatusSchema = object({
|
|
|
65341
65403
|
batteryLevel: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
65342
65404
|
/** 0..100 mowing-completion percentage of the current task, or null when no
|
|
65343
65405
|
* task is active / progress is unavailable. */
|
|
65344
|
-
|
|
65406
|
+
progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
65345
65407
|
/** Current device/event code (dynamic — mostly status, sometimes an error),
|
|
65346
65408
|
* or null when unknown. */
|
|
65347
65409
|
currentCode: number().nullable().meta(readingMeta("none")),
|
|
@@ -65862,7 +65924,7 @@ var lockControlCapability = {
|
|
|
65862
65924
|
volatileStateFields: ["lastChangedAt"]
|
|
65863
65925
|
};
|
|
65864
65926
|
/**
|
|
65865
|
-
* A monotonic total between resets (D944). Energy uses `power-meter.
|
|
65927
|
+
* A monotonic total between resets (D944). Energy uses `power-meter.energy`
|
|
65866
65928
|
* so dashboards keep one series; every other instantaneous reading lands here.
|
|
65867
65929
|
* `value` is the time integral in the source quantity's accumulated base
|
|
65868
65930
|
* (base-unit seconds, or kWh on the power meter). `null` is a gap, never zero.
|
|
@@ -65956,10 +66018,10 @@ var MediaPlayerStatusSchema = object({
|
|
|
65956
66018
|
currentMedia: MediaInfoSchema.nullable(),
|
|
65957
66019
|
/** Current playback position in ms. Null when not seekable or
|
|
65958
66020
|
* nothing is playing. Pair with `DeviceFeature.MediaPlayerSeek`. */
|
|
65959
|
-
|
|
66021
|
+
position: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
|
|
65960
66022
|
/** Total duration of the current media in ms. Null when unknown
|
|
65961
66023
|
* (live stream) or nothing is playing. */
|
|
65962
|
-
|
|
66024
|
+
duration: number().int().nonnegative().nullable().meta(readingMeta("duration-ms")),
|
|
65963
66025
|
/** Shuffle toggle. Null when no shuffle surface.
|
|
65964
66026
|
* Pair with `DeviceFeature.MediaPlayerShuffle`. */
|
|
65965
66027
|
shuffle: boolean().nullable(),
|
|
@@ -65998,7 +66060,7 @@ var mediaPlayerCapability = {
|
|
|
65998
66060
|
}),
|
|
65999
66061
|
seek: method(object({
|
|
66000
66062
|
deviceId: number().int().nonnegative(),
|
|
66001
|
-
|
|
66063
|
+
position: number().int().nonnegative()
|
|
66002
66064
|
}), _void(), {
|
|
66003
66065
|
kind: "mutation",
|
|
66004
66066
|
auth: "protected"
|
|
@@ -66070,7 +66132,7 @@ var mediaPlayerCapability = {
|
|
|
66070
66132
|
/**
|
|
66071
66133
|
* History (D850): volume (a level an operator or an automation sets; the
|
|
66072
66134
|
* default 10 s floor folds a slider drag into its end value) and mute.
|
|
66073
|
-
* `
|
|
66135
|
+
* `position` is not recorded: it moves continuously while playing.
|
|
66074
66136
|
*/
|
|
66075
66137
|
history: { fields: {
|
|
66076
66138
|
volumeLevel: {
|
|
@@ -67057,9 +67119,9 @@ var NetworkLinkStatusSchema = object({
|
|
|
67057
67119
|
* one whose reading has not landed must not be drawn at 0 %. Consumers
|
|
67058
67120
|
* SKIP a null rather than coerce it.
|
|
67059
67121
|
*/
|
|
67060
|
-
|
|
67122
|
+
signal: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
67061
67123
|
/** Raw received signal strength in dBm, when the firmware reports one. */
|
|
67062
|
-
|
|
67124
|
+
rssi: number().optional().meta(readingMeta("signal-level")),
|
|
67063
67125
|
/** Network name of a wireless link, when the firmware reports it. */
|
|
67064
67126
|
ssid: string().optional(),
|
|
67065
67127
|
/** Ms epoch of the last observation. Lets consumers reason about freshness. */
|
|
@@ -67095,7 +67157,7 @@ onStatusChanged: { data: object({
|
|
|
67095
67157
|
kind: "push",
|
|
67096
67158
|
empty: {
|
|
67097
67159
|
type: "unknown",
|
|
67098
|
-
|
|
67160
|
+
signal: null,
|
|
67099
67161
|
lastUpdated: 0
|
|
67100
67162
|
}
|
|
67101
67163
|
},
|
|
@@ -67118,13 +67180,13 @@ onStatusChanged: { data: object({
|
|
|
67118
67180
|
* History (D850): recorded series.
|
|
67119
67181
|
*/
|
|
67120
67182
|
history: { fields: {
|
|
67121
|
-
|
|
67183
|
+
signal: {
|
|
67122
67184
|
kind: "gauge",
|
|
67123
67185
|
unit: "%",
|
|
67124
67186
|
deadband: 3,
|
|
67125
67187
|
minIntervalMs: 6e4
|
|
67126
67188
|
},
|
|
67127
|
-
|
|
67189
|
+
rssi: {
|
|
67128
67190
|
kind: "gauge",
|
|
67129
67191
|
unit: "dBm",
|
|
67130
67192
|
deadband: 2,
|
|
@@ -68479,16 +68541,16 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
|
|
|
68479
68541
|
* in real-world devices.
|
|
68480
68542
|
*/
|
|
68481
68543
|
var PowerMeterStatusSchema = object({
|
|
68482
|
-
/** Instantaneous power draw
|
|
68483
|
-
|
|
68544
|
+
/** Instantaneous power draw (watts). */
|
|
68545
|
+
power: number().optional().meta(readingMeta("power", { label: "Power" })),
|
|
68484
68546
|
/** Cumulative energy in kilowatt-hours since the meter was reset. */
|
|
68485
|
-
|
|
68486
|
-
/** Voltage
|
|
68487
|
-
|
|
68547
|
+
energy: number().optional().meta(readingMeta("energy", { label: "Energy" })),
|
|
68548
|
+
/** Voltage (volts). */
|
|
68549
|
+
voltage: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
|
|
68488
68550
|
/** Current in amperes. */
|
|
68489
|
-
|
|
68551
|
+
current: number().optional().meta(readingMeta("current", { label: "Current" })),
|
|
68490
68552
|
/** Apparent power in volt-amperes. */
|
|
68491
|
-
|
|
68553
|
+
apparentPower: number().optional().meta(readingMeta("apparent-power")),
|
|
68492
68554
|
/** Power factor (0..1) if reported. */
|
|
68493
68555
|
powerFactor: number().min(0).max(1).optional().meta(readingMeta("ratio")),
|
|
68494
68556
|
/** Ms epoch when the slice was last updated. */
|
|
@@ -68546,14 +68608,14 @@ function powerTarget(id, unit) {
|
|
|
68546
68608
|
advancedExpression: true
|
|
68547
68609
|
};
|
|
68548
68610
|
}
|
|
68549
|
-
/** "Power and energy" extension:
|
|
68611
|
+
/** "Power and energy" extension: power, energy, voltage and current from other devices (D951). */
|
|
68550
68612
|
var powerMeterCustomize = {
|
|
68551
68613
|
version: 1,
|
|
68552
68614
|
targets: [
|
|
68553
|
-
powerTarget("
|
|
68554
|
-
powerTarget("
|
|
68555
|
-
powerTarget("
|
|
68556
|
-
powerTarget("
|
|
68615
|
+
powerTarget("power", "W"),
|
|
68616
|
+
powerTarget("energy", "kWh"),
|
|
68617
|
+
powerTarget("voltage", "V"),
|
|
68618
|
+
powerTarget("current", "A")
|
|
68557
68619
|
]
|
|
68558
68620
|
};
|
|
68559
68621
|
var powerMeterCapability = {
|
|
@@ -68569,41 +68631,41 @@ var powerMeterCapability = {
|
|
|
68569
68631
|
},
|
|
68570
68632
|
runtimeState: PowerMeterStatusSchema,
|
|
68571
68633
|
/**
|
|
68572
|
-
* Runtime-state durability: **restored** — as `numeric-sensor`; `
|
|
68634
|
+
* Runtime-state durability: **restored** — as `numeric-sensor`; `energy` is an accumulator whose restored value is the baseline.
|
|
68573
68635
|
*
|
|
68574
68636
|
* See `RuntimeStateDurability`. Enforced by
|
|
68575
68637
|
* `scripts/check-runtime-state-durability.ts`.
|
|
68576
68638
|
*/
|
|
68577
68639
|
durability: "restored",
|
|
68578
68640
|
/**
|
|
68579
|
-
* History (D850): recorded series. Gauges are floored at 30 s; `
|
|
68641
|
+
* History (D850): recorded series. Gauges are floored at 30 s; `energy` is the one monotonic meter (counter).
|
|
68580
68642
|
*/
|
|
68581
68643
|
history: { fields: {
|
|
68582
|
-
|
|
68644
|
+
power: {
|
|
68583
68645
|
kind: "gauge",
|
|
68584
68646
|
unit: "W",
|
|
68585
68647
|
deadband: 1,
|
|
68586
68648
|
minIntervalMs: 3e4
|
|
68587
68649
|
},
|
|
68588
|
-
|
|
68650
|
+
energy: {
|
|
68589
68651
|
kind: "counter",
|
|
68590
68652
|
unit: "kWh",
|
|
68591
68653
|
deadband: .01,
|
|
68592
68654
|
minIntervalMs: 6e4
|
|
68593
68655
|
},
|
|
68594
|
-
|
|
68656
|
+
voltage: {
|
|
68595
68657
|
kind: "gauge",
|
|
68596
68658
|
unit: "V",
|
|
68597
68659
|
deadband: 1,
|
|
68598
68660
|
minIntervalMs: 3e4
|
|
68599
68661
|
},
|
|
68600
|
-
|
|
68662
|
+
current: {
|
|
68601
68663
|
kind: "gauge",
|
|
68602
68664
|
unit: "A",
|
|
68603
68665
|
deadband: .05,
|
|
68604
68666
|
minIntervalMs: 3e4
|
|
68605
68667
|
},
|
|
68606
|
-
|
|
68668
|
+
apparentPower: {
|
|
68607
68669
|
kind: "gauge",
|
|
68608
68670
|
unit: "VA",
|
|
68609
68671
|
deadband: 1,
|
|
@@ -68653,9 +68715,6 @@ var PresenceStatusSchema = object({
|
|
|
68653
68715
|
location: string().nullable(),
|
|
68654
68716
|
/** GPS coordinates when available. Null otherwise. */
|
|
68655
68717
|
gps: GpsLocationSchema.nullable(),
|
|
68656
|
-
/** Optional battery level of the tracking device (0..100). Null
|
|
68657
|
-
* when not reported. */
|
|
68658
|
-
batteryPercent: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
68659
68718
|
/** Ms epoch when the slice was last updated. */
|
|
68660
68719
|
lastChangedAt: number()
|
|
68661
68720
|
});
|
|
@@ -68684,14 +68743,7 @@ var presenceCapability = {
|
|
|
68684
68743
|
* `scripts/check-runtime-state-durability.ts`.
|
|
68685
68744
|
*/
|
|
68686
68745
|
durability: "restored",
|
|
68687
|
-
|
|
68688
|
-
* History (D850): recorded series.
|
|
68689
|
-
*/
|
|
68690
|
-
history: { fields: { batteryPercent: {
|
|
68691
|
-
kind: "gauge",
|
|
68692
|
-
unit: "%",
|
|
68693
|
-
deadband: 1
|
|
68694
|
-
} } },
|
|
68746
|
+
history: "none",
|
|
68695
68747
|
/** Clock fields: written, but excluded from the compare that decides
|
|
68696
68748
|
* whether persisting is worth a SQLite commit. */
|
|
68697
68749
|
volatileStateFields: ["lastChangedAt"]
|
|
@@ -68706,7 +68758,7 @@ var presenceCapability = {
|
|
|
68706
68758
|
*/
|
|
68707
68759
|
var PressureSensorStatusSchema = object({
|
|
68708
68760
|
/** Current pressure in hPa. `null` when the sample was refused (D393). */
|
|
68709
|
-
|
|
68761
|
+
pressure: number().nullable().meta(readingMeta("pressure", { precision: 0 })),
|
|
68710
68762
|
/** Ms epoch when the slice was last updated. */
|
|
68711
68763
|
lastFetchedAt: number()
|
|
68712
68764
|
});
|
|
@@ -68732,7 +68784,7 @@ var pressureSensorCapability = {
|
|
|
68732
68784
|
/**
|
|
68733
68785
|
* History (D850): recorded series.
|
|
68734
68786
|
*/
|
|
68735
|
-
history: { fields: {
|
|
68787
|
+
history: { fields: { pressure: {
|
|
68736
68788
|
kind: "gauge",
|
|
68737
68789
|
unit: "hPa",
|
|
68738
68790
|
deadband: .1
|
|
@@ -72481,7 +72533,7 @@ var tamperCapability = {
|
|
|
72481
72533
|
*/
|
|
72482
72534
|
var TemperatureSensorStatusSchema = object({
|
|
72483
72535
|
/** Current temperature in Celsius. `null` when the sample was refused (D393). */
|
|
72484
|
-
|
|
72536
|
+
temperature: number().nullable().meta(readingMeta("temperature", {
|
|
72485
72537
|
precision: 1,
|
|
72486
72538
|
label: "Temperature"
|
|
72487
72539
|
})),
|
|
@@ -72510,7 +72562,7 @@ var temperatureSensorCapability = {
|
|
|
72510
72562
|
/**
|
|
72511
72563
|
* History (D850): recorded series.
|
|
72512
72564
|
*/
|
|
72513
|
-
history: { fields: {
|
|
72565
|
+
history: { fields: { temperature: {
|
|
72514
72566
|
kind: "gauge",
|
|
72515
72567
|
unit: "°C",
|
|
72516
72568
|
deadband: .1
|
|
@@ -72807,7 +72859,7 @@ var VacuumControlStatusSchema = object({
|
|
|
72807
72859
|
/** Speed tokens the hardware accepts — drives the UI selector. */
|
|
72808
72860
|
availableFanSpeeds: array(string()),
|
|
72809
72861
|
/** 0..100 cleaning-completion percentage of the current task, or null. */
|
|
72810
|
-
|
|
72862
|
+
progress: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
72811
72863
|
/** Current error code (0 / null = no error). */
|
|
72812
72864
|
errorCode: number().nullable().meta(readingMeta("none")),
|
|
72813
72865
|
/** Human label for {@link errorCode}, or null when none / undecodable. */
|
|
@@ -74514,7 +74566,7 @@ var BaseDevice = class {
|
|
|
74514
74566
|
* `device-local-state.ts`. Drivers access via:
|
|
74515
74567
|
*
|
|
74516
74568
|
* `this.state.battery.sleeping = true` // patches the battery slice
|
|
74517
|
-
* `const pct = this.state.battery.
|
|
74569
|
+
* `const pct = this.state.battery.level` // reads the battery slice
|
|
74518
74570
|
* `this.state.deviceStatus.online = true` // mirrors `markOnline(true)`
|
|
74519
74571
|
*
|
|
74520
74572
|
* Adding a new cap with `runtimeState:` automatically extends this
|
|
@@ -74554,7 +74606,7 @@ var BaseDevice = class {
|
|
|
74554
74606
|
* shape; drivers don't redeclare it, they just write through.
|
|
74555
74607
|
*
|
|
74556
74608
|
* Read: `this.runtimeState.getCapState('battery')` →
|
|
74557
|
-
* `{
|
|
74609
|
+
* `{level, charging, sleeping, lastUpdated}` for any
|
|
74558
74610
|
* provider that registers `batteryCapability`.
|
|
74559
74611
|
* Write: `this.runtimeState.setCapState('battery', { … })`.
|
|
74560
74612
|
*
|
|
@@ -85274,7 +85326,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85274
85326
|
label: t("Full brightness", "Luminosità massima"),
|
|
85275
85327
|
phrase: t("Set {device} to full brightness", "Porta {device} alla massima luminosità"),
|
|
85276
85328
|
icon: "sun",
|
|
85277
|
-
args: {
|
|
85329
|
+
args: { level: 100 }
|
|
85278
85330
|
},
|
|
85279
85331
|
{
|
|
85280
85332
|
id: "brightness.half",
|
|
@@ -85282,7 +85334,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85282
85334
|
label: t("Half brightness", "Luminosità a metà"),
|
|
85283
85335
|
phrase: t("Dim {device} to half", "Abbassa {device} a metà luminosità"),
|
|
85284
85336
|
icon: "sun-dim",
|
|
85285
|
-
args: {
|
|
85337
|
+
args: { level: 50 }
|
|
85286
85338
|
},
|
|
85287
85339
|
{
|
|
85288
85340
|
id: "brightness.off",
|
|
@@ -85290,16 +85342,16 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85290
85342
|
label: t("Brightness off", "Luminosità a zero"),
|
|
85291
85343
|
phrase: t("Dim {device} to zero", "Abbassa {device} a zero"),
|
|
85292
85344
|
icon: "lightbulb-off",
|
|
85293
|
-
args: {
|
|
85345
|
+
args: { level: 0 }
|
|
85294
85346
|
},
|
|
85295
85347
|
{
|
|
85296
85348
|
id: "brightness.set",
|
|
85297
85349
|
method: "setBrightness",
|
|
85298
85350
|
label: t("Set brightness", "Imposta la luminosità"),
|
|
85299
|
-
phrase: t("Set the brightness of {device} to {
|
|
85351
|
+
phrase: t("Set the brightness of {device} to {level}", "Imposta la luminosità di {device} a {level}"),
|
|
85300
85352
|
icon: "sun-medium",
|
|
85301
85353
|
openArgs: [{
|
|
85302
|
-
key: "
|
|
85354
|
+
key: "level",
|
|
85303
85355
|
label: PERCENT,
|
|
85304
85356
|
offer: {
|
|
85305
85357
|
kind: "number",
|
|
@@ -85313,13 +85365,13 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85313
85365
|
],
|
|
85314
85366
|
state: [{
|
|
85315
85367
|
kind: "numeric",
|
|
85316
|
-
field: "
|
|
85368
|
+
field: "level",
|
|
85317
85369
|
quantity: t("the brightness", "la luminosità"),
|
|
85318
85370
|
label: t("Brightness", "Luminosità"),
|
|
85319
85371
|
unit: "%",
|
|
85320
85372
|
icon: "sun"
|
|
85321
85373
|
}],
|
|
85322
|
-
events: { onBrightnessChanged: { notOperatorFacing: "the `
|
|
85374
|
+
events: { onBrightnessChanged: { notOperatorFacing: "the `level` state trigger reads the same change" } }
|
|
85323
85375
|
},
|
|
85324
85376
|
color: {
|
|
85325
85377
|
scope: "device",
|
|
@@ -85333,7 +85385,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85333
85385
|
icon: "sun",
|
|
85334
85386
|
args: { color: {
|
|
85335
85387
|
mode: "mired",
|
|
85336
|
-
|
|
85388
|
+
colorTemperature: 370
|
|
85337
85389
|
} }
|
|
85338
85390
|
},
|
|
85339
85391
|
{
|
|
@@ -85344,7 +85396,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85344
85396
|
icon: "snowflake",
|
|
85345
85397
|
args: { color: {
|
|
85346
85398
|
mode: "mired",
|
|
85347
|
-
|
|
85399
|
+
colorTemperature: 200
|
|
85348
85400
|
} }
|
|
85349
85401
|
},
|
|
85350
85402
|
{
|
|
@@ -85958,7 +86010,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85958
86010
|
label: t("Fan off", "Ventilatore spento"),
|
|
85959
86011
|
phrase: t("Stop {device}", "Ferma {device}"),
|
|
85960
86012
|
icon: "power-off",
|
|
85961
|
-
args: {
|
|
86013
|
+
args: { speed: 0 }
|
|
85962
86014
|
},
|
|
85963
86015
|
{
|
|
85964
86016
|
id: "fan.full",
|
|
@@ -85966,16 +86018,16 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
85966
86018
|
label: t("Fan full", "Ventilatore al massimo"),
|
|
85967
86019
|
phrase: t("Run {device} at full speed", "Porta {device} alla massima velocità"),
|
|
85968
86020
|
icon: "fan",
|
|
85969
|
-
args: {
|
|
86021
|
+
args: { speed: 100 }
|
|
85970
86022
|
},
|
|
85971
86023
|
{
|
|
85972
86024
|
id: "fan.speed",
|
|
85973
86025
|
method: "setPercentage",
|
|
85974
86026
|
label: t("Set speed", "Imposta la velocità"),
|
|
85975
|
-
phrase: t("Set the speed of {device} to {
|
|
86027
|
+
phrase: t("Set the speed of {device} to {speed}", "Imposta la velocità di {device} al {speed}"),
|
|
85976
86028
|
icon: "fan",
|
|
85977
86029
|
openArgs: [{
|
|
85978
|
-
key: "
|
|
86030
|
+
key: "speed",
|
|
85979
86031
|
label: t("Speed", "Velocità"),
|
|
85980
86032
|
offer: {
|
|
85981
86033
|
kind: "number",
|
|
@@ -86037,7 +86089,7 @@ var ACTUATOR_CAP_VOCABULARY = {
|
|
|
86037
86089
|
],
|
|
86038
86090
|
state: [{
|
|
86039
86091
|
kind: "numeric",
|
|
86040
|
-
field: "
|
|
86092
|
+
field: "speed",
|
|
86041
86093
|
quantity: t("the speed", "la velocità"),
|
|
86042
86094
|
label: t("Speed", "Velocità"),
|
|
86043
86095
|
unit: "%",
|
|
@@ -86835,7 +86887,7 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
86835
86887
|
},
|
|
86836
86888
|
{
|
|
86837
86889
|
kind: "numeric",
|
|
86838
|
-
field: "
|
|
86890
|
+
field: "progress",
|
|
86839
86891
|
quantity: t("the cycle progress", "l’avanzamento del lavaggio"),
|
|
86840
86892
|
label: t("Progress", "Avanzamento"),
|
|
86841
86893
|
unit: "%",
|
|
@@ -87193,10 +87245,10 @@ var APPLIANCE_CAP_VOCABULARY = {
|
|
|
87193
87245
|
id: "media.seek",
|
|
87194
87246
|
method: "seek",
|
|
87195
87247
|
label: t("Seek", "Vai al punto"),
|
|
87196
|
-
phrase: t("Move {device} to {
|
|
87248
|
+
phrase: t("Move {device} to {position}", "Porta {device} al punto {position}"),
|
|
87197
87249
|
icon: "fast-forward",
|
|
87198
87250
|
openArgs: [{
|
|
87199
|
-
key: "
|
|
87251
|
+
key: "position",
|
|
87200
87252
|
label: t("Position", "Posizione"),
|
|
87201
87253
|
offer: {
|
|
87202
87254
|
kind: "number",
|
|
@@ -88245,7 +88297,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88245
88297
|
state: [
|
|
88246
88298
|
{
|
|
88247
88299
|
kind: "numeric",
|
|
88248
|
-
field: "
|
|
88300
|
+
field: "co2",
|
|
88249
88301
|
quantity: t("the CO₂", "la CO₂"),
|
|
88250
88302
|
label: t("CO₂", "CO₂"),
|
|
88251
88303
|
unit: "ppm",
|
|
@@ -88253,7 +88305,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88253
88305
|
},
|
|
88254
88306
|
{
|
|
88255
88307
|
kind: "numeric",
|
|
88256
|
-
field: "
|
|
88308
|
+
field: "voc",
|
|
88257
88309
|
quantity: t("the VOC level", "il livello di COV"),
|
|
88258
88310
|
label: t("VOC", "COV"),
|
|
88259
88311
|
unit: "ppb",
|
|
@@ -88289,7 +88341,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88289
88341
|
noun: t("Light level", "Luminosità ambiente"),
|
|
88290
88342
|
state: [{
|
|
88291
88343
|
kind: "numeric",
|
|
88292
|
-
field: "
|
|
88344
|
+
field: "illuminance",
|
|
88293
88345
|
quantity: t("the light level", "la luminosità"),
|
|
88294
88346
|
label: t("Illuminance", "Illuminamento"),
|
|
88295
88347
|
unit: "lx",
|
|
@@ -88492,7 +88544,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88492
88544
|
noun: t("Humidity", "Umidità"),
|
|
88493
88545
|
state: [{
|
|
88494
88546
|
kind: "numeric",
|
|
88495
|
-
field: "
|
|
88547
|
+
field: "humidity",
|
|
88496
88548
|
quantity: t("the humidity", "l’umidità"),
|
|
88497
88549
|
label: t("Humidity", "Umidità"),
|
|
88498
88550
|
unit: "%",
|
|
@@ -88540,7 +88592,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88540
88592
|
state: [
|
|
88541
88593
|
{
|
|
88542
88594
|
kind: "numeric",
|
|
88543
|
-
field: "
|
|
88595
|
+
field: "power",
|
|
88544
88596
|
quantity: t("the power draw", "il consumo"),
|
|
88545
88597
|
label: t("Power", "Potenza"),
|
|
88546
88598
|
unit: "W",
|
|
@@ -88548,7 +88600,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88548
88600
|
},
|
|
88549
88601
|
{
|
|
88550
88602
|
kind: "numeric",
|
|
88551
|
-
field: "
|
|
88603
|
+
field: "energy",
|
|
88552
88604
|
quantity: t("the energy used", "l’energia consumata"),
|
|
88553
88605
|
label: t("Energy", "Energia"),
|
|
88554
88606
|
unit: "kWh",
|
|
@@ -88556,7 +88608,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88556
88608
|
},
|
|
88557
88609
|
{
|
|
88558
88610
|
kind: "numeric",
|
|
88559
|
-
field: "
|
|
88611
|
+
field: "voltage",
|
|
88560
88612
|
quantity: t("the voltage", "la tensione"),
|
|
88561
88613
|
label: t("Voltage", "Tensione"),
|
|
88562
88614
|
unit: "V",
|
|
@@ -88564,7 +88616,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88564
88616
|
},
|
|
88565
88617
|
{
|
|
88566
88618
|
kind: "numeric",
|
|
88567
|
-
field: "
|
|
88619
|
+
field: "current",
|
|
88568
88620
|
quantity: t("the current", "la corrente"),
|
|
88569
88621
|
label: t("Current", "Corrente"),
|
|
88570
88622
|
unit: "A",
|
|
@@ -88581,13 +88633,6 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88581
88633
|
label: t("Where", "Posizione"),
|
|
88582
88634
|
phrase: t("When {device} is at {value}", "Quando {device} è in {value}"),
|
|
88583
88635
|
icon: "map-pin"
|
|
88584
|
-
}, {
|
|
88585
|
-
kind: "numeric",
|
|
88586
|
-
field: "batteryPercent",
|
|
88587
|
-
quantity: t("the phone battery", "la batteria del telefono"),
|
|
88588
|
-
label: t("Battery", "Batteria"),
|
|
88589
|
-
unit: "%",
|
|
88590
|
-
icon: "battery"
|
|
88591
88636
|
}]
|
|
88592
88637
|
},
|
|
88593
88638
|
"pressure-sensor": {
|
|
@@ -88595,7 +88640,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88595
88640
|
noun: t("Pressure", "Pressione"),
|
|
88596
88641
|
state: [{
|
|
88597
88642
|
kind: "numeric",
|
|
88598
|
-
field: "
|
|
88643
|
+
field: "pressure",
|
|
88599
88644
|
quantity: t("the pressure", "la pressione"),
|
|
88600
88645
|
label: t("Pressure", "Pressione"),
|
|
88601
88646
|
unit: "hPa",
|
|
@@ -88631,7 +88676,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88631
88676
|
noun: t("Temperature", "Temperatura"),
|
|
88632
88677
|
state: [{
|
|
88633
88678
|
kind: "numeric",
|
|
88634
|
-
field: "
|
|
88679
|
+
field: "temperature",
|
|
88635
88680
|
quantity: t("the temperature", "la temperatura"),
|
|
88636
88681
|
label: t("Temperature", "Temperatura"),
|
|
88637
88682
|
unit: "°C",
|
|
@@ -88702,7 +88747,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88702
88747
|
state: [
|
|
88703
88748
|
{
|
|
88704
88749
|
kind: "numeric",
|
|
88705
|
-
field: "
|
|
88750
|
+
field: "level",
|
|
88706
88751
|
quantity: t("the battery level", "il livello della batteria"),
|
|
88707
88752
|
label: t("Battery", "Batteria"),
|
|
88708
88753
|
unit: "%",
|
|
@@ -88744,7 +88789,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88744
88789
|
icon: "battery-charging"
|
|
88745
88790
|
}
|
|
88746
88791
|
],
|
|
88747
|
-
events: { onStatusChanged: { notOperatorFacing: "the
|
|
88792
|
+
events: { onStatusChanged: { notOperatorFacing: "the level / sleeping / charging state triggers each read one field of this change" } },
|
|
88748
88793
|
extraEvents: [{
|
|
88749
88794
|
category: EventCategory.DeviceAwake,
|
|
88750
88795
|
label: t("Woke up", "Risvegliato"),
|
|
@@ -88762,7 +88807,7 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
88762
88807
|
noun: t("Network link", "Collegamento di rete"),
|
|
88763
88808
|
state: [{
|
|
88764
88809
|
kind: "numeric",
|
|
88765
|
-
field: "
|
|
88810
|
+
field: "signal",
|
|
88766
88811
|
quantity: t("the signal strength", "l’intensità del segnale"),
|
|
88767
88812
|
label: t("Signal", "Segnale"),
|
|
88768
88813
|
unit: "%",
|
|
@@ -92133,6 +92178,33 @@ function isAudioClassName(name) {
|
|
|
92133
92178
|
return name.trim().toLowerCase().startsWith(`${AUDIO_GROUP_KEY}-`);
|
|
92134
92179
|
}
|
|
92135
92180
|
new Set(["devices", "classes"]);
|
|
92181
|
+
function valueFor(param, raw) {
|
|
92182
|
+
switch (param.type) {
|
|
92183
|
+
case "enum": return typeof raw === "string" && (param.options ?? []).some((o) => o.value === raw) ? raw : void 0;
|
|
92184
|
+
case "number": {
|
|
92185
|
+
if (typeof raw !== "number" || !Number.isFinite(raw)) return void 0;
|
|
92186
|
+
const floor = param.min ?? Number.NEGATIVE_INFINITY;
|
|
92187
|
+
const ceil = param.max ?? Number.POSITIVE_INFINITY;
|
|
92188
|
+
return Math.min(ceil, Math.max(floor, raw));
|
|
92189
|
+
}
|
|
92190
|
+
case "boolean": return typeof raw === "boolean" ? raw : void 0;
|
|
92191
|
+
case "string": return typeof raw === "string" && raw.length > 0 ? raw : void 0;
|
|
92192
|
+
}
|
|
92193
|
+
}
|
|
92194
|
+
/**
|
|
92195
|
+
* The values a rule target's `params` contribute for a kind: only declared
|
|
92196
|
+
* keys, only valid values. `undefined` when nothing survives — a notifier that
|
|
92197
|
+
* declared nothing is never handed a `delivery` block.
|
|
92198
|
+
*/
|
|
92199
|
+
function resolveDeliveryParams(declared, params) {
|
|
92200
|
+
if (declared === void 0 || params === void 0) return void 0;
|
|
92201
|
+
const out = {};
|
|
92202
|
+
for (const param of declared) {
|
|
92203
|
+
const value = valueFor(param, params[param.key]);
|
|
92204
|
+
if (value !== void 0) out[param.key] = value;
|
|
92205
|
+
}
|
|
92206
|
+
return Object.keys(out).length > 0 ? out : void 0;
|
|
92207
|
+
}
|
|
92136
92208
|
/**
|
|
92137
92209
|
* WHICH narrowing filter speaks about WHICH system-event kind — one predicate,
|
|
92138
92210
|
* consumed by the rule ENGINE and by every rule EDITOR.
|
|
@@ -98558,6 +98630,12 @@ Object.defineProperty(exports, "resolveClusterModelPin", {
|
|
|
98558
98630
|
return resolveClusterModelPin;
|
|
98559
98631
|
}
|
|
98560
98632
|
});
|
|
98633
|
+
Object.defineProperty(exports, "resolveDeliveryParams", {
|
|
98634
|
+
enumerable: true,
|
|
98635
|
+
get: function() {
|
|
98636
|
+
return resolveDeliveryParams;
|
|
98637
|
+
}
|
|
98638
|
+
});
|
|
98561
98639
|
Object.defineProperty(exports, "resolveLocationMode", {
|
|
98562
98640
|
enumerable: true,
|
|
98563
98641
|
get: function() {
|