@camstack/addon-provider-onvif 1.1.16 → 1.1.18
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/addon.js +250 -4
- package/dist/addon.mjs +250 -4
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -4631,7 +4631,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4631
4631
|
return inst;
|
|
4632
4632
|
}
|
|
4633
4633
|
//#endregion
|
|
4634
|
-
//#region ../types/dist/sleep-
|
|
4634
|
+
//#region ../types/dist/sleep-CZDdRBua.mjs
|
|
4635
4635
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4636
4636
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4637
4637
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -7238,7 +7238,16 @@ var DecoderStatsSchema = object({
|
|
|
7238
7238
|
inputFps: number(),
|
|
7239
7239
|
outputFps: number(),
|
|
7240
7240
|
avgDecodeTimeMs: number(),
|
|
7241
|
-
droppedFrames: number()
|
|
7241
|
+
droppedFrames: number(),
|
|
7242
|
+
/**
|
|
7243
|
+
* Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
|
|
7244
|
+
* lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
|
|
7245
|
+
* the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
|
|
7246
|
+
* is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
|
|
7247
|
+
*/
|
|
7248
|
+
lagMs: number().optional(),
|
|
7249
|
+
effectiveFps: number().optional(),
|
|
7250
|
+
adaptiveFps: number().optional()
|
|
7242
7251
|
});
|
|
7243
7252
|
var DecoderSessionConfigSchema = object({
|
|
7244
7253
|
codec: string(),
|
|
@@ -7279,7 +7288,15 @@ var DecoderSessionConfigSchema = object({
|
|
|
7279
7288
|
* other — `pullFrames` returns nothing for an `'shm'` session and
|
|
7280
7289
|
* `pullHandles` returns nothing for a `'callback'` session.
|
|
7281
7290
|
*/
|
|
7282
|
-
frameSink: _enum(["callback", "shm"]).default("callback")
|
|
7291
|
+
frameSink: _enum(["callback", "shm"]).default("callback"),
|
|
7292
|
+
/**
|
|
7293
|
+
* Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
|
|
7294
|
+
* a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
|
|
7295
|
+
* real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
|
|
7296
|
+
* stream-broker's `streamingDebug` gate — off by default so production logs
|
|
7297
|
+
* stay quiet and the emit path pays zero per-frame cost when disabled.
|
|
7298
|
+
*/
|
|
7299
|
+
debug: boolean().optional()
|
|
7283
7300
|
});
|
|
7284
7301
|
var EncodeProfileSchema = object({
|
|
7285
7302
|
video: object({
|
|
@@ -9541,6 +9558,75 @@ DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _vo
|
|
|
9541
9558
|
auth: "admin"
|
|
9542
9559
|
});
|
|
9543
9560
|
/**
|
|
9561
|
+
* Vendor-neutral day/night (IR-cut) control — the per-camera config cap
|
|
9562
|
+
* shared by reolink / hikvision / amcrest. Models the common firmware
|
|
9563
|
+
* surface: the IR-cut switching MODE plus the two knobs that gate it
|
|
9564
|
+
* (photocell `sensitivity` + `switchDelaySec`). Each vendor maps these
|
|
9565
|
+
* onto its own ISAPI / Baichuan / Dahua-CGI fields; the cap standardises
|
|
9566
|
+
* the shape so ONE derived-form renders every camera.
|
|
9567
|
+
*
|
|
9568
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9569
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9570
|
+
* injected from `status`) reports the live values, and a single
|
|
9571
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9572
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9573
|
+
* routing from this surface.
|
|
9574
|
+
*/
|
|
9575
|
+
/** IR-cut switching mode. `schedule` = time-of-day table configured on the camera. */
|
|
9576
|
+
var DayNightModeSchema = _enum([
|
|
9577
|
+
"auto",
|
|
9578
|
+
"day",
|
|
9579
|
+
"night",
|
|
9580
|
+
"schedule"
|
|
9581
|
+
]);
|
|
9582
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9583
|
+
* getOptions availability convention. Normalized values are 0–100. */
|
|
9584
|
+
var NormalizedRangeSchema$1 = object({
|
|
9585
|
+
min: number(),
|
|
9586
|
+
max: number(),
|
|
9587
|
+
step: number()
|
|
9588
|
+
});
|
|
9589
|
+
object({
|
|
9590
|
+
mode: DayNightModeSchema,
|
|
9591
|
+
/** IR-cut trigger sensitivity, NORMALIZED 0–100 (higher = switches to night sooner). */
|
|
9592
|
+
sensitivity: number().optional(),
|
|
9593
|
+
/** Delay before the IR-cut filter flips, in seconds. */
|
|
9594
|
+
switchDelaySec: number().optional(),
|
|
9595
|
+
lastFetchedAt: number()
|
|
9596
|
+
});
|
|
9597
|
+
/**
|
|
9598
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
9599
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
9600
|
+
* (normalized 0–100); the mode choice-set as an array. A provider returns
|
|
9601
|
+
* honest, camera-probed values — never hardcoded.
|
|
9602
|
+
*/
|
|
9603
|
+
var DayNightOptionsSchema = object({
|
|
9604
|
+
/** Modes this camera accepts. Empty → the camera has no configurable day/night mode. */
|
|
9605
|
+
modes: array(DayNightModeSchema),
|
|
9606
|
+
supportsSensitivity: boolean(),
|
|
9607
|
+
/** Present when `supportsSensitivity` — the normalized 0–100 range. */
|
|
9608
|
+
sensitivity: NormalizedRangeSchema$1.optional(),
|
|
9609
|
+
supportsSwitchDelay: boolean(),
|
|
9610
|
+
/** Present when `supportsSwitchDelay` — the allowed delay range in seconds. */
|
|
9611
|
+
switchDelaySec: NormalizedRangeSchema$1.optional()
|
|
9612
|
+
});
|
|
9613
|
+
/**
|
|
9614
|
+
* Partial change to the day/night config — every field optional. A
|
|
9615
|
+
* provider ignores fields it does not support.
|
|
9616
|
+
*/
|
|
9617
|
+
var DayNightSettingsPatchSchema = object({
|
|
9618
|
+
mode: DayNightModeSchema.optional(),
|
|
9619
|
+
sensitivity: number().optional(),
|
|
9620
|
+
switchDelaySec: number().optional()
|
|
9621
|
+
});
|
|
9622
|
+
DeviceType.Camera, method(object({ deviceId: number() }), DayNightOptionsSchema), method(object({
|
|
9623
|
+
deviceId: number(),
|
|
9624
|
+
settings: DayNightSettingsPatchSchema
|
|
9625
|
+
}), _void(), {
|
|
9626
|
+
kind: "mutation",
|
|
9627
|
+
auth: "admin"
|
|
9628
|
+
});
|
|
9629
|
+
/**
|
|
9544
9630
|
* Identity envelope for a device's upstream-system metadata.
|
|
9545
9631
|
*
|
|
9546
9632
|
* Two jobs:
|
|
@@ -9896,6 +9982,130 @@ object({
|
|
|
9896
9982
|
});
|
|
9897
9983
|
DeviceType.Image;
|
|
9898
9984
|
/**
|
|
9985
|
+
* Vendor-neutral image / picture-adjustment cap — the per-camera config
|
|
9986
|
+
* cap shared by reolink / hikvision / amcrest. Models the common ISP
|
|
9987
|
+
* surface: the four picture sliders (brightness / contrast / saturation /
|
|
9988
|
+
* sharpness), orientation (mirror / flip / rotate), white-balance,
|
|
9989
|
+
* exposure and backlight-compensation modes.
|
|
9990
|
+
*
|
|
9991
|
+
* NORMALIZATION: every slider is a normalized int 0–100. Vendors expose
|
|
9992
|
+
* these natively as 0–100 or 0–255 (or other ranges); each provider maps
|
|
9993
|
+
* its native range to/from this normalized 0–100 space so the cap surface
|
|
9994
|
+
* (and the derived form) is identical across cameras. `warmth` (manual
|
|
9995
|
+
* white-balance) is likewise normalized 0–100.
|
|
9996
|
+
*
|
|
9997
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9998
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9999
|
+
* injected from `status`) reports the live values, and a single
|
|
10000
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
10001
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
10002
|
+
* routing from this surface.
|
|
10003
|
+
*/
|
|
10004
|
+
/** Sensor/image rotation, degrees clockwise. */
|
|
10005
|
+
var ImageRotateSchema = _enum([
|
|
10006
|
+
"0",
|
|
10007
|
+
"90",
|
|
10008
|
+
"180",
|
|
10009
|
+
"270"
|
|
10010
|
+
]);
|
|
10011
|
+
/** White-balance mode. `manual` unlocks the normalized `warmth` knob. */
|
|
10012
|
+
var WhiteBalanceModeSchema = _enum(["auto", "manual"]);
|
|
10013
|
+
/** Exposure mode. */
|
|
10014
|
+
var ExposureModeSchema = _enum(["auto", "manual"]);
|
|
10015
|
+
/**
|
|
10016
|
+
* Backlight-compensation mode:
|
|
10017
|
+
* - `off` — disabled
|
|
10018
|
+
* - `blc` — backlight compensation
|
|
10019
|
+
* - `wdr` — wide dynamic range
|
|
10020
|
+
* - `hlc` — highlight compensation
|
|
10021
|
+
*/
|
|
10022
|
+
var BacklightModeSchema = _enum([
|
|
10023
|
+
"off",
|
|
10024
|
+
"blc",
|
|
10025
|
+
"wdr",
|
|
10026
|
+
"hlc"
|
|
10027
|
+
]);
|
|
10028
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
10029
|
+
* getOptions availability convention. Slider values are normalized 0–100. */
|
|
10030
|
+
var NormalizedRangeSchema = object({
|
|
10031
|
+
min: number(),
|
|
10032
|
+
max: number(),
|
|
10033
|
+
step: number()
|
|
10034
|
+
});
|
|
10035
|
+
object({
|
|
10036
|
+
/** Normalized 0–100. */
|
|
10037
|
+
brightness: number().optional(),
|
|
10038
|
+
/** Normalized 0–100. */
|
|
10039
|
+
contrast: number().optional(),
|
|
10040
|
+
/** Normalized 0–100. */
|
|
10041
|
+
saturation: number().optional(),
|
|
10042
|
+
/** Normalized 0–100. */
|
|
10043
|
+
sharpness: number().optional(),
|
|
10044
|
+
mirror: boolean().optional(),
|
|
10045
|
+
flip: boolean().optional(),
|
|
10046
|
+
rotate: ImageRotateSchema.optional(),
|
|
10047
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10048
|
+
/** Manual white-balance warmth, NORMALIZED 0–100. Meaningful only when `whiteBalance === 'manual'`. */
|
|
10049
|
+
warmth: number().optional(),
|
|
10050
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10051
|
+
backlightMode: BacklightModeSchema.optional(),
|
|
10052
|
+
lastFetchedAt: number()
|
|
10053
|
+
});
|
|
10054
|
+
/**
|
|
10055
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
10056
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
10057
|
+
* (the normalized 0–100 range); enums as arrays of supported values (empty
|
|
10058
|
+
* array → control hidden). A provider returns honest, camera-probed values
|
|
10059
|
+
* — never hardcoded.
|
|
10060
|
+
*/
|
|
10061
|
+
var ImageSettingsOptionsSchema = object({
|
|
10062
|
+
supportsBrightness: boolean(),
|
|
10063
|
+
brightness: NormalizedRangeSchema.optional(),
|
|
10064
|
+
supportsContrast: boolean(),
|
|
10065
|
+
contrast: NormalizedRangeSchema.optional(),
|
|
10066
|
+
supportsSaturation: boolean(),
|
|
10067
|
+
saturation: NormalizedRangeSchema.optional(),
|
|
10068
|
+
supportsSharpness: boolean(),
|
|
10069
|
+
sharpness: NormalizedRangeSchema.optional(),
|
|
10070
|
+
supportsMirror: boolean(),
|
|
10071
|
+
supportsFlip: boolean(),
|
|
10072
|
+
/** Supported rotation values. Empty → rotation not configurable. */
|
|
10073
|
+
rotateOptions: array(ImageRotateSchema),
|
|
10074
|
+
/** Supported white-balance modes. Empty → white-balance not configurable. */
|
|
10075
|
+
whiteBalanceModes: array(WhiteBalanceModeSchema),
|
|
10076
|
+
supportsWarmth: boolean(),
|
|
10077
|
+
/** Present when `supportsWarmth` — the normalized 0–100 range. */
|
|
10078
|
+
warmth: NormalizedRangeSchema.optional(),
|
|
10079
|
+
/** Supported exposure modes. Empty → exposure not configurable. */
|
|
10080
|
+
exposureModes: array(ExposureModeSchema),
|
|
10081
|
+
/** Supported backlight modes. Empty → backlight-compensation not configurable. */
|
|
10082
|
+
backlightModes: array(BacklightModeSchema)
|
|
10083
|
+
});
|
|
10084
|
+
/**
|
|
10085
|
+
* Partial change to the image config — every field optional. Slider values
|
|
10086
|
+
* are normalized 0–100. A provider ignores fields it does not support.
|
|
10087
|
+
*/
|
|
10088
|
+
var ImageSettingsPatchSchema = object({
|
|
10089
|
+
brightness: number().optional(),
|
|
10090
|
+
contrast: number().optional(),
|
|
10091
|
+
saturation: number().optional(),
|
|
10092
|
+
sharpness: number().optional(),
|
|
10093
|
+
mirror: boolean().optional(),
|
|
10094
|
+
flip: boolean().optional(),
|
|
10095
|
+
rotate: ImageRotateSchema.optional(),
|
|
10096
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10097
|
+
warmth: number().optional(),
|
|
10098
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10099
|
+
backlightMode: BacklightModeSchema.optional()
|
|
10100
|
+
});
|
|
10101
|
+
DeviceType.Camera, method(object({ deviceId: number() }), ImageSettingsOptionsSchema), method(object({
|
|
10102
|
+
deviceId: number(),
|
|
10103
|
+
settings: ImageSettingsPatchSchema
|
|
10104
|
+
}), _void(), {
|
|
10105
|
+
kind: "mutation",
|
|
10106
|
+
auth: "admin"
|
|
10107
|
+
});
|
|
10108
|
+
/**
|
|
9899
10109
|
* Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
|
|
9900
10110
|
* with a mowing lifecycle plus a dock action.
|
|
9901
10111
|
*
|
|
@@ -10790,6 +11000,16 @@ var RunnerCameraConfigSchema = object({
|
|
|
10790
11000
|
* this gate is bypassed.
|
|
10791
11001
|
*/
|
|
10792
11002
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
11003
|
+
/**
|
|
11004
|
+
* Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
|
|
11005
|
+
* never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
|
|
11006
|
+
* this is off by default because the recheck re-subscribes a detection session
|
|
11007
|
+
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
11008
|
+
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
11009
|
+
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
11010
|
+
* (and only render) when this is enabled.
|
|
11011
|
+
*/
|
|
11012
|
+
occupancyRecheckEnabled: boolean().default(false),
|
|
10793
11013
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
10794
11014
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
10795
11015
|
/**
|
|
@@ -13380,7 +13600,9 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
|
|
|
13380
13600
|
id: string(),
|
|
13381
13601
|
name: string(),
|
|
13382
13602
|
isPullMode: boolean().optional(),
|
|
13383
|
-
priority: number().optional()
|
|
13603
|
+
priority: number().optional(),
|
|
13604
|
+
hwaccel: string().optional(),
|
|
13605
|
+
probedBestHwaccel: string().optional()
|
|
13384
13606
|
})), method(DecoderSessionConfigSchema, object({
|
|
13385
13607
|
sessionId: string(),
|
|
13386
13608
|
nodeId: string()
|
|
@@ -19457,6 +19679,18 @@ Object.freeze({
|
|
|
19457
19679
|
addonId: null,
|
|
19458
19680
|
access: "view"
|
|
19459
19681
|
},
|
|
19682
|
+
"dayNight.getOptions": {
|
|
19683
|
+
capName: "day-night",
|
|
19684
|
+
capScope: "device",
|
|
19685
|
+
addonId: null,
|
|
19686
|
+
access: "view"
|
|
19687
|
+
},
|
|
19688
|
+
"dayNight.setSettings": {
|
|
19689
|
+
capName: "day-night",
|
|
19690
|
+
capScope: "device",
|
|
19691
|
+
addonId: null,
|
|
19692
|
+
access: "create"
|
|
19693
|
+
},
|
|
19460
19694
|
"decoder.createSession": {
|
|
19461
19695
|
capName: "decoder",
|
|
19462
19696
|
capScope: "system",
|
|
@@ -20387,6 +20621,18 @@ Object.freeze({
|
|
|
20387
20621
|
addonId: null,
|
|
20388
20622
|
access: "create"
|
|
20389
20623
|
},
|
|
20624
|
+
"imageSettings.getOptions": {
|
|
20625
|
+
capName: "image-settings",
|
|
20626
|
+
capScope: "device",
|
|
20627
|
+
addonId: null,
|
|
20628
|
+
access: "view"
|
|
20629
|
+
},
|
|
20630
|
+
"imageSettings.setSettings": {
|
|
20631
|
+
capName: "image-settings",
|
|
20632
|
+
capScope: "device",
|
|
20633
|
+
addonId: null,
|
|
20634
|
+
access: "create"
|
|
20635
|
+
},
|
|
20390
20636
|
"integrations.create": {
|
|
20391
20637
|
capName: "integrations",
|
|
20392
20638
|
capScope: "system",
|
package/dist/addon.mjs
CHANGED
|
@@ -4632,7 +4632,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4632
4632
|
return inst;
|
|
4633
4633
|
}
|
|
4634
4634
|
//#endregion
|
|
4635
|
-
//#region ../types/dist/sleep-
|
|
4635
|
+
//#region ../types/dist/sleep-CZDdRBua.mjs
|
|
4636
4636
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4637
4637
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4638
4638
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -7239,7 +7239,16 @@ var DecoderStatsSchema = object({
|
|
|
7239
7239
|
inputFps: number(),
|
|
7240
7240
|
outputFps: number(),
|
|
7241
7241
|
avgDecodeTimeMs: number(),
|
|
7242
|
-
droppedFrames: number()
|
|
7242
|
+
droppedFrames: number(),
|
|
7243
|
+
/**
|
|
7244
|
+
* Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
|
|
7245
|
+
* lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
|
|
7246
|
+
* the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
|
|
7247
|
+
* is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
|
|
7248
|
+
*/
|
|
7249
|
+
lagMs: number().optional(),
|
|
7250
|
+
effectiveFps: number().optional(),
|
|
7251
|
+
adaptiveFps: number().optional()
|
|
7243
7252
|
});
|
|
7244
7253
|
var DecoderSessionConfigSchema = object({
|
|
7245
7254
|
codec: string(),
|
|
@@ -7280,7 +7289,15 @@ var DecoderSessionConfigSchema = object({
|
|
|
7280
7289
|
* other — `pullFrames` returns nothing for an `'shm'` session and
|
|
7281
7290
|
* `pullHandles` returns nothing for a `'callback'` session.
|
|
7282
7291
|
*/
|
|
7283
|
-
frameSink: _enum(["callback", "shm"]).default("callback")
|
|
7292
|
+
frameSink: _enum(["callback", "shm"]).default("callback"),
|
|
7293
|
+
/**
|
|
7294
|
+
* Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
|
|
7295
|
+
* a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
|
|
7296
|
+
* real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
|
|
7297
|
+
* stream-broker's `streamingDebug` gate — off by default so production logs
|
|
7298
|
+
* stay quiet and the emit path pays zero per-frame cost when disabled.
|
|
7299
|
+
*/
|
|
7300
|
+
debug: boolean().optional()
|
|
7284
7301
|
});
|
|
7285
7302
|
var EncodeProfileSchema = object({
|
|
7286
7303
|
video: object({
|
|
@@ -9542,6 +9559,75 @@ DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _vo
|
|
|
9542
9559
|
auth: "admin"
|
|
9543
9560
|
});
|
|
9544
9561
|
/**
|
|
9562
|
+
* Vendor-neutral day/night (IR-cut) control — the per-camera config cap
|
|
9563
|
+
* shared by reolink / hikvision / amcrest. Models the common firmware
|
|
9564
|
+
* surface: the IR-cut switching MODE plus the two knobs that gate it
|
|
9565
|
+
* (photocell `sensitivity` + `switchDelaySec`). Each vendor maps these
|
|
9566
|
+
* onto its own ISAPI / Baichuan / Dahua-CGI fields; the cap standardises
|
|
9567
|
+
* the shape so ONE derived-form renders every camera.
|
|
9568
|
+
*
|
|
9569
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9570
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9571
|
+
* injected from `status`) reports the live values, and a single
|
|
9572
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9573
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9574
|
+
* routing from this surface.
|
|
9575
|
+
*/
|
|
9576
|
+
/** IR-cut switching mode. `schedule` = time-of-day table configured on the camera. */
|
|
9577
|
+
var DayNightModeSchema = _enum([
|
|
9578
|
+
"auto",
|
|
9579
|
+
"day",
|
|
9580
|
+
"night",
|
|
9581
|
+
"schedule"
|
|
9582
|
+
]);
|
|
9583
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9584
|
+
* getOptions availability convention. Normalized values are 0–100. */
|
|
9585
|
+
var NormalizedRangeSchema$1 = object({
|
|
9586
|
+
min: number(),
|
|
9587
|
+
max: number(),
|
|
9588
|
+
step: number()
|
|
9589
|
+
});
|
|
9590
|
+
object({
|
|
9591
|
+
mode: DayNightModeSchema,
|
|
9592
|
+
/** IR-cut trigger sensitivity, NORMALIZED 0–100 (higher = switches to night sooner). */
|
|
9593
|
+
sensitivity: number().optional(),
|
|
9594
|
+
/** Delay before the IR-cut filter flips, in seconds. */
|
|
9595
|
+
switchDelaySec: number().optional(),
|
|
9596
|
+
lastFetchedAt: number()
|
|
9597
|
+
});
|
|
9598
|
+
/**
|
|
9599
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
9600
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
9601
|
+
* (normalized 0–100); the mode choice-set as an array. A provider returns
|
|
9602
|
+
* honest, camera-probed values — never hardcoded.
|
|
9603
|
+
*/
|
|
9604
|
+
var DayNightOptionsSchema = object({
|
|
9605
|
+
/** Modes this camera accepts. Empty → the camera has no configurable day/night mode. */
|
|
9606
|
+
modes: array(DayNightModeSchema),
|
|
9607
|
+
supportsSensitivity: boolean(),
|
|
9608
|
+
/** Present when `supportsSensitivity` — the normalized 0–100 range. */
|
|
9609
|
+
sensitivity: NormalizedRangeSchema$1.optional(),
|
|
9610
|
+
supportsSwitchDelay: boolean(),
|
|
9611
|
+
/** Present when `supportsSwitchDelay` — the allowed delay range in seconds. */
|
|
9612
|
+
switchDelaySec: NormalizedRangeSchema$1.optional()
|
|
9613
|
+
});
|
|
9614
|
+
/**
|
|
9615
|
+
* Partial change to the day/night config — every field optional. A
|
|
9616
|
+
* provider ignores fields it does not support.
|
|
9617
|
+
*/
|
|
9618
|
+
var DayNightSettingsPatchSchema = object({
|
|
9619
|
+
mode: DayNightModeSchema.optional(),
|
|
9620
|
+
sensitivity: number().optional(),
|
|
9621
|
+
switchDelaySec: number().optional()
|
|
9622
|
+
});
|
|
9623
|
+
DeviceType.Camera, method(object({ deviceId: number() }), DayNightOptionsSchema), method(object({
|
|
9624
|
+
deviceId: number(),
|
|
9625
|
+
settings: DayNightSettingsPatchSchema
|
|
9626
|
+
}), _void(), {
|
|
9627
|
+
kind: "mutation",
|
|
9628
|
+
auth: "admin"
|
|
9629
|
+
});
|
|
9630
|
+
/**
|
|
9545
9631
|
* Identity envelope for a device's upstream-system metadata.
|
|
9546
9632
|
*
|
|
9547
9633
|
* Two jobs:
|
|
@@ -9897,6 +9983,130 @@ object({
|
|
|
9897
9983
|
});
|
|
9898
9984
|
DeviceType.Image;
|
|
9899
9985
|
/**
|
|
9986
|
+
* Vendor-neutral image / picture-adjustment cap — the per-camera config
|
|
9987
|
+
* cap shared by reolink / hikvision / amcrest. Models the common ISP
|
|
9988
|
+
* surface: the four picture sliders (brightness / contrast / saturation /
|
|
9989
|
+
* sharpness), orientation (mirror / flip / rotate), white-balance,
|
|
9990
|
+
* exposure and backlight-compensation modes.
|
|
9991
|
+
*
|
|
9992
|
+
* NORMALIZATION: every slider is a normalized int 0–100. Vendors expose
|
|
9993
|
+
* these natively as 0–100 or 0–255 (or other ranges); each provider maps
|
|
9994
|
+
* its native range to/from this normalized 0–100 space so the cap surface
|
|
9995
|
+
* (and the derived form) is identical across cameras. `warmth` (manual
|
|
9996
|
+
* white-balance) is likewise normalized 0–100.
|
|
9997
|
+
*
|
|
9998
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9999
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
10000
|
+
* injected from `status`) reports the live values, and a single
|
|
10001
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
10002
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
10003
|
+
* routing from this surface.
|
|
10004
|
+
*/
|
|
10005
|
+
/** Sensor/image rotation, degrees clockwise. */
|
|
10006
|
+
var ImageRotateSchema = _enum([
|
|
10007
|
+
"0",
|
|
10008
|
+
"90",
|
|
10009
|
+
"180",
|
|
10010
|
+
"270"
|
|
10011
|
+
]);
|
|
10012
|
+
/** White-balance mode. `manual` unlocks the normalized `warmth` knob. */
|
|
10013
|
+
var WhiteBalanceModeSchema = _enum(["auto", "manual"]);
|
|
10014
|
+
/** Exposure mode. */
|
|
10015
|
+
var ExposureModeSchema = _enum(["auto", "manual"]);
|
|
10016
|
+
/**
|
|
10017
|
+
* Backlight-compensation mode:
|
|
10018
|
+
* - `off` — disabled
|
|
10019
|
+
* - `blc` — backlight compensation
|
|
10020
|
+
* - `wdr` — wide dynamic range
|
|
10021
|
+
* - `hlc` — highlight compensation
|
|
10022
|
+
*/
|
|
10023
|
+
var BacklightModeSchema = _enum([
|
|
10024
|
+
"off",
|
|
10025
|
+
"blc",
|
|
10026
|
+
"wdr",
|
|
10027
|
+
"hlc"
|
|
10028
|
+
]);
|
|
10029
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
10030
|
+
* getOptions availability convention. Slider values are normalized 0–100. */
|
|
10031
|
+
var NormalizedRangeSchema = object({
|
|
10032
|
+
min: number(),
|
|
10033
|
+
max: number(),
|
|
10034
|
+
step: number()
|
|
10035
|
+
});
|
|
10036
|
+
object({
|
|
10037
|
+
/** Normalized 0–100. */
|
|
10038
|
+
brightness: number().optional(),
|
|
10039
|
+
/** Normalized 0–100. */
|
|
10040
|
+
contrast: number().optional(),
|
|
10041
|
+
/** Normalized 0–100. */
|
|
10042
|
+
saturation: number().optional(),
|
|
10043
|
+
/** Normalized 0–100. */
|
|
10044
|
+
sharpness: number().optional(),
|
|
10045
|
+
mirror: boolean().optional(),
|
|
10046
|
+
flip: boolean().optional(),
|
|
10047
|
+
rotate: ImageRotateSchema.optional(),
|
|
10048
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10049
|
+
/** Manual white-balance warmth, NORMALIZED 0–100. Meaningful only when `whiteBalance === 'manual'`. */
|
|
10050
|
+
warmth: number().optional(),
|
|
10051
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10052
|
+
backlightMode: BacklightModeSchema.optional(),
|
|
10053
|
+
lastFetchedAt: number()
|
|
10054
|
+
});
|
|
10055
|
+
/**
|
|
10056
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
10057
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
10058
|
+
* (the normalized 0–100 range); enums as arrays of supported values (empty
|
|
10059
|
+
* array → control hidden). A provider returns honest, camera-probed values
|
|
10060
|
+
* — never hardcoded.
|
|
10061
|
+
*/
|
|
10062
|
+
var ImageSettingsOptionsSchema = object({
|
|
10063
|
+
supportsBrightness: boolean(),
|
|
10064
|
+
brightness: NormalizedRangeSchema.optional(),
|
|
10065
|
+
supportsContrast: boolean(),
|
|
10066
|
+
contrast: NormalizedRangeSchema.optional(),
|
|
10067
|
+
supportsSaturation: boolean(),
|
|
10068
|
+
saturation: NormalizedRangeSchema.optional(),
|
|
10069
|
+
supportsSharpness: boolean(),
|
|
10070
|
+
sharpness: NormalizedRangeSchema.optional(),
|
|
10071
|
+
supportsMirror: boolean(),
|
|
10072
|
+
supportsFlip: boolean(),
|
|
10073
|
+
/** Supported rotation values. Empty → rotation not configurable. */
|
|
10074
|
+
rotateOptions: array(ImageRotateSchema),
|
|
10075
|
+
/** Supported white-balance modes. Empty → white-balance not configurable. */
|
|
10076
|
+
whiteBalanceModes: array(WhiteBalanceModeSchema),
|
|
10077
|
+
supportsWarmth: boolean(),
|
|
10078
|
+
/** Present when `supportsWarmth` — the normalized 0–100 range. */
|
|
10079
|
+
warmth: NormalizedRangeSchema.optional(),
|
|
10080
|
+
/** Supported exposure modes. Empty → exposure not configurable. */
|
|
10081
|
+
exposureModes: array(ExposureModeSchema),
|
|
10082
|
+
/** Supported backlight modes. Empty → backlight-compensation not configurable. */
|
|
10083
|
+
backlightModes: array(BacklightModeSchema)
|
|
10084
|
+
});
|
|
10085
|
+
/**
|
|
10086
|
+
* Partial change to the image config — every field optional. Slider values
|
|
10087
|
+
* are normalized 0–100. A provider ignores fields it does not support.
|
|
10088
|
+
*/
|
|
10089
|
+
var ImageSettingsPatchSchema = object({
|
|
10090
|
+
brightness: number().optional(),
|
|
10091
|
+
contrast: number().optional(),
|
|
10092
|
+
saturation: number().optional(),
|
|
10093
|
+
sharpness: number().optional(),
|
|
10094
|
+
mirror: boolean().optional(),
|
|
10095
|
+
flip: boolean().optional(),
|
|
10096
|
+
rotate: ImageRotateSchema.optional(),
|
|
10097
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10098
|
+
warmth: number().optional(),
|
|
10099
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10100
|
+
backlightMode: BacklightModeSchema.optional()
|
|
10101
|
+
});
|
|
10102
|
+
DeviceType.Camera, method(object({ deviceId: number() }), ImageSettingsOptionsSchema), method(object({
|
|
10103
|
+
deviceId: number(),
|
|
10104
|
+
settings: ImageSettingsPatchSchema
|
|
10105
|
+
}), _void(), {
|
|
10106
|
+
kind: "mutation",
|
|
10107
|
+
auth: "admin"
|
|
10108
|
+
});
|
|
10109
|
+
/**
|
|
9900
10110
|
* Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
|
|
9901
10111
|
* with a mowing lifecycle plus a dock action.
|
|
9902
10112
|
*
|
|
@@ -10791,6 +11001,16 @@ var RunnerCameraConfigSchema = object({
|
|
|
10791
11001
|
* this gate is bypassed.
|
|
10792
11002
|
*/
|
|
10793
11003
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
11004
|
+
/**
|
|
11005
|
+
* Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
|
|
11006
|
+
* never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
|
|
11007
|
+
* this is off by default because the recheck re-subscribes a detection session
|
|
11008
|
+
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
11009
|
+
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
11010
|
+
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
11011
|
+
* (and only render) when this is enabled.
|
|
11012
|
+
*/
|
|
11013
|
+
occupancyRecheckEnabled: boolean().default(false),
|
|
10794
11014
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
10795
11015
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
10796
11016
|
/**
|
|
@@ -13381,7 +13601,9 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
|
|
|
13381
13601
|
id: string(),
|
|
13382
13602
|
name: string(),
|
|
13383
13603
|
isPullMode: boolean().optional(),
|
|
13384
|
-
priority: number().optional()
|
|
13604
|
+
priority: number().optional(),
|
|
13605
|
+
hwaccel: string().optional(),
|
|
13606
|
+
probedBestHwaccel: string().optional()
|
|
13385
13607
|
})), method(DecoderSessionConfigSchema, object({
|
|
13386
13608
|
sessionId: string(),
|
|
13387
13609
|
nodeId: string()
|
|
@@ -19458,6 +19680,18 @@ Object.freeze({
|
|
|
19458
19680
|
addonId: null,
|
|
19459
19681
|
access: "view"
|
|
19460
19682
|
},
|
|
19683
|
+
"dayNight.getOptions": {
|
|
19684
|
+
capName: "day-night",
|
|
19685
|
+
capScope: "device",
|
|
19686
|
+
addonId: null,
|
|
19687
|
+
access: "view"
|
|
19688
|
+
},
|
|
19689
|
+
"dayNight.setSettings": {
|
|
19690
|
+
capName: "day-night",
|
|
19691
|
+
capScope: "device",
|
|
19692
|
+
addonId: null,
|
|
19693
|
+
access: "create"
|
|
19694
|
+
},
|
|
19461
19695
|
"decoder.createSession": {
|
|
19462
19696
|
capName: "decoder",
|
|
19463
19697
|
capScope: "system",
|
|
@@ -20388,6 +20622,18 @@ Object.freeze({
|
|
|
20388
20622
|
addonId: null,
|
|
20389
20623
|
access: "create"
|
|
20390
20624
|
},
|
|
20625
|
+
"imageSettings.getOptions": {
|
|
20626
|
+
capName: "image-settings",
|
|
20627
|
+
capScope: "device",
|
|
20628
|
+
addonId: null,
|
|
20629
|
+
access: "view"
|
|
20630
|
+
},
|
|
20631
|
+
"imageSettings.setSettings": {
|
|
20632
|
+
capName: "image-settings",
|
|
20633
|
+
capScope: "device",
|
|
20634
|
+
addonId: null,
|
|
20635
|
+
access: "create"
|
|
20636
|
+
},
|
|
20391
20637
|
"integrations.create": {
|
|
20392
20638
|
capName: "integrations",
|
|
20393
20639
|
capScope: "system",
|