@camstack/addon-admin-ui 1.2.471 → 1.2.473
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/dist/assets/{AddonAssetIcon-D4joXvAw.js → AddonAssetIcon-DmwaRNVP.js} +1 -1
- package/dist/assets/Addons-Ch5dCeth.js +4 -0
- package/dist/assets/{AdminPage-92KQDOBy.js → AdminPage-B-1YjUaD.js} +1 -1
- package/dist/assets/{AdminSectionedPage-B-MH77Vx.js → AdminSectionedPage-DCas2jUy.js} +1 -1
- package/dist/assets/AiProfiles-ChvfjsXv.js +3 -0
- package/dist/assets/{BrokerForm-HjHrcv-P.js → BrokerForm-x5UJk9ci.js} +1 -1
- package/dist/assets/Build-CUVwS9XA.js +40 -0
- package/dist/assets/Calendars-BMLzvBb6.js +1 -0
- package/dist/assets/Cluster-DaFXU71S.js +1 -0
- package/dist/assets/CompositionCreateForm-BxelZLtf.js +1 -0
- package/dist/assets/{CompositionEditorPage-CdJtfEi1.js → CompositionEditorPage-B_ERZESY.js} +1 -1
- package/dist/assets/Data-CMHfgMXt.js +2 -0
- package/dist/assets/DeviceDetail-CAtDRoZZ.js +2 -0
- package/dist/assets/{DeviceDoActionFields-B7UlBxQ0.js → DeviceDoActionFields-BETAvCYe.js} +1 -1
- package/dist/assets/{Devices-BAfbzc8b.js → Devices-C1DTPVnZ.js} +1 -1
- package/dist/assets/{EmbedPlayerPage-CZM7W_SR.js → EmbedPlayerPage-Bw6TIHbX.js} +1 -1
- package/dist/assets/History-BXTYUTxj.js +1 -0
- package/dist/assets/Identity-DTOixhZS.js +1 -0
- package/dist/assets/IntegrationDetail-CnINeomo.js +1 -0
- package/dist/assets/IntegrationHub-DahW4X5K.js +1 -0
- package/dist/assets/Integrations-Dex6zRMx.js +1 -0
- package/dist/assets/Integrations-HN2iCOqd.js +1 -0
- package/dist/assets/{Library-X3g7Mvql.js → Library-gaMbp-Fr.js} +1 -1
- package/dist/assets/Locations-haT1EJbm.js +3 -0
- package/dist/assets/{Logs-C7Z3D9TY.js → Logs-CtH4NMql.js} +1 -1
- package/dist/assets/{MaskShapeCanvas-wRO0Yeyg.js → MaskShapeCanvas-Byp9XgNC.js} +1 -1
- package/dist/assets/{MotionZonesSettings-C8wTUqjQ.js → MotionZonesSettings-C35beRsS.js} +1 -1
- package/dist/assets/{MyAccess-Di7tv0VI.js → MyAccess-Dj5hcaLN.js} +1 -1
- package/dist/assets/{Network-3FZdyZoe.js → Network-D-v-cA54.js} +1 -1
- package/dist/assets/{NodeAddonsSettingsPanel-ivhHs40k.js → NodeAddonsSettingsPanel-CW_M8Xge.js} +1 -1
- package/dist/assets/Notifications-r5w4Ne2O.js +1 -0
- package/dist/assets/Pipeline-C85hColk.js +1 -0
- package/dist/assets/{PrivacyMaskSettings-DTetXxIV.js → PrivacyMaskSettings-SPaH91xV.js} +1 -1
- package/dist/assets/Recordings-ZYwRaSrC.js +1 -0
- package/dist/assets/{ScanNetworkModal-DPHdPawS.js → ScanNetworkModal-ClvLQ-ol.js} +1 -1
- package/dist/assets/{SceneMonitorEditor-KPTdSp1h.js → SceneMonitorEditor-BvqnlZ2i.js} +1 -1
- package/dist/assets/SessionsList-BCDysQfs.js +2 -0
- package/dist/assets/{Showroom-2gQYW-h2.js → Showroom-jPZcBd6K.js} +1 -1
- package/dist/assets/{System-CDHw7Mcx.js → System-B5Ny1ozj.js} +1 -1
- package/dist/assets/{Terminal-UXpMvEO1.js → Terminal-DYLSrpsL.js} +5 -5
- package/dist/assets/{Viewer-ukAW_oJQ.js → Viewer-GqkHpMmf.js} +1 -1
- package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-KG1b6CPN.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-BlUFdak1.js} +1 -1
- package/dist/assets/{addon-icons-context-gPkLZQ_G.js → addon-icons-context-BUi2hqSA.js} +1 -1
- package/dist/assets/{archive-CxbMF2yZ.js → archive-Bs9ToeWK.js} +1 -1
- package/dist/assets/{assignment-candidates-CQGwwSSC.js → assignment-candidates-e6s6JtrJ.js} +1 -1
- package/dist/assets/{authed-media-DpHGiSZS.js → authed-media-BWhmwHt2.js} +1 -1
- package/dist/assets/{bell-off-CAN5HeZI.js → bell-off-CosUv2Rj.js} +1 -1
- package/dist/assets/{board-model-C6IplvmC.js → board-model-BtdRuNBI.js} +1 -1
- package/dist/assets/{boxes-BIYyTH0E.js → boxes-CA7Sh4JV.js} +1 -1
- package/dist/assets/circle-slash-0Ca1BMK0.js +1 -0
- package/dist/assets/client-DIBstlq5.js +358 -0
- package/dist/assets/{cloud-upload-DvGDSWZB.js → cloud-upload-olZ1M2tJ.js} +1 -1
- package/dist/assets/crop-BZM3UFyT.js +1 -0
- package/dist/assets/{device-integration-icon-CRiv1vER.js → device-integration-icon-656UPgnE.js} +1 -1
- package/dist/assets/device-picker-model-yjEyEWyS.js +1 -0
- package/dist/assets/dist-D6Fj77pb.js +358 -0
- package/dist/assets/{dist-BeSobRch.js → dist-G4Cxki3p.js} +1 -1
- package/dist/assets/{eraser-CvXO1d9P.js → eraser-CABcfjb2.js} +1 -1
- package/dist/assets/event-targets-CHOtaC2B.js +2 -0
- package/dist/assets/{format-Cz7vHmZ6.js → format-BYDOzxSv.js} +1 -1
- package/dist/assets/{hard-drive-download-xDn3u92n.js → hard-drive-download-ClcxzAVo.js} +1 -1
- package/dist/assets/{hostInit-Bcdd4neZ.js → hostInit-DXWqqcl-.js} +1 -1
- package/dist/assets/i18n-D3CF2V_j.js +1 -0
- package/dist/assets/{icons-Uf4a8HzM.js → icons-BmpL14Dq.js} +1 -1
- package/dist/assets/index-BvsP28fN.css +2 -0
- package/dist/assets/index-Cskol4XA.js +4 -0
- package/dist/assets/{key-D63R1Jty.js → key-CURebvKJ.js} +1 -1
- package/dist/assets/{key-round-BH39VAkM.js → key-round-BTmR8Ca5.js} +1 -1
- package/dist/assets/{layers-Cf6Xk9ts.js → layers-BCzFIxnd.js} +1 -1
- package/dist/assets/{linked-devices-model-DYRAb775.js → linked-devices-model-Uzvgx-iv.js} +1 -1
- package/dist/assets/{list-ordered-9heb6Myu.js → list-ordered-BpmnL-Ze.js} +1 -1
- package/dist/assets/{location-owned-usage-DPBYs4L0.js → location-owned-usage-ChLz8liX.js} +1 -1
- package/dist/assets/{log-in-D6jMFDmP.js → log-in-hW2oGppQ.js} +1 -1
- package/dist/assets/{memory-stick-thjjQqgp.js → memory-stick-DJEnjf6G.js} +1 -1
- package/dist/assets/{message-square-plus-RcviJHk6.js → message-square-plus-CZ2oQ3Vr.js} +1 -1
- package/dist/assets/{mf-entry-bootstrap-0-cbb0c272.js → mf-entry-bootstrap-0-0c9682e8.js} +2 -2
- package/dist/assets/{mic-off-DvjWBZuR.js → mic-off-KFKpp3gz.js} +1 -1
- package/dist/assets/{monitor-off-DEBUzb17.js → monitor-off-Cn5TAK6N.js} +1 -1
- package/dist/assets/{monitor-smartphone-rIimQM0r.js → monitor-smartphone-Jvu4UJGi.js} +1 -1
- package/dist/assets/mount-yjEyEWyS.js +1 -0
- package/dist/assets/{player-overlays-DDFLUcm1.js → player-overlays-B_ZfVBiA.js} +1 -1
- package/dist/assets/{recycle-CaQYaqJP.js → recycle-BDm5DJUQ.js} +1 -1
- package/dist/assets/remoteEntry-7WZh94sn.js +1 -0
- package/dist/assets/{scan-eye-BxF3-BiI.js → scan-eye-C7MTwcP4.js} +1 -1
- package/dist/assets/{scissors-DecmVZUv.js → scissors-BQnPBcjw.js} +1 -1
- package/dist/assets/{search-x-CiS8b7vy.js → search-x-DEyDFvNT.js} +1 -1
- package/dist/assets/{send-9ZOtM3uh.js → send-B3qo7thK.js} +1 -1
- package/dist/assets/{settings-2-DVEGaYSK.js → settings-2-C0X8oPpn.js} +1 -1
- package/dist/assets/{speaker-BLIN7g-W.js → speaker-pcRBhz9y.js} +1 -1
- package/dist/assets/src-BVr0SnD-.js +67 -0
- package/dist/assets/step-inspector-model-DjRSZkVO.js +1 -0
- package/dist/assets/{timer-reset-ESt9DRwd.js → timer-reset-CCky8ePa.js} +1 -1
- package/dist/assets/{ungroup-uBZnvhmn.js → ungroup-iaoDNnXe.js} +1 -1
- package/dist/assets/{unlink-BK0Zya0K.js → unlink-8OutaYJL.js} +1 -1
- package/dist/assets/{usb--Z_ViOoE.js → usb-DL2I9kcC.js} +1 -1
- package/dist/assets/{use-scenes-feed-Dpe5Lc_e.js → use-scenes-feed-4lpCQaI1.js} +1 -1
- package/dist/assets/{use-stationary-objects-D9diuPzc.js → use-stationary-objects-P_tT9TQq.js} +1 -1
- package/dist/assets/useEventInvalidation-yjEyEWyS.js +1 -0
- package/dist/assets/{useNodeUrlSelection-B-NA_JqT.js → useNodeUrlSelection-CiraZrDp.js} +1 -1
- package/dist/assets/user-round-4ZziAKb6.js +1 -0
- package/dist/assets/{user-x-HmMRNIMy.js → user-x-DYn__Nok.js} +1 -1
- package/dist/assets/{video-BISLfAY2.js → video-BcVXMTle.js} +1 -1
- package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-w3oA3S6D.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-CXWzeD1i.js} +2 -2
- package/dist/index.html +10 -10
- package/dist/server/addon.js +447 -11
- package/package.json +1 -1
- package/dist/assets/Addons-BNo3Y3g8.js +0 -4
- package/dist/assets/AiProfiles-CTHbBMUB.js +0 -3
- package/dist/assets/Build-Dlf7sJhk.js +0 -40
- package/dist/assets/Calendars-YnCFbUE7.js +0 -1
- package/dist/assets/Cluster-C4BsKola.js +0 -1
- package/dist/assets/CompositionCreateForm-D_Nmi2nG.js +0 -1
- package/dist/assets/Data-DkPbjXNV.js +0 -2
- package/dist/assets/DeviceDetail-BSWf6l6J.js +0 -2
- package/dist/assets/History-BfD8lMf9.js +0 -1
- package/dist/assets/Identity-6QdzCJrT.js +0 -1
- package/dist/assets/IntegrationDetail-B4X-8vcl.js +0 -1
- package/dist/assets/IntegrationHub-DCSIyXBI.js +0 -1
- package/dist/assets/Integrations-JcvhEroF.js +0 -1
- package/dist/assets/Integrations-XcsYTI2I.js +0 -1
- package/dist/assets/Locations-C--r0_cW.js +0 -3
- package/dist/assets/Notifications-D4LJlejx.js +0 -1
- package/dist/assets/Pipeline-BMhn1YbR.js +0 -1
- package/dist/assets/Recordings-Ct8JWW27.js +0 -1
- package/dist/assets/SessionsList-DrklEq9Z.js +0 -2
- package/dist/assets/circle-slash-BWtbQj2T.js +0 -1
- package/dist/assets/client-BnEPcD6s.js +0 -358
- package/dist/assets/crop-CDWciXWB.js +0 -1
- package/dist/assets/device-picker-model-DPfjZqVB.js +0 -1
- package/dist/assets/dist-CMwJjIGP.js +0 -358
- package/dist/assets/event-targets-CIffOoYs.js +0 -2
- package/dist/assets/i18n-DsGcRtAk.js +0 -1
- package/dist/assets/index-BMUVtgYi.css +0 -2
- package/dist/assets/index-CgxpaFwe.js +0 -4
- package/dist/assets/mount-DPfjZqVB.js +0 -1
- package/dist/assets/remoteEntry-DqDbkZhO.js +0 -1
- package/dist/assets/src-CWZRb0ia.js +0 -67
- package/dist/assets/step-inspector-model-B6Fs3NZo.js +0 -1
- package/dist/assets/useEventInvalidation-DPfjZqVB.js +0 -1
- package/dist/assets/user-round-D2ADHRLF.js +0 -1
package/dist/server/addon.js
CHANGED
|
@@ -5435,7 +5435,7 @@ var ZodIssueCode = {
|
|
|
5435
5435
|
var ZodFirstPartyTypeKind;
|
|
5436
5436
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5437
5437
|
//#endregion
|
|
5438
|
-
//#region ../types/dist/sleep-
|
|
5438
|
+
//#region ../types/dist/sleep-B81gwQuR.mjs
|
|
5439
5439
|
/**
|
|
5440
5440
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5441
5441
|
* window to float samples (D455).
|
|
@@ -7961,6 +7961,53 @@ var READING_QUANTITIES = [
|
|
|
7961
7961
|
];
|
|
7962
7962
|
var ReadingQuantitySchema = _enum(READING_QUANTITIES);
|
|
7963
7963
|
new Set(READING_QUANTITIES);
|
|
7964
|
+
/**
|
|
7965
|
+
* Stored unit symbol for a quantity. `none` means the number is dimensionless
|
|
7966
|
+
* (or an index / ratio / count). `device` means the cap has no single unit.
|
|
7967
|
+
*/
|
|
7968
|
+
var QUANTITY_BASE = {
|
|
7969
|
+
temperature: "°C",
|
|
7970
|
+
pressure: "hPa",
|
|
7971
|
+
speed: "m/s",
|
|
7972
|
+
precipitation: "mm",
|
|
7973
|
+
"precipitation-rate": "mm/h",
|
|
7974
|
+
length: "m",
|
|
7975
|
+
area: "m²",
|
|
7976
|
+
illuminance: "lx",
|
|
7977
|
+
irradiance: "W/m²",
|
|
7978
|
+
power: "W",
|
|
7979
|
+
energy: "kWh",
|
|
7980
|
+
voltage: "V",
|
|
7981
|
+
current: "A",
|
|
7982
|
+
"apparent-power": "VA",
|
|
7983
|
+
humidity: "%",
|
|
7984
|
+
percentage: "%",
|
|
7985
|
+
"concentration-volume": "ppm",
|
|
7986
|
+
"concentration-mass": "µg/m³",
|
|
7987
|
+
"concentration-ppb": "ppb",
|
|
7988
|
+
volume: "L",
|
|
7989
|
+
duration: "s",
|
|
7990
|
+
"duration-ms": "ms",
|
|
7991
|
+
information: "B",
|
|
7992
|
+
"sound-level": "dBFS",
|
|
7993
|
+
"signal-level": "dBm",
|
|
7994
|
+
"colour-temperature": "mired",
|
|
7995
|
+
angle: "°",
|
|
7996
|
+
bitrate: "kbps",
|
|
7997
|
+
rate: "fps",
|
|
7998
|
+
mass: "kg",
|
|
7999
|
+
index: "none",
|
|
8000
|
+
ratio: "none",
|
|
8001
|
+
count: "none",
|
|
8002
|
+
none: "none",
|
|
8003
|
+
device: "device"
|
|
8004
|
+
};
|
|
8005
|
+
/** The stored unit, or `undefined` when the quantity has no unit symbol. */
|
|
8006
|
+
function baseUnitOf(quantity) {
|
|
8007
|
+
const symbol = QUANTITY_BASE[quantity];
|
|
8008
|
+
if (symbol === "none" || symbol === "device") return void 0;
|
|
8009
|
+
return symbol;
|
|
8010
|
+
}
|
|
7964
8011
|
function readingMeta(quantity, extras) {
|
|
7965
8012
|
return {
|
|
7966
8013
|
quantity,
|
|
@@ -8528,6 +8575,7 @@ var CAP_NAMES = Object.freeze([
|
|
|
8528
8575
|
"filesystem-browse",
|
|
8529
8576
|
"flood",
|
|
8530
8577
|
"gas",
|
|
8578
|
+
"group-status",
|
|
8531
8579
|
"heating-valve",
|
|
8532
8580
|
"humidifier",
|
|
8533
8581
|
"humidity-sensor",
|
|
@@ -9346,6 +9394,20 @@ Object.freeze({
|
|
|
9346
9394
|
"path": "detected",
|
|
9347
9395
|
"valueType": "boolean"
|
|
9348
9396
|
}],
|
|
9397
|
+
"group-status": [
|
|
9398
|
+
{
|
|
9399
|
+
"path": "included",
|
|
9400
|
+
"valueType": "number"
|
|
9401
|
+
},
|
|
9402
|
+
{
|
|
9403
|
+
"path": "excluded",
|
|
9404
|
+
"valueType": "number"
|
|
9405
|
+
},
|
|
9406
|
+
{
|
|
9407
|
+
"path": "total",
|
|
9408
|
+
"valueType": "number"
|
|
9409
|
+
}
|
|
9410
|
+
],
|
|
9349
9411
|
"heating-valve": [{
|
|
9350
9412
|
"path": "position",
|
|
9351
9413
|
"valueType": "number"
|
|
@@ -10677,7 +10739,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
|
|
|
10677
10739
|
return DeviceRole;
|
|
10678
10740
|
}({});
|
|
10679
10741
|
//#endregion
|
|
10680
|
-
//#region ../types/dist/composition-
|
|
10742
|
+
//#region ../types/dist/composition-B85l9j1M.mjs
|
|
10681
10743
|
/**
|
|
10682
10744
|
* The ffmpeg build every CamStack node downloads, per platform and arch.
|
|
10683
10745
|
*
|
|
@@ -11432,15 +11494,67 @@ function validateExpressionSource(src) {
|
|
|
11432
11494
|
}
|
|
11433
11495
|
return null;
|
|
11434
11496
|
}
|
|
11435
|
-
/**
|
|
11436
|
-
|
|
11437
|
-
|
|
11438
|
-
|
|
11497
|
+
/**
|
|
11498
|
+
* A composition source identity: `(addonId, stableId)`, never a numeric device
|
|
11499
|
+
* id. Split out so helper schemas can name it without a cycle through
|
|
11500
|
+
* `composition.ts` (D659).
|
|
11501
|
+
*/
|
|
11439
11502
|
var CompositionSourceRefSchema = object({
|
|
11440
11503
|
/** The owning addon; `stableId` is unique only within it. */
|
|
11441
11504
|
addonId: string().min(1),
|
|
11442
11505
|
stableId: string().min(1)
|
|
11443
11506
|
});
|
|
11507
|
+
var GROUP_TEMPLATE_IDS = [
|
|
11508
|
+
"temperature",
|
|
11509
|
+
"humidity",
|
|
11510
|
+
"pressure",
|
|
11511
|
+
"illuminance",
|
|
11512
|
+
"power",
|
|
11513
|
+
"energy",
|
|
11514
|
+
"battery",
|
|
11515
|
+
"numeric",
|
|
11516
|
+
"motion",
|
|
11517
|
+
"contact",
|
|
11518
|
+
"leak",
|
|
11519
|
+
"smoke",
|
|
11520
|
+
"occupancy",
|
|
11521
|
+
"binary"
|
|
11522
|
+
];
|
|
11523
|
+
var NUMERIC_AGGREGATES = [
|
|
11524
|
+
"mean",
|
|
11525
|
+
"median",
|
|
11526
|
+
"min",
|
|
11527
|
+
"max",
|
|
11528
|
+
"sum"
|
|
11529
|
+
];
|
|
11530
|
+
var BINARY_AGGREGATES = ["any", "all"];
|
|
11531
|
+
var AGGREGATE_REDUCERS = [
|
|
11532
|
+
"mean",
|
|
11533
|
+
"median",
|
|
11534
|
+
"min",
|
|
11535
|
+
"max",
|
|
11536
|
+
"sum",
|
|
11537
|
+
"any",
|
|
11538
|
+
"all"
|
|
11539
|
+
];
|
|
11540
|
+
var GroupTemplateIdSchema = _enum(GROUP_TEMPLATE_IDS);
|
|
11541
|
+
var AggregateReducerSchema = _enum(AGGREGATE_REDUCERS);
|
|
11542
|
+
/** One member. The field is stored so occupancy can name motion or binary. */
|
|
11543
|
+
var HelperMemberSchema = object({
|
|
11544
|
+
source: CompositionSourceRefSchema,
|
|
11545
|
+
cap: string().min(1),
|
|
11546
|
+
fieldPath: string().min(1)
|
|
11547
|
+
});
|
|
11548
|
+
var HelperSpecSchema = discriminatedUnion("kind", [object({
|
|
11549
|
+
kind: literal("group"),
|
|
11550
|
+
templateId: GroupTemplateIdSchema,
|
|
11551
|
+
aggregate: AggregateReducerSchema,
|
|
11552
|
+
members: array(HelperMemberSchema).min(1).max(64)
|
|
11553
|
+
})]);
|
|
11554
|
+
/** A composed device's stableId is this prefix plus the block id. */
|
|
11555
|
+
var COMPOSED_DEVICE_STABLE_ID_PREFIX = "composed-";
|
|
11556
|
+
/** Longest snippet a `code` source may carry (slice 4). */
|
|
11557
|
+
var MAX_COMPOSITION_CODE_LENGTH = 2e4;
|
|
11444
11558
|
/** One field of one capability of one source device. */
|
|
11445
11559
|
var CompositionFieldReadSchema = object({
|
|
11446
11560
|
source: CompositionSourceRefSchema,
|
|
@@ -11484,7 +11598,33 @@ var CompositionCodeSourceSchema = object({
|
|
|
11484
11598
|
var CompositionFieldSourceSchema = discriminatedUnion("kind", [
|
|
11485
11599
|
CompositionFromSourceSchema,
|
|
11486
11600
|
CompositionExpressionSourceSchema,
|
|
11487
|
-
CompositionCodeSourceSchema
|
|
11601
|
+
CompositionCodeSourceSchema,
|
|
11602
|
+
object({
|
|
11603
|
+
kind: literal("aggregate"),
|
|
11604
|
+
reducer: _enum([
|
|
11605
|
+
"mean",
|
|
11606
|
+
"median",
|
|
11607
|
+
"min",
|
|
11608
|
+
"max",
|
|
11609
|
+
"sum",
|
|
11610
|
+
"any",
|
|
11611
|
+
"all"
|
|
11612
|
+
]),
|
|
11613
|
+
reads: array(CompositionFieldReadSchema).min(1).max(64),
|
|
11614
|
+
/** `value` is the reading; the others are the member counts. */
|
|
11615
|
+
publish: _enum([
|
|
11616
|
+
"value",
|
|
11617
|
+
"included",
|
|
11618
|
+
"excluded",
|
|
11619
|
+
"total"
|
|
11620
|
+
]),
|
|
11621
|
+
/** What a `value` publish does when nobody is included. Counts ignore this. */
|
|
11622
|
+
empty: _enum([
|
|
11623
|
+
"null",
|
|
11624
|
+
"omit",
|
|
11625
|
+
"offline"
|
|
11626
|
+
])
|
|
11627
|
+
})
|
|
11488
11628
|
]);
|
|
11489
11629
|
var CompositionCommandTargetSchema = discriminatedUnion("kind", [object({
|
|
11490
11630
|
kind: literal("forward"),
|
|
@@ -11530,7 +11670,13 @@ var CompositionSchema = object({
|
|
|
11530
11670
|
kind: literal("existing"),
|
|
11531
11671
|
device: CompositionSourceRefSchema
|
|
11532
11672
|
})]),
|
|
11533
|
-
features: array(CompositionFeatureSchema).min(1).max(16)
|
|
11673
|
+
features: array(CompositionFeatureSchema).min(1).max(16),
|
|
11674
|
+
/**
|
|
11675
|
+
* Present when the block is a helper template. Absent on a free
|
|
11676
|
+
* composition (the room example, device 4603). The editor reads this,
|
|
11677
|
+
* never the compiled features.
|
|
11678
|
+
*/
|
|
11679
|
+
helper: HelperSpecSchema.optional()
|
|
11534
11680
|
}).superRefine((composition, ctx) => {
|
|
11535
11681
|
const seen = /* @__PURE__ */ new Set();
|
|
11536
11682
|
composition.features.forEach((feature, index) => {
|
|
@@ -17633,7 +17779,10 @@ var CompositionProblemSchema = object({
|
|
|
17633
17779
|
"target-missing",
|
|
17634
17780
|
"target-unreadable",
|
|
17635
17781
|
"not-replaceable",
|
|
17636
|
-
"native-capability-replace"
|
|
17782
|
+
"native-capability-replace",
|
|
17783
|
+
"mixed-quantity",
|
|
17784
|
+
"helper-mismatch",
|
|
17785
|
+
"member-constraint"
|
|
17637
17786
|
]),
|
|
17638
17787
|
path: string(),
|
|
17639
17788
|
message: string()
|
|
@@ -17654,7 +17803,8 @@ var CompositionUnavailableModeSchema = _enum([
|
|
|
17654
17803
|
"null",
|
|
17655
17804
|
"offline",
|
|
17656
17805
|
"unknown",
|
|
17657
|
-
"release"
|
|
17806
|
+
"release",
|
|
17807
|
+
"omit"
|
|
17658
17808
|
]);
|
|
17659
17809
|
/**
|
|
17660
17810
|
* `derived` reads a source · `clock` reads only `now`, recomputed when a sibling
|
|
@@ -17868,6 +18018,235 @@ Object.freeze({
|
|
|
17868
18018
|
result: ["number", "null"]
|
|
17869
18019
|
}
|
|
17870
18020
|
});
|
|
18021
|
+
/**
|
|
18022
|
+
* One catalog row per base reading a group helper can build (D944 §3).
|
|
18023
|
+
* Data, not a form default written into the block.
|
|
18024
|
+
*/
|
|
18025
|
+
var NOW = {
|
|
18026
|
+
fieldPath: "lastFetchedAt",
|
|
18027
|
+
expr: "now"
|
|
18028
|
+
};
|
|
18029
|
+
var CHANGED = {
|
|
18030
|
+
fieldPath: "lastChangedAt",
|
|
18031
|
+
expr: "now"
|
|
18032
|
+
};
|
|
18033
|
+
function numeric(input) {
|
|
18034
|
+
return {
|
|
18035
|
+
...input,
|
|
18036
|
+
family: "numeric",
|
|
18037
|
+
deviceType: DeviceType.Sensor,
|
|
18038
|
+
memberDeviceType: DeviceType.Sensor,
|
|
18039
|
+
baseUnit: baseUnitOf(input.quantity),
|
|
18040
|
+
aggregates: NUMERIC_AGGREGATES,
|
|
18041
|
+
accept: [{
|
|
18042
|
+
cap: input.outputCap,
|
|
18043
|
+
fieldPath: input.outputField
|
|
18044
|
+
}]
|
|
18045
|
+
};
|
|
18046
|
+
}
|
|
18047
|
+
function binary(input) {
|
|
18048
|
+
return {
|
|
18049
|
+
...input,
|
|
18050
|
+
family: "binary",
|
|
18051
|
+
deviceType: DeviceType.Sensor,
|
|
18052
|
+
memberDeviceType: DeviceType.Sensor,
|
|
18053
|
+
quantity: "none",
|
|
18054
|
+
baseUnit: void 0,
|
|
18055
|
+
aggregates: BINARY_AGGREGATES,
|
|
18056
|
+
empty: "offline"
|
|
18057
|
+
};
|
|
18058
|
+
}
|
|
18059
|
+
var GROUP_TEMPLATES = [
|
|
18060
|
+
numeric({
|
|
18061
|
+
id: "temperature",
|
|
18062
|
+
summary: "Mean, median, min, max or sum of temperatures. Offline and unknown members are left out, never read as 0 °C.",
|
|
18063
|
+
role: DeviceRole.TemperatureSensor,
|
|
18064
|
+
outputCap: "temperature-sensor",
|
|
18065
|
+
outputField: "celsius",
|
|
18066
|
+
quantity: "temperature",
|
|
18067
|
+
defaultAggregate: "mean",
|
|
18068
|
+
empty: "null",
|
|
18069
|
+
companions: [NOW]
|
|
18070
|
+
}),
|
|
18071
|
+
numeric({
|
|
18072
|
+
id: "humidity",
|
|
18073
|
+
summary: "Humidity in percent. Offline and unknown members are left out, never read as 0 %.",
|
|
18074
|
+
role: DeviceRole.HumiditySensor,
|
|
18075
|
+
outputCap: "humidity-sensor",
|
|
18076
|
+
outputField: "percent",
|
|
18077
|
+
quantity: "humidity",
|
|
18078
|
+
defaultAggregate: "mean",
|
|
18079
|
+
empty: "null",
|
|
18080
|
+
companions: [NOW]
|
|
18081
|
+
}),
|
|
18082
|
+
numeric({
|
|
18083
|
+
id: "pressure",
|
|
18084
|
+
summary: "Pressure in hectopascals. Offline and unknown members are left out, never read as 0 hPa.",
|
|
18085
|
+
role: DeviceRole.PressureSensor,
|
|
18086
|
+
outputCap: "pressure-sensor",
|
|
18087
|
+
outputField: "hpa",
|
|
18088
|
+
quantity: "pressure",
|
|
18089
|
+
defaultAggregate: "mean",
|
|
18090
|
+
empty: "null",
|
|
18091
|
+
companions: [NOW]
|
|
18092
|
+
}),
|
|
18093
|
+
numeric({
|
|
18094
|
+
id: "illuminance",
|
|
18095
|
+
summary: "Illuminance in lux. Offline and unknown members are left out, never read as 0 lx.",
|
|
18096
|
+
role: DeviceRole.AmbientLightSensor,
|
|
18097
|
+
outputCap: "ambient-light-sensor",
|
|
18098
|
+
outputField: "lux",
|
|
18099
|
+
quantity: "illuminance",
|
|
18100
|
+
defaultAggregate: "mean",
|
|
18101
|
+
empty: "null",
|
|
18102
|
+
companions: [NOW]
|
|
18103
|
+
}),
|
|
18104
|
+
numeric({
|
|
18105
|
+
id: "power",
|
|
18106
|
+
summary: "Power in watts, summed by default. Nobody reporting omits the key rather than writing 0 W.",
|
|
18107
|
+
role: DeviceRole.PowerSensor,
|
|
18108
|
+
outputCap: "power-meter",
|
|
18109
|
+
outputField: "watts",
|
|
18110
|
+
quantity: "power",
|
|
18111
|
+
defaultAggregate: "sum",
|
|
18112
|
+
empty: "omit",
|
|
18113
|
+
companions: [NOW]
|
|
18114
|
+
}),
|
|
18115
|
+
numeric({
|
|
18116
|
+
id: "energy",
|
|
18117
|
+
summary: "Energy in kilowatt-hours, summed by default. Nobody reporting omits the key rather than writing 0 kWh.",
|
|
18118
|
+
role: DeviceRole.EnergySensor,
|
|
18119
|
+
outputCap: "power-meter",
|
|
18120
|
+
outputField: "kwhTotal",
|
|
18121
|
+
quantity: "energy",
|
|
18122
|
+
defaultAggregate: "sum",
|
|
18123
|
+
empty: "omit",
|
|
18124
|
+
companions: [NOW]
|
|
18125
|
+
}),
|
|
18126
|
+
numeric({
|
|
18127
|
+
id: "battery",
|
|
18128
|
+
summary: "Battery charge in percent. Offline and unknown members are left out, never read as 0 %.",
|
|
18129
|
+
role: DeviceRole.BatterySensor,
|
|
18130
|
+
outputCap: "battery",
|
|
18131
|
+
outputField: "percentage",
|
|
18132
|
+
quantity: "percentage",
|
|
18133
|
+
defaultAggregate: "mean",
|
|
18134
|
+
empty: "null",
|
|
18135
|
+
companions: [
|
|
18136
|
+
{
|
|
18137
|
+
fieldPath: "charging",
|
|
18138
|
+
expr: "\"unknown\""
|
|
18139
|
+
},
|
|
18140
|
+
{
|
|
18141
|
+
fieldPath: "sleeping",
|
|
18142
|
+
expr: "false"
|
|
18143
|
+
},
|
|
18144
|
+
{
|
|
18145
|
+
fieldPath: "lastUpdated",
|
|
18146
|
+
expr: "now"
|
|
18147
|
+
}
|
|
18148
|
+
]
|
|
18149
|
+
}),
|
|
18150
|
+
numeric({
|
|
18151
|
+
id: "numeric",
|
|
18152
|
+
summary: "A numeric reading in the members’ shared quantity. Mixed quantities are refused. Nobody reporting publishes null, not 0.",
|
|
18153
|
+
role: DeviceRole.NumericSensor,
|
|
18154
|
+
outputCap: "numeric-sensor",
|
|
18155
|
+
outputField: "value",
|
|
18156
|
+
quantity: "device",
|
|
18157
|
+
defaultAggregate: "mean",
|
|
18158
|
+
empty: "null",
|
|
18159
|
+
companions: [NOW]
|
|
18160
|
+
}),
|
|
18161
|
+
binary({
|
|
18162
|
+
id: "motion",
|
|
18163
|
+
summary: "Any or all motion. Offline and unknown members are left out, never read as off. Nobody reporting takes the device offline.",
|
|
18164
|
+
role: DeviceRole.MotionSensor,
|
|
18165
|
+
outputCap: "motion",
|
|
18166
|
+
outputField: "detected",
|
|
18167
|
+
defaultAggregate: "any",
|
|
18168
|
+
accept: [{
|
|
18169
|
+
cap: "motion",
|
|
18170
|
+
fieldPath: "detected"
|
|
18171
|
+
}],
|
|
18172
|
+
companions: [{
|
|
18173
|
+
fieldPath: "lastDetectedAt",
|
|
18174
|
+
expr: "null"
|
|
18175
|
+
}, {
|
|
18176
|
+
fieldPath: "autoClearAfterMs",
|
|
18177
|
+
expr: "null"
|
|
18178
|
+
}]
|
|
18179
|
+
}),
|
|
18180
|
+
binary({
|
|
18181
|
+
id: "contact",
|
|
18182
|
+
summary: "Any or all open contacts. Offline and unknown members are left out, never read as closed.",
|
|
18183
|
+
role: DeviceRole.ContactSensor,
|
|
18184
|
+
outputCap: "contact",
|
|
18185
|
+
outputField: "entryOpen",
|
|
18186
|
+
defaultAggregate: "any",
|
|
18187
|
+
accept: [{
|
|
18188
|
+
cap: "contact",
|
|
18189
|
+
fieldPath: "entryOpen"
|
|
18190
|
+
}],
|
|
18191
|
+
companions: [CHANGED]
|
|
18192
|
+
}),
|
|
18193
|
+
binary({
|
|
18194
|
+
id: "leak",
|
|
18195
|
+
summary: "Any or all leak detections. Offline and unknown members are left out, never read as dry.",
|
|
18196
|
+
role: DeviceRole.LeakSensor,
|
|
18197
|
+
outputCap: "flood",
|
|
18198
|
+
outputField: "flooded",
|
|
18199
|
+
defaultAggregate: "any",
|
|
18200
|
+
accept: [{
|
|
18201
|
+
cap: "flood",
|
|
18202
|
+
fieldPath: "flooded"
|
|
18203
|
+
}],
|
|
18204
|
+
companions: [CHANGED]
|
|
18205
|
+
}),
|
|
18206
|
+
binary({
|
|
18207
|
+
id: "smoke",
|
|
18208
|
+
summary: "Any or all smoke detections. Offline and unknown members are left out, never read as clear.",
|
|
18209
|
+
role: DeviceRole.SmokeSensor,
|
|
18210
|
+
outputCap: "smoke",
|
|
18211
|
+
outputField: "detected",
|
|
18212
|
+
defaultAggregate: "any",
|
|
18213
|
+
accept: [{
|
|
18214
|
+
cap: "smoke",
|
|
18215
|
+
fieldPath: "detected"
|
|
18216
|
+
}],
|
|
18217
|
+
companions: [CHANGED]
|
|
18218
|
+
}),
|
|
18219
|
+
binary({
|
|
18220
|
+
id: "occupancy",
|
|
18221
|
+
summary: "Any or all of motion or binary sensors, published as a binary. Presence zones are not aggregated. Nobody reporting is offline, not off.",
|
|
18222
|
+
role: DeviceRole.BinarySensor,
|
|
18223
|
+
outputCap: "binary",
|
|
18224
|
+
outputField: "on",
|
|
18225
|
+
defaultAggregate: "any",
|
|
18226
|
+
accept: [{
|
|
18227
|
+
cap: "motion",
|
|
18228
|
+
fieldPath: "detected"
|
|
18229
|
+
}, {
|
|
18230
|
+
cap: "binary",
|
|
18231
|
+
fieldPath: "on"
|
|
18232
|
+
}],
|
|
18233
|
+
companions: [CHANGED]
|
|
18234
|
+
}),
|
|
18235
|
+
binary({
|
|
18236
|
+
id: "binary",
|
|
18237
|
+
summary: "Any or all generic binary sensors. Offline and unknown members are left out, never read as off.",
|
|
18238
|
+
role: DeviceRole.BinarySensor,
|
|
18239
|
+
outputCap: "binary",
|
|
18240
|
+
outputField: "on",
|
|
18241
|
+
defaultAggregate: "any",
|
|
18242
|
+
accept: [{
|
|
18243
|
+
cap: "binary",
|
|
18244
|
+
fieldPath: "on"
|
|
18245
|
+
}],
|
|
18246
|
+
companions: [CHANGED]
|
|
18247
|
+
})
|
|
18248
|
+
];
|
|
18249
|
+
new Map(GROUP_TEMPLATES.map((template) => [template.id, template]));
|
|
17871
18250
|
`${COMPOSED_DEVICE_STABLE_ID_PREFIX}`;
|
|
17872
18251
|
/**
|
|
17873
18252
|
* What a composition may BUILD on a device type (G2, D676): the caps a new
|
|
@@ -57688,6 +58067,24 @@ object({
|
|
|
57688
58067
|
lastChangedAt: number()
|
|
57689
58068
|
});
|
|
57690
58069
|
DeviceType.Sensor;
|
|
58070
|
+
object({
|
|
58071
|
+
/** Members whose current value entered the aggregate. */
|
|
58072
|
+
included: number().int().nonnegative().meta(readingMeta("count", {
|
|
58073
|
+
precision: 0,
|
|
58074
|
+
label: "Reporting"
|
|
58075
|
+
})),
|
|
58076
|
+
/** Members left out: offline, unknown, or not a finite reading (D393). */
|
|
58077
|
+
excluded: number().int().nonnegative().meta(readingMeta("count", {
|
|
58078
|
+
precision: 0,
|
|
58079
|
+
label: "Excluded"
|
|
58080
|
+
})),
|
|
58081
|
+
/** `included` + `excluded`. */
|
|
58082
|
+
total: number().int().nonnegative().meta(readingMeta("count", {
|
|
58083
|
+
precision: 0,
|
|
58084
|
+
label: "Members"
|
|
58085
|
+
}))
|
|
58086
|
+
});
|
|
58087
|
+
DeviceType.Sensor;
|
|
57691
58088
|
object({
|
|
57692
58089
|
/** Radiator valve opening 0 (closed) .. 100 (open). Null = not yet known. */
|
|
57693
58090
|
position: number().min(0).max(100).nullable().meta(readingMeta("percentage")),
|
|
@@ -67967,6 +68364,13 @@ Object.freeze({
|
|
|
67967
68364
|
access: "view",
|
|
67968
68365
|
role: "viewer"
|
|
67969
68366
|
},
|
|
68367
|
+
"groupStatus.getStatus": {
|
|
68368
|
+
capName: "group-status",
|
|
68369
|
+
capScope: "device",
|
|
68370
|
+
addonId: null,
|
|
68371
|
+
access: "view",
|
|
68372
|
+
role: "viewer"
|
|
68373
|
+
},
|
|
67970
68374
|
"heatingValve.getStatus": {
|
|
67971
68375
|
capName: "heating-valve",
|
|
67972
68376
|
capScope: "device",
|
|
@@ -77789,6 +78193,33 @@ var SENSOR_CAP_VOCABULARY = {
|
|
|
77789
78193
|
icon: "flame"
|
|
77790
78194
|
}]
|
|
77791
78195
|
},
|
|
78196
|
+
"group-status": {
|
|
78197
|
+
scope: "device",
|
|
78198
|
+
noun: t("Group", "Gruppo"),
|
|
78199
|
+
state: [
|
|
78200
|
+
{
|
|
78201
|
+
kind: "numeric",
|
|
78202
|
+
field: "included",
|
|
78203
|
+
quantity: t("the members reporting", "i membri che rispondono"),
|
|
78204
|
+
label: t("Reporting", "Rispondono"),
|
|
78205
|
+
icon: "users"
|
|
78206
|
+
},
|
|
78207
|
+
{
|
|
78208
|
+
kind: "numeric",
|
|
78209
|
+
field: "excluded",
|
|
78210
|
+
quantity: t("the members left out", "i membri esclusi"),
|
|
78211
|
+
label: t("Excluded", "Esclusi"),
|
|
78212
|
+
icon: "users"
|
|
78213
|
+
},
|
|
78214
|
+
{
|
|
78215
|
+
kind: "numeric",
|
|
78216
|
+
field: "total",
|
|
78217
|
+
quantity: t("the member count", "il numero di membri"),
|
|
78218
|
+
label: t("Members", "Membri"),
|
|
78219
|
+
icon: "sigma"
|
|
78220
|
+
}
|
|
78221
|
+
]
|
|
78222
|
+
},
|
|
77792
78223
|
"humidity-sensor": {
|
|
77793
78224
|
scope: "device",
|
|
77794
78225
|
noun: t("Humidity", "Umidità"),
|
|
@@ -79254,6 +79685,11 @@ Object.freeze({
|
|
|
79254
79685
|
form: "single",
|
|
79255
79686
|
optional: false
|
|
79256
79687
|
}],
|
|
79688
|
+
"groupStatus.getStatus": [{
|
|
79689
|
+
name: "deviceId",
|
|
79690
|
+
form: "single",
|
|
79691
|
+
optional: false
|
|
79692
|
+
}],
|
|
79257
79693
|
"heatingValve.getStatus": [{
|
|
79258
79694
|
name: "deviceId",
|
|
79259
79695
|
form: "single",
|
|
@@ -82367,7 +82803,7 @@ var AdminUIAddon = class extends BaseAddon {
|
|
|
82367
82803
|
capability: adminUiCapability,
|
|
82368
82804
|
provider: {
|
|
82369
82805
|
getStaticDir: async () => ({ staticDir: resolveAdminUiDistDir() }),
|
|
82370
|
-
getVersion: async () => ({ version: "1.2.
|
|
82806
|
+
getVersion: async () => ({ version: "1.2.473" })
|
|
82371
82807
|
}
|
|
82372
82808
|
}];
|
|
82373
82809
|
}
|