@camstack/addon-mqtt-broker 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/mqtt-broker.addon.js +250 -4
- package/dist/mqtt-broker.addon.mjs +250 -4
- package/package.json +1 -1
|
@@ -4673,7 +4673,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4673
4673
|
return inst;
|
|
4674
4674
|
}
|
|
4675
4675
|
//#endregion
|
|
4676
|
-
//#region ../types/dist/sleep-
|
|
4676
|
+
//#region ../types/dist/sleep-CZDdRBua.mjs
|
|
4677
4677
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4678
4678
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4679
4679
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -7268,7 +7268,16 @@ var DecoderStatsSchema = object({
|
|
|
7268
7268
|
inputFps: number(),
|
|
7269
7269
|
outputFps: number(),
|
|
7270
7270
|
avgDecodeTimeMs: number(),
|
|
7271
|
-
droppedFrames: number()
|
|
7271
|
+
droppedFrames: number(),
|
|
7272
|
+
/**
|
|
7273
|
+
* Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
|
|
7274
|
+
* lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
|
|
7275
|
+
* the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
|
|
7276
|
+
* is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
|
|
7277
|
+
*/
|
|
7278
|
+
lagMs: number().optional(),
|
|
7279
|
+
effectiveFps: number().optional(),
|
|
7280
|
+
adaptiveFps: number().optional()
|
|
7272
7281
|
});
|
|
7273
7282
|
var DecoderSessionConfigSchema = object({
|
|
7274
7283
|
codec: string(),
|
|
@@ -7309,7 +7318,15 @@ var DecoderSessionConfigSchema = object({
|
|
|
7309
7318
|
* other — `pullFrames` returns nothing for an `'shm'` session and
|
|
7310
7319
|
* `pullHandles` returns nothing for a `'callback'` session.
|
|
7311
7320
|
*/
|
|
7312
|
-
frameSink: _enum(["callback", "shm"]).default("callback")
|
|
7321
|
+
frameSink: _enum(["callback", "shm"]).default("callback"),
|
|
7322
|
+
/**
|
|
7323
|
+
* Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
|
|
7324
|
+
* a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
|
|
7325
|
+
* real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
|
|
7326
|
+
* stream-broker's `streamingDebug` gate — off by default so production logs
|
|
7327
|
+
* stay quiet and the emit path pays zero per-frame cost when disabled.
|
|
7328
|
+
*/
|
|
7329
|
+
debug: boolean().optional()
|
|
7313
7330
|
});
|
|
7314
7331
|
var EncodeProfileSchema = object({
|
|
7315
7332
|
video: object({
|
|
@@ -9467,6 +9484,75 @@ DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _vo
|
|
|
9467
9484
|
auth: "admin"
|
|
9468
9485
|
});
|
|
9469
9486
|
/**
|
|
9487
|
+
* Vendor-neutral day/night (IR-cut) control — the per-camera config cap
|
|
9488
|
+
* shared by reolink / hikvision / amcrest. Models the common firmware
|
|
9489
|
+
* surface: the IR-cut switching MODE plus the two knobs that gate it
|
|
9490
|
+
* (photocell `sensitivity` + `switchDelaySec`). Each vendor maps these
|
|
9491
|
+
* onto its own ISAPI / Baichuan / Dahua-CGI fields; the cap standardises
|
|
9492
|
+
* the shape so ONE derived-form renders every camera.
|
|
9493
|
+
*
|
|
9494
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9495
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9496
|
+
* injected from `status`) reports the live values, and a single
|
|
9497
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9498
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9499
|
+
* routing from this surface.
|
|
9500
|
+
*/
|
|
9501
|
+
/** IR-cut switching mode. `schedule` = time-of-day table configured on the camera. */
|
|
9502
|
+
var DayNightModeSchema = _enum([
|
|
9503
|
+
"auto",
|
|
9504
|
+
"day",
|
|
9505
|
+
"night",
|
|
9506
|
+
"schedule"
|
|
9507
|
+
]);
|
|
9508
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9509
|
+
* getOptions availability convention. Normalized values are 0–100. */
|
|
9510
|
+
var NormalizedRangeSchema$1 = object({
|
|
9511
|
+
min: number(),
|
|
9512
|
+
max: number(),
|
|
9513
|
+
step: number()
|
|
9514
|
+
});
|
|
9515
|
+
object({
|
|
9516
|
+
mode: DayNightModeSchema,
|
|
9517
|
+
/** IR-cut trigger sensitivity, NORMALIZED 0–100 (higher = switches to night sooner). */
|
|
9518
|
+
sensitivity: number().optional(),
|
|
9519
|
+
/** Delay before the IR-cut filter flips, in seconds. */
|
|
9520
|
+
switchDelaySec: number().optional(),
|
|
9521
|
+
lastFetchedAt: number()
|
|
9522
|
+
});
|
|
9523
|
+
/**
|
|
9524
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
9525
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
9526
|
+
* (normalized 0–100); the mode choice-set as an array. A provider returns
|
|
9527
|
+
* honest, camera-probed values — never hardcoded.
|
|
9528
|
+
*/
|
|
9529
|
+
var DayNightOptionsSchema = object({
|
|
9530
|
+
/** Modes this camera accepts. Empty → the camera has no configurable day/night mode. */
|
|
9531
|
+
modes: array(DayNightModeSchema),
|
|
9532
|
+
supportsSensitivity: boolean(),
|
|
9533
|
+
/** Present when `supportsSensitivity` — the normalized 0–100 range. */
|
|
9534
|
+
sensitivity: NormalizedRangeSchema$1.optional(),
|
|
9535
|
+
supportsSwitchDelay: boolean(),
|
|
9536
|
+
/** Present when `supportsSwitchDelay` — the allowed delay range in seconds. */
|
|
9537
|
+
switchDelaySec: NormalizedRangeSchema$1.optional()
|
|
9538
|
+
});
|
|
9539
|
+
/**
|
|
9540
|
+
* Partial change to the day/night config — every field optional. A
|
|
9541
|
+
* provider ignores fields it does not support.
|
|
9542
|
+
*/
|
|
9543
|
+
var DayNightSettingsPatchSchema = object({
|
|
9544
|
+
mode: DayNightModeSchema.optional(),
|
|
9545
|
+
sensitivity: number().optional(),
|
|
9546
|
+
switchDelaySec: number().optional()
|
|
9547
|
+
});
|
|
9548
|
+
DeviceType.Camera, method(object({ deviceId: number() }), DayNightOptionsSchema), method(object({
|
|
9549
|
+
deviceId: number(),
|
|
9550
|
+
settings: DayNightSettingsPatchSchema
|
|
9551
|
+
}), _void(), {
|
|
9552
|
+
kind: "mutation",
|
|
9553
|
+
auth: "admin"
|
|
9554
|
+
});
|
|
9555
|
+
/**
|
|
9470
9556
|
* Identity envelope for a device's upstream-system metadata.
|
|
9471
9557
|
*
|
|
9472
9558
|
* Two jobs:
|
|
@@ -9822,6 +9908,130 @@ object({
|
|
|
9822
9908
|
});
|
|
9823
9909
|
DeviceType.Image;
|
|
9824
9910
|
/**
|
|
9911
|
+
* Vendor-neutral image / picture-adjustment cap — the per-camera config
|
|
9912
|
+
* cap shared by reolink / hikvision / amcrest. Models the common ISP
|
|
9913
|
+
* surface: the four picture sliders (brightness / contrast / saturation /
|
|
9914
|
+
* sharpness), orientation (mirror / flip / rotate), white-balance,
|
|
9915
|
+
* exposure and backlight-compensation modes.
|
|
9916
|
+
*
|
|
9917
|
+
* NORMALIZATION: every slider is a normalized int 0–100. Vendors expose
|
|
9918
|
+
* these natively as 0–100 or 0–255 (or other ranges); each provider maps
|
|
9919
|
+
* its native range to/from this normalized 0–100 space so the cap surface
|
|
9920
|
+
* (and the derived form) is identical across cameras. `warmth` (manual
|
|
9921
|
+
* white-balance) is likewise normalized 0–100.
|
|
9922
|
+
*
|
|
9923
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9924
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9925
|
+
* injected from `status`) reports the live values, and a single
|
|
9926
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9927
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9928
|
+
* routing from this surface.
|
|
9929
|
+
*/
|
|
9930
|
+
/** Sensor/image rotation, degrees clockwise. */
|
|
9931
|
+
var ImageRotateSchema = _enum([
|
|
9932
|
+
"0",
|
|
9933
|
+
"90",
|
|
9934
|
+
"180",
|
|
9935
|
+
"270"
|
|
9936
|
+
]);
|
|
9937
|
+
/** White-balance mode. `manual` unlocks the normalized `warmth` knob. */
|
|
9938
|
+
var WhiteBalanceModeSchema = _enum(["auto", "manual"]);
|
|
9939
|
+
/** Exposure mode. */
|
|
9940
|
+
var ExposureModeSchema = _enum(["auto", "manual"]);
|
|
9941
|
+
/**
|
|
9942
|
+
* Backlight-compensation mode:
|
|
9943
|
+
* - `off` — disabled
|
|
9944
|
+
* - `blc` — backlight compensation
|
|
9945
|
+
* - `wdr` — wide dynamic range
|
|
9946
|
+
* - `hlc` — highlight compensation
|
|
9947
|
+
*/
|
|
9948
|
+
var BacklightModeSchema = _enum([
|
|
9949
|
+
"off",
|
|
9950
|
+
"blc",
|
|
9951
|
+
"wdr",
|
|
9952
|
+
"hlc"
|
|
9953
|
+
]);
|
|
9954
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9955
|
+
* getOptions availability convention. Slider values are normalized 0–100. */
|
|
9956
|
+
var NormalizedRangeSchema = object({
|
|
9957
|
+
min: number(),
|
|
9958
|
+
max: number(),
|
|
9959
|
+
step: number()
|
|
9960
|
+
});
|
|
9961
|
+
object({
|
|
9962
|
+
/** Normalized 0–100. */
|
|
9963
|
+
brightness: number().optional(),
|
|
9964
|
+
/** Normalized 0–100. */
|
|
9965
|
+
contrast: number().optional(),
|
|
9966
|
+
/** Normalized 0–100. */
|
|
9967
|
+
saturation: number().optional(),
|
|
9968
|
+
/** Normalized 0–100. */
|
|
9969
|
+
sharpness: number().optional(),
|
|
9970
|
+
mirror: boolean().optional(),
|
|
9971
|
+
flip: boolean().optional(),
|
|
9972
|
+
rotate: ImageRotateSchema.optional(),
|
|
9973
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
9974
|
+
/** Manual white-balance warmth, NORMALIZED 0–100. Meaningful only when `whiteBalance === 'manual'`. */
|
|
9975
|
+
warmth: number().optional(),
|
|
9976
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
9977
|
+
backlightMode: BacklightModeSchema.optional(),
|
|
9978
|
+
lastFetchedAt: number()
|
|
9979
|
+
});
|
|
9980
|
+
/**
|
|
9981
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
9982
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
9983
|
+
* (the normalized 0–100 range); enums as arrays of supported values (empty
|
|
9984
|
+
* array → control hidden). A provider returns honest, camera-probed values
|
|
9985
|
+
* — never hardcoded.
|
|
9986
|
+
*/
|
|
9987
|
+
var ImageSettingsOptionsSchema = object({
|
|
9988
|
+
supportsBrightness: boolean(),
|
|
9989
|
+
brightness: NormalizedRangeSchema.optional(),
|
|
9990
|
+
supportsContrast: boolean(),
|
|
9991
|
+
contrast: NormalizedRangeSchema.optional(),
|
|
9992
|
+
supportsSaturation: boolean(),
|
|
9993
|
+
saturation: NormalizedRangeSchema.optional(),
|
|
9994
|
+
supportsSharpness: boolean(),
|
|
9995
|
+
sharpness: NormalizedRangeSchema.optional(),
|
|
9996
|
+
supportsMirror: boolean(),
|
|
9997
|
+
supportsFlip: boolean(),
|
|
9998
|
+
/** Supported rotation values. Empty → rotation not configurable. */
|
|
9999
|
+
rotateOptions: array(ImageRotateSchema),
|
|
10000
|
+
/** Supported white-balance modes. Empty → white-balance not configurable. */
|
|
10001
|
+
whiteBalanceModes: array(WhiteBalanceModeSchema),
|
|
10002
|
+
supportsWarmth: boolean(),
|
|
10003
|
+
/** Present when `supportsWarmth` — the normalized 0–100 range. */
|
|
10004
|
+
warmth: NormalizedRangeSchema.optional(),
|
|
10005
|
+
/** Supported exposure modes. Empty → exposure not configurable. */
|
|
10006
|
+
exposureModes: array(ExposureModeSchema),
|
|
10007
|
+
/** Supported backlight modes. Empty → backlight-compensation not configurable. */
|
|
10008
|
+
backlightModes: array(BacklightModeSchema)
|
|
10009
|
+
});
|
|
10010
|
+
/**
|
|
10011
|
+
* Partial change to the image config — every field optional. Slider values
|
|
10012
|
+
* are normalized 0–100. A provider ignores fields it does not support.
|
|
10013
|
+
*/
|
|
10014
|
+
var ImageSettingsPatchSchema = object({
|
|
10015
|
+
brightness: number().optional(),
|
|
10016
|
+
contrast: number().optional(),
|
|
10017
|
+
saturation: number().optional(),
|
|
10018
|
+
sharpness: number().optional(),
|
|
10019
|
+
mirror: boolean().optional(),
|
|
10020
|
+
flip: boolean().optional(),
|
|
10021
|
+
rotate: ImageRotateSchema.optional(),
|
|
10022
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10023
|
+
warmth: number().optional(),
|
|
10024
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10025
|
+
backlightMode: BacklightModeSchema.optional()
|
|
10026
|
+
});
|
|
10027
|
+
DeviceType.Camera, method(object({ deviceId: number() }), ImageSettingsOptionsSchema), method(object({
|
|
10028
|
+
deviceId: number(),
|
|
10029
|
+
settings: ImageSettingsPatchSchema
|
|
10030
|
+
}), _void(), {
|
|
10031
|
+
kind: "mutation",
|
|
10032
|
+
auth: "admin"
|
|
10033
|
+
});
|
|
10034
|
+
/**
|
|
9825
10035
|
* Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
|
|
9826
10036
|
* with a mowing lifecycle plus a dock action.
|
|
9827
10037
|
*
|
|
@@ -10716,6 +10926,16 @@ var RunnerCameraConfigSchema = object({
|
|
|
10716
10926
|
* this gate is bypassed.
|
|
10717
10927
|
*/
|
|
10718
10928
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
10929
|
+
/**
|
|
10930
|
+
* Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
|
|
10931
|
+
* never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
|
|
10932
|
+
* this is off by default because the recheck re-subscribes a detection session
|
|
10933
|
+
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
10934
|
+
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
10935
|
+
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
10936
|
+
* (and only render) when this is enabled.
|
|
10937
|
+
*/
|
|
10938
|
+
occupancyRecheckEnabled: boolean().default(false),
|
|
10719
10939
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
10720
10940
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
10721
10941
|
/**
|
|
@@ -13061,7 +13281,9 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
|
|
|
13061
13281
|
id: string(),
|
|
13062
13282
|
name: string(),
|
|
13063
13283
|
isPullMode: boolean().optional(),
|
|
13064
|
-
priority: number().optional()
|
|
13284
|
+
priority: number().optional(),
|
|
13285
|
+
hwaccel: string().optional(),
|
|
13286
|
+
probedBestHwaccel: string().optional()
|
|
13065
13287
|
})), method(DecoderSessionConfigSchema, object({
|
|
13066
13288
|
sessionId: string(),
|
|
13067
13289
|
nodeId: string()
|
|
@@ -19072,6 +19294,18 @@ Object.freeze({
|
|
|
19072
19294
|
addonId: null,
|
|
19073
19295
|
access: "view"
|
|
19074
19296
|
},
|
|
19297
|
+
"dayNight.getOptions": {
|
|
19298
|
+
capName: "day-night",
|
|
19299
|
+
capScope: "device",
|
|
19300
|
+
addonId: null,
|
|
19301
|
+
access: "view"
|
|
19302
|
+
},
|
|
19303
|
+
"dayNight.setSettings": {
|
|
19304
|
+
capName: "day-night",
|
|
19305
|
+
capScope: "device",
|
|
19306
|
+
addonId: null,
|
|
19307
|
+
access: "create"
|
|
19308
|
+
},
|
|
19075
19309
|
"decoder.createSession": {
|
|
19076
19310
|
capName: "decoder",
|
|
19077
19311
|
capScope: "system",
|
|
@@ -20002,6 +20236,18 @@ Object.freeze({
|
|
|
20002
20236
|
addonId: null,
|
|
20003
20237
|
access: "create"
|
|
20004
20238
|
},
|
|
20239
|
+
"imageSettings.getOptions": {
|
|
20240
|
+
capName: "image-settings",
|
|
20241
|
+
capScope: "device",
|
|
20242
|
+
addonId: null,
|
|
20243
|
+
access: "view"
|
|
20244
|
+
},
|
|
20245
|
+
"imageSettings.setSettings": {
|
|
20246
|
+
capName: "image-settings",
|
|
20247
|
+
capScope: "device",
|
|
20248
|
+
addonId: null,
|
|
20249
|
+
access: "create"
|
|
20250
|
+
},
|
|
20005
20251
|
"integrations.create": {
|
|
20006
20252
|
capName: "integrations",
|
|
20007
20253
|
capScope: "system",
|
|
@@ -4668,7 +4668,7 @@ function _instanceof(cls, params = {}) {
|
|
|
4668
4668
|
return inst;
|
|
4669
4669
|
}
|
|
4670
4670
|
//#endregion
|
|
4671
|
-
//#region ../types/dist/sleep-
|
|
4671
|
+
//#region ../types/dist/sleep-CZDdRBua.mjs
|
|
4672
4672
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
4673
4673
|
EventCategory["SystemBoot"] = "system.boot";
|
|
4674
4674
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -7263,7 +7263,16 @@ var DecoderStatsSchema = object({
|
|
|
7263
7263
|
inputFps: number(),
|
|
7264
7264
|
outputFps: number(),
|
|
7265
7265
|
avgDecodeTimeMs: number(),
|
|
7266
|
-
droppedFrames: number()
|
|
7266
|
+
droppedFrames: number(),
|
|
7267
|
+
/**
|
|
7268
|
+
* Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
|
|
7269
|
+
* lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
|
|
7270
|
+
* the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
|
|
7271
|
+
* is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
|
|
7272
|
+
*/
|
|
7273
|
+
lagMs: number().optional(),
|
|
7274
|
+
effectiveFps: number().optional(),
|
|
7275
|
+
adaptiveFps: number().optional()
|
|
7267
7276
|
});
|
|
7268
7277
|
var DecoderSessionConfigSchema = object({
|
|
7269
7278
|
codec: string(),
|
|
@@ -7304,7 +7313,15 @@ var DecoderSessionConfigSchema = object({
|
|
|
7304
7313
|
* other — `pullFrames` returns nothing for an `'shm'` session and
|
|
7305
7314
|
* `pullHandles` returns nothing for a `'callback'` session.
|
|
7306
7315
|
*/
|
|
7307
|
-
frameSink: _enum(["callback", "shm"]).default("callback")
|
|
7316
|
+
frameSink: _enum(["callback", "shm"]).default("callback"),
|
|
7317
|
+
/**
|
|
7318
|
+
* Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
|
|
7319
|
+
* a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
|
|
7320
|
+
* real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
|
|
7321
|
+
* stream-broker's `streamingDebug` gate — off by default so production logs
|
|
7322
|
+
* stay quiet and the emit path pays zero per-frame cost when disabled.
|
|
7323
|
+
*/
|
|
7324
|
+
debug: boolean().optional()
|
|
7308
7325
|
});
|
|
7309
7326
|
var EncodeProfileSchema = object({
|
|
7310
7327
|
video: object({
|
|
@@ -9462,6 +9479,75 @@ DeviceType.Cover, method(object({ deviceId: number().int().nonnegative() }), _vo
|
|
|
9462
9479
|
auth: "admin"
|
|
9463
9480
|
});
|
|
9464
9481
|
/**
|
|
9482
|
+
* Vendor-neutral day/night (IR-cut) control — the per-camera config cap
|
|
9483
|
+
* shared by reolink / hikvision / amcrest. Models the common firmware
|
|
9484
|
+
* surface: the IR-cut switching MODE plus the two knobs that gate it
|
|
9485
|
+
* (photocell `sensitivity` + `switchDelaySec`). Each vendor maps these
|
|
9486
|
+
* onto its own ISAPI / Baichuan / Dahua-CGI fields; the cap standardises
|
|
9487
|
+
* the shape so ONE derived-form renders every camera.
|
|
9488
|
+
*
|
|
9489
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9490
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9491
|
+
* injected from `status`) reports the live values, and a single
|
|
9492
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9493
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9494
|
+
* routing from this surface.
|
|
9495
|
+
*/
|
|
9496
|
+
/** IR-cut switching mode. `schedule` = time-of-day table configured on the camera. */
|
|
9497
|
+
var DayNightModeSchema = _enum([
|
|
9498
|
+
"auto",
|
|
9499
|
+
"day",
|
|
9500
|
+
"night",
|
|
9501
|
+
"schedule"
|
|
9502
|
+
]);
|
|
9503
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9504
|
+
* getOptions availability convention. Normalized values are 0–100. */
|
|
9505
|
+
var NormalizedRangeSchema$1 = object({
|
|
9506
|
+
min: number(),
|
|
9507
|
+
max: number(),
|
|
9508
|
+
step: number()
|
|
9509
|
+
});
|
|
9510
|
+
object({
|
|
9511
|
+
mode: DayNightModeSchema,
|
|
9512
|
+
/** IR-cut trigger sensitivity, NORMALIZED 0–100 (higher = switches to night sooner). */
|
|
9513
|
+
sensitivity: number().optional(),
|
|
9514
|
+
/** Delay before the IR-cut filter flips, in seconds. */
|
|
9515
|
+
switchDelaySec: number().optional(),
|
|
9516
|
+
lastFetchedAt: number()
|
|
9517
|
+
});
|
|
9518
|
+
/**
|
|
9519
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
9520
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
9521
|
+
* (normalized 0–100); the mode choice-set as an array. A provider returns
|
|
9522
|
+
* honest, camera-probed values — never hardcoded.
|
|
9523
|
+
*/
|
|
9524
|
+
var DayNightOptionsSchema = object({
|
|
9525
|
+
/** Modes this camera accepts. Empty → the camera has no configurable day/night mode. */
|
|
9526
|
+
modes: array(DayNightModeSchema),
|
|
9527
|
+
supportsSensitivity: boolean(),
|
|
9528
|
+
/** Present when `supportsSensitivity` — the normalized 0–100 range. */
|
|
9529
|
+
sensitivity: NormalizedRangeSchema$1.optional(),
|
|
9530
|
+
supportsSwitchDelay: boolean(),
|
|
9531
|
+
/** Present when `supportsSwitchDelay` — the allowed delay range in seconds. */
|
|
9532
|
+
switchDelaySec: NormalizedRangeSchema$1.optional()
|
|
9533
|
+
});
|
|
9534
|
+
/**
|
|
9535
|
+
* Partial change to the day/night config — every field optional. A
|
|
9536
|
+
* provider ignores fields it does not support.
|
|
9537
|
+
*/
|
|
9538
|
+
var DayNightSettingsPatchSchema = object({
|
|
9539
|
+
mode: DayNightModeSchema.optional(),
|
|
9540
|
+
sensitivity: number().optional(),
|
|
9541
|
+
switchDelaySec: number().optional()
|
|
9542
|
+
});
|
|
9543
|
+
DeviceType.Camera, method(object({ deviceId: number() }), DayNightOptionsSchema), method(object({
|
|
9544
|
+
deviceId: number(),
|
|
9545
|
+
settings: DayNightSettingsPatchSchema
|
|
9546
|
+
}), _void(), {
|
|
9547
|
+
kind: "mutation",
|
|
9548
|
+
auth: "admin"
|
|
9549
|
+
});
|
|
9550
|
+
/**
|
|
9465
9551
|
* Identity envelope for a device's upstream-system metadata.
|
|
9466
9552
|
*
|
|
9467
9553
|
* Two jobs:
|
|
@@ -9817,6 +9903,130 @@ object({
|
|
|
9817
9903
|
});
|
|
9818
9904
|
DeviceType.Image;
|
|
9819
9905
|
/**
|
|
9906
|
+
* Vendor-neutral image / picture-adjustment cap — the per-camera config
|
|
9907
|
+
* cap shared by reolink / hikvision / amcrest. Models the common ISP
|
|
9908
|
+
* surface: the four picture sliders (brightness / contrast / saturation /
|
|
9909
|
+
* sharpness), orientation (mirror / flip / rotate), white-balance,
|
|
9910
|
+
* exposure and backlight-compensation modes.
|
|
9911
|
+
*
|
|
9912
|
+
* NORMALIZATION: every slider is a normalized int 0–100. Vendors expose
|
|
9913
|
+
* these natively as 0–100 or 0–255 (or other ranges); each provider maps
|
|
9914
|
+
* its native range to/from this normalized 0–100 space so the cap surface
|
|
9915
|
+
* (and the derived form) is identical across cameras. `warmth` (manual
|
|
9916
|
+
* white-balance) is likewise normalized 0–100.
|
|
9917
|
+
*
|
|
9918
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
9919
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
9920
|
+
* injected from `status`) reports the live values, and a single
|
|
9921
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
9922
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
9923
|
+
* routing from this surface.
|
|
9924
|
+
*/
|
|
9925
|
+
/** Sensor/image rotation, degrees clockwise. */
|
|
9926
|
+
var ImageRotateSchema = _enum([
|
|
9927
|
+
"0",
|
|
9928
|
+
"90",
|
|
9929
|
+
"180",
|
|
9930
|
+
"270"
|
|
9931
|
+
]);
|
|
9932
|
+
/** White-balance mode. `manual` unlocks the normalized `warmth` knob. */
|
|
9933
|
+
var WhiteBalanceModeSchema = _enum(["auto", "manual"]);
|
|
9934
|
+
/** Exposure mode. */
|
|
9935
|
+
var ExposureModeSchema = _enum(["auto", "manual"]);
|
|
9936
|
+
/**
|
|
9937
|
+
* Backlight-compensation mode:
|
|
9938
|
+
* - `off` — disabled
|
|
9939
|
+
* - `blc` — backlight compensation
|
|
9940
|
+
* - `wdr` — wide dynamic range
|
|
9941
|
+
* - `hlc` — highlight compensation
|
|
9942
|
+
*/
|
|
9943
|
+
var BacklightModeSchema = _enum([
|
|
9944
|
+
"off",
|
|
9945
|
+
"blc",
|
|
9946
|
+
"wdr",
|
|
9947
|
+
"hlc"
|
|
9948
|
+
]);
|
|
9949
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
9950
|
+
* getOptions availability convention. Slider values are normalized 0–100. */
|
|
9951
|
+
var NormalizedRangeSchema = object({
|
|
9952
|
+
min: number(),
|
|
9953
|
+
max: number(),
|
|
9954
|
+
step: number()
|
|
9955
|
+
});
|
|
9956
|
+
object({
|
|
9957
|
+
/** Normalized 0–100. */
|
|
9958
|
+
brightness: number().optional(),
|
|
9959
|
+
/** Normalized 0–100. */
|
|
9960
|
+
contrast: number().optional(),
|
|
9961
|
+
/** Normalized 0–100. */
|
|
9962
|
+
saturation: number().optional(),
|
|
9963
|
+
/** Normalized 0–100. */
|
|
9964
|
+
sharpness: number().optional(),
|
|
9965
|
+
mirror: boolean().optional(),
|
|
9966
|
+
flip: boolean().optional(),
|
|
9967
|
+
rotate: ImageRotateSchema.optional(),
|
|
9968
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
9969
|
+
/** Manual white-balance warmth, NORMALIZED 0–100. Meaningful only when `whiteBalance === 'manual'`. */
|
|
9970
|
+
warmth: number().optional(),
|
|
9971
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
9972
|
+
backlightMode: BacklightModeSchema.optional(),
|
|
9973
|
+
lastFetchedAt: number()
|
|
9974
|
+
});
|
|
9975
|
+
/**
|
|
9976
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
9977
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
9978
|
+
* (the normalized 0–100 range); enums as arrays of supported values (empty
|
|
9979
|
+
* array → control hidden). A provider returns honest, camera-probed values
|
|
9980
|
+
* — never hardcoded.
|
|
9981
|
+
*/
|
|
9982
|
+
var ImageSettingsOptionsSchema = object({
|
|
9983
|
+
supportsBrightness: boolean(),
|
|
9984
|
+
brightness: NormalizedRangeSchema.optional(),
|
|
9985
|
+
supportsContrast: boolean(),
|
|
9986
|
+
contrast: NormalizedRangeSchema.optional(),
|
|
9987
|
+
supportsSaturation: boolean(),
|
|
9988
|
+
saturation: NormalizedRangeSchema.optional(),
|
|
9989
|
+
supportsSharpness: boolean(),
|
|
9990
|
+
sharpness: NormalizedRangeSchema.optional(),
|
|
9991
|
+
supportsMirror: boolean(),
|
|
9992
|
+
supportsFlip: boolean(),
|
|
9993
|
+
/** Supported rotation values. Empty → rotation not configurable. */
|
|
9994
|
+
rotateOptions: array(ImageRotateSchema),
|
|
9995
|
+
/** Supported white-balance modes. Empty → white-balance not configurable. */
|
|
9996
|
+
whiteBalanceModes: array(WhiteBalanceModeSchema),
|
|
9997
|
+
supportsWarmth: boolean(),
|
|
9998
|
+
/** Present when `supportsWarmth` — the normalized 0–100 range. */
|
|
9999
|
+
warmth: NormalizedRangeSchema.optional(),
|
|
10000
|
+
/** Supported exposure modes. Empty → exposure not configurable. */
|
|
10001
|
+
exposureModes: array(ExposureModeSchema),
|
|
10002
|
+
/** Supported backlight modes. Empty → backlight-compensation not configurable. */
|
|
10003
|
+
backlightModes: array(BacklightModeSchema)
|
|
10004
|
+
});
|
|
10005
|
+
/**
|
|
10006
|
+
* Partial change to the image config — every field optional. Slider values
|
|
10007
|
+
* are normalized 0–100. A provider ignores fields it does not support.
|
|
10008
|
+
*/
|
|
10009
|
+
var ImageSettingsPatchSchema = object({
|
|
10010
|
+
brightness: number().optional(),
|
|
10011
|
+
contrast: number().optional(),
|
|
10012
|
+
saturation: number().optional(),
|
|
10013
|
+
sharpness: number().optional(),
|
|
10014
|
+
mirror: boolean().optional(),
|
|
10015
|
+
flip: boolean().optional(),
|
|
10016
|
+
rotate: ImageRotateSchema.optional(),
|
|
10017
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
10018
|
+
warmth: number().optional(),
|
|
10019
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
10020
|
+
backlightMode: BacklightModeSchema.optional()
|
|
10021
|
+
});
|
|
10022
|
+
DeviceType.Camera, method(object({ deviceId: number() }), ImageSettingsOptionsSchema), method(object({
|
|
10023
|
+
deviceId: number(),
|
|
10024
|
+
settings: ImageSettingsPatchSchema
|
|
10025
|
+
}), _void(), {
|
|
10026
|
+
kind: "mutation",
|
|
10027
|
+
auth: "admin"
|
|
10028
|
+
});
|
|
10029
|
+
/**
|
|
9820
10030
|
* Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
|
|
9821
10031
|
* with a mowing lifecycle plus a dock action.
|
|
9822
10032
|
*
|
|
@@ -10711,6 +10921,16 @@ var RunnerCameraConfigSchema = object({
|
|
|
10711
10921
|
* this gate is bypassed.
|
|
10712
10922
|
*/
|
|
10713
10923
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
10924
|
+
/**
|
|
10925
|
+
* Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
|
|
10926
|
+
* never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
|
|
10927
|
+
* this is off by default because the recheck re-subscribes a detection session
|
|
10928
|
+
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
10929
|
+
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
10930
|
+
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
10931
|
+
* (and only render) when this is enabled.
|
|
10932
|
+
*/
|
|
10933
|
+
occupancyRecheckEnabled: boolean().default(false),
|
|
10714
10934
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
10715
10935
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
10716
10936
|
/**
|
|
@@ -13056,7 +13276,9 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
|
|
|
13056
13276
|
id: string(),
|
|
13057
13277
|
name: string(),
|
|
13058
13278
|
isPullMode: boolean().optional(),
|
|
13059
|
-
priority: number().optional()
|
|
13279
|
+
priority: number().optional(),
|
|
13280
|
+
hwaccel: string().optional(),
|
|
13281
|
+
probedBestHwaccel: string().optional()
|
|
13060
13282
|
})), method(DecoderSessionConfigSchema, object({
|
|
13061
13283
|
sessionId: string(),
|
|
13062
13284
|
nodeId: string()
|
|
@@ -19067,6 +19289,18 @@ Object.freeze({
|
|
|
19067
19289
|
addonId: null,
|
|
19068
19290
|
access: "view"
|
|
19069
19291
|
},
|
|
19292
|
+
"dayNight.getOptions": {
|
|
19293
|
+
capName: "day-night",
|
|
19294
|
+
capScope: "device",
|
|
19295
|
+
addonId: null,
|
|
19296
|
+
access: "view"
|
|
19297
|
+
},
|
|
19298
|
+
"dayNight.setSettings": {
|
|
19299
|
+
capName: "day-night",
|
|
19300
|
+
capScope: "device",
|
|
19301
|
+
addonId: null,
|
|
19302
|
+
access: "create"
|
|
19303
|
+
},
|
|
19070
19304
|
"decoder.createSession": {
|
|
19071
19305
|
capName: "decoder",
|
|
19072
19306
|
capScope: "system",
|
|
@@ -19997,6 +20231,18 @@ Object.freeze({
|
|
|
19997
20231
|
addonId: null,
|
|
19998
20232
|
access: "create"
|
|
19999
20233
|
},
|
|
20234
|
+
"imageSettings.getOptions": {
|
|
20235
|
+
capName: "image-settings",
|
|
20236
|
+
capScope: "device",
|
|
20237
|
+
addonId: null,
|
|
20238
|
+
access: "view"
|
|
20239
|
+
},
|
|
20240
|
+
"imageSettings.setSettings": {
|
|
20241
|
+
capName: "image-settings",
|
|
20242
|
+
capScope: "device",
|
|
20243
|
+
addonId: null,
|
|
20244
|
+
access: "create"
|
|
20245
|
+
},
|
|
20000
20246
|
"integrations.create": {
|
|
20001
20247
|
capName: "integrations",
|
|
20002
20248
|
capScope: "system",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-mqtt-broker",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.18",
|
|
4
4
|
"description": "MQTT broker registry addon for CamStack — manages external broker entries + an optional embedded aedes broker. Consumers spin up their own `mqtt.js` clients via the `mqtt-broker` cap.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|