@camstack/addon-post-analysis 1.2.643 → 1.2.644
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 +10 -1
- package/README.md +20 -12
- package/dist/{clip-model-registry-lKeBMKlT.js → clip-model-registry-Bu2ZxGpm.js} +87 -13
- package/dist/{clip-model-registry-DdgT3gdf.mjs → clip-model-registry-CnFDRU_E.mjs} +87 -13
- 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-B6X8TAQP.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-CN1G5ocH.mjs} +3 -3
- package/dist/pipeline-analytics/{_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BIjXlrFH.mjs → _virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-B8Q_nFhl.mjs} +1 -1
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CVItuOhm.mjs +26 -0
- package/dist/pipeline-analytics/{hostInit-CDPfOUWf.mjs → hostInit-OkB37BMo.mjs} +3 -3
- package/dist/pipeline-analytics/index.js +1 -1
- package/dist/pipeline-analytics/index.mjs +1 -1
- package/dist/pipeline-analytics/remoteEntry.js +1 -1
- package/package.json +1 -1
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js--XkysBjS.mjs +0 -26
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.2.644] - 2026-10-27
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Rebuilt against updated dependencies.
|
|
15
|
+
|
|
16
|
+
## [1.2.643] - 2026-10-27
|
|
17
|
+
|
|
10
18
|
### Added
|
|
11
19
|
|
|
12
|
-
-
|
|
20
|
+
- Post-Analysis: Post-Analysis bundle — enrichment, embedding-encoder, pipeline-analytics. Multi-entry npm package shipping addons that consume pipeline output.
|
|
21
|
+
- Provides the addons Embedding Encoder, Pipeline Analytics.
|
package/README.md
CHANGED
|
@@ -1,22 +1,30 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Post-Analysis
|
|
2
2
|
|
|
3
|
-
Post-Analysis bundle — enrichment, embedding-encoder, pipeline-analytics. Multi-entry npm package shipping addons that consume pipeline output.
|
|
3
|
+
Post-Analysis bundle — enrichment, embedding-encoder, pipeline-analytics. Multi-entry npm package shipping addons that consume pipeline output. Enrichment, embedding encoder, and pipeline analytics — consumers of pipeline output.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
<!-- readme:generated:start (derived from the manifest; edit outside this block) -->
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
Package `@camstack/addon-post-analysis` on npm.
|
|
8
|
+
|
|
9
|
+
## What it provides
|
|
10
|
+
|
|
11
|
+
- **Embedding Encoder** (`embedding-encoder`): ONNX-Runtime image-embedding encoder. Produces semantic vectors from detection crops for similarity search + scene-state tracking. Category: analytics.
|
|
9
12
|
- Capabilities: `embedding-encoder`.
|
|
10
|
-
- **Pipeline Analytics** (`pipeline-analytics`): Zone analytics + audio metrics aggregator. Consumes pipeline events to surface per-camera zone counters and audio-level histograms.
|
|
11
|
-
- Node placement: `any-node`.
|
|
13
|
+
- **Pipeline Analytics** (`pipeline-analytics`): Zone analytics + audio metrics aggregator. Consumes pipeline events to surface per-camera zone counters and audio-level histograms. Category: analytics.
|
|
12
14
|
- Capabilities: `device-removal-hook`, `pipeline-analytics`, `notification-rules`, `zone-analytics`, `audio-metrics`, `addon-widgets-source`, `face-gallery`, `plate-gallery`, `scene-monitor`, `failure-contribution`, `storage-occupancy`.
|
|
13
15
|
|
|
14
|
-
##
|
|
16
|
+
## Requirements
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
- Placement: any-node.
|
|
19
|
+
- A CamStack hub. An agent is used only where the placement above allows it.
|
|
17
20
|
|
|
18
|
-
##
|
|
21
|
+
## Documentation
|
|
22
|
+
|
|
23
|
+
- [docs/architecture/notifications.md](https://github.com/camstack/server/blob/main/docs/architecture/notifications.md)
|
|
24
|
+
- [docs/architecture/post-analysis.md](https://github.com/camstack/server/blob/main/docs/architecture/post-analysis.md)
|
|
25
|
+
- [docs/architecture/cloud-training.md](https://github.com/camstack/server/blob/main/docs/architecture/cloud-training.md)
|
|
26
|
+
- [docs/architecture/osd-manager.md](https://github.com/camstack/server/blob/main/docs/architecture/osd-manager.md)
|
|
19
27
|
|
|
20
|
-
|
|
21
|
-
- A CamStack hub. An agent is used only when the placement above allows it.
|
|
28
|
+
See [CHANGELOG.md](./CHANGELOG.md) for what changed in each version.
|
|
22
29
|
|
|
30
|
+
<!-- readme:generated:end -->
|
|
@@ -18609,7 +18609,22 @@ var BrokerProviderInfoSchema = object({
|
|
|
18609
18609
|
*/
|
|
18610
18610
|
interactiveConnectPath: string().min(1).optional(),
|
|
18611
18611
|
/** Relative hub path to disconnect the linked account (same popup pattern). */
|
|
18612
|
-
interactiveDisconnectPath: string().min(1).optional()
|
|
18612
|
+
interactiveDisconnectPath: string().min(1).optional(),
|
|
18613
|
+
/**
|
|
18614
|
+
* The kind signs in through a server-held interactive session instead of
|
|
18615
|
+
* (or before) typed credentials. `basePath` is a hub-relative route set
|
|
18616
|
+
* served by the owning addon (`/addon/<id>/...`) speaking the sign-in
|
|
18617
|
+
* contract: `POST {basePath}/start` (body: the form's settings) answers
|
|
18618
|
+
* `{ sessionId, loginUrl }`; `GET {basePath}/status?sessionId=` answers
|
|
18619
|
+
* `{ phase: 'starting' | 'awaiting-login' | 'captured' | 'error' |
|
|
18620
|
+
* 'cancelled', loginUrl, error }`; `POST {basePath}/commit`
|
|
18621
|
+
* (`{ sessionId, name, brokerId? }`) stores the credentials on a new or
|
|
18622
|
+
* existing broker and answers `{ brokerId }`; `POST {basePath}/cancel`
|
|
18623
|
+
* (`{ sessionId }`) drops the session. The dialog that edits a broker
|
|
18624
|
+
* offers it as the default path; the fields the session fills are
|
|
18625
|
+
* marked `filledBySignIn` in the kind's settings schema.
|
|
18626
|
+
*/
|
|
18627
|
+
signIn: object({ basePath: string().min(1) }).optional()
|
|
18613
18628
|
}))
|
|
18614
18629
|
});
|
|
18615
18630
|
var ListInputSchema = object({
|
|
@@ -45668,7 +45683,7 @@ var NetworkAccessStatusSchema = object({
|
|
|
45668
45683
|
});
|
|
45669
45684
|
/**
|
|
45670
45685
|
* Optional, richer endpoint shape returned by providers that expose
|
|
45671
|
-
* MORE than one ingress concurrently (Tailscale
|
|
45686
|
+
* MORE than one ingress concurrently (Tailscale Funnel with mixed
|
|
45672
45687
|
* serve+funnel rules, future ngrok multi-tunnel, …). Each entry carries
|
|
45673
45688
|
* the originating provider config (mode + sourcePort) so the
|
|
45674
45689
|
* orchestrator UI can label rows distinctly. Providers that expose only
|
|
@@ -60972,7 +60987,8 @@ var BATTERY_DEVICE_TYPES = [
|
|
|
60972
60987
|
DeviceType.Switch,
|
|
60973
60988
|
DeviceType.PetFeeder,
|
|
60974
60989
|
DeviceType.Container,
|
|
60975
|
-
DeviceType.Thermostat
|
|
60990
|
+
DeviceType.Thermostat,
|
|
60991
|
+
DeviceType.EventEmitter
|
|
60976
60992
|
];
|
|
60977
60993
|
/** Generic Customize target for the percentage reading (D936). */
|
|
60978
60994
|
var batteryCustomize = {
|
|
@@ -67990,9 +68006,9 @@ var PowerMeterStatusSchema = object({
|
|
|
67990
68006
|
/** Cumulative energy in kilowatt-hours since the meter was reset. */
|
|
67991
68007
|
kwhTotal: number().optional().meta(readingMeta("energy", { label: "Energy" })),
|
|
67992
68008
|
/** Voltage in volts. */
|
|
67993
|
-
volts: number().optional().meta(readingMeta("voltage")),
|
|
68009
|
+
volts: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
|
|
67994
68010
|
/** Current in amperes. */
|
|
67995
|
-
amps: number().optional().meta(readingMeta("current")),
|
|
68011
|
+
amps: number().optional().meta(readingMeta("current", { label: "Current" })),
|
|
67996
68012
|
/** Apparent power in volt-amperes. */
|
|
67997
68013
|
va: number().optional().meta(readingMeta("apparent-power")),
|
|
67998
68014
|
/** Power factor (0..1) if reported. */
|
|
@@ -68000,17 +68016,74 @@ var PowerMeterStatusSchema = object({
|
|
|
68000
68016
|
/** Ms epoch when the slice was last updated. */
|
|
68001
68017
|
lastFetchedAt: number()
|
|
68002
68018
|
});
|
|
68019
|
+
/**
|
|
68020
|
+
* Loads that draw metered mains power (D951). The reading is a feature of the
|
|
68021
|
+
* device itself — a plug, a lamp, a fan, an air conditioner, a boiler, a
|
|
68022
|
+
* vacuum dock — not a separate sensor beside it. A `Sensor` stays: a clamp
|
|
68023
|
+
* meter or a standalone energy monitor IS the device. Cover, lock, valve,
|
|
68024
|
+
* camera and the like are left out: their draw is not what anyone meters.
|
|
68025
|
+
*/
|
|
68026
|
+
var POWER_METER_DEVICE_TYPES = [
|
|
68027
|
+
DeviceType.Sensor,
|
|
68028
|
+
DeviceType.Switch,
|
|
68029
|
+
DeviceType.Light,
|
|
68030
|
+
DeviceType.Fan,
|
|
68031
|
+
DeviceType.Climate,
|
|
68032
|
+
DeviceType.Thermostat,
|
|
68033
|
+
DeviceType.Humidifier,
|
|
68034
|
+
DeviceType.WaterHeater,
|
|
68035
|
+
DeviceType.MediaPlayer,
|
|
68036
|
+
DeviceType.Washer,
|
|
68037
|
+
DeviceType.Dryer,
|
|
68038
|
+
DeviceType.Dishwasher,
|
|
68039
|
+
DeviceType.Vacuum,
|
|
68040
|
+
DeviceType.LawnMower,
|
|
68041
|
+
DeviceType.PetFeeder
|
|
68042
|
+
];
|
|
68043
|
+
/** Everything but a bare `Sensor`: a sensor that takes its reading from another sensor adds nothing. */
|
|
68044
|
+
var POWER_METER_CUSTOMIZE_DEVICE_TYPES = POWER_METER_DEVICE_TYPES.filter((type) => type !== DeviceType.Sensor);
|
|
68045
|
+
/** One scalar target per reading; each is sourced from a device of its own (D951). */
|
|
68046
|
+
function powerTarget(id, unit) {
|
|
68047
|
+
return {
|
|
68048
|
+
id,
|
|
68049
|
+
cardinality: "scalar",
|
|
68050
|
+
vocabulary: {
|
|
68051
|
+
cap: "power-meter",
|
|
68052
|
+
stateField: id
|
|
68053
|
+
},
|
|
68054
|
+
deviceTypes: POWER_METER_CUSTOMIZE_DEVICE_TYPES,
|
|
68055
|
+
apply: "add",
|
|
68056
|
+
path: id,
|
|
68057
|
+
sources: [{
|
|
68058
|
+
kind: "numeric",
|
|
68059
|
+
requiredUnit: unit,
|
|
68060
|
+
transforms: [{ kind: "identity" }]
|
|
68061
|
+
}],
|
|
68062
|
+
companions: [{
|
|
68063
|
+
kind: "clock",
|
|
68064
|
+
path: "lastFetchedAt",
|
|
68065
|
+
when: "always"
|
|
68066
|
+
}],
|
|
68067
|
+
sourceReport: { status: "assignment-status" },
|
|
68068
|
+
advancedExpression: true
|
|
68069
|
+
};
|
|
68070
|
+
}
|
|
68071
|
+
/** "Power and energy" extension: watts, energy, voltage and current from other devices (D951). */
|
|
68072
|
+
var powerMeterCustomize = {
|
|
68073
|
+
version: 1,
|
|
68074
|
+
targets: [
|
|
68075
|
+
powerTarget("watts", "W"),
|
|
68076
|
+
powerTarget("kwhTotal", "kWh"),
|
|
68077
|
+
powerTarget("volts", "V"),
|
|
68078
|
+
powerTarget("amps", "A")
|
|
68079
|
+
]
|
|
68080
|
+
};
|
|
68003
68081
|
var powerMeterCapability = {
|
|
68004
68082
|
name: "power-meter",
|
|
68005
68083
|
scope: "device",
|
|
68006
68084
|
deviceNative: true,
|
|
68007
68085
|
mode: "singleton",
|
|
68008
|
-
deviceTypes:
|
|
68009
|
-
DeviceType.Sensor,
|
|
68010
|
-
DeviceType.Washer,
|
|
68011
|
-
DeviceType.Dryer,
|
|
68012
|
-
DeviceType.Dishwasher
|
|
68013
|
-
],
|
|
68086
|
+
deviceTypes: POWER_METER_DEVICE_TYPES,
|
|
68014
68087
|
methods: {},
|
|
68015
68088
|
status: {
|
|
68016
68089
|
schema: PowerMeterStatusSchema,
|
|
@@ -68067,7 +68140,8 @@ var powerMeterCapability = {
|
|
|
68067
68140
|
} },
|
|
68068
68141
|
/** Clock fields: written, but excluded from the compare that decides
|
|
68069
68142
|
* whether persisting is worth a SQLite commit. */
|
|
68070
|
-
volatileStateFields: ["lastFetchedAt"]
|
|
68143
|
+
volatileStateFields: ["lastFetchedAt"],
|
|
68144
|
+
customize: powerMeterCustomize
|
|
68071
68145
|
};
|
|
68072
68146
|
/**
|
|
68073
68147
|
* Presence cap. Models HA `person.*` and `device_tracker.*` entities
|
|
@@ -73505,7 +73579,7 @@ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" })
|
|
|
73505
73579
|
});
|
|
73506
73580
|
DeviceFeature.FanSpeed, DeviceFeature.FanPreset, DeviceFeature.FanDirection, DeviceFeature.FanOscillating, DeviceFeature.CoverPositionable, DeviceFeature.CoverTilt, DeviceFeature.ValvePositionable, DeviceFeature.MediaPlayerVolume, DeviceFeature.ClimateFanMode;
|
|
73507
73581
|
SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
|
|
73508
|
-
DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher, DeviceType.Washer, DeviceType.Dryer, DeviceType.Camera, DeviceType.Camera, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
|
|
73582
|
+
DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.EventEmitter, DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher, DeviceType.Washer, DeviceType.Dryer, DeviceType.Camera, DeviceType.Camera, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
|
|
73509
73583
|
String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
|
|
73510
73584
|
DeviceRole.BinarySensor, DeviceRole.MotionSensor;
|
|
73511
73585
|
new Set(CAP_NAMES);
|
|
@@ -18578,7 +18578,22 @@ var BrokerProviderInfoSchema = object({
|
|
|
18578
18578
|
*/
|
|
18579
18579
|
interactiveConnectPath: string().min(1).optional(),
|
|
18580
18580
|
/** Relative hub path to disconnect the linked account (same popup pattern). */
|
|
18581
|
-
interactiveDisconnectPath: string().min(1).optional()
|
|
18581
|
+
interactiveDisconnectPath: string().min(1).optional(),
|
|
18582
|
+
/**
|
|
18583
|
+
* The kind signs in through a server-held interactive session instead of
|
|
18584
|
+
* (or before) typed credentials. `basePath` is a hub-relative route set
|
|
18585
|
+
* served by the owning addon (`/addon/<id>/...`) speaking the sign-in
|
|
18586
|
+
* contract: `POST {basePath}/start` (body: the form's settings) answers
|
|
18587
|
+
* `{ sessionId, loginUrl }`; `GET {basePath}/status?sessionId=` answers
|
|
18588
|
+
* `{ phase: 'starting' | 'awaiting-login' | 'captured' | 'error' |
|
|
18589
|
+
* 'cancelled', loginUrl, error }`; `POST {basePath}/commit`
|
|
18590
|
+
* (`{ sessionId, name, brokerId? }`) stores the credentials on a new or
|
|
18591
|
+
* existing broker and answers `{ brokerId }`; `POST {basePath}/cancel`
|
|
18592
|
+
* (`{ sessionId }`) drops the session. The dialog that edits a broker
|
|
18593
|
+
* offers it as the default path; the fields the session fills are
|
|
18594
|
+
* marked `filledBySignIn` in the kind's settings schema.
|
|
18595
|
+
*/
|
|
18596
|
+
signIn: object({ basePath: string().min(1) }).optional()
|
|
18582
18597
|
}))
|
|
18583
18598
|
});
|
|
18584
18599
|
var ListInputSchema = object({
|
|
@@ -45637,7 +45652,7 @@ var NetworkAccessStatusSchema = object({
|
|
|
45637
45652
|
});
|
|
45638
45653
|
/**
|
|
45639
45654
|
* Optional, richer endpoint shape returned by providers that expose
|
|
45640
|
-
* MORE than one ingress concurrently (Tailscale
|
|
45655
|
+
* MORE than one ingress concurrently (Tailscale Funnel with mixed
|
|
45641
45656
|
* serve+funnel rules, future ngrok multi-tunnel, …). Each entry carries
|
|
45642
45657
|
* the originating provider config (mode + sourcePort) so the
|
|
45643
45658
|
* orchestrator UI can label rows distinctly. Providers that expose only
|
|
@@ -60941,7 +60956,8 @@ var BATTERY_DEVICE_TYPES = [
|
|
|
60941
60956
|
DeviceType.Switch,
|
|
60942
60957
|
DeviceType.PetFeeder,
|
|
60943
60958
|
DeviceType.Container,
|
|
60944
|
-
DeviceType.Thermostat
|
|
60959
|
+
DeviceType.Thermostat,
|
|
60960
|
+
DeviceType.EventEmitter
|
|
60945
60961
|
];
|
|
60946
60962
|
/** Generic Customize target for the percentage reading (D936). */
|
|
60947
60963
|
var batteryCustomize = {
|
|
@@ -67959,9 +67975,9 @@ var PowerMeterStatusSchema = object({
|
|
|
67959
67975
|
/** Cumulative energy in kilowatt-hours since the meter was reset. */
|
|
67960
67976
|
kwhTotal: number().optional().meta(readingMeta("energy", { label: "Energy" })),
|
|
67961
67977
|
/** Voltage in volts. */
|
|
67962
|
-
volts: number().optional().meta(readingMeta("voltage")),
|
|
67978
|
+
volts: number().optional().meta(readingMeta("voltage", { label: "Voltage" })),
|
|
67963
67979
|
/** Current in amperes. */
|
|
67964
|
-
amps: number().optional().meta(readingMeta("current")),
|
|
67980
|
+
amps: number().optional().meta(readingMeta("current", { label: "Current" })),
|
|
67965
67981
|
/** Apparent power in volt-amperes. */
|
|
67966
67982
|
va: number().optional().meta(readingMeta("apparent-power")),
|
|
67967
67983
|
/** Power factor (0..1) if reported. */
|
|
@@ -67969,17 +67985,74 @@ var PowerMeterStatusSchema = object({
|
|
|
67969
67985
|
/** Ms epoch when the slice was last updated. */
|
|
67970
67986
|
lastFetchedAt: number()
|
|
67971
67987
|
});
|
|
67988
|
+
/**
|
|
67989
|
+
* Loads that draw metered mains power (D951). The reading is a feature of the
|
|
67990
|
+
* device itself — a plug, a lamp, a fan, an air conditioner, a boiler, a
|
|
67991
|
+
* vacuum dock — not a separate sensor beside it. A `Sensor` stays: a clamp
|
|
67992
|
+
* meter or a standalone energy monitor IS the device. Cover, lock, valve,
|
|
67993
|
+
* camera and the like are left out: their draw is not what anyone meters.
|
|
67994
|
+
*/
|
|
67995
|
+
var POWER_METER_DEVICE_TYPES = [
|
|
67996
|
+
DeviceType.Sensor,
|
|
67997
|
+
DeviceType.Switch,
|
|
67998
|
+
DeviceType.Light,
|
|
67999
|
+
DeviceType.Fan,
|
|
68000
|
+
DeviceType.Climate,
|
|
68001
|
+
DeviceType.Thermostat,
|
|
68002
|
+
DeviceType.Humidifier,
|
|
68003
|
+
DeviceType.WaterHeater,
|
|
68004
|
+
DeviceType.MediaPlayer,
|
|
68005
|
+
DeviceType.Washer,
|
|
68006
|
+
DeviceType.Dryer,
|
|
68007
|
+
DeviceType.Dishwasher,
|
|
68008
|
+
DeviceType.Vacuum,
|
|
68009
|
+
DeviceType.LawnMower,
|
|
68010
|
+
DeviceType.PetFeeder
|
|
68011
|
+
];
|
|
68012
|
+
/** Everything but a bare `Sensor`: a sensor that takes its reading from another sensor adds nothing. */
|
|
68013
|
+
var POWER_METER_CUSTOMIZE_DEVICE_TYPES = POWER_METER_DEVICE_TYPES.filter((type) => type !== DeviceType.Sensor);
|
|
68014
|
+
/** One scalar target per reading; each is sourced from a device of its own (D951). */
|
|
68015
|
+
function powerTarget(id, unit) {
|
|
68016
|
+
return {
|
|
68017
|
+
id,
|
|
68018
|
+
cardinality: "scalar",
|
|
68019
|
+
vocabulary: {
|
|
68020
|
+
cap: "power-meter",
|
|
68021
|
+
stateField: id
|
|
68022
|
+
},
|
|
68023
|
+
deviceTypes: POWER_METER_CUSTOMIZE_DEVICE_TYPES,
|
|
68024
|
+
apply: "add",
|
|
68025
|
+
path: id,
|
|
68026
|
+
sources: [{
|
|
68027
|
+
kind: "numeric",
|
|
68028
|
+
requiredUnit: unit,
|
|
68029
|
+
transforms: [{ kind: "identity" }]
|
|
68030
|
+
}],
|
|
68031
|
+
companions: [{
|
|
68032
|
+
kind: "clock",
|
|
68033
|
+
path: "lastFetchedAt",
|
|
68034
|
+
when: "always"
|
|
68035
|
+
}],
|
|
68036
|
+
sourceReport: { status: "assignment-status" },
|
|
68037
|
+
advancedExpression: true
|
|
68038
|
+
};
|
|
68039
|
+
}
|
|
68040
|
+
/** "Power and energy" extension: watts, energy, voltage and current from other devices (D951). */
|
|
68041
|
+
var powerMeterCustomize = {
|
|
68042
|
+
version: 1,
|
|
68043
|
+
targets: [
|
|
68044
|
+
powerTarget("watts", "W"),
|
|
68045
|
+
powerTarget("kwhTotal", "kWh"),
|
|
68046
|
+
powerTarget("volts", "V"),
|
|
68047
|
+
powerTarget("amps", "A")
|
|
68048
|
+
]
|
|
68049
|
+
};
|
|
67972
68050
|
var powerMeterCapability = {
|
|
67973
68051
|
name: "power-meter",
|
|
67974
68052
|
scope: "device",
|
|
67975
68053
|
deviceNative: true,
|
|
67976
68054
|
mode: "singleton",
|
|
67977
|
-
deviceTypes:
|
|
67978
|
-
DeviceType.Sensor,
|
|
67979
|
-
DeviceType.Washer,
|
|
67980
|
-
DeviceType.Dryer,
|
|
67981
|
-
DeviceType.Dishwasher
|
|
67982
|
-
],
|
|
68055
|
+
deviceTypes: POWER_METER_DEVICE_TYPES,
|
|
67983
68056
|
methods: {},
|
|
67984
68057
|
status: {
|
|
67985
68058
|
schema: PowerMeterStatusSchema,
|
|
@@ -68036,7 +68109,8 @@ var powerMeterCapability = {
|
|
|
68036
68109
|
} },
|
|
68037
68110
|
/** Clock fields: written, but excluded from the compare that decides
|
|
68038
68111
|
* whether persisting is worth a SQLite commit. */
|
|
68039
|
-
volatileStateFields: ["lastFetchedAt"]
|
|
68112
|
+
volatileStateFields: ["lastFetchedAt"],
|
|
68113
|
+
customize: powerMeterCustomize
|
|
68040
68114
|
};
|
|
68041
68115
|
/**
|
|
68042
68116
|
* Presence cap. Models HA `person.*` and `device_tracker.*` entities
|
|
@@ -73474,7 +73548,7 @@ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" })
|
|
|
73474
73548
|
});
|
|
73475
73549
|
DeviceFeature.FanSpeed, DeviceFeature.FanPreset, DeviceFeature.FanDirection, DeviceFeature.FanOscillating, DeviceFeature.CoverPositionable, DeviceFeature.CoverTilt, DeviceFeature.ValvePositionable, DeviceFeature.MediaPlayerVolume, DeviceFeature.ClimateFanMode;
|
|
73476
73550
|
SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
|
|
73477
|
-
DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher, DeviceType.Washer, DeviceType.Dryer, DeviceType.Camera, DeviceType.Camera, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
|
|
73551
|
+
DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.EventEmitter, DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher, DeviceType.Washer, DeviceType.Dryer, DeviceType.Camera, DeviceType.Camera, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Switch, DeviceType.Light, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.MediaPlayer, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.PetFeeder, DeviceType.Washer, DeviceType.Dryer, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
|
|
73478
73552
|
String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
|
|
73479
73553
|
DeviceRole.BinarySensor, DeviceRole.MotionSensor;
|
|
73480
73554
|
new Set(CAP_NAMES);
|
|
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_clip_model_registry = require("../clip-model-registry-
|
|
5
|
+
const require_clip_model_registry = require("../clip-model-registry-Bu2ZxGpm.js");
|
|
6
6
|
let node_fs = require("node:fs");
|
|
7
7
|
node_fs = require_clip_model_registry.__toESM(node_fs);
|
|
8
8
|
let node_path = require("node:path");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Qi as BaseAddon, _r as embeddingRequirementsUnavailableError, a as CLIP_EMBEDDING_STEP_ID, da as normalizeNodeId, gi as resolvePoolMemoryPolicy, gr as embeddingRequirementsFailedError, i as CLIP_TEXT_MODELS, l as resolveClusterModelPin, mr as embeddingModelFailedError, n as DEFAULT_CLIP_MODEL, ni as parseProcStatus, pr as embeddingEncoderCapability, r as CLIP_IMAGE_MODELS, t as BUILTIN_CLIP_MODELS, tn as PoolMemoryWatchdog } from "../clip-model-registry-
|
|
1
|
+
import { Qi as BaseAddon, _r as embeddingRequirementsUnavailableError, a as CLIP_EMBEDDING_STEP_ID, da as normalizeNodeId, gi as resolvePoolMemoryPolicy, gr as embeddingRequirementsFailedError, i as CLIP_TEXT_MODELS, l as resolveClusterModelPin, mr as embeddingModelFailedError, n as DEFAULT_CLIP_MODEL, ni as parseProcStatus, pr as embeddingEncoderCapability, r as CLIP_IMAGE_MODELS, t as BUILTIN_CLIP_MODELS, tn as PoolMemoryWatchdog } from "../clip-model-registry-CnFDRU_E.mjs";
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
3
|
import * as fs from "node:fs";
|
|
4
4
|
import * as path$1 from "node:path";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { a as e, i as t, n, o as r, r as i, t as a } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react__loadShare__.js-Cx9AsA5q.mjs";
|
|
2
2
|
import { t as o } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-B3Wx5J80.mjs";
|
|
3
|
-
import { a as s, c, d as l, f as u, i as d, l as f, m as p, n as m, o as h, p as g, r as _, s as v, t as y, u as b } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js
|
|
3
|
+
import { a as s, c, d as l, f as u, i as d, l as f, m as p, n as m, o as h, p as g, r as _, s as v, t as y, u as b } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-CVItuOhm.mjs";
|
|
4
4
|
import { n as x, t as S } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-CkwmHEi0.mjs";
|
|
5
|
-
import { t as C } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-
|
|
5
|
+
import { t as C } from "./_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-B8Q_nFhl.mjs";
|
|
6
6
|
//#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
|
|
7
7
|
var w = (...e) => e.filter((e, t, n) => !!e && e.trim() !== "" && n.indexOf(e) === t).join(" ").trim(), T = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), E = (e) => e.replace(/^([A-Z])|[\s-_]+(\w)/g, (e, t, n) => n ? n.toUpperCase() : t.toLowerCase()), D = (e) => {
|
|
8
8
|
let t = E(e);
|
|
@@ -3,7 +3,7 @@ import "./dist-CYZr2fwk.mjs";
|
|
|
3
3
|
var e = {
|
|
4
4
|
"@camstack/sdk": {
|
|
5
5
|
name: "@camstack/sdk",
|
|
6
|
-
version: "1.2.
|
|
6
|
+
version: "1.2.154",
|
|
7
7
|
scope: ["default"],
|
|
8
8
|
loaded: !1,
|
|
9
9
|
from: "addon_pipeline_analytics_widgets",
|
|
@@ -18,7 +18,7 @@ var e = {
|
|
|
18
18
|
},
|
|
19
19
|
"@camstack/types": {
|
|
20
20
|
name: "@camstack/types",
|
|
21
|
-
version: "1.2.
|
|
21
|
+
version: "1.2.428",
|
|
22
22
|
scope: ["default"],
|
|
23
23
|
loaded: !1,
|
|
24
24
|
from: "addon_pipeline_analytics_widgets",
|
|
@@ -33,7 +33,7 @@ var e = {
|
|
|
33
33
|
},
|
|
34
34
|
"@camstack/ui-library": {
|
|
35
35
|
name: "@camstack/ui-library",
|
|
36
|
-
version: "1.2.
|
|
36
|
+
version: "1.2.337",
|
|
37
37
|
scope: ["default"],
|
|
38
38
|
loaded: !1,
|
|
39
39
|
from: "addon_pipeline_analytics_widgets",
|