@camstack/addon-export-hap 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/export-hap.addon.js +250 -4
- package/dist/export-hap.addon.mjs +250 -4
- package/package.json +1 -1
package/dist/export-hap.addon.js
CHANGED
|
@@ -4664,7 +4664,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4664
4664
|
return inst;
|
|
4665
4665
|
}
|
|
4666
4666
|
//#endregion
|
|
4667
|
-
//#region ../types/dist/sleep-
|
|
4667
|
+
//#region ../types/dist/sleep-CZDdRBua.mjs
|
|
4668
4668
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4669
4669
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4670
4670
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -7259,7 +7259,16 @@ var DecoderStatsSchema = object({
|
|
|
7259
7259
|
inputFps: number(),
|
|
7260
7260
|
outputFps: number(),
|
|
7261
7261
|
avgDecodeTimeMs: number(),
|
|
7262
|
-
droppedFrames: number()
|
|
7262
|
+
droppedFrames: number(),
|
|
7263
|
+
/**
|
|
7264
|
+
* Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
|
|
7265
|
+
* lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
|
|
7266
|
+
* the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
|
|
7267
|
+
* is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
|
|
7268
|
+
*/
|
|
7269
|
+
lagMs: number().optional(),
|
|
7270
|
+
effectiveFps: number().optional(),
|
|
7271
|
+
adaptiveFps: number().optional()
|
|
7263
7272
|
});
|
|
7264
7273
|
var DecoderSessionConfigSchema = object({
|
|
7265
7274
|
codec: string(),
|
|
@@ -7300,7 +7309,15 @@ var DecoderSessionConfigSchema = object({
|
|
|
7300
7309
|
* other — `pullFrames` returns nothing for an `'shm'` session and
|
|
7301
7310
|
* `pullHandles` returns nothing for a `'callback'` session.
|
|
7302
7311
|
*/
|
|
7303
|
-
frameSink: _enum(["callback", "shm"]).default("callback")
|
|
7312
|
+
frameSink: _enum(["callback", "shm"]).default("callback"),
|
|
7313
|
+
/**
|
|
7314
|
+
* Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
|
|
7315
|
+
* a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
|
|
7316
|
+
* real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
|
|
7317
|
+
* stream-broker's `streamingDebug` gate — off by default so production logs
|
|
7318
|
+
* stay quiet and the emit path pays zero per-frame cost when disabled.
|
|
7319
|
+
*/
|
|
7320
|
+
debug: boolean().optional()
|
|
7304
7321
|
});
|
|
7305
7322
|
var EncodeProfileSchema = object({
|
|
7306
7323
|
video: object({
|
|
@@ -9512,6 +9529,75 @@ DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _vo
|
|
|
9512
9529
|
auth: "admin"
|
|
9513
9530
|
});
|
|
9514
9531
|
/**
|
|
9532
|
+
* Vendor-neutral day/night (IR-cut) control — the per-camera config cap
|
|
9533
|
+
* shared by reolink / hikvision / amcrest. Models the common firmware
|
|
9534
|
+
* surface: the IR-cut switching MODE plus the two knobs that gate it
|
|
9535
|
+
* (photocell `sensitivity` + `switchDelaySec`). Each vendor maps these
|
|
9536
|
+
* onto its own ISAPI / Baichuan / Dahua-CGI fields; the cap standardises
|
|
9537
|
+
* the shape so ONE derived-form renders every camera.
|
|
9538
|
+
*
|
|
9539
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9540
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9541
|
+
* injected from `status`) reports the live values, and a single
|
|
9542
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9543
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9544
|
+
* routing from this surface.
|
|
9545
|
+
*/
|
|
9546
|
+
/** IR-cut switching mode. `schedule` = time-of-day table configured on the camera. */
|
|
9547
|
+
var DayNightModeSchema = _enum([
|
|
9548
|
+
"auto",
|
|
9549
|
+
"day",
|
|
9550
|
+
"night",
|
|
9551
|
+
"schedule"
|
|
9552
|
+
]);
|
|
9553
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9554
|
+
* getOptions availability convention. Normalized values are 0–100. */
|
|
9555
|
+
var NormalizedRangeSchema$1 = object({
|
|
9556
|
+
min: number(),
|
|
9557
|
+
max: number(),
|
|
9558
|
+
step: number()
|
|
9559
|
+
});
|
|
9560
|
+
object({
|
|
9561
|
+
mode: DayNightModeSchema,
|
|
9562
|
+
/** IR-cut trigger sensitivity, NORMALIZED 0–100 (higher = switches to night sooner). */
|
|
9563
|
+
sensitivity: number().optional(),
|
|
9564
|
+
/** Delay before the IR-cut filter flips, in seconds. */
|
|
9565
|
+
switchDelaySec: number().optional(),
|
|
9566
|
+
lastFetchedAt: number()
|
|
9567
|
+
});
|
|
9568
|
+
/**
|
|
9569
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
9570
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
9571
|
+
* (normalized 0–100); the mode choice-set as an array. A provider returns
|
|
9572
|
+
* honest, camera-probed values — never hardcoded.
|
|
9573
|
+
*/
|
|
9574
|
+
var DayNightOptionsSchema = object({
|
|
9575
|
+
/** Modes this camera accepts. Empty → the camera has no configurable day/night mode. */
|
|
9576
|
+
modes: array(DayNightModeSchema),
|
|
9577
|
+
supportsSensitivity: boolean(),
|
|
9578
|
+
/** Present when `supportsSensitivity` — the normalized 0–100 range. */
|
|
9579
|
+
sensitivity: NormalizedRangeSchema$1.optional(),
|
|
9580
|
+
supportsSwitchDelay: boolean(),
|
|
9581
|
+
/** Present when `supportsSwitchDelay` — the allowed delay range in seconds. */
|
|
9582
|
+
switchDelaySec: NormalizedRangeSchema$1.optional()
|
|
9583
|
+
});
|
|
9584
|
+
/**
|
|
9585
|
+
* Partial change to the day/night config — every field optional. A
|
|
9586
|
+
* provider ignores fields it does not support.
|
|
9587
|
+
*/
|
|
9588
|
+
var DayNightSettingsPatchSchema = object({
|
|
9589
|
+
mode: DayNightModeSchema.optional(),
|
|
9590
|
+
sensitivity: number().optional(),
|
|
9591
|
+
switchDelaySec: number().optional()
|
|
9592
|
+
});
|
|
9593
|
+
DeviceType.Camera, method(object({ deviceId: number() }), DayNightOptionsSchema), method(object({
|
|
9594
|
+
deviceId: number(),
|
|
9595
|
+
settings: DayNightSettingsPatchSchema
|
|
9596
|
+
}), _void(), {
|
|
9597
|
+
kind: "mutation",
|
|
9598
|
+
auth: "admin"
|
|
9599
|
+
});
|
|
9600
|
+
/**
|
|
9515
9601
|
* Identity envelope for a device's upstream-system metadata.
|
|
9516
9602
|
*
|
|
9517
9603
|
* Two jobs:
|
|
@@ -9867,6 +9953,130 @@ object({
|
|
|
9867
9953
|
});
|
|
9868
9954
|
DeviceType.Image;
|
|
9869
9955
|
/**
|
|
9956
|
+
* Vendor-neutral image / picture-adjustment cap — the per-camera config
|
|
9957
|
+
* cap shared by reolink / hikvision / amcrest. Models the common ISP
|
|
9958
|
+
* surface: the four picture sliders (brightness / contrast / saturation /
|
|
9959
|
+
* sharpness), orientation (mirror / flip / rotate), white-balance,
|
|
9960
|
+
* exposure and backlight-compensation modes.
|
|
9961
|
+
*
|
|
9962
|
+
* NORMALIZATION: every slider is a normalized int 0–100. Vendors expose
|
|
9963
|
+
* these natively as 0–100 or 0–255 (or other ranges); each provider maps
|
|
9964
|
+
* its native range to/from this normalized 0–100 space so the cap surface
|
|
9965
|
+
* (and the derived form) is identical across cameras. `warmth` (manual
|
|
9966
|
+
* white-balance) is likewise normalized 0–100.
|
|
9967
|
+
*
|
|
9968
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9969
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9970
|
+
* injected from `status`) reports the live values, and a single
|
|
9971
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9972
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9973
|
+
* routing from this surface.
|
|
9974
|
+
*/
|
|
9975
|
+
/** Sensor/image rotation, degrees clockwise. */
|
|
9976
|
+
var ImageRotateSchema = _enum([
|
|
9977
|
+
"0",
|
|
9978
|
+
"90",
|
|
9979
|
+
"180",
|
|
9980
|
+
"270"
|
|
9981
|
+
]);
|
|
9982
|
+
/** White-balance mode. `manual` unlocks the normalized `warmth` knob. */
|
|
9983
|
+
var WhiteBalanceModeSchema = _enum(["auto", "manual"]);
|
|
9984
|
+
/** Exposure mode. */
|
|
9985
|
+
var ExposureModeSchema = _enum(["auto", "manual"]);
|
|
9986
|
+
/**
|
|
9987
|
+
* Backlight-compensation mode:
|
|
9988
|
+
* - `off` — disabled
|
|
9989
|
+
* - `blc` — backlight compensation
|
|
9990
|
+
* - `wdr` — wide dynamic range
|
|
9991
|
+
* - `hlc` — highlight compensation
|
|
9992
|
+
*/
|
|
9993
|
+
var BacklightModeSchema = _enum([
|
|
9994
|
+
"off",
|
|
9995
|
+
"blc",
|
|
9996
|
+
"wdr",
|
|
9997
|
+
"hlc"
|
|
9998
|
+
]);
|
|
9999
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
10000
|
+
* getOptions availability convention. Slider values are normalized 0–100. */
|
|
10001
|
+
var NormalizedRangeSchema = object({
|
|
10002
|
+
min: number(),
|
|
10003
|
+
max: number(),
|
|
10004
|
+
step: number()
|
|
10005
|
+
});
|
|
10006
|
+
object({
|
|
10007
|
+
/** Normalized 0–100. */
|
|
10008
|
+
brightness: number().optional(),
|
|
10009
|
+
/** Normalized 0–100. */
|
|
10010
|
+
contrast: number().optional(),
|
|
10011
|
+
/** Normalized 0–100. */
|
|
10012
|
+
saturation: number().optional(),
|
|
10013
|
+
/** Normalized 0–100. */
|
|
10014
|
+
sharpness: number().optional(),
|
|
10015
|
+
mirror: boolean().optional(),
|
|
10016
|
+
flip: boolean().optional(),
|
|
10017
|
+
rotate: ImageRotateSchema.optional(),
|
|
10018
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10019
|
+
/** Manual white-balance warmth, NORMALIZED 0–100. Meaningful only when `whiteBalance === 'manual'`. */
|
|
10020
|
+
warmth: number().optional(),
|
|
10021
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10022
|
+
backlightMode: BacklightModeSchema.optional(),
|
|
10023
|
+
lastFetchedAt: number()
|
|
10024
|
+
});
|
|
10025
|
+
/**
|
|
10026
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
10027
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
10028
|
+
* (the normalized 0–100 range); enums as arrays of supported values (empty
|
|
10029
|
+
* array → control hidden). A provider returns honest, camera-probed values
|
|
10030
|
+
* — never hardcoded.
|
|
10031
|
+
*/
|
|
10032
|
+
var ImageSettingsOptionsSchema = object({
|
|
10033
|
+
supportsBrightness: boolean(),
|
|
10034
|
+
brightness: NormalizedRangeSchema.optional(),
|
|
10035
|
+
supportsContrast: boolean(),
|
|
10036
|
+
contrast: NormalizedRangeSchema.optional(),
|
|
10037
|
+
supportsSaturation: boolean(),
|
|
10038
|
+
saturation: NormalizedRangeSchema.optional(),
|
|
10039
|
+
supportsSharpness: boolean(),
|
|
10040
|
+
sharpness: NormalizedRangeSchema.optional(),
|
|
10041
|
+
supportsMirror: boolean(),
|
|
10042
|
+
supportsFlip: boolean(),
|
|
10043
|
+
/** Supported rotation values. Empty → rotation not configurable. */
|
|
10044
|
+
rotateOptions: array(ImageRotateSchema),
|
|
10045
|
+
/** Supported white-balance modes. Empty → white-balance not configurable. */
|
|
10046
|
+
whiteBalanceModes: array(WhiteBalanceModeSchema),
|
|
10047
|
+
supportsWarmth: boolean(),
|
|
10048
|
+
/** Present when `supportsWarmth` — the normalized 0–100 range. */
|
|
10049
|
+
warmth: NormalizedRangeSchema.optional(),
|
|
10050
|
+
/** Supported exposure modes. Empty → exposure not configurable. */
|
|
10051
|
+
exposureModes: array(ExposureModeSchema),
|
|
10052
|
+
/** Supported backlight modes. Empty → backlight-compensation not configurable. */
|
|
10053
|
+
backlightModes: array(BacklightModeSchema)
|
|
10054
|
+
});
|
|
10055
|
+
/**
|
|
10056
|
+
* Partial change to the image config — every field optional. Slider values
|
|
10057
|
+
* are normalized 0–100. A provider ignores fields it does not support.
|
|
10058
|
+
*/
|
|
10059
|
+
var ImageSettingsPatchSchema = object({
|
|
10060
|
+
brightness: number().optional(),
|
|
10061
|
+
contrast: number().optional(),
|
|
10062
|
+
saturation: number().optional(),
|
|
10063
|
+
sharpness: number().optional(),
|
|
10064
|
+
mirror: boolean().optional(),
|
|
10065
|
+
flip: boolean().optional(),
|
|
10066
|
+
rotate: ImageRotateSchema.optional(),
|
|
10067
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10068
|
+
warmth: number().optional(),
|
|
10069
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10070
|
+
backlightMode: BacklightModeSchema.optional()
|
|
10071
|
+
});
|
|
10072
|
+
DeviceType.Camera, method(object({ deviceId: number() }), ImageSettingsOptionsSchema), method(object({
|
|
10073
|
+
deviceId: number(),
|
|
10074
|
+
settings: ImageSettingsPatchSchema
|
|
10075
|
+
}), _void(), {
|
|
10076
|
+
kind: "mutation",
|
|
10077
|
+
auth: "admin"
|
|
10078
|
+
});
|
|
10079
|
+
/**
|
|
9870
10080
|
* Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
|
|
9871
10081
|
* with a mowing lifecycle plus a dock action.
|
|
9872
10082
|
*
|
|
@@ -10761,6 +10971,16 @@ var RunnerCameraConfigSchema = object({
|
|
|
10761
10971
|
* this gate is bypassed.
|
|
10762
10972
|
*/
|
|
10763
10973
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
10974
|
+
/**
|
|
10975
|
+
* Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
|
|
10976
|
+
* never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
|
|
10977
|
+
* this is off by default because the recheck re-subscribes a detection session
|
|
10978
|
+
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
10979
|
+
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
10980
|
+
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
10981
|
+
* (and only render) when this is enabled.
|
|
10982
|
+
*/
|
|
10983
|
+
occupancyRecheckEnabled: boolean().default(false),
|
|
10764
10984
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
10765
10985
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
10766
10986
|
/**
|
|
@@ -13057,7 +13277,9 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
|
|
|
13057
13277
|
id: string(),
|
|
13058
13278
|
name: string(),
|
|
13059
13279
|
isPullMode: boolean().optional(),
|
|
13060
|
-
priority: number().optional()
|
|
13280
|
+
priority: number().optional(),
|
|
13281
|
+
hwaccel: string().optional(),
|
|
13282
|
+
probedBestHwaccel: string().optional()
|
|
13061
13283
|
})), method(DecoderSessionConfigSchema, object({
|
|
13062
13284
|
sessionId: string(),
|
|
13063
13285
|
nodeId: string()
|
|
@@ -19074,6 +19296,18 @@ Object.freeze({
|
|
|
19074
19296
|
addonId: null,
|
|
19075
19297
|
access: "view"
|
|
19076
19298
|
},
|
|
19299
|
+
"dayNight.getOptions": {
|
|
19300
|
+
capName: "day-night",
|
|
19301
|
+
capScope: "device",
|
|
19302
|
+
addonId: null,
|
|
19303
|
+
access: "view"
|
|
19304
|
+
},
|
|
19305
|
+
"dayNight.setSettings": {
|
|
19306
|
+
capName: "day-night",
|
|
19307
|
+
capScope: "device",
|
|
19308
|
+
addonId: null,
|
|
19309
|
+
access: "create"
|
|
19310
|
+
},
|
|
19077
19311
|
"decoder.createSession": {
|
|
19078
19312
|
capName: "decoder",
|
|
19079
19313
|
capScope: "system",
|
|
@@ -20004,6 +20238,18 @@ Object.freeze({
|
|
|
20004
20238
|
addonId: null,
|
|
20005
20239
|
access: "create"
|
|
20006
20240
|
},
|
|
20241
|
+
"imageSettings.getOptions": {
|
|
20242
|
+
capName: "image-settings",
|
|
20243
|
+
capScope: "device",
|
|
20244
|
+
addonId: null,
|
|
20245
|
+
access: "view"
|
|
20246
|
+
},
|
|
20247
|
+
"imageSettings.setSettings": {
|
|
20248
|
+
capName: "image-settings",
|
|
20249
|
+
capScope: "device",
|
|
20250
|
+
addonId: null,
|
|
20251
|
+
access: "create"
|
|
20252
|
+
},
|
|
20007
20253
|
"integrations.create": {
|
|
20008
20254
|
capName: "integrations",
|
|
20009
20255
|
capScope: "system",
|
|
@@ -4639,7 +4639,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4639
4639
|
return inst;
|
|
4640
4640
|
}
|
|
4641
4641
|
//#endregion
|
|
4642
|
-
//#region ../types/dist/sleep-
|
|
4642
|
+
//#region ../types/dist/sleep-CZDdRBua.mjs
|
|
4643
4643
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4644
4644
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4645
4645
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -7234,7 +7234,16 @@ var DecoderStatsSchema = object({
|
|
|
7234
7234
|
inputFps: number(),
|
|
7235
7235
|
outputFps: number(),
|
|
7236
7236
|
avgDecodeTimeMs: number(),
|
|
7237
|
-
droppedFrames: number()
|
|
7237
|
+
droppedFrames: number(),
|
|
7238
|
+
/**
|
|
7239
|
+
* Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
|
|
7240
|
+
* lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
|
|
7241
|
+
* the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
|
|
7242
|
+
* is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
|
|
7243
|
+
*/
|
|
7244
|
+
lagMs: number().optional(),
|
|
7245
|
+
effectiveFps: number().optional(),
|
|
7246
|
+
adaptiveFps: number().optional()
|
|
7238
7247
|
});
|
|
7239
7248
|
var DecoderSessionConfigSchema = object({
|
|
7240
7249
|
codec: string(),
|
|
@@ -7275,7 +7284,15 @@ var DecoderSessionConfigSchema = object({
|
|
|
7275
7284
|
* other — `pullFrames` returns nothing for an `'shm'` session and
|
|
7276
7285
|
* `pullHandles` returns nothing for a `'callback'` session.
|
|
7277
7286
|
*/
|
|
7278
|
-
frameSink: _enum(["callback", "shm"]).default("callback")
|
|
7287
|
+
frameSink: _enum(["callback", "shm"]).default("callback"),
|
|
7288
|
+
/**
|
|
7289
|
+
* Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
|
|
7290
|
+
* a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
|
|
7291
|
+
* real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
|
|
7292
|
+
* stream-broker's `streamingDebug` gate — off by default so production logs
|
|
7293
|
+
* stay quiet and the emit path pays zero per-frame cost when disabled.
|
|
7294
|
+
*/
|
|
7295
|
+
debug: boolean().optional()
|
|
7279
7296
|
});
|
|
7280
7297
|
var EncodeProfileSchema = object({
|
|
7281
7298
|
video: object({
|
|
@@ -9487,6 +9504,75 @@ DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _vo
|
|
|
9487
9504
|
auth: "admin"
|
|
9488
9505
|
});
|
|
9489
9506
|
/**
|
|
9507
|
+
* Vendor-neutral day/night (IR-cut) control — the per-camera config cap
|
|
9508
|
+
* shared by reolink / hikvision / amcrest. Models the common firmware
|
|
9509
|
+
* surface: the IR-cut switching MODE plus the two knobs that gate it
|
|
9510
|
+
* (photocell `sensitivity` + `switchDelaySec`). Each vendor maps these
|
|
9511
|
+
* onto its own ISAPI / Baichuan / Dahua-CGI fields; the cap standardises
|
|
9512
|
+
* the shape so ONE derived-form renders every camera.
|
|
9513
|
+
*
|
|
9514
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9515
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9516
|
+
* injected from `status`) reports the live values, and a single
|
|
9517
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9518
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9519
|
+
* routing from this surface.
|
|
9520
|
+
*/
|
|
9521
|
+
/** IR-cut switching mode. `schedule` = time-of-day table configured on the camera. */
|
|
9522
|
+
var DayNightModeSchema = _enum([
|
|
9523
|
+
"auto",
|
|
9524
|
+
"day",
|
|
9525
|
+
"night",
|
|
9526
|
+
"schedule"
|
|
9527
|
+
]);
|
|
9528
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9529
|
+
* getOptions availability convention. Normalized values are 0–100. */
|
|
9530
|
+
var NormalizedRangeSchema$1 = object({
|
|
9531
|
+
min: number(),
|
|
9532
|
+
max: number(),
|
|
9533
|
+
step: number()
|
|
9534
|
+
});
|
|
9535
|
+
object({
|
|
9536
|
+
mode: DayNightModeSchema,
|
|
9537
|
+
/** IR-cut trigger sensitivity, NORMALIZED 0–100 (higher = switches to night sooner). */
|
|
9538
|
+
sensitivity: number().optional(),
|
|
9539
|
+
/** Delay before the IR-cut filter flips, in seconds. */
|
|
9540
|
+
switchDelaySec: number().optional(),
|
|
9541
|
+
lastFetchedAt: number()
|
|
9542
|
+
});
|
|
9543
|
+
/**
|
|
9544
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
9545
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
9546
|
+
* (normalized 0–100); the mode choice-set as an array. A provider returns
|
|
9547
|
+
* honest, camera-probed values — never hardcoded.
|
|
9548
|
+
*/
|
|
9549
|
+
var DayNightOptionsSchema = object({
|
|
9550
|
+
/** Modes this camera accepts. Empty → the camera has no configurable day/night mode. */
|
|
9551
|
+
modes: array(DayNightModeSchema),
|
|
9552
|
+
supportsSensitivity: boolean(),
|
|
9553
|
+
/** Present when `supportsSensitivity` — the normalized 0–100 range. */
|
|
9554
|
+
sensitivity: NormalizedRangeSchema$1.optional(),
|
|
9555
|
+
supportsSwitchDelay: boolean(),
|
|
9556
|
+
/** Present when `supportsSwitchDelay` — the allowed delay range in seconds. */
|
|
9557
|
+
switchDelaySec: NormalizedRangeSchema$1.optional()
|
|
9558
|
+
});
|
|
9559
|
+
/**
|
|
9560
|
+
* Partial change to the day/night config — every field optional. A
|
|
9561
|
+
* provider ignores fields it does not support.
|
|
9562
|
+
*/
|
|
9563
|
+
var DayNightSettingsPatchSchema = object({
|
|
9564
|
+
mode: DayNightModeSchema.optional(),
|
|
9565
|
+
sensitivity: number().optional(),
|
|
9566
|
+
switchDelaySec: number().optional()
|
|
9567
|
+
});
|
|
9568
|
+
DeviceType.Camera, method(object({ deviceId: number() }), DayNightOptionsSchema), method(object({
|
|
9569
|
+
deviceId: number(),
|
|
9570
|
+
settings: DayNightSettingsPatchSchema
|
|
9571
|
+
}), _void(), {
|
|
9572
|
+
kind: "mutation",
|
|
9573
|
+
auth: "admin"
|
|
9574
|
+
});
|
|
9575
|
+
/**
|
|
9490
9576
|
* Identity envelope for a device's upstream-system metadata.
|
|
9491
9577
|
*
|
|
9492
9578
|
* Two jobs:
|
|
@@ -9842,6 +9928,130 @@ object({
|
|
|
9842
9928
|
});
|
|
9843
9929
|
DeviceType.Image;
|
|
9844
9930
|
/**
|
|
9931
|
+
* Vendor-neutral image / picture-adjustment cap — the per-camera config
|
|
9932
|
+
* cap shared by reolink / hikvision / amcrest. Models the common ISP
|
|
9933
|
+
* surface: the four picture sliders (brightness / contrast / saturation /
|
|
9934
|
+
* sharpness), orientation (mirror / flip / rotate), white-balance,
|
|
9935
|
+
* exposure and backlight-compensation modes.
|
|
9936
|
+
*
|
|
9937
|
+
* NORMALIZATION: every slider is a normalized int 0–100. Vendors expose
|
|
9938
|
+
* these natively as 0–100 or 0–255 (or other ranges); each provider maps
|
|
9939
|
+
* its native range to/from this normalized 0–100 space so the cap surface
|
|
9940
|
+
* (and the derived form) is identical across cameras. `warmth` (manual
|
|
9941
|
+
* white-balance) is likewise normalized 0–100.
|
|
9942
|
+
*
|
|
9943
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9944
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9945
|
+
* injected from `status`) reports the live values, and a single
|
|
9946
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9947
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9948
|
+
* routing from this surface.
|
|
9949
|
+
*/
|
|
9950
|
+
/** Sensor/image rotation, degrees clockwise. */
|
|
9951
|
+
var ImageRotateSchema = _enum([
|
|
9952
|
+
"0",
|
|
9953
|
+
"90",
|
|
9954
|
+
"180",
|
|
9955
|
+
"270"
|
|
9956
|
+
]);
|
|
9957
|
+
/** White-balance mode. `manual` unlocks the normalized `warmth` knob. */
|
|
9958
|
+
var WhiteBalanceModeSchema = _enum(["auto", "manual"]);
|
|
9959
|
+
/** Exposure mode. */
|
|
9960
|
+
var ExposureModeSchema = _enum(["auto", "manual"]);
|
|
9961
|
+
/**
|
|
9962
|
+
* Backlight-compensation mode:
|
|
9963
|
+
* - `off` — disabled
|
|
9964
|
+
* - `blc` — backlight compensation
|
|
9965
|
+
* - `wdr` — wide dynamic range
|
|
9966
|
+
* - `hlc` — highlight compensation
|
|
9967
|
+
*/
|
|
9968
|
+
var BacklightModeSchema = _enum([
|
|
9969
|
+
"off",
|
|
9970
|
+
"blc",
|
|
9971
|
+
"wdr",
|
|
9972
|
+
"hlc"
|
|
9973
|
+
]);
|
|
9974
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9975
|
+
* getOptions availability convention. Slider values are normalized 0–100. */
|
|
9976
|
+
var NormalizedRangeSchema = object({
|
|
9977
|
+
min: number(),
|
|
9978
|
+
max: number(),
|
|
9979
|
+
step: number()
|
|
9980
|
+
});
|
|
9981
|
+
object({
|
|
9982
|
+
/** Normalized 0–100. */
|
|
9983
|
+
brightness: number().optional(),
|
|
9984
|
+
/** Normalized 0–100. */
|
|
9985
|
+
contrast: number().optional(),
|
|
9986
|
+
/** Normalized 0–100. */
|
|
9987
|
+
saturation: number().optional(),
|
|
9988
|
+
/** Normalized 0–100. */
|
|
9989
|
+
sharpness: number().optional(),
|
|
9990
|
+
mirror: boolean().optional(),
|
|
9991
|
+
flip: boolean().optional(),
|
|
9992
|
+
rotate: ImageRotateSchema.optional(),
|
|
9993
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
9994
|
+
/** Manual white-balance warmth, NORMALIZED 0–100. Meaningful only when `whiteBalance === 'manual'`. */
|
|
9995
|
+
warmth: number().optional(),
|
|
9996
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
9997
|
+
backlightMode: BacklightModeSchema.optional(),
|
|
9998
|
+
lastFetchedAt: number()
|
|
9999
|
+
});
|
|
10000
|
+
/**
|
|
10001
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
10002
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
10003
|
+
* (the normalized 0–100 range); enums as arrays of supported values (empty
|
|
10004
|
+
* array → control hidden). A provider returns honest, camera-probed values
|
|
10005
|
+
* — never hardcoded.
|
|
10006
|
+
*/
|
|
10007
|
+
var ImageSettingsOptionsSchema = object({
|
|
10008
|
+
supportsBrightness: boolean(),
|
|
10009
|
+
brightness: NormalizedRangeSchema.optional(),
|
|
10010
|
+
supportsContrast: boolean(),
|
|
10011
|
+
contrast: NormalizedRangeSchema.optional(),
|
|
10012
|
+
supportsSaturation: boolean(),
|
|
10013
|
+
saturation: NormalizedRangeSchema.optional(),
|
|
10014
|
+
supportsSharpness: boolean(),
|
|
10015
|
+
sharpness: NormalizedRangeSchema.optional(),
|
|
10016
|
+
supportsMirror: boolean(),
|
|
10017
|
+
supportsFlip: boolean(),
|
|
10018
|
+
/** Supported rotation values. Empty → rotation not configurable. */
|
|
10019
|
+
rotateOptions: array(ImageRotateSchema),
|
|
10020
|
+
/** Supported white-balance modes. Empty → white-balance not configurable. */
|
|
10021
|
+
whiteBalanceModes: array(WhiteBalanceModeSchema),
|
|
10022
|
+
supportsWarmth: boolean(),
|
|
10023
|
+
/** Present when `supportsWarmth` — the normalized 0–100 range. */
|
|
10024
|
+
warmth: NormalizedRangeSchema.optional(),
|
|
10025
|
+
/** Supported exposure modes. Empty → exposure not configurable. */
|
|
10026
|
+
exposureModes: array(ExposureModeSchema),
|
|
10027
|
+
/** Supported backlight modes. Empty → backlight-compensation not configurable. */
|
|
10028
|
+
backlightModes: array(BacklightModeSchema)
|
|
10029
|
+
});
|
|
10030
|
+
/**
|
|
10031
|
+
* Partial change to the image config — every field optional. Slider values
|
|
10032
|
+
* are normalized 0–100. A provider ignores fields it does not support.
|
|
10033
|
+
*/
|
|
10034
|
+
var ImageSettingsPatchSchema = object({
|
|
10035
|
+
brightness: number().optional(),
|
|
10036
|
+
contrast: number().optional(),
|
|
10037
|
+
saturation: number().optional(),
|
|
10038
|
+
sharpness: number().optional(),
|
|
10039
|
+
mirror: boolean().optional(),
|
|
10040
|
+
flip: boolean().optional(),
|
|
10041
|
+
rotate: ImageRotateSchema.optional(),
|
|
10042
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10043
|
+
warmth: number().optional(),
|
|
10044
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10045
|
+
backlightMode: BacklightModeSchema.optional()
|
|
10046
|
+
});
|
|
10047
|
+
DeviceType.Camera, method(object({ deviceId: number() }), ImageSettingsOptionsSchema), method(object({
|
|
10048
|
+
deviceId: number(),
|
|
10049
|
+
settings: ImageSettingsPatchSchema
|
|
10050
|
+
}), _void(), {
|
|
10051
|
+
kind: "mutation",
|
|
10052
|
+
auth: "admin"
|
|
10053
|
+
});
|
|
10054
|
+
/**
|
|
9845
10055
|
* Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
|
|
9846
10056
|
* with a mowing lifecycle plus a dock action.
|
|
9847
10057
|
*
|
|
@@ -10736,6 +10946,16 @@ var RunnerCameraConfigSchema = object({
|
|
|
10736
10946
|
* this gate is bypassed.
|
|
10737
10947
|
*/
|
|
10738
10948
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
10949
|
+
/**
|
|
10950
|
+
* Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
|
|
10951
|
+
* never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
|
|
10952
|
+
* this is off by default because the recheck re-subscribes a detection session
|
|
10953
|
+
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
10954
|
+
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
10955
|
+
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
10956
|
+
* (and only render) when this is enabled.
|
|
10957
|
+
*/
|
|
10958
|
+
occupancyRecheckEnabled: boolean().default(false),
|
|
10739
10959
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
10740
10960
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
10741
10961
|
/**
|
|
@@ -13032,7 +13252,9 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
|
|
|
13032
13252
|
id: string(),
|
|
13033
13253
|
name: string(),
|
|
13034
13254
|
isPullMode: boolean().optional(),
|
|
13035
|
-
priority: number().optional()
|
|
13255
|
+
priority: number().optional(),
|
|
13256
|
+
hwaccel: string().optional(),
|
|
13257
|
+
probedBestHwaccel: string().optional()
|
|
13036
13258
|
})), method(DecoderSessionConfigSchema, object({
|
|
13037
13259
|
sessionId: string(),
|
|
13038
13260
|
nodeId: string()
|
|
@@ -19049,6 +19271,18 @@ Object.freeze({
|
|
|
19049
19271
|
addonId: null,
|
|
19050
19272
|
access: "view"
|
|
19051
19273
|
},
|
|
19274
|
+
"dayNight.getOptions": {
|
|
19275
|
+
capName: "day-night",
|
|
19276
|
+
capScope: "device",
|
|
19277
|
+
addonId: null,
|
|
19278
|
+
access: "view"
|
|
19279
|
+
},
|
|
19280
|
+
"dayNight.setSettings": {
|
|
19281
|
+
capName: "day-night",
|
|
19282
|
+
capScope: "device",
|
|
19283
|
+
addonId: null,
|
|
19284
|
+
access: "create"
|
|
19285
|
+
},
|
|
19052
19286
|
"decoder.createSession": {
|
|
19053
19287
|
capName: "decoder",
|
|
19054
19288
|
capScope: "system",
|
|
@@ -19979,6 +20213,18 @@ Object.freeze({
|
|
|
19979
20213
|
addonId: null,
|
|
19980
20214
|
access: "create"
|
|
19981
20215
|
},
|
|
20216
|
+
"imageSettings.getOptions": {
|
|
20217
|
+
capName: "image-settings",
|
|
20218
|
+
capScope: "device",
|
|
20219
|
+
addonId: null,
|
|
20220
|
+
access: "view"
|
|
20221
|
+
},
|
|
20222
|
+
"imageSettings.setSettings": {
|
|
20223
|
+
capName: "image-settings",
|
|
20224
|
+
capScope: "device",
|
|
20225
|
+
addonId: null,
|
|
20226
|
+
access: "create"
|
|
20227
|
+
},
|
|
19982
20228
|
"integrations.create": {
|
|
19983
20229
|
capName: "integrations",
|
|
19984
20230
|
capScope: "system",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-export-hap",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.18",
|
|
4
4
|
"description": "HomeKit (HAP) bridge exporter for CamStack devices. Publishes a bridged accessory per exposed device — MotionSensor in this MVP; Camera/Doorbell/Switch/Light follow.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|