@camstack/addon-provider-rademacher 0.1.3 → 0.1.4
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 +302 -4
- package/dist/addon.mjs +302 -4
- package/package.json +1 -1
package/dist/addon.js
CHANGED
|
@@ -5627,7 +5627,7 @@ function preprocess(fn, schema) {
|
|
|
5627
5627
|
});
|
|
5628
5628
|
}
|
|
5629
5629
|
//#endregion
|
|
5630
|
-
//#region ../types/dist/sleep-
|
|
5630
|
+
//#region ../types/dist/sleep-CZDdRBua.mjs
|
|
5631
5631
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
5632
5632
|
EventCategory["SystemBoot"] = "system.boot";
|
|
5633
5633
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -8238,7 +8238,16 @@ var DecoderStatsSchema = object({
|
|
|
8238
8238
|
inputFps: number(),
|
|
8239
8239
|
outputFps: number(),
|
|
8240
8240
|
avgDecodeTimeMs: number(),
|
|
8241
|
-
droppedFrames: number()
|
|
8241
|
+
droppedFrames: number(),
|
|
8242
|
+
/**
|
|
8243
|
+
* Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
|
|
8244
|
+
* lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
|
|
8245
|
+
* the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
|
|
8246
|
+
* is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
|
|
8247
|
+
*/
|
|
8248
|
+
lagMs: number().optional(),
|
|
8249
|
+
effectiveFps: number().optional(),
|
|
8250
|
+
adaptiveFps: number().optional()
|
|
8242
8251
|
});
|
|
8243
8252
|
var DecoderSessionConfigSchema = object({
|
|
8244
8253
|
codec: string(),
|
|
@@ -8279,7 +8288,15 @@ var DecoderSessionConfigSchema = object({
|
|
|
8279
8288
|
* other — `pullFrames` returns nothing for an `'shm'` session and
|
|
8280
8289
|
* `pullHandles` returns nothing for a `'callback'` session.
|
|
8281
8290
|
*/
|
|
8282
|
-
frameSink: _enum(["callback", "shm"]).default("callback")
|
|
8291
|
+
frameSink: _enum(["callback", "shm"]).default("callback"),
|
|
8292
|
+
/**
|
|
8293
|
+
* Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
|
|
8294
|
+
* a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
|
|
8295
|
+
* real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
|
|
8296
|
+
* stream-broker's `streamingDebug` gate — off by default so production logs
|
|
8297
|
+
* stay quiet and the emit path pays zero per-frame cost when disabled.
|
|
8298
|
+
*/
|
|
8299
|
+
debug: boolean().optional()
|
|
8283
8300
|
});
|
|
8284
8301
|
var EncodeProfileSchema = object({
|
|
8285
8302
|
video: object({
|
|
@@ -11304,6 +11321,100 @@ var coverCapability = {
|
|
|
11304
11321
|
runtimeState: CoverStatusSchema
|
|
11305
11322
|
};
|
|
11306
11323
|
/**
|
|
11324
|
+
* Vendor-neutral day/night (IR-cut) control — the per-camera config cap
|
|
11325
|
+
* shared by reolink / hikvision / amcrest. Models the common firmware
|
|
11326
|
+
* surface: the IR-cut switching MODE plus the two knobs that gate it
|
|
11327
|
+
* (photocell `sensitivity` + `switchDelaySec`). Each vendor maps these
|
|
11328
|
+
* onto its own ISAPI / Baichuan / Dahua-CGI fields; the cap standardises
|
|
11329
|
+
* the shape so ONE derived-form renders every camera.
|
|
11330
|
+
*
|
|
11331
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
11332
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
11333
|
+
* injected from `status`) reports the live values, and a single
|
|
11334
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
11335
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
11336
|
+
* routing from this surface.
|
|
11337
|
+
*/
|
|
11338
|
+
/** IR-cut switching mode. `schedule` = time-of-day table configured on the camera. */
|
|
11339
|
+
var DayNightModeSchema = _enum([
|
|
11340
|
+
"auto",
|
|
11341
|
+
"day",
|
|
11342
|
+
"night",
|
|
11343
|
+
"schedule"
|
|
11344
|
+
]);
|
|
11345
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
11346
|
+
* getOptions availability convention. Normalized values are 0–100. */
|
|
11347
|
+
var NormalizedRangeSchema$1 = object({
|
|
11348
|
+
min: number(),
|
|
11349
|
+
max: number(),
|
|
11350
|
+
step: number()
|
|
11351
|
+
});
|
|
11352
|
+
/**
|
|
11353
|
+
* Current day/night state. Optional fields are absent when the camera
|
|
11354
|
+
* does not expose that knob (a photocell-less model reports no
|
|
11355
|
+
* `sensitivity`). `lastFetchedAt` feeds the runtime-state bridge.
|
|
11356
|
+
*/
|
|
11357
|
+
var DayNightStatusSchema = object({
|
|
11358
|
+
mode: DayNightModeSchema,
|
|
11359
|
+
/** IR-cut trigger sensitivity, NORMALIZED 0–100 (higher = switches to night sooner). */
|
|
11360
|
+
sensitivity: number().optional(),
|
|
11361
|
+
/** Delay before the IR-cut filter flips, in seconds. */
|
|
11362
|
+
switchDelaySec: number().optional(),
|
|
11363
|
+
lastFetchedAt: number()
|
|
11364
|
+
});
|
|
11365
|
+
/**
|
|
11366
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
11367
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
11368
|
+
* (normalized 0–100); the mode choice-set as an array. A provider returns
|
|
11369
|
+
* honest, camera-probed values — never hardcoded.
|
|
11370
|
+
*/
|
|
11371
|
+
var DayNightOptionsSchema = object({
|
|
11372
|
+
/** Modes this camera accepts. Empty → the camera has no configurable day/night mode. */
|
|
11373
|
+
modes: array(DayNightModeSchema),
|
|
11374
|
+
supportsSensitivity: boolean(),
|
|
11375
|
+
/** Present when `supportsSensitivity` — the normalized 0–100 range. */
|
|
11376
|
+
sensitivity: NormalizedRangeSchema$1.optional(),
|
|
11377
|
+
supportsSwitchDelay: boolean(),
|
|
11378
|
+
/** Present when `supportsSwitchDelay` — the allowed delay range in seconds. */
|
|
11379
|
+
switchDelaySec: NormalizedRangeSchema$1.optional()
|
|
11380
|
+
});
|
|
11381
|
+
/**
|
|
11382
|
+
* Partial change to the day/night config — every field optional. A
|
|
11383
|
+
* provider ignores fields it does not support.
|
|
11384
|
+
*/
|
|
11385
|
+
var DayNightSettingsPatchSchema = object({
|
|
11386
|
+
mode: DayNightModeSchema.optional(),
|
|
11387
|
+
sensitivity: number().optional(),
|
|
11388
|
+
switchDelaySec: number().optional()
|
|
11389
|
+
});
|
|
11390
|
+
var dayNightCapability = {
|
|
11391
|
+
name: "day-night",
|
|
11392
|
+
scope: "device",
|
|
11393
|
+
deviceNative: true,
|
|
11394
|
+
mode: "singleton",
|
|
11395
|
+
deviceTypes: [DeviceType.Camera],
|
|
11396
|
+
deviceConfig: { ui: {
|
|
11397
|
+
kind: "derived-form",
|
|
11398
|
+
builderId: "day-night",
|
|
11399
|
+
tab: "image"
|
|
11400
|
+
} },
|
|
11401
|
+
methods: {
|
|
11402
|
+
getOptions: method(object({ deviceId: number() }), DayNightOptionsSchema),
|
|
11403
|
+
setSettings: method(object({
|
|
11404
|
+
deviceId: number(),
|
|
11405
|
+
settings: DayNightSettingsPatchSchema
|
|
11406
|
+
}), _void(), {
|
|
11407
|
+
kind: "mutation",
|
|
11408
|
+
auth: "admin"
|
|
11409
|
+
})
|
|
11410
|
+
},
|
|
11411
|
+
status: {
|
|
11412
|
+
schema: DayNightStatusSchema,
|
|
11413
|
+
kind: "poll"
|
|
11414
|
+
},
|
|
11415
|
+
runtimeState: DayNightStatusSchema
|
|
11416
|
+
};
|
|
11417
|
+
/**
|
|
11307
11418
|
* Identity envelope for a device's upstream-system metadata.
|
|
11308
11419
|
*
|
|
11309
11420
|
* Two jobs:
|
|
@@ -11962,6 +12073,155 @@ var imageCapability = {
|
|
|
11962
12073
|
runtimeState: ImageStatusSchema
|
|
11963
12074
|
};
|
|
11964
12075
|
/**
|
|
12076
|
+
* Vendor-neutral image / picture-adjustment cap — the per-camera config
|
|
12077
|
+
* cap shared by reolink / hikvision / amcrest. Models the common ISP
|
|
12078
|
+
* surface: the four picture sliders (brightness / contrast / saturation /
|
|
12079
|
+
* sharpness), orientation (mirror / flip / rotate), white-balance,
|
|
12080
|
+
* exposure and backlight-compensation modes.
|
|
12081
|
+
*
|
|
12082
|
+
* NORMALIZATION: every slider is a normalized int 0–100. Vendors expose
|
|
12083
|
+
* these natively as 0–100 or 0–255 (or other ranges); each provider maps
|
|
12084
|
+
* its native range to/from this normalized 0–100 space so the cap surface
|
|
12085
|
+
* (and the derived form) is identical across cameras. `warmth` (manual
|
|
12086
|
+
* white-balance) is likewise normalized 0–100.
|
|
12087
|
+
*
|
|
12088
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
12089
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
12090
|
+
* injected from `status`) reports the live values, and a single
|
|
12091
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
12092
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
12093
|
+
* routing from this surface.
|
|
12094
|
+
*/
|
|
12095
|
+
/** Sensor/image rotation, degrees clockwise. */
|
|
12096
|
+
var ImageRotateSchema = _enum([
|
|
12097
|
+
"0",
|
|
12098
|
+
"90",
|
|
12099
|
+
"180",
|
|
12100
|
+
"270"
|
|
12101
|
+
]);
|
|
12102
|
+
/** White-balance mode. `manual` unlocks the normalized `warmth` knob. */
|
|
12103
|
+
var WhiteBalanceModeSchema = _enum(["auto", "manual"]);
|
|
12104
|
+
/** Exposure mode. */
|
|
12105
|
+
var ExposureModeSchema = _enum(["auto", "manual"]);
|
|
12106
|
+
/**
|
|
12107
|
+
* Backlight-compensation mode:
|
|
12108
|
+
* - `off` — disabled
|
|
12109
|
+
* - `blc` — backlight compensation
|
|
12110
|
+
* - `wdr` — wide dynamic range
|
|
12111
|
+
* - `hlc` — highlight compensation
|
|
12112
|
+
*/
|
|
12113
|
+
var BacklightModeSchema = _enum([
|
|
12114
|
+
"off",
|
|
12115
|
+
"blc",
|
|
12116
|
+
"wdr",
|
|
12117
|
+
"hlc"
|
|
12118
|
+
]);
|
|
12119
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
12120
|
+
* getOptions availability convention. Slider values are normalized 0–100. */
|
|
12121
|
+
var NormalizedRangeSchema = object({
|
|
12122
|
+
min: number(),
|
|
12123
|
+
max: number(),
|
|
12124
|
+
step: number()
|
|
12125
|
+
});
|
|
12126
|
+
/**
|
|
12127
|
+
* Current image-adjustment state. Every field optional — absent when the
|
|
12128
|
+
* camera does not expose that control. Slider values are NORMALIZED 0–100.
|
|
12129
|
+
* `lastFetchedAt` feeds the runtime-state bridge.
|
|
12130
|
+
*/
|
|
12131
|
+
var ImageSettingsStatusSchema = object({
|
|
12132
|
+
/** Normalized 0–100. */
|
|
12133
|
+
brightness: number().optional(),
|
|
12134
|
+
/** Normalized 0–100. */
|
|
12135
|
+
contrast: number().optional(),
|
|
12136
|
+
/** Normalized 0–100. */
|
|
12137
|
+
saturation: number().optional(),
|
|
12138
|
+
/** Normalized 0–100. */
|
|
12139
|
+
sharpness: number().optional(),
|
|
12140
|
+
mirror: boolean().optional(),
|
|
12141
|
+
flip: boolean().optional(),
|
|
12142
|
+
rotate: ImageRotateSchema.optional(),
|
|
12143
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
12144
|
+
/** Manual white-balance warmth, NORMALIZED 0–100. Meaningful only when `whiteBalance === 'manual'`. */
|
|
12145
|
+
warmth: number().optional(),
|
|
12146
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
12147
|
+
backlightMode: BacklightModeSchema.optional(),
|
|
12148
|
+
lastFetchedAt: number()
|
|
12149
|
+
});
|
|
12150
|
+
/**
|
|
12151
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
12152
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
12153
|
+
* (the normalized 0–100 range); enums as arrays of supported values (empty
|
|
12154
|
+
* array → control hidden). A provider returns honest, camera-probed values
|
|
12155
|
+
* — never hardcoded.
|
|
12156
|
+
*/
|
|
12157
|
+
var ImageSettingsOptionsSchema = object({
|
|
12158
|
+
supportsBrightness: boolean(),
|
|
12159
|
+
brightness: NormalizedRangeSchema.optional(),
|
|
12160
|
+
supportsContrast: boolean(),
|
|
12161
|
+
contrast: NormalizedRangeSchema.optional(),
|
|
12162
|
+
supportsSaturation: boolean(),
|
|
12163
|
+
saturation: NormalizedRangeSchema.optional(),
|
|
12164
|
+
supportsSharpness: boolean(),
|
|
12165
|
+
sharpness: NormalizedRangeSchema.optional(),
|
|
12166
|
+
supportsMirror: boolean(),
|
|
12167
|
+
supportsFlip: boolean(),
|
|
12168
|
+
/** Supported rotation values. Empty → rotation not configurable. */
|
|
12169
|
+
rotateOptions: array(ImageRotateSchema),
|
|
12170
|
+
/** Supported white-balance modes. Empty → white-balance not configurable. */
|
|
12171
|
+
whiteBalanceModes: array(WhiteBalanceModeSchema),
|
|
12172
|
+
supportsWarmth: boolean(),
|
|
12173
|
+
/** Present when `supportsWarmth` — the normalized 0–100 range. */
|
|
12174
|
+
warmth: NormalizedRangeSchema.optional(),
|
|
12175
|
+
/** Supported exposure modes. Empty → exposure not configurable. */
|
|
12176
|
+
exposureModes: array(ExposureModeSchema),
|
|
12177
|
+
/** Supported backlight modes. Empty → backlight-compensation not configurable. */
|
|
12178
|
+
backlightModes: array(BacklightModeSchema)
|
|
12179
|
+
});
|
|
12180
|
+
/**
|
|
12181
|
+
* Partial change to the image config — every field optional. Slider values
|
|
12182
|
+
* are normalized 0–100. A provider ignores fields it does not support.
|
|
12183
|
+
*/
|
|
12184
|
+
var ImageSettingsPatchSchema = object({
|
|
12185
|
+
brightness: number().optional(),
|
|
12186
|
+
contrast: number().optional(),
|
|
12187
|
+
saturation: number().optional(),
|
|
12188
|
+
sharpness: number().optional(),
|
|
12189
|
+
mirror: boolean().optional(),
|
|
12190
|
+
flip: boolean().optional(),
|
|
12191
|
+
rotate: ImageRotateSchema.optional(),
|
|
12192
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
12193
|
+
warmth: number().optional(),
|
|
12194
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
12195
|
+
backlightMode: BacklightModeSchema.optional()
|
|
12196
|
+
});
|
|
12197
|
+
var imageSettingsCapability = {
|
|
12198
|
+
name: "image-settings",
|
|
12199
|
+
scope: "device",
|
|
12200
|
+
deviceNative: true,
|
|
12201
|
+
mode: "singleton",
|
|
12202
|
+
deviceTypes: [DeviceType.Camera],
|
|
12203
|
+
deviceConfig: { ui: {
|
|
12204
|
+
kind: "derived-form",
|
|
12205
|
+
builderId: "image-settings",
|
|
12206
|
+
tab: "image"
|
|
12207
|
+
} },
|
|
12208
|
+
methods: {
|
|
12209
|
+
getOptions: method(object({ deviceId: number() }), ImageSettingsOptionsSchema),
|
|
12210
|
+
setSettings: method(object({
|
|
12211
|
+
deviceId: number(),
|
|
12212
|
+
settings: ImageSettingsPatchSchema
|
|
12213
|
+
}), _void(), {
|
|
12214
|
+
kind: "mutation",
|
|
12215
|
+
auth: "admin"
|
|
12216
|
+
})
|
|
12217
|
+
},
|
|
12218
|
+
status: {
|
|
12219
|
+
schema: ImageSettingsStatusSchema,
|
|
12220
|
+
kind: "poll"
|
|
12221
|
+
},
|
|
12222
|
+
runtimeState: ImageSettingsStatusSchema
|
|
12223
|
+
};
|
|
12224
|
+
/**
|
|
11965
12225
|
* Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
|
|
11966
12226
|
* with a mowing lifecycle plus a dock action.
|
|
11967
12227
|
*
|
|
@@ -12960,6 +13220,16 @@ var RunnerCameraConfigSchema = object({
|
|
|
12960
13220
|
* this gate is bypassed.
|
|
12961
13221
|
*/
|
|
12962
13222
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
13223
|
+
/**
|
|
13224
|
+
* Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
|
|
13225
|
+
* never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
|
|
13226
|
+
* this is off by default because the recheck re-subscribes a detection session
|
|
13227
|
+
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
13228
|
+
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
13229
|
+
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
13230
|
+
* (and only render) when this is enabled.
|
|
13231
|
+
*/
|
|
13232
|
+
occupancyRecheckEnabled: boolean().default(false),
|
|
12963
13233
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
12964
13234
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
12965
13235
|
/**
|
|
@@ -14965,6 +15235,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
|
|
|
14965
15235
|
contact: contactCapability,
|
|
14966
15236
|
control: controlCapability,
|
|
14967
15237
|
cover: coverCapability,
|
|
15238
|
+
dayNight: dayNightCapability,
|
|
14968
15239
|
deviceDiscovery: deviceDiscoveryCapability,
|
|
14969
15240
|
deviceStatus: deviceStatusCapability,
|
|
14970
15241
|
doorbell: doorbellCapability,
|
|
@@ -14977,6 +15248,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
|
|
|
14977
15248
|
humidifier: humidifierCapability,
|
|
14978
15249
|
humiditySensor: humiditySensorCapability,
|
|
14979
15250
|
image: imageCapability,
|
|
15251
|
+
imageSettings: imageSettingsCapability,
|
|
14980
15252
|
lawnMowerControl: lawnMowerControlCapability,
|
|
14981
15253
|
lockControl: lockControlCapability,
|
|
14982
15254
|
mediaPlayer: mediaPlayerCapability,
|
|
@@ -16891,7 +17163,9 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
|
|
|
16891
17163
|
id: string(),
|
|
16892
17164
|
name: string(),
|
|
16893
17165
|
isPullMode: boolean().optional(),
|
|
16894
|
-
priority: number().optional()
|
|
17166
|
+
priority: number().optional(),
|
|
17167
|
+
hwaccel: string().optional(),
|
|
17168
|
+
probedBestHwaccel: string().optional()
|
|
16895
17169
|
})), method(DecoderSessionConfigSchema, object({
|
|
16896
17170
|
sessionId: string(),
|
|
16897
17171
|
nodeId: string()
|
|
@@ -22883,6 +23157,18 @@ Object.freeze({
|
|
|
22883
23157
|
addonId: null,
|
|
22884
23158
|
access: "view"
|
|
22885
23159
|
},
|
|
23160
|
+
"dayNight.getOptions": {
|
|
23161
|
+
capName: "day-night",
|
|
23162
|
+
capScope: "device",
|
|
23163
|
+
addonId: null,
|
|
23164
|
+
access: "view"
|
|
23165
|
+
},
|
|
23166
|
+
"dayNight.setSettings": {
|
|
23167
|
+
capName: "day-night",
|
|
23168
|
+
capScope: "device",
|
|
23169
|
+
addonId: null,
|
|
23170
|
+
access: "create"
|
|
23171
|
+
},
|
|
22886
23172
|
"decoder.createSession": {
|
|
22887
23173
|
capName: "decoder",
|
|
22888
23174
|
capScope: "system",
|
|
@@ -23813,6 +24099,18 @@ Object.freeze({
|
|
|
23813
24099
|
addonId: null,
|
|
23814
24100
|
access: "create"
|
|
23815
24101
|
},
|
|
24102
|
+
"imageSettings.getOptions": {
|
|
24103
|
+
capName: "image-settings",
|
|
24104
|
+
capScope: "device",
|
|
24105
|
+
addonId: null,
|
|
24106
|
+
access: "view"
|
|
24107
|
+
},
|
|
24108
|
+
"imageSettings.setSettings": {
|
|
24109
|
+
capName: "image-settings",
|
|
24110
|
+
capScope: "device",
|
|
24111
|
+
addonId: null,
|
|
24112
|
+
access: "create"
|
|
24113
|
+
},
|
|
23816
24114
|
"integrations.create": {
|
|
23817
24115
|
capName: "integrations",
|
|
23818
24116
|
capScope: "system",
|
package/dist/addon.mjs
CHANGED
|
@@ -5626,7 +5626,7 @@ function preprocess(fn, schema) {
|
|
|
5626
5626
|
});
|
|
5627
5627
|
}
|
|
5628
5628
|
//#endregion
|
|
5629
|
-
//#region ../types/dist/sleep-
|
|
5629
|
+
//#region ../types/dist/sleep-CZDdRBua.mjs
|
|
5630
5630
|
var EventCategory = /* @__PURE__ */ function(EventCategory) {
|
|
5631
5631
|
EventCategory["SystemBoot"] = "system.boot";
|
|
5632
5632
|
EventCategory["SystemAddonsReady"] = "system.addons-ready";
|
|
@@ -8237,7 +8237,16 @@ var DecoderStatsSchema = object({
|
|
|
8237
8237
|
inputFps: number(),
|
|
8238
8238
|
outputFps: number(),
|
|
8239
8239
|
avgDecodeTimeMs: number(),
|
|
8240
|
-
droppedFrames: number()
|
|
8240
|
+
droppedFrames: number(),
|
|
8241
|
+
/**
|
|
8242
|
+
* Pull-mode adaptive-fps telemetry (optional — only pull sessions run the
|
|
8243
|
+
* lag-driven controller; push sessions omit these). `lagMs` is the EWMA of
|
|
8244
|
+
* the decoder's real-time drift (rising = falling behind live); `adaptiveFps`
|
|
8245
|
+
* is the current lag-throttled emit rate (≤ `effectiveFps` ceiling).
|
|
8246
|
+
*/
|
|
8247
|
+
lagMs: number().optional(),
|
|
8248
|
+
effectiveFps: number().optional(),
|
|
8249
|
+
adaptiveFps: number().optional()
|
|
8241
8250
|
});
|
|
8242
8251
|
var DecoderSessionConfigSchema = object({
|
|
8243
8252
|
codec: string(),
|
|
@@ -8278,7 +8287,15 @@ var DecoderSessionConfigSchema = object({
|
|
|
8278
8287
|
* other — `pullFrames` returns nothing for an `'shm'` session and
|
|
8279
8288
|
* `pullHandles` returns nothing for a `'callback'` session.
|
|
8280
8289
|
*/
|
|
8281
|
-
frameSink: _enum(["callback", "shm"]).default("callback")
|
|
8290
|
+
frameSink: _enum(["callback", "shm"]).default("callback"),
|
|
8291
|
+
/**
|
|
8292
|
+
* Per-camera decoder DEBUG facility. When `true`, a pull-mode session emits
|
|
8293
|
+
* a throttled (~1Hz) structured `decoder debug` line (effective/adaptive fps,
|
|
8294
|
+
* real-time lag, dropped-frame delta, avg decode time, hwaccel). Mirrors the
|
|
8295
|
+
* stream-broker's `streamingDebug` gate — off by default so production logs
|
|
8296
|
+
* stay quiet and the emit path pays zero per-frame cost when disabled.
|
|
8297
|
+
*/
|
|
8298
|
+
debug: boolean().optional()
|
|
8282
8299
|
});
|
|
8283
8300
|
var EncodeProfileSchema = object({
|
|
8284
8301
|
video: object({
|
|
@@ -11303,6 +11320,100 @@ var coverCapability = {
|
|
|
11303
11320
|
runtimeState: CoverStatusSchema
|
|
11304
11321
|
};
|
|
11305
11322
|
/**
|
|
11323
|
+
* Vendor-neutral day/night (IR-cut) control — the per-camera config cap
|
|
11324
|
+
* shared by reolink / hikvision / amcrest. Models the common firmware
|
|
11325
|
+
* surface: the IR-cut switching MODE plus the two knobs that gate it
|
|
11326
|
+
* (photocell `sensitivity` + `switchDelaySec`). Each vendor maps these
|
|
11327
|
+
* onto its own ISAPI / Baichuan / Dahua-CGI fields; the cap standardises
|
|
11328
|
+
* the shape so ONE derived-form renders every camera.
|
|
11329
|
+
*
|
|
11330
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
11331
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
11332
|
+
* injected from `status`) reports the live values, and a single
|
|
11333
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
11334
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
11335
|
+
* routing from this surface.
|
|
11336
|
+
*/
|
|
11337
|
+
/** IR-cut switching mode. `schedule` = time-of-day table configured on the camera. */
|
|
11338
|
+
var DayNightModeSchema = _enum([
|
|
11339
|
+
"auto",
|
|
11340
|
+
"day",
|
|
11341
|
+
"night",
|
|
11342
|
+
"schedule"
|
|
11343
|
+
]);
|
|
11344
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
11345
|
+
* getOptions availability convention. Normalized values are 0–100. */
|
|
11346
|
+
var NormalizedRangeSchema$1 = object({
|
|
11347
|
+
min: number(),
|
|
11348
|
+
max: number(),
|
|
11349
|
+
step: number()
|
|
11350
|
+
});
|
|
11351
|
+
/**
|
|
11352
|
+
* Current day/night state. Optional fields are absent when the camera
|
|
11353
|
+
* does not expose that knob (a photocell-less model reports no
|
|
11354
|
+
* `sensitivity`). `lastFetchedAt` feeds the runtime-state bridge.
|
|
11355
|
+
*/
|
|
11356
|
+
var DayNightStatusSchema = object({
|
|
11357
|
+
mode: DayNightModeSchema,
|
|
11358
|
+
/** IR-cut trigger sensitivity, NORMALIZED 0–100 (higher = switches to night sooner). */
|
|
11359
|
+
sensitivity: number().optional(),
|
|
11360
|
+
/** Delay before the IR-cut filter flips, in seconds. */
|
|
11361
|
+
switchDelaySec: number().optional(),
|
|
11362
|
+
lastFetchedAt: number()
|
|
11363
|
+
});
|
|
11364
|
+
/**
|
|
11365
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
11366
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
11367
|
+
* (normalized 0–100); the mode choice-set as an array. A provider returns
|
|
11368
|
+
* honest, camera-probed values — never hardcoded.
|
|
11369
|
+
*/
|
|
11370
|
+
var DayNightOptionsSchema = object({
|
|
11371
|
+
/** Modes this camera accepts. Empty → the camera has no configurable day/night mode. */
|
|
11372
|
+
modes: array(DayNightModeSchema),
|
|
11373
|
+
supportsSensitivity: boolean(),
|
|
11374
|
+
/** Present when `supportsSensitivity` — the normalized 0–100 range. */
|
|
11375
|
+
sensitivity: NormalizedRangeSchema$1.optional(),
|
|
11376
|
+
supportsSwitchDelay: boolean(),
|
|
11377
|
+
/** Present when `supportsSwitchDelay` — the allowed delay range in seconds. */
|
|
11378
|
+
switchDelaySec: NormalizedRangeSchema$1.optional()
|
|
11379
|
+
});
|
|
11380
|
+
/**
|
|
11381
|
+
* Partial change to the day/night config — every field optional. A
|
|
11382
|
+
* provider ignores fields it does not support.
|
|
11383
|
+
*/
|
|
11384
|
+
var DayNightSettingsPatchSchema = object({
|
|
11385
|
+
mode: DayNightModeSchema.optional(),
|
|
11386
|
+
sensitivity: number().optional(),
|
|
11387
|
+
switchDelaySec: number().optional()
|
|
11388
|
+
});
|
|
11389
|
+
var dayNightCapability = {
|
|
11390
|
+
name: "day-night",
|
|
11391
|
+
scope: "device",
|
|
11392
|
+
deviceNative: true,
|
|
11393
|
+
mode: "singleton",
|
|
11394
|
+
deviceTypes: [DeviceType.Camera],
|
|
11395
|
+
deviceConfig: { ui: {
|
|
11396
|
+
kind: "derived-form",
|
|
11397
|
+
builderId: "day-night",
|
|
11398
|
+
tab: "image"
|
|
11399
|
+
} },
|
|
11400
|
+
methods: {
|
|
11401
|
+
getOptions: method(object({ deviceId: number() }), DayNightOptionsSchema),
|
|
11402
|
+
setSettings: method(object({
|
|
11403
|
+
deviceId: number(),
|
|
11404
|
+
settings: DayNightSettingsPatchSchema
|
|
11405
|
+
}), _void(), {
|
|
11406
|
+
kind: "mutation",
|
|
11407
|
+
auth: "admin"
|
|
11408
|
+
})
|
|
11409
|
+
},
|
|
11410
|
+
status: {
|
|
11411
|
+
schema: DayNightStatusSchema,
|
|
11412
|
+
kind: "poll"
|
|
11413
|
+
},
|
|
11414
|
+
runtimeState: DayNightStatusSchema
|
|
11415
|
+
};
|
|
11416
|
+
/**
|
|
11306
11417
|
* Identity envelope for a device's upstream-system metadata.
|
|
11307
11418
|
*
|
|
11308
11419
|
* Two jobs:
|
|
@@ -11961,6 +12072,155 @@ var imageCapability = {
|
|
|
11961
12072
|
runtimeState: ImageStatusSchema
|
|
11962
12073
|
};
|
|
11963
12074
|
/**
|
|
12075
|
+
* Vendor-neutral image / picture-adjustment cap — the per-camera config
|
|
12076
|
+
* cap shared by reolink / hikvision / amcrest. Models the common ISP
|
|
12077
|
+
* surface: the four picture sliders (brightness / contrast / saturation /
|
|
12078
|
+
* sharpness), orientation (mirror / flip / rotate), white-balance,
|
|
12079
|
+
* exposure and backlight-compensation modes.
|
|
12080
|
+
*
|
|
12081
|
+
* NORMALIZATION: every slider is a normalized int 0–100. Vendors expose
|
|
12082
|
+
* these natively as 0–100 or 0–255 (or other ranges); each provider maps
|
|
12083
|
+
* its native range to/from this normalized 0–100 space so the cap surface
|
|
12084
|
+
* (and the derived form) is identical across cameras. `warmth` (manual
|
|
12085
|
+
* white-balance) is likewise normalized 0–100.
|
|
12086
|
+
*
|
|
12087
|
+
* Follows the D14 `deviceConfig` archetype (see `stream-params.cap.ts`):
|
|
12088
|
+
* `getOptions` advertises per-camera availability, `getStatus` (auto-
|
|
12089
|
+
* injected from `status`) reports the live values, and a single
|
|
12090
|
+
* `setSettings` mutation applies a partial change. No hand-written
|
|
12091
|
+
* settings-contribution methods — the framework derives the UI + save
|
|
12092
|
+
* routing from this surface.
|
|
12093
|
+
*/
|
|
12094
|
+
/** Sensor/image rotation, degrees clockwise. */
|
|
12095
|
+
var ImageRotateSchema = _enum([
|
|
12096
|
+
"0",
|
|
12097
|
+
"90",
|
|
12098
|
+
"180",
|
|
12099
|
+
"270"
|
|
12100
|
+
]);
|
|
12101
|
+
/** White-balance mode. `manual` unlocks the normalized `warmth` knob. */
|
|
12102
|
+
var WhiteBalanceModeSchema = _enum(["auto", "manual"]);
|
|
12103
|
+
/** Exposure mode. */
|
|
12104
|
+
var ExposureModeSchema = _enum(["auto", "manual"]);
|
|
12105
|
+
/**
|
|
12106
|
+
* Backlight-compensation mode:
|
|
12107
|
+
* - `off` — disabled
|
|
12108
|
+
* - `blc` — backlight compensation
|
|
12109
|
+
* - `wdr` — wide dynamic range
|
|
12110
|
+
* - `hlc` — highlight compensation
|
|
12111
|
+
*/
|
|
12112
|
+
var BacklightModeSchema = _enum([
|
|
12113
|
+
"off",
|
|
12114
|
+
"blc",
|
|
12115
|
+
"wdr",
|
|
12116
|
+
"hlc"
|
|
12117
|
+
]);
|
|
12118
|
+
/** Normalized numeric range descriptor — `{ min, max, step }` per the
|
|
12119
|
+
* getOptions availability convention. Slider values are normalized 0–100. */
|
|
12120
|
+
var NormalizedRangeSchema = object({
|
|
12121
|
+
min: number(),
|
|
12122
|
+
max: number(),
|
|
12123
|
+
step: number()
|
|
12124
|
+
});
|
|
12125
|
+
/**
|
|
12126
|
+
* Current image-adjustment state. Every field optional — absent when the
|
|
12127
|
+
* camera does not expose that control. Slider values are NORMALIZED 0–100.
|
|
12128
|
+
* `lastFetchedAt` feeds the runtime-state bridge.
|
|
12129
|
+
*/
|
|
12130
|
+
var ImageSettingsStatusSchema = object({
|
|
12131
|
+
/** Normalized 0–100. */
|
|
12132
|
+
brightness: number().optional(),
|
|
12133
|
+
/** Normalized 0–100. */
|
|
12134
|
+
contrast: number().optional(),
|
|
12135
|
+
/** Normalized 0–100. */
|
|
12136
|
+
saturation: number().optional(),
|
|
12137
|
+
/** Normalized 0–100. */
|
|
12138
|
+
sharpness: number().optional(),
|
|
12139
|
+
mirror: boolean().optional(),
|
|
12140
|
+
flip: boolean().optional(),
|
|
12141
|
+
rotate: ImageRotateSchema.optional(),
|
|
12142
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
12143
|
+
/** Manual white-balance warmth, NORMALIZED 0–100. Meaningful only when `whiteBalance === 'manual'`. */
|
|
12144
|
+
warmth: number().optional(),
|
|
12145
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
12146
|
+
backlightMode: BacklightModeSchema.optional(),
|
|
12147
|
+
lastFetchedAt: number()
|
|
12148
|
+
});
|
|
12149
|
+
/**
|
|
12150
|
+
* Per-camera availability descriptor — drives which controls the admin UI
|
|
12151
|
+
* renders. Booleans as `supportsX`; numeric ranges as `{ min, max, step }`
|
|
12152
|
+
* (the normalized 0–100 range); enums as arrays of supported values (empty
|
|
12153
|
+
* array → control hidden). A provider returns honest, camera-probed values
|
|
12154
|
+
* — never hardcoded.
|
|
12155
|
+
*/
|
|
12156
|
+
var ImageSettingsOptionsSchema = object({
|
|
12157
|
+
supportsBrightness: boolean(),
|
|
12158
|
+
brightness: NormalizedRangeSchema.optional(),
|
|
12159
|
+
supportsContrast: boolean(),
|
|
12160
|
+
contrast: NormalizedRangeSchema.optional(),
|
|
12161
|
+
supportsSaturation: boolean(),
|
|
12162
|
+
saturation: NormalizedRangeSchema.optional(),
|
|
12163
|
+
supportsSharpness: boolean(),
|
|
12164
|
+
sharpness: NormalizedRangeSchema.optional(),
|
|
12165
|
+
supportsMirror: boolean(),
|
|
12166
|
+
supportsFlip: boolean(),
|
|
12167
|
+
/** Supported rotation values. Empty → rotation not configurable. */
|
|
12168
|
+
rotateOptions: array(ImageRotateSchema),
|
|
12169
|
+
/** Supported white-balance modes. Empty → white-balance not configurable. */
|
|
12170
|
+
whiteBalanceModes: array(WhiteBalanceModeSchema),
|
|
12171
|
+
supportsWarmth: boolean(),
|
|
12172
|
+
/** Present when `supportsWarmth` — the normalized 0–100 range. */
|
|
12173
|
+
warmth: NormalizedRangeSchema.optional(),
|
|
12174
|
+
/** Supported exposure modes. Empty → exposure not configurable. */
|
|
12175
|
+
exposureModes: array(ExposureModeSchema),
|
|
12176
|
+
/** Supported backlight modes. Empty → backlight-compensation not configurable. */
|
|
12177
|
+
backlightModes: array(BacklightModeSchema)
|
|
12178
|
+
});
|
|
12179
|
+
/**
|
|
12180
|
+
* Partial change to the image config — every field optional. Slider values
|
|
12181
|
+
* are normalized 0–100. A provider ignores fields it does not support.
|
|
12182
|
+
*/
|
|
12183
|
+
var ImageSettingsPatchSchema = object({
|
|
12184
|
+
brightness: number().optional(),
|
|
12185
|
+
contrast: number().optional(),
|
|
12186
|
+
saturation: number().optional(),
|
|
12187
|
+
sharpness: number().optional(),
|
|
12188
|
+
mirror: boolean().optional(),
|
|
12189
|
+
flip: boolean().optional(),
|
|
12190
|
+
rotate: ImageRotateSchema.optional(),
|
|
12191
|
+
whiteBalance: WhiteBalanceModeSchema.optional(),
|
|
12192
|
+
warmth: number().optional(),
|
|
12193
|
+
exposureMode: ExposureModeSchema.optional(),
|
|
12194
|
+
backlightMode: BacklightModeSchema.optional()
|
|
12195
|
+
});
|
|
12196
|
+
var imageSettingsCapability = {
|
|
12197
|
+
name: "image-settings",
|
|
12198
|
+
scope: "device",
|
|
12199
|
+
deviceNative: true,
|
|
12200
|
+
mode: "singleton",
|
|
12201
|
+
deviceTypes: [DeviceType.Camera],
|
|
12202
|
+
deviceConfig: { ui: {
|
|
12203
|
+
kind: "derived-form",
|
|
12204
|
+
builderId: "image-settings",
|
|
12205
|
+
tab: "image"
|
|
12206
|
+
} },
|
|
12207
|
+
methods: {
|
|
12208
|
+
getOptions: method(object({ deviceId: number() }), ImageSettingsOptionsSchema),
|
|
12209
|
+
setSettings: method(object({
|
|
12210
|
+
deviceId: number(),
|
|
12211
|
+
settings: ImageSettingsPatchSchema
|
|
12212
|
+
}), _void(), {
|
|
12213
|
+
kind: "mutation",
|
|
12214
|
+
auth: "admin"
|
|
12215
|
+
})
|
|
12216
|
+
},
|
|
12217
|
+
status: {
|
|
12218
|
+
schema: ImageSettingsStatusSchema,
|
|
12219
|
+
kind: "poll"
|
|
12220
|
+
},
|
|
12221
|
+
runtimeState: ImageSettingsStatusSchema
|
|
12222
|
+
};
|
|
12223
|
+
/**
|
|
11964
12224
|
* Robotic lawn-mower cap. Models HA `lawn_mower.*` entities — anything
|
|
11965
12225
|
* with a mowing lifecycle plus a dock action.
|
|
11966
12226
|
*
|
|
@@ -12959,6 +13219,16 @@ var RunnerCameraConfigSchema = object({
|
|
|
12959
13219
|
* this gate is bypassed.
|
|
12960
13220
|
*/
|
|
12961
13221
|
onboardMotionDrivesAnalyzer: boolean().default(true),
|
|
13222
|
+
/**
|
|
13223
|
+
* Master toggle for the occupancy re-check. When `false` (DEFAULT) the runner
|
|
13224
|
+
* never arms the periodic recheck timer, regardless of `occupancyRecheckSec` —
|
|
13225
|
+
* this is off by default because the recheck re-subscribes a detection session
|
|
13226
|
+
* every N seconds while `watching`, a major source of pull-decoder re-dial
|
|
13227
|
+
* churn (each cycle creates+tears a session → RTSP re-dial → latency). The
|
|
13228
|
+
* `occupancyRecheckSec` / `occupancyRecheckFrames` sliders only take effect
|
|
13229
|
+
* (and only render) when this is enabled.
|
|
13230
|
+
*/
|
|
13231
|
+
occupancyRecheckEnabled: boolean().default(false),
|
|
12962
13232
|
occupancyRecheckSec: number().min(occupancyRecheckSecField.min).max(occupancyRecheckSecField.max).default(occupancyRecheckSecField.default),
|
|
12963
13233
|
occupancyRecheckFrames: number().min(occupancyRecheckFramesField.min).max(occupancyRecheckFramesField.max).default(occupancyRecheckFramesField.default),
|
|
12964
13234
|
/**
|
|
@@ -14964,6 +15234,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
|
|
|
14964
15234
|
contact: contactCapability,
|
|
14965
15235
|
control: controlCapability,
|
|
14966
15236
|
cover: coverCapability,
|
|
15237
|
+
dayNight: dayNightCapability,
|
|
14967
15238
|
deviceDiscovery: deviceDiscoveryCapability,
|
|
14968
15239
|
deviceStatus: deviceStatusCapability,
|
|
14969
15240
|
doorbell: doorbellCapability,
|
|
@@ -14976,6 +15247,7 @@ var DEVICE_LOCAL_STATE_CAPS = {
|
|
|
14976
15247
|
humidifier: humidifierCapability,
|
|
14977
15248
|
humiditySensor: humiditySensorCapability,
|
|
14978
15249
|
image: imageCapability,
|
|
15250
|
+
imageSettings: imageSettingsCapability,
|
|
14979
15251
|
lawnMowerControl: lawnMowerControlCapability,
|
|
14980
15252
|
lockControl: lockControlCapability,
|
|
14981
15253
|
mediaPlayer: mediaPlayerCapability,
|
|
@@ -16890,7 +17162,9 @@ method(object({ codec: string() }), boolean()), method(_void(), object({
|
|
|
16890
17162
|
id: string(),
|
|
16891
17163
|
name: string(),
|
|
16892
17164
|
isPullMode: boolean().optional(),
|
|
16893
|
-
priority: number().optional()
|
|
17165
|
+
priority: number().optional(),
|
|
17166
|
+
hwaccel: string().optional(),
|
|
17167
|
+
probedBestHwaccel: string().optional()
|
|
16894
17168
|
})), method(DecoderSessionConfigSchema, object({
|
|
16895
17169
|
sessionId: string(),
|
|
16896
17170
|
nodeId: string()
|
|
@@ -22882,6 +23156,18 @@ Object.freeze({
|
|
|
22882
23156
|
addonId: null,
|
|
22883
23157
|
access: "view"
|
|
22884
23158
|
},
|
|
23159
|
+
"dayNight.getOptions": {
|
|
23160
|
+
capName: "day-night",
|
|
23161
|
+
capScope: "device",
|
|
23162
|
+
addonId: null,
|
|
23163
|
+
access: "view"
|
|
23164
|
+
},
|
|
23165
|
+
"dayNight.setSettings": {
|
|
23166
|
+
capName: "day-night",
|
|
23167
|
+
capScope: "device",
|
|
23168
|
+
addonId: null,
|
|
23169
|
+
access: "create"
|
|
23170
|
+
},
|
|
22885
23171
|
"decoder.createSession": {
|
|
22886
23172
|
capName: "decoder",
|
|
22887
23173
|
capScope: "system",
|
|
@@ -23812,6 +24098,18 @@ Object.freeze({
|
|
|
23812
24098
|
addonId: null,
|
|
23813
24099
|
access: "create"
|
|
23814
24100
|
},
|
|
24101
|
+
"imageSettings.getOptions": {
|
|
24102
|
+
capName: "image-settings",
|
|
24103
|
+
capScope: "device",
|
|
24104
|
+
addonId: null,
|
|
24105
|
+
access: "view"
|
|
24106
|
+
},
|
|
24107
|
+
"imageSettings.setSettings": {
|
|
24108
|
+
capName: "image-settings",
|
|
24109
|
+
capScope: "device",
|
|
24110
|
+
addonId: null,
|
|
24111
|
+
access: "create"
|
|
24112
|
+
},
|
|
23815
24113
|
"integrations.create": {
|
|
23816
24114
|
capName: "integrations",
|
|
23817
24115
|
capScope: "system",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/addon-provider-rademacher",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Rademacher HomePilot device-provider addon for CamStack — wraps the @apocaliss92/noderademacher local-hub client (roller shutters over the cover cap)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"camstack",
|