@camstack/addon-pipeline 1.2.315 → 1.2.317
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/audio-analyzer/index.js +2 -2
- package/dist/audio-analyzer/index.mjs +2 -2
- package/dist/{default-detection-model-BTlf5MpT.mjs → default-detection-model-CILrD3sC.mjs} +1 -1
- package/dist/{default-detection-model-CteW4o8U.js → default-detection-model-DdIJSdQB.js} +1 -1
- package/dist/detection-pipeline/index.js +4 -4
- package/dist/detection-pipeline/index.mjs +4 -4
- package/dist/{dist-C8W_MWSz.mjs → dist-3isAnyIX.mjs} +679 -161
- package/dist/{dist-sCjZdzKn.js → dist-DXU3Fu7j.js} +679 -161
- package/dist/motion-wasm/index.js +1 -1
- package/dist/motion-wasm/index.mjs +1 -1
- package/dist/{node-D4xdwpPU.js → node-DEpHS48Q.js} +1 -1
- package/dist/{node-CnLKPz1A.mjs → node-PY3N7_ym.mjs} +1 -1
- package/dist/pipeline-runner/index.js +4 -4
- package/dist/pipeline-runner/index.mjs +4 -4
- package/dist/{process-memory-CMnhjGyE.js → process-memory-DAGs0yZp.js} +1 -1
- package/dist/{process-memory-DqTBUteS.mjs → process-memory-DE0M2AiK.mjs} +1 -1
- package/dist/recorder/index.js +108 -108
- package/dist/recorder/index.mjs +108 -108
- package/dist/{segment-demux-js-DGpdNqsG.js → segment-demux-js-BZhn3qOl.js} +1 -1
- package/dist/{segment-demux-js-CCSsDyMw.mjs → segment-demux-js-k3D5kt3W.mjs} +1 -1
- package/dist/stream-broker/_stub.js +2 -2
- package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BOKNSh-e.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-DqP6Ev3L.mjs} +2 -2
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CVT3OmxC.mjs +26 -0
- package/dist/stream-broker/{_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DddXyc17.mjs → _virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-DHNf76xj.mjs} +1 -1
- package/dist/stream-broker/demux-worker-child.js +1 -1
- package/dist/stream-broker/demux-worker-child.mjs +1 -1
- package/dist/stream-broker/{hostInit-BkvtmJ2D.mjs → hostInit-BRiacIOY.mjs} +2 -2
- package/dist/stream-broker/index.js +6 -6
- package/dist/stream-broker/index.mjs +6 -6
- package/dist/stream-broker/remoteEntry.js +1 -1
- package/package.json +1 -1
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BTvQXobK.mjs +0 -26
|
@@ -7693,7 +7693,7 @@ function errMsg(err) {
|
|
|
7693
7693
|
return String(err);
|
|
7694
7694
|
}
|
|
7695
7695
|
//#endregion
|
|
7696
|
-
//#region ../types/dist/composition-
|
|
7696
|
+
//#region ../types/dist/composition-D7ULvLdD.mjs
|
|
7697
7697
|
var AUDIO_ENCODER_BY_CODEC = {
|
|
7698
7698
|
opus: "libopus",
|
|
7699
7699
|
aac: "aac",
|
|
@@ -8454,20 +8454,20 @@ function portable(target) {
|
|
|
8454
8454
|
}
|
|
8455
8455
|
portable("linux64"), portable("linuxarm64"), portable("macarm64"), portable("mac64");
|
|
8456
8456
|
/**
|
|
8457
|
-
*
|
|
8458
|
-
*
|
|
8457
|
+
* THE table "which boolean of this device type counts as HIGH", and the
|
|
8458
|
+
* pure evaluator of its EDGE.
|
|
8459
8459
|
*
|
|
8460
|
-
*
|
|
8461
|
-
*
|
|
8462
|
-
*
|
|
8463
|
-
*
|
|
8464
|
-
*
|
|
8465
|
-
*
|
|
8460
|
+
* ONE table for everyone who asks "is this device HIGH?": the
|
|
8461
|
+
* recorder's `RecordingTriggers.sensorDeviceIds` trigger, the post-analysis
|
|
8462
|
+
* sensor markers, the orchestrator's camera-sensors bridge and
|
|
8463
|
+
* the sources of a composite doorbell (`doorbellFeatureSources`, D671).
|
|
8464
|
+
* A second copy would diverge at the first cap added, and the symptom — "the
|
|
8465
|
+
* sensor rings the doorbell but does not record" — is exactly D62.
|
|
8466
8466
|
*
|
|
8467
|
-
* ⚠
|
|
8468
|
-
*
|
|
8469
|
-
*
|
|
8470
|
-
*
|
|
8467
|
+
* ⚠ NOT `DEVICE_STATE_READERS` (`catalogs/device-state-vocabulary.ts`), and the
|
|
8468
|
+
* two must not be unified: that one answers "what is the state WORD for a
|
|
8469
|
+
* rule" (and includes `presence`, `cover`, `alarm-panel`), this one "which
|
|
8470
|
+
* boolean's EDGE counts". Deliberately different vocabularies.
|
|
8471
8471
|
*/
|
|
8472
8472
|
/**
|
|
8473
8473
|
* Known binary / switch source caps → the boolean slice field whose
|
|
@@ -8559,17 +8559,17 @@ function evaluateSensorLevelEdge(input) {
|
|
|
8559
8559
|
};
|
|
8560
8560
|
}
|
|
8561
8561
|
/**
|
|
8562
|
-
*
|
|
8563
|
-
*
|
|
8562
|
+
* THE edge. Pure: no clock of its own, no memory — the caller
|
|
8563
|
+
* brings `prior`, `nowMs` and its own `startedAtMs`.
|
|
8564
8564
|
*
|
|
8565
|
-
*
|
|
8566
|
-
*
|
|
8567
|
-
* `startedAtMs` **
|
|
8568
|
-
*
|
|
8569
|
-
*
|
|
8570
|
-
*
|
|
8571
|
-
*
|
|
8572
|
-
*
|
|
8565
|
+
* The case of the FIRST slice already active is treated explicitly and counts as an
|
|
8566
|
+
* edge only if the UPSTREAM timestamp of the transition is later than
|
|
8567
|
+
* `startedAtMs` **and** within `firstSightingFreshnessMs`. Both halves
|
|
8568
|
+
* are needed: freshness alone would fire on a boot-time hydration of a
|
|
8569
|
+
* state flipped a few seconds before the restart, and "after we started"
|
|
8570
|
+
* alone would fire, on a long-lived process, for a source
|
|
8571
|
+
* adopted today whose state changed yesterday. The ambiguous case ERRS TOWARD
|
|
8572
|
+
* SILENCE and declares it (`baseline-seeded-stale-active`).
|
|
8573
8573
|
*/
|
|
8574
8574
|
function evaluateSensorEdge(input) {
|
|
8575
8575
|
const value = sliceActiveValue(input.capName, input.slice);
|
|
@@ -10537,22 +10537,22 @@ var CLASS_MAP_MACRO_TARGETS = [
|
|
|
10537
10537
|
"package"
|
|
10538
10538
|
];
|
|
10539
10539
|
/**
|
|
10540
|
-
*
|
|
10541
|
-
*
|
|
10540
|
+
* The FIRST-LEVEL macro classes: those an object detector emits and that
|
|
10541
|
+
* an operator can select.
|
|
10542
10542
|
*
|
|
10543
|
-
*
|
|
10543
|
+
* They are the three offered by the `object-detection` step
|
|
10544
10544
|
* (`addon-pipeline/src/detection-pipeline/registry/step-definitions.ts`,
|
|
10545
|
-
* `enabledMacroClasses`). `package`
|
|
10546
|
-
* `MACRO_LABELS` —
|
|
10547
|
-
* `package-detection`,
|
|
10548
|
-
*
|
|
10545
|
+
* `enabledMacroClasses`). `package` is in {@link CLASS_MAP_MACRO_TARGETS} and in
|
|
10546
|
+
* `MACRO_LABELS` — it is a true macro — but NOT here: it belongs to the step
|
|
10547
|
+
* `package-detection`, whose enablement is driven by zones, and offering the
|
|
10548
|
+
* same word twice has already made an operator turn on the COCO proxy
|
|
10549
10549
|
* (suitcase/backpack/handbag) lasciando spento il detector dedicato.
|
|
10550
10550
|
*
|
|
10551
|
-
*
|
|
10552
|
-
*
|
|
10553
|
-
* (`types/detection.ts`);
|
|
10554
|
-
* (`RecordingTriggers.objectClasses`)
|
|
10555
|
-
*
|
|
10551
|
+
* ONE list. Before today the same three were hand-written in the step's offer
|
|
10552
|
+
* and a second time as the union `FirstLevelMacro`
|
|
10553
|
+
* (`types/detection.ts`); a third copy for the recording trigger
|
|
10554
|
+
* (`RecordingTriggers.objectClasses`) would have made the later divergence
|
|
10555
|
+
* invisible.
|
|
10556
10556
|
*/
|
|
10557
10557
|
var FIRST_LEVEL_MACRO_CLASSES = [
|
|
10558
10558
|
"person",
|
|
@@ -10560,8 +10560,8 @@ var FIRST_LEVEL_MACRO_CLASSES = [
|
|
|
10560
10560
|
"animal"
|
|
10561
10561
|
];
|
|
10562
10562
|
/**
|
|
10563
|
-
* True
|
|
10564
|
-
* `className`
|
|
10563
|
+
* True when `value` is a first-level macro. Type guard, not cast: a
|
|
10564
|
+
* `className` coming from the bus is any string until it passes through
|
|
10565
10565
|
* qui.
|
|
10566
10566
|
*/
|
|
10567
10567
|
function isFirstLevelMacroClass(value) {
|
|
@@ -10643,17 +10643,17 @@ var RecordingStorageModeSchema = _enum([
|
|
|
10643
10643
|
"on-device-decision"
|
|
10644
10644
|
]);
|
|
10645
10645
|
/**
|
|
10646
|
-
*
|
|
10647
|
-
*
|
|
10646
|
+
* The macro classes that can open a recording window — the same
|
|
10647
|
+
* three offered by the `object-detection` step, from ONE list
|
|
10648
10648
|
* ({@link FIRST_LEVEL_MACRO_CLASSES}).
|
|
10649
10649
|
*/
|
|
10650
10650
|
var RecordingObjectTriggerClassSchema = _enum(FIRST_LEVEL_MACRO_CLASSES);
|
|
10651
10651
|
/**
|
|
10652
|
-
* True
|
|
10652
|
+
* True when `values` does not repeat an element.
|
|
10653
10653
|
*
|
|
10654
|
-
*
|
|
10655
|
-
*
|
|
10656
|
-
*
|
|
10654
|
+
* A duplicate is not harmless: every entry of `objectClasses` / `sensorDeviceIds`
|
|
10655
|
+
* becomes a SOURCE in `bandTriggerSources`, and the same source twice
|
|
10656
|
+
* would count its windows twice in `segmentMissedByMs`.
|
|
10657
10657
|
*/
|
|
10658
10658
|
var noDuplicates = (values) => new Set(values).size === values.length;
|
|
10659
10659
|
/** Which detectors trigger an `events`-mode band. */
|
|
@@ -10661,34 +10661,34 @@ var RecordingTriggersSchema = object({
|
|
|
10661
10661
|
motion: boolean().optional(),
|
|
10662
10662
|
audioThresholdDbfs: number().optional(),
|
|
10663
10663
|
/**
|
|
10664
|
-
*
|
|
10665
|
-
*
|
|
10666
|
-
*
|
|
10667
|
-
*
|
|
10664
|
+
* The macro classes whose detection opens a window. ABSENT = the source
|
|
10665
|
+
* is not listened to; an EMPTY array is rejected, because "events band, object
|
|
10666
|
+
* trigger on, no class" is the same shape "enabled and records
|
|
10667
|
+
* nothing, forever" that `eventsBandCanEverDemand` is written against.
|
|
10668
10668
|
*
|
|
10669
|
-
*
|
|
10670
|
-
*
|
|
10671
|
-
* `minConfidence<Macro>`
|
|
10672
|
-
* (`source: 'onboard'`)
|
|
10673
|
-
*
|
|
10669
|
+
* The signal read is ALREADY FILTERED: only `source: 'pipeline'` detections, i.e.
|
|
10670
|
+
* those that went through `enabledMacroClasses`, the
|
|
10671
|
+
* `minConfidence<Macro>` and the full-frame guard. The camera's onboard AI
|
|
10672
|
+
* (`source: 'onboard'`) goes through none of those gates and does NOT open
|
|
10673
|
+
* windows — see `recorder/object-trigger.ts`.
|
|
10674
10674
|
*/
|
|
10675
10675
|
objectClasses: array(RecordingObjectTriggerClassSchema).min(1).refine(noDuplicates, { message: "objectClasses must not repeat a class" }).optional(),
|
|
10676
10676
|
/**
|
|
10677
|
-
*
|
|
10678
|
-
*
|
|
10677
|
+
* The LINKED devices whose RISING EDGE opens a window. Absent = the source
|
|
10678
|
+
* is not listened to; an empty array is rejected for the same reason as
|
|
10679
10679
|
* `objectClasses`.
|
|
10680
10680
|
*
|
|
10681
|
-
*
|
|
10682
|
-
*
|
|
10683
|
-
*
|
|
10684
|
-
*
|
|
10685
|
-
* device (D12) —
|
|
10681
|
+
* These are SOURCE device ids, not cameras: the band names them, so the
|
|
10682
|
+
* hot path (`DeviceStateChanged`, at bus rate across the whole fleet)
|
|
10683
|
+
* does no RPC. The OFFER from which the operator picks them is another question, and
|
|
10684
|
+
* is resolved with `deviceManager.getLinkedDevices` + `getBindingsBatch` per
|
|
10685
|
+
* device (D12) — never a global list of caps.
|
|
10686
10686
|
*
|
|
10687
|
-
*
|
|
10688
|
-
* `SOURCE_CAP_ACTIVE_FIELD` (`catalogs/sensor-active-state.ts`)
|
|
10689
|
-
*
|
|
10690
|
-
*
|
|
10691
|
-
*
|
|
10687
|
+
* What "high" means depends on the device TYPE and is not decided here:
|
|
10688
|
+
* `SOURCE_CAP_ACTIVE_FIELD` (`catalogs/sensor-active-state.ts`) is THE table,
|
|
10689
|
+
* the same one as the composite doorbell (D671). And it is the EDGE, not
|
|
10690
|
+
* the level: a contact found already open at runner restart does not
|
|
10691
|
+
* record.
|
|
10692
10692
|
*/
|
|
10693
10693
|
sensorDeviceIds: array(number().int().positive()).min(1).max(16).refine(noDuplicates, { message: "sensorDeviceIds must not repeat a device" }).optional()
|
|
10694
10694
|
});
|
|
@@ -12068,7 +12068,7 @@ var DecoderSessionConfigSchema = object({
|
|
|
12068
12068
|
* - **VALUE** — at which level, for which scope, until when. That stays ONE
|
|
12069
12069
|
* thing: the logging settings document on the `system` cap. Two authorities
|
|
12070
12070
|
* over the values is the exact defect
|
|
12071
|
-
* `docs/design/plans/2026-08-26-
|
|
12071
|
+
* `docs/design/plans/2026-08-26-per-component-logging.md` was written to
|
|
12072
12072
|
* remove; re-introducing it from the cure side would be grotesque.
|
|
12073
12073
|
*
|
|
12074
12074
|
* Nothing in this file reads a clock, an env var or a store. The registry is
|
|
@@ -16371,7 +16371,7 @@ method(_void(), EngineInfoSchema, { auth: "admin" }), method(object({
|
|
|
16371
16371
|
*
|
|
16372
16372
|
* ⚠ An earlier version of this comment blamed Zod stripping, and that
|
|
16373
16373
|
* was wrong — corrected 2026-08-26 after the hop map
|
|
16374
|
-
* (`docs/design/2026-08-26-
|
|
16374
|
+
* (`docs/design/2026-08-26-topic-hop-map.md`) traced the path.
|
|
16375
16375
|
* There is **no Zod parse at all** between the door and the engine: the
|
|
16376
16376
|
* dispatcher forwards the payload verbatim and UDS carries it whole. A
|
|
16377
16377
|
* field declared here reaches `SqliteSettingsBackend` either way.
|
|
@@ -17158,7 +17158,17 @@ var SiteZoneSchema = object({
|
|
|
17158
17158
|
var ProviderStatusSchema = object({
|
|
17159
17159
|
connected: boolean(),
|
|
17160
17160
|
deviceCount: number(),
|
|
17161
|
-
error: string().optional()
|
|
17161
|
+
error: string().optional(),
|
|
17162
|
+
/**
|
|
17163
|
+
* `'orchestrator'`: this provider writes NO camera's `motion` runtime slice
|
|
17164
|
+
* — the orchestrator is its only writer (D696). Set by `BaseDeviceProvider`,
|
|
17165
|
+
* which every provider bundles, so only a provider BUILT from D696-amended
|
|
17166
|
+
* code says it. ABSENT means an older provider that may still write it (raw
|
|
17167
|
+
* VMD writes, a boot seed), and the orchestrator's provider gate keeps that
|
|
17168
|
+
* provider's cameras unwritten (`camera-sensors/motion-slice-provider-gate.ts`)
|
|
17169
|
+
* — the provider twin of the runner's `getLocalLoad().motionSliceWriter`.
|
|
17170
|
+
*/
|
|
17171
|
+
motionSliceWriter: literal("orchestrator").optional()
|
|
17162
17172
|
});
|
|
17163
17173
|
object({
|
|
17164
17174
|
externalId: string(),
|
|
@@ -18294,7 +18304,7 @@ method(object({
|
|
|
18294
18304
|
* per-device window, `KeyFrameCaptureLog`, `bumpCropMetric`. Every one of them
|
|
18295
18305
|
* ends in a log line, and a log line is the thing the operator asked to stop
|
|
18296
18306
|
* needing: *"possiamo armare questi errori intanto? Così al prossimo giro
|
|
18297
|
-
* ricontrolliamo tutti questi punti"
|
|
18307
|
+
* ricontrolliamo tutti questi punti"* [can we instrument these errors in the meantime? That way next round we recheck all these points]. Reading them meant grepping Loki and
|
|
18298
18308
|
* hand-correlating timestamps, which is how a 22% thumbnail gap and a 3-hour
|
|
18299
18309
|
* media blackout were both diagnosed. The counters stay; this is where they can
|
|
18300
18310
|
* be READ.
|
|
@@ -22306,78 +22316,16 @@ var NcRuleInputSchema = object({
|
|
|
22306
22316
|
*/
|
|
22307
22317
|
confirm: NcConfirmSchema.optional(),
|
|
22308
22318
|
/**
|
|
22309
|
-
*
|
|
22310
|
-
*
|
|
22311
|
-
*
|
|
22312
|
-
*
|
|
22313
|
-
*
|
|
22314
|
-
*
|
|
22315
|
-
*
|
|
22316
|
-
*
|
|
22317
|
-
*
|
|
22318
|
-
* Only two honest answers exist, and this flag picks between them. It has
|
|
22319
|
-
* effect ONLY on a rule that declares a recognition scope
|
|
22320
|
-
* ({@link NcConditions.identities} or {@link NcConditions.plates}) — on any
|
|
22321
|
-
* other rule there is nothing to wait for and the flag is inert.
|
|
22322
|
-
*
|
|
22323
|
-
* | value | what happens |
|
|
22324
|
-
* | --- | --- |
|
|
22325
|
-
* | `true` | the rule stops firing on the object event and fires at TRACK CLOSE instead, once, with the name — later, and complete |
|
|
22326
|
-
* | absent / `false` | it fires at once WITHOUT the name, and if recognition lands before the track closes a SECOND, "…is Gianluca" notification follows (one per track, per rule, per target) |
|
|
22327
|
-
*
|
|
22328
|
-
* `.optional()` and deliberately NOT `.default()`: a Zod default does not run
|
|
22329
|
-
* on the addon cap path, and absent has to keep meaning exactly what every
|
|
22330
|
-
* rule authored before this field meant.
|
|
22331
|
-
*
|
|
22332
|
-
* The cost of `true` is stated here because the editor states it too: a rule
|
|
22333
|
-
* that waits also inherits track-close SEMANTICS — its `zones` condition
|
|
22334
|
-
* tests every zone the track visited and a `crossing` condition can no longer
|
|
22335
|
-
* be satisfied, because a closed track carries no crossing.
|
|
22319
|
+
* IMMEDIATE GROUPED (D692): the first matching subject opens a window of this many
|
|
22320
|
+
* seconds; the rule sends ONE message when the window closes — early, once every
|
|
22321
|
+
* subject in it is final, never before {@link NC_GROUPING_MIN_SEC} — naming everybody
|
|
22322
|
+
* the rule matched, with one mosaic tile per subject.
|
|
22323
|
+
* Absent = plain immediate (one message per track, at the first match).
|
|
22324
|
+
* Only an `immediate` DETECTION rule may carry it (`ruleGroupingApplies`, enforced on
|
|
22325
|
+
* save by the hub's grouping guard). `.optional()`, never `.default()`: the addon cap
|
|
22326
|
+
* path does not run Zod defaults.
|
|
22336
22327
|
*/
|
|
22337
|
-
|
|
22338
|
-
/**
|
|
22339
|
-
* GROUP a burst of subjects into ONE notification that grows.
|
|
22340
|
-
*
|
|
22341
|
-
* Seconds of quiet after the last matching subject before the burst is
|
|
22342
|
-
* considered over. While it is open, the first subject enqueues immediately —
|
|
22343
|
-
* **exactly as today, with no added latency** — and every real growth (a new
|
|
22344
|
-
* subject, or a name confirmed on one already in it) REPLACES that
|
|
22345
|
-
* notification with an updated one naming everybody. The push carries the
|
|
22346
|
-
* group's own coalescing tag, so the phone replaces rather than stacks.
|
|
22347
|
-
*
|
|
22348
|
-
* `0` / absent = off, and off is today's behaviour byte for byte.
|
|
22349
|
-
*
|
|
22350
|
-
* ### Why an idle cutoff and not a window
|
|
22351
|
-
*
|
|
22352
|
-
* The measured seven-person arrival on device 590 spans 110 s with every
|
|
22353
|
-
* internal gap under 30 s. A 12 s fixed window cuts it into three groups; an
|
|
22354
|
-
* idle cutoff holds it as one and ends it when the arrival actually ends.
|
|
22355
|
-
* 30 s is a widely shipped value for the same decision.
|
|
22356
|
-
*
|
|
22357
|
-
* ### What it replaces
|
|
22358
|
-
*
|
|
22359
|
-
* The blind cooldown, which collapses a burst by DISCARDING it. Measured on
|
|
22360
|
-
* device 615 / *Persona su Uscio* over six days: 116 qualifying tracks → 74
|
|
22361
|
-
* notifications, **44 (37.9%) suppressed outright**, 23 of them overlapping a
|
|
22362
|
-
* track that did fire and 7 carrying a confirmed identity nobody heard about.
|
|
22363
|
-
* A group collapses the same volume by MERGING, so the cooldown becomes a
|
|
22364
|
-
* budget over GROUPS — which is what it always meant — and a growth is never
|
|
22365
|
-
* throttled by the window its own first member spent.
|
|
22366
|
-
*
|
|
22367
|
-
* ### Interaction with {@link waitForEnhancement}
|
|
22368
|
-
*
|
|
22369
|
-
* They compose, and the order matters. `waitForEnhancement` defers the rule to
|
|
22370
|
-
* TRACK CLOSE, so with both set the group is opened by the first member to
|
|
22371
|
-
* CLOSE — already carrying its name — and grows as later members close. That
|
|
22372
|
-
* is later, and complete. With grouping alone the group opens on the first
|
|
22373
|
-
* object event and picks up names as they are confirmed, through the growth
|
|
22374
|
-
* path. Neither combination fires twice for one subject.
|
|
22375
|
-
*
|
|
22376
|
-
* `.optional()` and deliberately NOT `.default()`: a Zod default does not run
|
|
22377
|
-
* on the addon cap path, so absent must keep meaning what it meant before this
|
|
22378
|
-
* field existed.
|
|
22379
|
-
*/
|
|
22380
|
-
groupIdleSec: number().int().min(0).max(600).optional()
|
|
22328
|
+
groupingSec: number().int().min(5).max(60).optional()
|
|
22381
22329
|
});
|
|
22382
22330
|
/**
|
|
22383
22331
|
* Partial patch for `updateRule` — any subset of the input fields, plus the
|
|
@@ -22425,9 +22373,10 @@ var NcRuleClearableKeySchema = _enum([
|
|
|
22425
22373
|
"targetUsers",
|
|
22426
22374
|
"snoozeOptions",
|
|
22427
22375
|
"snoozeAllowGlobal",
|
|
22428
|
-
"waitForEnhancement",
|
|
22429
22376
|
"actions",
|
|
22430
22377
|
"confirm",
|
|
22378
|
+
"groupingSec",
|
|
22379
|
+
"waitForEnhancement",
|
|
22431
22380
|
"groupIdleSec"
|
|
22432
22381
|
]);
|
|
22433
22382
|
var NcRuleUpdateInputSchema = object({
|
|
@@ -22898,6 +22847,29 @@ object({
|
|
|
22898
22847
|
firstAt: number(),
|
|
22899
22848
|
lastAt: number()
|
|
22900
22849
|
});
|
|
22850
|
+
var NC_ALARM_TRIGGERED_MAX_SEC = 3600;
|
|
22851
|
+
var NcAlarmDelaySecSchema = number().int().min(0).max(600);
|
|
22852
|
+
var NcAlarmTriggeredSecSchema = number().int().min(0).max(NC_ALARM_TRIGGERED_MAX_SEC);
|
|
22853
|
+
var uniqueModes = (entries) => new Set(entries.map((e) => e.mode)).size === entries.length;
|
|
22854
|
+
var NcAlarmModeDelaysListSchema = array(object({
|
|
22855
|
+
mode: AlarmArmModeSchema,
|
|
22856
|
+
exitDelaySec: NcAlarmDelaySecSchema.optional(),
|
|
22857
|
+
entryDelaySec: NcAlarmDelaySecSchema.optional(),
|
|
22858
|
+
triggeredDurationSec: NcAlarmTriggeredSecSchema.optional()
|
|
22859
|
+
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one entry per arm mode" });
|
|
22860
|
+
var NcAlarmModeDelaysEditListSchema = array(object({
|
|
22861
|
+
mode: AlarmArmModeSchema,
|
|
22862
|
+
exitDelaySec: NcAlarmDelaySecSchema.nullable().optional(),
|
|
22863
|
+
entryDelaySec: NcAlarmDelaySecSchema.nullable().optional(),
|
|
22864
|
+
triggeredDurationSec: NcAlarmTriggeredSecSchema.nullable().optional()
|
|
22865
|
+
})).max(8).refine(uniqueModes, { message: "modeDelays: at most one edit per arm mode" });
|
|
22866
|
+
/** One switch of the alarm table: put ONE device on, or take it off, ONE mode's list. */
|
|
22867
|
+
var NcAlarmNonBlockingEditSchema = object({
|
|
22868
|
+
mode: AlarmArmModeSchema,
|
|
22869
|
+
deviceId: number().int().positive(),
|
|
22870
|
+
/** true = on the list (may be open, does not block); false = off the list (blocks). */
|
|
22871
|
+
nonBlocking: boolean()
|
|
22872
|
+
});
|
|
22901
22873
|
/**
|
|
22902
22874
|
* The per-mode lists, at most one per mode. Two lists for one mode have no
|
|
22903
22875
|
* meaning a reader could agree on (union? the last one?), so they are refused
|
|
@@ -22906,10 +22878,10 @@ object({
|
|
|
22906
22878
|
var NcAlarmNonBlockingListSchema = array(object({
|
|
22907
22879
|
mode: AlarmArmModeSchema,
|
|
22908
22880
|
deviceIds: array(number().int()).max(200)
|
|
22909
|
-
})).max(8).refine(
|
|
22881
|
+
})).max(8).refine(uniqueModes, { message: "nonBlocking: at most one list per arm mode" });
|
|
22910
22882
|
/**
|
|
22911
|
-
* The three durations
|
|
22912
|
-
* transitions, and which openings each mode tolerates.
|
|
22883
|
+
* The three durations — global, and per mode since D697 — the panel's state
|
|
22884
|
+
* machine runs on, who hears about its transitions, and which openings each mode tolerates.
|
|
22913
22885
|
*
|
|
22914
22886
|
* They live on the NOTIFICATION-RULES cap, not on `alarm-panel`, on purpose:
|
|
22915
22887
|
* `alarm-panel` is `deviceNative` and its other provider mirrors somebody
|
|
@@ -22919,15 +22891,15 @@ var NcAlarmNonBlockingListSchema = array(object({
|
|
|
22919
22891
|
*/
|
|
22920
22892
|
var NcAlarmSettingsSchema = object({
|
|
22921
22893
|
/** Grace period between arming and the mode taking effect. 0 = immediate. */
|
|
22922
|
-
exitDelaySec:
|
|
22894
|
+
exitDelaySec: NcAlarmDelaySecSchema,
|
|
22923
22895
|
/** Grace period between a trigger and the alarm firing. 0 = immediate. */
|
|
22924
|
-
entryDelaySec:
|
|
22896
|
+
entryDelaySec: NcAlarmDelaySecSchema,
|
|
22925
22897
|
/**
|
|
22926
22898
|
* How long `triggered` lasts before the panel re-arms itself.
|
|
22927
22899
|
* **0 = until an operator disarms it** — the behaviour before this field
|
|
22928
22900
|
* existed, and therefore what an untouched install keeps doing.
|
|
22929
22901
|
*/
|
|
22930
|
-
triggeredDurationSec:
|
|
22902
|
+
triggeredDurationSec: NcAlarmTriggeredSecSchema,
|
|
22931
22903
|
/**
|
|
22932
22904
|
* Deprecated by D630 — every transition is announced. Parsed, never read;
|
|
22933
22905
|
* remove after one release. Optional so an older admin's patch (which still
|
|
@@ -22950,17 +22922,30 @@ var NcAlarmSettingsSchema = object({
|
|
|
22950
22922
|
* per mode is meaningful. Defaulted to `[]` so a blob stored before D630
|
|
22951
22923
|
* parses as "every opening blocks" — the behaviour it was written under.
|
|
22952
22924
|
*/
|
|
22953
|
-
nonBlocking: NcAlarmNonBlockingListSchema.default([])
|
|
22925
|
+
nonBlocking: NcAlarmNonBlockingListSchema.default([]),
|
|
22926
|
+
/**
|
|
22927
|
+
* Per arm mode, the delays that mode OVERRIDES (D697). A mode with no entry, or an entry
|
|
22928
|
+
* without a field, uses the global value above — so `[]`, the default, is exactly the
|
|
22929
|
+
* behaviour of a blob stored before this field existed. Read through `resolveModeDelays`.
|
|
22930
|
+
*/
|
|
22931
|
+
modeDelays: NcAlarmModeDelaysListSchema.default([])
|
|
22954
22932
|
});
|
|
22955
22933
|
/**
|
|
22956
22934
|
* Every field optional — a tab edits one control at a time.
|
|
22957
22935
|
*
|
|
22958
|
-
* `nonBlocking`
|
|
22959
|
-
* remove an inner `.default()`, so a patch that never
|
|
22960
|
-
* parse to `
|
|
22961
|
-
* (the same trap {@link NcRulePatchSchema} documents).
|
|
22936
|
+
* `nonBlocking` and `modeDelays` are re-declared WITHOUT their defaults:
|
|
22937
|
+
* `.partial()` does not remove an inner `.default()`, so a patch that never
|
|
22938
|
+
* named the field would parse to `[]` and wipe every mode's list on an
|
|
22939
|
+
* unrelated edit (the same trap {@link NcRulePatchSchema} documents). Here
|
|
22940
|
+
* `modeDelays` means EDITS, not the stored overrides.
|
|
22962
22941
|
*/
|
|
22963
|
-
var NcAlarmSettingsPatchSchema = NcAlarmSettingsSchema.extend({
|
|
22942
|
+
var NcAlarmSettingsPatchSchema = NcAlarmSettingsSchema.extend({
|
|
22943
|
+
nonBlocking: NcAlarmNonBlockingListSchema,
|
|
22944
|
+
/** Per-mode, per-field edits — NOT the whole list (see NcAlarmModeDelaysEditSchema). */
|
|
22945
|
+
modeDelays: NcAlarmModeDelaysEditListSchema,
|
|
22946
|
+
/** ONE membership change; the panel applies it to the list it holds at its turn. */
|
|
22947
|
+
nonBlockingEdit: NcAlarmNonBlockingEditSchema
|
|
22948
|
+
}).partial().refine((p) => p.nonBlocking === void 0 || p.nonBlockingEdit === void 0, { message: "nonBlocking and nonBlockingEdit are exclusive — send the whole lists or one edit" });
|
|
22964
22949
|
/**
|
|
22965
22950
|
* What one arm mode actually arms, DERIVED from the enabled rules gated on it.
|
|
22966
22951
|
* Never authored, never stored — see `alarm-mode-coverage.ts` for why a stored
|
|
@@ -23060,6 +23045,28 @@ var NcAlarmConfigSchema = object({
|
|
|
23060
23045
|
*/
|
|
23061
23046
|
live: NcAlarmLiveSchema.optional()
|
|
23062
23047
|
});
|
|
23048
|
+
var NcAlarmSensorReadingSchema = _enum([
|
|
23049
|
+
"open",
|
|
23050
|
+
"closed",
|
|
23051
|
+
"unknown",
|
|
23052
|
+
"not-opening"
|
|
23053
|
+
]);
|
|
23054
|
+
/** One device's state as the alarm reads it — the classifier the arm check uses. */
|
|
23055
|
+
var NcAlarmSensorStateSchema = object({
|
|
23056
|
+
deviceId: number().int().positive(),
|
|
23057
|
+
reading: NcAlarmSensorReadingSchema,
|
|
23058
|
+
/** The word as read (`open`, `closed`, `unlocked`, `stopped`, …); null when unknown / not an opening. */
|
|
23059
|
+
state: string().nullable(),
|
|
23060
|
+
/** Why `unknown`: the read failed, or the slice holds no word its cap defines (a placeholder included). */
|
|
23061
|
+
unknownWhy: _enum(["read-failed", "unknown-word"]).nullable(),
|
|
23062
|
+
/** The device manager's liveness as the centre mirrors it; null = not known. */
|
|
23063
|
+
online: boolean().nullable()
|
|
23064
|
+
});
|
|
23065
|
+
var NcAlarmSensorsInputSchema = object({ deviceIds: array(number().int().positive()).max(500) });
|
|
23066
|
+
var NcAlarmSensorsSchema = object({
|
|
23067
|
+
sensors: array(NcAlarmSensorStateSchema),
|
|
23068
|
+
readAt: number().int().nonnegative()
|
|
23069
|
+
});
|
|
23063
23070
|
/**
|
|
23064
23071
|
* ONE rule's demand on ONE camera's clip ring.
|
|
23065
23072
|
*
|
|
@@ -23150,7 +23157,7 @@ method(object({}), object({ rules: array(NcRuleSchema) }), { auth: "admin" }), m
|
|
|
23150
23157
|
}), method(object({}), NcAlarmConfigSchema, { auth: "admin" }), method(object({ patch: NcAlarmSettingsPatchSchema }), NcAlarmConfigSchema, {
|
|
23151
23158
|
kind: "mutation",
|
|
23152
23159
|
auth: "admin"
|
|
23153
|
-
});
|
|
23160
|
+
}), method(NcAlarmSensorsInputSchema, NcAlarmSensorsSchema, { auth: "admin" });
|
|
23154
23161
|
/**
|
|
23155
23162
|
* Zod schemas for persisted record types.
|
|
23156
23163
|
*
|
|
@@ -24349,14 +24356,14 @@ var TrackSchema = object({
|
|
|
24349
24356
|
* `derive-returned-null tile=standin`,
|
|
24350
24357
|
* `native-tile tile=native no-key-frame-at-close`, …) written at close and
|
|
24351
24358
|
* CLEARED by the late-keyFrame upgrade when a native tile lands after all.
|
|
24352
|
-
* The operator-facing answer to "perché manca l'immagine?" on a track whose
|
|
24359
|
+
* The operator-facing answer to "perché manca l'immagine?" [why is the image missing?] on a track whose
|
|
24353
24360
|
* tile is a face/plate stand-in, a raster crop, or an icon.
|
|
24354
24361
|
*
|
|
24355
24362
|
* **`no-key-frame-at-close` (D400).** The line used to be written ONLY when
|
|
24356
24363
|
* the TILE ranked below native, so a track whose thumbnail landed natively
|
|
24357
24364
|
* while its key frame missed carried no reason at all — three of the four
|
|
24358
24365
|
* `MISSING_KEYFRAME` tracks in the 2026-09-07 operator audit were exactly
|
|
24359
|
-
* that shape, and their "niente ultimo" had no cause anywhere on the row.
|
|
24366
|
+
* that shape, and their "niente ultimo" [no last frame] had no cause anywhere on the row.
|
|
24360
24367
|
* The key frame is the head of a cascade (`keyFrame ⇒ keyFrameSmall ⇒ the
|
|
24361
24368
|
* lastFrame copy source`), so its absence is now on this line whatever the
|
|
24362
24369
|
* tile ended up being.
|
|
@@ -24443,7 +24450,7 @@ var MotionEventSchema = object({
|
|
|
24443
24450
|
/**
|
|
24444
24451
|
* Ms offsets from `timestamp` (the episode's own first rising edge, so the
|
|
24445
24452
|
* first entry is always `0`) of every genuine off→on transition the
|
|
24446
|
-
* episode saw — "ogni evento on si deve salvare" (D475). NOT one entry per
|
|
24453
|
+
* episode saw — "ogni evento on si deve salvare" [every ON event must be saved] (D475). NOT one entry per
|
|
24447
24454
|
* push: a firmware source that keepalives at ~1 Hz for the whole burst
|
|
24448
24455
|
* (Reolink, Hikvision) produces exactly one edge; a source that reports an
|
|
24449
24456
|
* explicit `false` mid-episode and then resumes before the quiet window
|
|
@@ -30122,7 +30129,7 @@ var ClipPlaybackSchema = object({
|
|
|
30122
30129
|
* **One authorised yes is one wake.** `next-natural` — take the clip the next
|
|
30123
30130
|
* time the camera is awake for its own reasons — is deliberately not a member:
|
|
30124
30131
|
* it was proposed, it is free on the battery, and the operator declined it on
|
|
30125
|
-
* 2026-09-20 (*"Quando un export viene richiesto si sveglia la camera."
|
|
30132
|
+
* 2026-09-20 (*"Quando un export viene richiesto si sveglia la camera."* [When an export is requested the camera wakes up],
|
|
30126
30133
|
* D558 "Considered and not taken").
|
|
30127
30134
|
*/
|
|
30128
30135
|
var ClipWakeSchema = _enum(["authorised"]);
|
|
@@ -30437,7 +30444,7 @@ var videoclipsCapability = {
|
|
|
30437
30444
|
* **It is a SECTION of the Recording tab, at the end of it — not a tab of
|
|
30438
30445
|
* its own.** It shipped as a `clips` top-tab and the operator rejected the
|
|
30439
30446
|
* placement: *"utilizzerei la stessa tab recordings, lì abbiamo già tutto il
|
|
30440
|
-
* necessario, una nuova sezione alla fine per le clips"
|
|
30447
|
+
* necessario, una nuova sezione alla fine per le clips"* [I would use the same recordings tab, there we already have everything necessary, a new section at the end for the clips]. The Recording tab
|
|
30441
30448
|
* already holds the recorder's panel, the schedule bands and the unified
|
|
30442
30449
|
* retention policy; footage the camera itself holds is the same question,
|
|
30443
30450
|
* asked of a different store. `order: 100` puts it after all of them with
|
|
@@ -30498,7 +30505,7 @@ var videoclipsCapability = {
|
|
|
30498
30505
|
* It replaced `sources?: string[]`, a VIEW filter over source ids that
|
|
30499
30506
|
* assumed the answer was a fan-out over everything a camera has. The
|
|
30500
30507
|
* operator settled otherwise on 2026-09-20 — *"l'utilizzatore è uno
|
|
30501
|
-
* solo"* — so the list is asked of one provider at a time and there is
|
|
30508
|
+
* solo"* [there is only one user] — so the list is asked of one provider at a time and there is
|
|
30502
30509
|
* nothing to filter out of it.
|
|
30503
30510
|
*/
|
|
30504
30511
|
provider: string().min(1)
|
|
@@ -37039,7 +37046,7 @@ var ReadGopBytesResultSchema = object({
|
|
|
37039
37046
|
/**
|
|
37040
37047
|
* A time WINDOW of one finalized segment, cut by byte range — the multi-GOP
|
|
37041
37048
|
* twin of {@link ReadGopBytesResultSchema}'s single instant. Built for the
|
|
37042
|
-
* replay clip's `recording` source (`docs/design/plans/2026-08-26-replay-
|
|
37049
|
+
* replay clip's `recording` source (`docs/design/plans/2026-08-26-clip-replay-on-pipeline.md`):
|
|
37043
37050
|
* a replay needs several seconds of native pixels, not one frame.
|
|
37044
37051
|
*
|
|
37045
37052
|
* `ok.data` is standalone-demuxable, same as a GOP read. `ok.reachesRequestedEnd`
|
|
@@ -45054,6 +45061,12 @@ Object.freeze({
|
|
|
45054
45061
|
addonId: null,
|
|
45055
45062
|
access: "view"
|
|
45056
45063
|
},
|
|
45064
|
+
"notificationRules.getAlarmSensors": {
|
|
45065
|
+
capName: "notification-rules",
|
|
45066
|
+
capScope: "system",
|
|
45067
|
+
addonId: null,
|
|
45068
|
+
access: "view"
|
|
45069
|
+
},
|
|
45057
45070
|
"notificationRules.getClipRetentionAsks": {
|
|
45058
45071
|
capName: "notification-rules",
|
|
45059
45072
|
capScope: "system",
|
|
@@ -48632,6 +48645,11 @@ Object.freeze({
|
|
|
48632
48645
|
}
|
|
48633
48646
|
});
|
|
48634
48647
|
Object.freeze({
|
|
48648
|
+
"accessories.getStatus": [{
|
|
48649
|
+
name: "deviceId",
|
|
48650
|
+
form: "single",
|
|
48651
|
+
optional: false
|
|
48652
|
+
}],
|
|
48635
48653
|
"accessories.setChildHidden": [{
|
|
48636
48654
|
name: "childDeviceId",
|
|
48637
48655
|
form: "single",
|
|
@@ -48651,6 +48669,11 @@ Object.freeze({
|
|
|
48651
48669
|
form: "single",
|
|
48652
48670
|
optional: false
|
|
48653
48671
|
}],
|
|
48672
|
+
"airQualitySensor.getStatus": [{
|
|
48673
|
+
name: "deviceId",
|
|
48674
|
+
form: "single",
|
|
48675
|
+
optional: false
|
|
48676
|
+
}],
|
|
48654
48677
|
"alarmPanel.arm": [{
|
|
48655
48678
|
name: "deviceId",
|
|
48656
48679
|
form: "single",
|
|
@@ -48661,11 +48684,36 @@ Object.freeze({
|
|
|
48661
48684
|
form: "single",
|
|
48662
48685
|
optional: false
|
|
48663
48686
|
}],
|
|
48687
|
+
"alarmPanel.getStatus": [{
|
|
48688
|
+
name: "deviceId",
|
|
48689
|
+
form: "single",
|
|
48690
|
+
optional: false
|
|
48691
|
+
}],
|
|
48664
48692
|
"alarmPanel.trigger": [{
|
|
48665
48693
|
name: "deviceId",
|
|
48666
48694
|
form: "single",
|
|
48667
48695
|
optional: false
|
|
48668
48696
|
}],
|
|
48697
|
+
"ambientLightSensor.getStatus": [{
|
|
48698
|
+
name: "deviceId",
|
|
48699
|
+
form: "single",
|
|
48700
|
+
optional: false
|
|
48701
|
+
}],
|
|
48702
|
+
"audioAnalysis.applyDeviceSettingsPatch": [{
|
|
48703
|
+
name: "deviceId",
|
|
48704
|
+
form: "single",
|
|
48705
|
+
optional: false
|
|
48706
|
+
}],
|
|
48707
|
+
"audioAnalysis.getDeviceLiveContribution": [{
|
|
48708
|
+
name: "deviceId",
|
|
48709
|
+
form: "single",
|
|
48710
|
+
optional: false
|
|
48711
|
+
}],
|
|
48712
|
+
"audioAnalysis.getDeviceSettingsContribution": [{
|
|
48713
|
+
name: "deviceId",
|
|
48714
|
+
form: "single",
|
|
48715
|
+
optional: false
|
|
48716
|
+
}],
|
|
48669
48717
|
"audioAnalysis.resolveDeviceSettings": [{
|
|
48670
48718
|
name: "deviceId",
|
|
48671
48719
|
form: "single",
|
|
@@ -48706,16 +48754,36 @@ Object.freeze({
|
|
|
48706
48754
|
form: "single",
|
|
48707
48755
|
optional: false
|
|
48708
48756
|
}],
|
|
48757
|
+
"automationControl.getStatus": [{
|
|
48758
|
+
name: "deviceId",
|
|
48759
|
+
form: "single",
|
|
48760
|
+
optional: false
|
|
48761
|
+
}],
|
|
48709
48762
|
"automationControl.trigger": [{
|
|
48710
48763
|
name: "deviceId",
|
|
48711
48764
|
form: "single",
|
|
48712
48765
|
optional: false
|
|
48713
48766
|
}],
|
|
48767
|
+
"battery.getStatus": [{
|
|
48768
|
+
name: "deviceId",
|
|
48769
|
+
form: "single",
|
|
48770
|
+
optional: false
|
|
48771
|
+
}],
|
|
48714
48772
|
"battery.wakeForStream": [{
|
|
48715
48773
|
name: "deviceId",
|
|
48716
48774
|
form: "single",
|
|
48717
48775
|
optional: false
|
|
48718
48776
|
}],
|
|
48777
|
+
"binary.getStatus": [{
|
|
48778
|
+
name: "deviceId",
|
|
48779
|
+
form: "single",
|
|
48780
|
+
optional: false
|
|
48781
|
+
}],
|
|
48782
|
+
"brightness.getStatus": [{
|
|
48783
|
+
name: "deviceId",
|
|
48784
|
+
form: "single",
|
|
48785
|
+
optional: false
|
|
48786
|
+
}],
|
|
48719
48787
|
"brightness.setBrightness": [{
|
|
48720
48788
|
name: "deviceId",
|
|
48721
48789
|
form: "single",
|
|
@@ -48731,6 +48799,26 @@ Object.freeze({
|
|
|
48731
48799
|
form: "single",
|
|
48732
48800
|
optional: false
|
|
48733
48801
|
}],
|
|
48802
|
+
"cameraCredentials.getStatus": [{
|
|
48803
|
+
name: "deviceId",
|
|
48804
|
+
form: "single",
|
|
48805
|
+
optional: false
|
|
48806
|
+
}],
|
|
48807
|
+
"cameraGridLayout.applyDeviceSettingsPatch": [{
|
|
48808
|
+
name: "deviceId",
|
|
48809
|
+
form: "single",
|
|
48810
|
+
optional: false
|
|
48811
|
+
}],
|
|
48812
|
+
"cameraGridLayout.getDeviceLiveContribution": [{
|
|
48813
|
+
name: "deviceId",
|
|
48814
|
+
form: "single",
|
|
48815
|
+
optional: false
|
|
48816
|
+
}],
|
|
48817
|
+
"cameraGridLayout.getDeviceSettingsContribution": [{
|
|
48818
|
+
name: "deviceId",
|
|
48819
|
+
form: "single",
|
|
48820
|
+
optional: false
|
|
48821
|
+
}],
|
|
48734
48822
|
"cameraGridLayout.getLayout": [{
|
|
48735
48823
|
name: "deviceId",
|
|
48736
48824
|
form: "single",
|
|
@@ -48746,6 +48834,21 @@ Object.freeze({
|
|
|
48746
48834
|
form: "single",
|
|
48747
48835
|
optional: false
|
|
48748
48836
|
}],
|
|
48837
|
+
"cameraPipelineConfig.applyDeviceSettingsPatch": [{
|
|
48838
|
+
name: "deviceId",
|
|
48839
|
+
form: "single",
|
|
48840
|
+
optional: false
|
|
48841
|
+
}],
|
|
48842
|
+
"cameraPipelineConfig.getDeviceLiveContribution": [{
|
|
48843
|
+
name: "deviceId",
|
|
48844
|
+
form: "single",
|
|
48845
|
+
optional: false
|
|
48846
|
+
}],
|
|
48847
|
+
"cameraPipelineConfig.getDeviceSettingsContribution": [{
|
|
48848
|
+
name: "deviceId",
|
|
48849
|
+
form: "single",
|
|
48850
|
+
optional: false
|
|
48851
|
+
}],
|
|
48749
48852
|
"cameraStreams.getBrokerStreams": [{
|
|
48750
48853
|
name: "deviceId",
|
|
48751
48854
|
form: "single",
|
|
@@ -48771,6 +48874,16 @@ Object.freeze({
|
|
|
48771
48874
|
form: "single",
|
|
48772
48875
|
optional: false
|
|
48773
48876
|
}],
|
|
48877
|
+
"carbonMonoxide.getStatus": [{
|
|
48878
|
+
name: "deviceId",
|
|
48879
|
+
form: "single",
|
|
48880
|
+
optional: false
|
|
48881
|
+
}],
|
|
48882
|
+
"climateControl.getStatus": [{
|
|
48883
|
+
name: "deviceId",
|
|
48884
|
+
form: "single",
|
|
48885
|
+
optional: false
|
|
48886
|
+
}],
|
|
48774
48887
|
"climateControl.setFanMode": [{
|
|
48775
48888
|
name: "deviceId",
|
|
48776
48889
|
form: "single",
|
|
@@ -48811,16 +48924,41 @@ Object.freeze({
|
|
|
48811
48924
|
form: "single",
|
|
48812
48925
|
optional: false
|
|
48813
48926
|
}],
|
|
48927
|
+
"color.getStatus": [{
|
|
48928
|
+
name: "deviceId",
|
|
48929
|
+
form: "single",
|
|
48930
|
+
optional: false
|
|
48931
|
+
}],
|
|
48814
48932
|
"color.setColor": [{
|
|
48815
48933
|
name: "deviceId",
|
|
48816
48934
|
form: "single",
|
|
48817
48935
|
optional: false
|
|
48818
48936
|
}],
|
|
48937
|
+
"connectivity.getStatus": [{
|
|
48938
|
+
name: "deviceId",
|
|
48939
|
+
form: "single",
|
|
48940
|
+
optional: false
|
|
48941
|
+
}],
|
|
48942
|
+
"consumables.getStatus": [{
|
|
48943
|
+
name: "deviceId",
|
|
48944
|
+
form: "single",
|
|
48945
|
+
optional: false
|
|
48946
|
+
}],
|
|
48819
48947
|
"consumables.reset": [{
|
|
48820
48948
|
name: "deviceId",
|
|
48821
48949
|
form: "single",
|
|
48822
48950
|
optional: false
|
|
48823
48951
|
}],
|
|
48952
|
+
"contact.getStatus": [{
|
|
48953
|
+
name: "deviceId",
|
|
48954
|
+
form: "single",
|
|
48955
|
+
optional: false
|
|
48956
|
+
}],
|
|
48957
|
+
"control.getStatus": [{
|
|
48958
|
+
name: "deviceId",
|
|
48959
|
+
form: "single",
|
|
48960
|
+
optional: false
|
|
48961
|
+
}],
|
|
48824
48962
|
"control.setValue": [{
|
|
48825
48963
|
name: "deviceId",
|
|
48826
48964
|
form: "single",
|
|
@@ -48831,6 +48969,11 @@ Object.freeze({
|
|
|
48831
48969
|
form: "single",
|
|
48832
48970
|
optional: false
|
|
48833
48971
|
}],
|
|
48972
|
+
"cover.getStatus": [{
|
|
48973
|
+
name: "deviceId",
|
|
48974
|
+
form: "single",
|
|
48975
|
+
optional: false
|
|
48976
|
+
}],
|
|
48834
48977
|
"cover.open": [{
|
|
48835
48978
|
name: "deviceId",
|
|
48836
48979
|
form: "single",
|
|
@@ -48856,6 +48999,11 @@ Object.freeze({
|
|
|
48856
48999
|
form: "single",
|
|
48857
49000
|
optional: false
|
|
48858
49001
|
}],
|
|
49002
|
+
"dayNight.getStatus": [{
|
|
49003
|
+
name: "deviceId",
|
|
49004
|
+
form: "single",
|
|
49005
|
+
optional: false
|
|
49006
|
+
}],
|
|
48859
49007
|
"dayNight.setSettings": [{
|
|
48860
49008
|
name: "deviceId",
|
|
48861
49009
|
form: "single",
|
|
@@ -48866,11 +49014,31 @@ Object.freeze({
|
|
|
48866
49014
|
form: "single",
|
|
48867
49015
|
optional: true
|
|
48868
49016
|
}],
|
|
49017
|
+
"detectionPipeline.applyDeviceSettingsPatch": [{
|
|
49018
|
+
name: "deviceId",
|
|
49019
|
+
form: "single",
|
|
49020
|
+
optional: false
|
|
49021
|
+
}],
|
|
49022
|
+
"detectionPipeline.getDeviceLiveContribution": [{
|
|
49023
|
+
name: "deviceId",
|
|
49024
|
+
form: "single",
|
|
49025
|
+
optional: false
|
|
49026
|
+
}],
|
|
49027
|
+
"detectionPipeline.getDeviceSettingsContribution": [{
|
|
49028
|
+
name: "deviceId",
|
|
49029
|
+
form: "single",
|
|
49030
|
+
optional: false
|
|
49031
|
+
}],
|
|
48869
49032
|
"deviceAdminLink.getAdminLink": [{
|
|
48870
49033
|
name: "deviceId",
|
|
48871
49034
|
form: "single",
|
|
48872
49035
|
optional: false
|
|
48873
49036
|
}],
|
|
49037
|
+
"deviceAdoption.getStatus": [{
|
|
49038
|
+
name: "deviceId",
|
|
49039
|
+
form: "single",
|
|
49040
|
+
optional: false
|
|
49041
|
+
}],
|
|
48874
49042
|
"deviceAdoption.release": [{
|
|
48875
49043
|
name: "camDeviceId",
|
|
48876
49044
|
form: "single",
|
|
@@ -48886,6 +49054,11 @@ Object.freeze({
|
|
|
48886
49054
|
form: "single",
|
|
48887
49055
|
optional: false
|
|
48888
49056
|
}],
|
|
49057
|
+
"deviceDiscovery.getStatus": [{
|
|
49058
|
+
name: "deviceId",
|
|
49059
|
+
form: "single",
|
|
49060
|
+
optional: false
|
|
49061
|
+
}],
|
|
48889
49062
|
"deviceDiscovery.listDiscovered": [{
|
|
48890
49063
|
name: "deviceId",
|
|
48891
49064
|
form: "single",
|
|
@@ -48905,6 +49078,21 @@ Object.freeze({
|
|
|
48905
49078
|
form: "single",
|
|
48906
49079
|
optional: false
|
|
48907
49080
|
}],
|
|
49081
|
+
"deviceExport.applyDeviceSettingsPatch": [{
|
|
49082
|
+
name: "deviceId",
|
|
49083
|
+
form: "single",
|
|
49084
|
+
optional: false
|
|
49085
|
+
}],
|
|
49086
|
+
"deviceExport.getDeviceLiveContribution": [{
|
|
49087
|
+
name: "deviceId",
|
|
49088
|
+
form: "single",
|
|
49089
|
+
optional: false
|
|
49090
|
+
}],
|
|
49091
|
+
"deviceExport.getDeviceSettingsContribution": [{
|
|
49092
|
+
name: "deviceId",
|
|
49093
|
+
form: "single",
|
|
49094
|
+
optional: false
|
|
49095
|
+
}],
|
|
48908
49096
|
"deviceExtension.listCandidates": [{
|
|
48909
49097
|
name: "deviceId",
|
|
48910
49098
|
form: "single",
|
|
@@ -49253,6 +49441,26 @@ Object.freeze({
|
|
|
49253
49441
|
form: "single",
|
|
49254
49442
|
optional: false
|
|
49255
49443
|
}],
|
|
49444
|
+
"deviceStatus.getStatus": [{
|
|
49445
|
+
name: "deviceId",
|
|
49446
|
+
form: "single",
|
|
49447
|
+
optional: false
|
|
49448
|
+
}],
|
|
49449
|
+
"doorbell.getStatus": [{
|
|
49450
|
+
name: "deviceId",
|
|
49451
|
+
form: "single",
|
|
49452
|
+
optional: false
|
|
49453
|
+
}],
|
|
49454
|
+
"enumSensor.getStatus": [{
|
|
49455
|
+
name: "deviceId",
|
|
49456
|
+
form: "single",
|
|
49457
|
+
optional: false
|
|
49458
|
+
}],
|
|
49459
|
+
"eventEmitter.getStatus": [{
|
|
49460
|
+
name: "deviceId",
|
|
49461
|
+
form: "single",
|
|
49462
|
+
optional: false
|
|
49463
|
+
}],
|
|
49256
49464
|
"faceGallery.getFaceByTrack": [{
|
|
49257
49465
|
name: "deviceId",
|
|
49258
49466
|
form: "single",
|
|
@@ -49267,6 +49475,11 @@ Object.freeze({
|
|
|
49267
49475
|
form: "array",
|
|
49268
49476
|
optional: true
|
|
49269
49477
|
}],
|
|
49478
|
+
"fanControl.getStatus": [{
|
|
49479
|
+
name: "deviceId",
|
|
49480
|
+
form: "single",
|
|
49481
|
+
optional: false
|
|
49482
|
+
}],
|
|
49270
49483
|
"fanControl.setDirection": [{
|
|
49271
49484
|
name: "deviceId",
|
|
49272
49485
|
form: "single",
|
|
@@ -49287,6 +49500,26 @@ Object.freeze({
|
|
|
49287
49500
|
form: "single",
|
|
49288
49501
|
optional: false
|
|
49289
49502
|
}],
|
|
49503
|
+
"featureProbe.getStatus": [{
|
|
49504
|
+
name: "deviceId",
|
|
49505
|
+
form: "single",
|
|
49506
|
+
optional: false
|
|
49507
|
+
}],
|
|
49508
|
+
"flood.getStatus": [{
|
|
49509
|
+
name: "deviceId",
|
|
49510
|
+
form: "single",
|
|
49511
|
+
optional: false
|
|
49512
|
+
}],
|
|
49513
|
+
"gas.getStatus": [{
|
|
49514
|
+
name: "deviceId",
|
|
49515
|
+
form: "single",
|
|
49516
|
+
optional: false
|
|
49517
|
+
}],
|
|
49518
|
+
"humidifier.getStatus": [{
|
|
49519
|
+
name: "deviceId",
|
|
49520
|
+
form: "single",
|
|
49521
|
+
optional: false
|
|
49522
|
+
}],
|
|
49290
49523
|
"humidifier.setMode": [{
|
|
49291
49524
|
name: "deviceId",
|
|
49292
49525
|
form: "single",
|
|
@@ -49302,11 +49535,26 @@ Object.freeze({
|
|
|
49302
49535
|
form: "single",
|
|
49303
49536
|
optional: false
|
|
49304
49537
|
}],
|
|
49538
|
+
"humiditySensor.getStatus": [{
|
|
49539
|
+
name: "deviceId",
|
|
49540
|
+
form: "single",
|
|
49541
|
+
optional: false
|
|
49542
|
+
}],
|
|
49543
|
+
"image.getStatus": [{
|
|
49544
|
+
name: "deviceId",
|
|
49545
|
+
form: "single",
|
|
49546
|
+
optional: false
|
|
49547
|
+
}],
|
|
49305
49548
|
"imageSettings.getOptions": [{
|
|
49306
49549
|
name: "deviceId",
|
|
49307
49550
|
form: "single",
|
|
49308
49551
|
optional: false
|
|
49309
49552
|
}],
|
|
49553
|
+
"imageSettings.getStatus": [{
|
|
49554
|
+
name: "deviceId",
|
|
49555
|
+
form: "single",
|
|
49556
|
+
optional: false
|
|
49557
|
+
}],
|
|
49310
49558
|
"imageSettings.setSettings": [{
|
|
49311
49559
|
name: "deviceId",
|
|
49312
49560
|
form: "single",
|
|
@@ -49317,6 +49565,11 @@ Object.freeze({
|
|
|
49317
49565
|
form: "single",
|
|
49318
49566
|
optional: false
|
|
49319
49567
|
}],
|
|
49568
|
+
"intercom.getStatus": [{
|
|
49569
|
+
name: "deviceId",
|
|
49570
|
+
form: "single",
|
|
49571
|
+
optional: false
|
|
49572
|
+
}],
|
|
49320
49573
|
"intercom.handleAnswer": [{
|
|
49321
49574
|
name: "deviceId",
|
|
49322
49575
|
form: "single",
|
|
@@ -49347,6 +49600,11 @@ Object.freeze({
|
|
|
49347
49600
|
form: "single",
|
|
49348
49601
|
optional: false
|
|
49349
49602
|
}],
|
|
49603
|
+
"lawnMowerControl.getStatus": [{
|
|
49604
|
+
name: "deviceId",
|
|
49605
|
+
form: "single",
|
|
49606
|
+
optional: false
|
|
49607
|
+
}],
|
|
49350
49608
|
"lawnMowerControl.pause": [{
|
|
49351
49609
|
name: "deviceId",
|
|
49352
49610
|
form: "single",
|
|
@@ -49357,6 +49615,11 @@ Object.freeze({
|
|
|
49357
49615
|
form: "single",
|
|
49358
49616
|
optional: false
|
|
49359
49617
|
}],
|
|
49618
|
+
"lockControl.getStatus": [{
|
|
49619
|
+
name: "deviceId",
|
|
49620
|
+
form: "single",
|
|
49621
|
+
optional: false
|
|
49622
|
+
}],
|
|
49360
49623
|
"lockControl.lock": [{
|
|
49361
49624
|
name: "deviceId",
|
|
49362
49625
|
form: "single",
|
|
@@ -49372,6 +49635,11 @@ Object.freeze({
|
|
|
49372
49635
|
form: "single",
|
|
49373
49636
|
optional: false
|
|
49374
49637
|
}],
|
|
49638
|
+
"mediaPlayer.getStatus": [{
|
|
49639
|
+
name: "deviceId",
|
|
49640
|
+
form: "single",
|
|
49641
|
+
optional: false
|
|
49642
|
+
}],
|
|
49375
49643
|
"mediaPlayer.next": [{
|
|
49376
49644
|
name: "deviceId",
|
|
49377
49645
|
form: "single",
|
|
@@ -49432,6 +49700,11 @@ Object.freeze({
|
|
|
49432
49700
|
form: "single",
|
|
49433
49701
|
optional: false
|
|
49434
49702
|
}],
|
|
49703
|
+
"motion.getStatus": [{
|
|
49704
|
+
name: "deviceId",
|
|
49705
|
+
form: "single",
|
|
49706
|
+
optional: false
|
|
49707
|
+
}],
|
|
49435
49708
|
"motion.isDetected": [{
|
|
49436
49709
|
name: "deviceId",
|
|
49437
49710
|
form: "single",
|
|
@@ -49442,11 +49715,31 @@ Object.freeze({
|
|
|
49442
49715
|
form: "single",
|
|
49443
49716
|
optional: false
|
|
49444
49717
|
}],
|
|
49718
|
+
"motionDetection.applyDeviceSettingsPatch": [{
|
|
49719
|
+
name: "deviceId",
|
|
49720
|
+
form: "single",
|
|
49721
|
+
optional: false
|
|
49722
|
+
}],
|
|
49723
|
+
"motionDetection.getDeviceLiveContribution": [{
|
|
49724
|
+
name: "deviceId",
|
|
49725
|
+
form: "single",
|
|
49726
|
+
optional: false
|
|
49727
|
+
}],
|
|
49728
|
+
"motionDetection.getDeviceSettingsContribution": [{
|
|
49729
|
+
name: "deviceId",
|
|
49730
|
+
form: "single",
|
|
49731
|
+
optional: false
|
|
49732
|
+
}],
|
|
49445
49733
|
"motionDetection.removeCamera": [{
|
|
49446
49734
|
name: "deviceId",
|
|
49447
49735
|
form: "single",
|
|
49448
49736
|
optional: false
|
|
49449
49737
|
}],
|
|
49738
|
+
"motionTrigger.getStatus": [{
|
|
49739
|
+
name: "deviceId",
|
|
49740
|
+
form: "single",
|
|
49741
|
+
optional: false
|
|
49742
|
+
}],
|
|
49450
49743
|
"motionTrigger.setMotionTrigger": [{
|
|
49451
49744
|
name: "deviceId",
|
|
49452
49745
|
form: "single",
|
|
@@ -49457,6 +49750,11 @@ Object.freeze({
|
|
|
49457
49750
|
form: "single",
|
|
49458
49751
|
optional: false
|
|
49459
49752
|
}],
|
|
49753
|
+
"motionZones.getStatus": [{
|
|
49754
|
+
name: "deviceId",
|
|
49755
|
+
form: "single",
|
|
49756
|
+
optional: false
|
|
49757
|
+
}],
|
|
49460
49758
|
"motionZones.setZone": [{
|
|
49461
49759
|
name: "deviceId",
|
|
49462
49760
|
form: "single",
|
|
@@ -49467,6 +49765,11 @@ Object.freeze({
|
|
|
49467
49765
|
form: "single",
|
|
49468
49766
|
optional: false
|
|
49469
49767
|
}],
|
|
49768
|
+
"nativeObjectDetection.getStatus": [{
|
|
49769
|
+
name: "deviceId",
|
|
49770
|
+
form: "single",
|
|
49771
|
+
optional: false
|
|
49772
|
+
}],
|
|
49470
49773
|
"nativeObjectDetection.setEnabled": [{
|
|
49471
49774
|
name: "deviceId",
|
|
49472
49775
|
form: "single",
|
|
@@ -49482,6 +49785,11 @@ Object.freeze({
|
|
|
49482
49785
|
form: "single",
|
|
49483
49786
|
optional: false
|
|
49484
49787
|
}],
|
|
49788
|
+
"navigation.getStatus": [{
|
|
49789
|
+
name: "deviceId",
|
|
49790
|
+
form: "single",
|
|
49791
|
+
optional: false
|
|
49792
|
+
}],
|
|
49485
49793
|
"navigation.goToPoint": [{
|
|
49486
49794
|
name: "deviceId",
|
|
49487
49795
|
form: "single",
|
|
@@ -49527,6 +49835,11 @@ Object.freeze({
|
|
|
49527
49835
|
form: "single",
|
|
49528
49836
|
optional: false
|
|
49529
49837
|
}],
|
|
49838
|
+
"networkLink.getStatus": [{
|
|
49839
|
+
name: "deviceId",
|
|
49840
|
+
form: "single",
|
|
49841
|
+
optional: false
|
|
49842
|
+
}],
|
|
49530
49843
|
"networkQuality.getDeviceStats": [{
|
|
49531
49844
|
name: "deviceId",
|
|
49532
49845
|
form: "single",
|
|
@@ -49537,6 +49850,11 @@ Object.freeze({
|
|
|
49537
49850
|
form: "single",
|
|
49538
49851
|
optional: false
|
|
49539
49852
|
}],
|
|
49853
|
+
"notificationRules.getAlarmSensors": [{
|
|
49854
|
+
name: "deviceIds",
|
|
49855
|
+
form: "array",
|
|
49856
|
+
optional: false
|
|
49857
|
+
}],
|
|
49540
49858
|
"notificationRules.setDeviceMuted": [{
|
|
49541
49859
|
name: "deviceId",
|
|
49542
49860
|
form: "single",
|
|
@@ -49547,11 +49865,26 @@ Object.freeze({
|
|
|
49547
49865
|
form: "single",
|
|
49548
49866
|
optional: false
|
|
49549
49867
|
}],
|
|
49868
|
+
"notifier.getStatus": [{
|
|
49869
|
+
name: "deviceId",
|
|
49870
|
+
form: "single",
|
|
49871
|
+
optional: false
|
|
49872
|
+
}],
|
|
49550
49873
|
"notifier.send": [{
|
|
49551
49874
|
name: "deviceId",
|
|
49552
49875
|
form: "single",
|
|
49553
49876
|
optional: false
|
|
49554
49877
|
}],
|
|
49878
|
+
"numericSensor.getStatus": [{
|
|
49879
|
+
name: "deviceId",
|
|
49880
|
+
form: "single",
|
|
49881
|
+
optional: false
|
|
49882
|
+
}],
|
|
49883
|
+
"osd.getStatus": [{
|
|
49884
|
+
name: "deviceId",
|
|
49885
|
+
form: "single",
|
|
49886
|
+
optional: false
|
|
49887
|
+
}],
|
|
49555
49888
|
"osd.setOverlay": [{
|
|
49556
49889
|
name: "deviceId",
|
|
49557
49890
|
form: "single",
|
|
@@ -49611,6 +49944,11 @@ Object.freeze({
|
|
|
49611
49944
|
form: "single",
|
|
49612
49945
|
optional: false
|
|
49613
49946
|
}],
|
|
49947
|
+
"petFeeder.getStatus": [{
|
|
49948
|
+
name: "deviceId",
|
|
49949
|
+
form: "single",
|
|
49950
|
+
optional: false
|
|
49951
|
+
}],
|
|
49614
49952
|
"petFeeder.markFoodReplenished": [{
|
|
49615
49953
|
name: "deviceId",
|
|
49616
49954
|
form: "single",
|
|
@@ -49646,6 +49984,11 @@ Object.freeze({
|
|
|
49646
49984
|
form: "single",
|
|
49647
49985
|
optional: false
|
|
49648
49986
|
}],
|
|
49987
|
+
"pipelineAnalytics.applyDeviceSettingsPatch": [{
|
|
49988
|
+
name: "deviceId",
|
|
49989
|
+
form: "single",
|
|
49990
|
+
optional: false
|
|
49991
|
+
}],
|
|
49649
49992
|
"pipelineAnalytics.clearTrackRelation": [{
|
|
49650
49993
|
name: "deviceId",
|
|
49651
49994
|
form: "single",
|
|
@@ -49686,6 +50029,16 @@ Object.freeze({
|
|
|
49686
50029
|
form: "single",
|
|
49687
50030
|
optional: false
|
|
49688
50031
|
}],
|
|
50032
|
+
"pipelineAnalytics.getDeviceLiveContribution": [{
|
|
50033
|
+
name: "deviceId",
|
|
50034
|
+
form: "single",
|
|
50035
|
+
optional: false
|
|
50036
|
+
}],
|
|
50037
|
+
"pipelineAnalytics.getDeviceSettingsContribution": [{
|
|
50038
|
+
name: "deviceId",
|
|
50039
|
+
form: "single",
|
|
50040
|
+
optional: false
|
|
50041
|
+
}],
|
|
49689
50042
|
"pipelineAnalytics.getEventDensity": [{
|
|
49690
50043
|
name: "deviceId",
|
|
49691
50044
|
form: "single",
|
|
@@ -49901,6 +50254,11 @@ Object.freeze({
|
|
|
49901
50254
|
form: "single",
|
|
49902
50255
|
optional: true
|
|
49903
50256
|
}],
|
|
50257
|
+
"pipelineOrchestrator.applyDeviceSettingsPatch": [{
|
|
50258
|
+
name: "deviceId",
|
|
50259
|
+
form: "single",
|
|
50260
|
+
optional: false
|
|
50261
|
+
}],
|
|
49904
50262
|
"pipelineOrchestrator.assignAudio": [{
|
|
49905
50263
|
name: "deviceId",
|
|
49906
50264
|
form: "single",
|
|
@@ -49946,6 +50304,16 @@ Object.freeze({
|
|
|
49946
50304
|
form: "single",
|
|
49947
50305
|
optional: false
|
|
49948
50306
|
}],
|
|
50307
|
+
"pipelineOrchestrator.getDeviceLiveContribution": [{
|
|
50308
|
+
name: "deviceId",
|
|
50309
|
+
form: "single",
|
|
50310
|
+
optional: false
|
|
50311
|
+
}],
|
|
50312
|
+
"pipelineOrchestrator.getDeviceSettingsContribution": [{
|
|
50313
|
+
name: "deviceId",
|
|
50314
|
+
form: "single",
|
|
50315
|
+
optional: false
|
|
50316
|
+
}],
|
|
49949
50317
|
"pipelineOrchestrator.getPipelineAssignment": [{
|
|
49950
50318
|
name: "deviceId",
|
|
49951
50319
|
form: "single",
|
|
@@ -50066,11 +50434,31 @@ Object.freeze({
|
|
|
50066
50434
|
form: "single",
|
|
50067
50435
|
optional: true
|
|
50068
50436
|
}],
|
|
50437
|
+
"powerMeter.getStatus": [{
|
|
50438
|
+
name: "deviceId",
|
|
50439
|
+
form: "single",
|
|
50440
|
+
optional: false
|
|
50441
|
+
}],
|
|
50442
|
+
"presence.getStatus": [{
|
|
50443
|
+
name: "deviceId",
|
|
50444
|
+
form: "single",
|
|
50445
|
+
optional: false
|
|
50446
|
+
}],
|
|
50447
|
+
"pressureSensor.getStatus": [{
|
|
50448
|
+
name: "deviceId",
|
|
50449
|
+
form: "single",
|
|
50450
|
+
optional: false
|
|
50451
|
+
}],
|
|
50069
50452
|
"privacyMask.getOptions": [{
|
|
50070
50453
|
name: "deviceId",
|
|
50071
50454
|
form: "single",
|
|
50072
50455
|
optional: false
|
|
50073
50456
|
}],
|
|
50457
|
+
"privacyMask.getStatus": [{
|
|
50458
|
+
name: "deviceId",
|
|
50459
|
+
form: "single",
|
|
50460
|
+
optional: false
|
|
50461
|
+
}],
|
|
50074
50462
|
"privacyMask.setAudioEnabled": [{
|
|
50075
50463
|
name: "deviceId",
|
|
50076
50464
|
form: "single",
|
|
@@ -50121,6 +50509,11 @@ Object.freeze({
|
|
|
50121
50509
|
form: "single",
|
|
50122
50510
|
optional: false
|
|
50123
50511
|
}],
|
|
50512
|
+
"ptz.getStatus": [{
|
|
50513
|
+
name: "deviceId",
|
|
50514
|
+
form: "single",
|
|
50515
|
+
optional: false
|
|
50516
|
+
}],
|
|
50124
50517
|
"ptz.goHome": [{
|
|
50125
50518
|
name: "deviceId",
|
|
50126
50519
|
form: "single",
|
|
@@ -50211,6 +50604,11 @@ Object.freeze({
|
|
|
50211
50604
|
form: "single",
|
|
50212
50605
|
optional: false
|
|
50213
50606
|
}],
|
|
50607
|
+
"recordingArchive.applyDeviceSettingsPatch": [{
|
|
50608
|
+
name: "deviceId",
|
|
50609
|
+
form: "single",
|
|
50610
|
+
optional: false
|
|
50611
|
+
}],
|
|
50214
50612
|
"recordingArchive.deleteFootprint": [{
|
|
50215
50613
|
name: "deviceId",
|
|
50216
50614
|
form: "single",
|
|
@@ -50231,6 +50629,21 @@ Object.freeze({
|
|
|
50231
50629
|
form: "single",
|
|
50232
50630
|
optional: false
|
|
50233
50631
|
}],
|
|
50632
|
+
"recordingArchive.getDeviceLiveContribution": [{
|
|
50633
|
+
name: "deviceId",
|
|
50634
|
+
form: "single",
|
|
50635
|
+
optional: false
|
|
50636
|
+
}],
|
|
50637
|
+
"recordingArchive.getDeviceSettingsContribution": [{
|
|
50638
|
+
name: "deviceId",
|
|
50639
|
+
form: "single",
|
|
50640
|
+
optional: false
|
|
50641
|
+
}],
|
|
50642
|
+
"recordingArchive.getStatus": [{
|
|
50643
|
+
name: "deviceId",
|
|
50644
|
+
form: "single",
|
|
50645
|
+
optional: false
|
|
50646
|
+
}],
|
|
50234
50647
|
"recordingArchive.listOpsLog": [{
|
|
50235
50648
|
name: "deviceId",
|
|
50236
50649
|
form: "single",
|
|
@@ -50316,6 +50729,11 @@ Object.freeze({
|
|
|
50316
50729
|
form: "single",
|
|
50317
50730
|
optional: false
|
|
50318
50731
|
}],
|
|
50732
|
+
"recordingOnboard.getStatus": [{
|
|
50733
|
+
name: "deviceId",
|
|
50734
|
+
form: "single",
|
|
50735
|
+
optional: false
|
|
50736
|
+
}],
|
|
50319
50737
|
"recordingOnboard.setSettings": [{
|
|
50320
50738
|
name: "deviceId",
|
|
50321
50739
|
form: "single",
|
|
@@ -50346,6 +50764,11 @@ Object.freeze({
|
|
|
50346
50764
|
form: "single",
|
|
50347
50765
|
optional: false
|
|
50348
50766
|
}],
|
|
50767
|
+
"sceneMonitor.getStatus": [{
|
|
50768
|
+
name: "deviceId",
|
|
50769
|
+
form: "single",
|
|
50770
|
+
optional: false
|
|
50771
|
+
}],
|
|
50349
50772
|
"sceneMonitor.listScenes": [{
|
|
50350
50773
|
name: "deviceId",
|
|
50351
50774
|
form: "single",
|
|
@@ -50371,6 +50794,11 @@ Object.freeze({
|
|
|
50371
50794
|
form: "single",
|
|
50372
50795
|
optional: false
|
|
50373
50796
|
}],
|
|
50797
|
+
"scriptRunner.getStatus": [{
|
|
50798
|
+
name: "deviceId",
|
|
50799
|
+
form: "single",
|
|
50800
|
+
optional: false
|
|
50801
|
+
}],
|
|
50374
50802
|
"scriptRunner.run": [{
|
|
50375
50803
|
name: "deviceId",
|
|
50376
50804
|
form: "single",
|
|
@@ -50381,11 +50809,31 @@ Object.freeze({
|
|
|
50381
50809
|
form: "single",
|
|
50382
50810
|
optional: false
|
|
50383
50811
|
}],
|
|
50812
|
+
"smoke.getStatus": [{
|
|
50813
|
+
name: "deviceId",
|
|
50814
|
+
form: "single",
|
|
50815
|
+
optional: false
|
|
50816
|
+
}],
|
|
50817
|
+
"snapshot.applyDeviceSettingsPatch": [{
|
|
50818
|
+
name: "deviceId",
|
|
50819
|
+
form: "single",
|
|
50820
|
+
optional: false
|
|
50821
|
+
}],
|
|
50384
50822
|
"snapshot.getDebugState": [{
|
|
50385
50823
|
name: "deviceId",
|
|
50386
50824
|
form: "single",
|
|
50387
50825
|
optional: false
|
|
50388
50826
|
}],
|
|
50827
|
+
"snapshot.getDeviceLiveContribution": [{
|
|
50828
|
+
name: "deviceId",
|
|
50829
|
+
form: "single",
|
|
50830
|
+
optional: false
|
|
50831
|
+
}],
|
|
50832
|
+
"snapshot.getDeviceSettingsContribution": [{
|
|
50833
|
+
name: "deviceId",
|
|
50834
|
+
form: "single",
|
|
50835
|
+
optional: false
|
|
50836
|
+
}],
|
|
50389
50837
|
"snapshot.getSnapshot": [{
|
|
50390
50838
|
name: "deviceId",
|
|
50391
50839
|
form: "single",
|
|
@@ -50402,6 +50850,11 @@ Object.freeze({
|
|
|
50402
50850
|
form: "array",
|
|
50403
50851
|
optional: false
|
|
50404
50852
|
}],
|
|
50853
|
+
"snapshot.getStatus": [{
|
|
50854
|
+
name: "deviceId",
|
|
50855
|
+
form: "single",
|
|
50856
|
+
optional: false
|
|
50857
|
+
}],
|
|
50405
50858
|
"snapshot.invalidateCache": [{
|
|
50406
50859
|
name: "deviceId",
|
|
50407
50860
|
form: "single",
|
|
@@ -50412,6 +50865,11 @@ Object.freeze({
|
|
|
50412
50865
|
form: "single",
|
|
50413
50866
|
optional: false
|
|
50414
50867
|
}],
|
|
50868
|
+
"streamBroker.applyDeviceSettingsPatch": [{
|
|
50869
|
+
name: "deviceId",
|
|
50870
|
+
form: "single",
|
|
50871
|
+
optional: false
|
|
50872
|
+
}],
|
|
50415
50873
|
"streamBroker.assignProfile": [{
|
|
50416
50874
|
name: "deviceId",
|
|
50417
50875
|
form: "single",
|
|
@@ -50427,6 +50885,16 @@ Object.freeze({
|
|
|
50427
50885
|
form: "single",
|
|
50428
50886
|
optional: false
|
|
50429
50887
|
}],
|
|
50888
|
+
"streamBroker.getDeviceLiveContribution": [{
|
|
50889
|
+
name: "deviceId",
|
|
50890
|
+
form: "single",
|
|
50891
|
+
optional: false
|
|
50892
|
+
}],
|
|
50893
|
+
"streamBroker.getDeviceSettingsContribution": [{
|
|
50894
|
+
name: "deviceId",
|
|
50895
|
+
form: "single",
|
|
50896
|
+
optional: false
|
|
50897
|
+
}],
|
|
50430
50898
|
"streamBroker.getStreamWithCodec": [{
|
|
50431
50899
|
name: "deviceId",
|
|
50432
50900
|
form: "single",
|
|
@@ -50487,16 +50955,46 @@ Object.freeze({
|
|
|
50487
50955
|
form: "single",
|
|
50488
50956
|
optional: false
|
|
50489
50957
|
}],
|
|
50958
|
+
"streamParams.getStatus": [{
|
|
50959
|
+
name: "deviceId",
|
|
50960
|
+
form: "single",
|
|
50961
|
+
optional: false
|
|
50962
|
+
}],
|
|
50490
50963
|
"streamParams.setProfile": [{
|
|
50491
50964
|
name: "deviceId",
|
|
50492
50965
|
form: "single",
|
|
50493
50966
|
optional: false
|
|
50494
50967
|
}],
|
|
50968
|
+
"switch.getStatus": [{
|
|
50969
|
+
name: "deviceId",
|
|
50970
|
+
form: "single",
|
|
50971
|
+
optional: false
|
|
50972
|
+
}],
|
|
50495
50973
|
"switch.setState": [{
|
|
50496
50974
|
name: "deviceId",
|
|
50497
50975
|
form: "single",
|
|
50498
50976
|
optional: false
|
|
50499
50977
|
}],
|
|
50978
|
+
"tamper.getStatus": [{
|
|
50979
|
+
name: "deviceId",
|
|
50980
|
+
form: "single",
|
|
50981
|
+
optional: false
|
|
50982
|
+
}],
|
|
50983
|
+
"temperatureSensor.getStatus": [{
|
|
50984
|
+
name: "deviceId",
|
|
50985
|
+
form: "single",
|
|
50986
|
+
optional: false
|
|
50987
|
+
}],
|
|
50988
|
+
"update.getStatus": [{
|
|
50989
|
+
name: "deviceId",
|
|
50990
|
+
form: "single",
|
|
50991
|
+
optional: false
|
|
50992
|
+
}],
|
|
50993
|
+
"vacuumControl.getStatus": [{
|
|
50994
|
+
name: "deviceId",
|
|
50995
|
+
form: "single",
|
|
50996
|
+
optional: false
|
|
50997
|
+
}],
|
|
50500
50998
|
"vacuumControl.locate": [{
|
|
50501
50999
|
name: "deviceId",
|
|
50502
51000
|
form: "single",
|
|
@@ -50532,6 +51030,11 @@ Object.freeze({
|
|
|
50532
51030
|
form: "single",
|
|
50533
51031
|
optional: false
|
|
50534
51032
|
}],
|
|
51033
|
+
"valve.getStatus": [{
|
|
51034
|
+
name: "deviceId",
|
|
51035
|
+
form: "single",
|
|
51036
|
+
optional: false
|
|
51037
|
+
}],
|
|
50535
51038
|
"valve.open": [{
|
|
50536
51039
|
name: "deviceId",
|
|
50537
51040
|
form: "single",
|
|
@@ -50547,6 +51050,11 @@ Object.freeze({
|
|
|
50547
51050
|
form: "single",
|
|
50548
51051
|
optional: false
|
|
50549
51052
|
}],
|
|
51053
|
+
"vibration.getStatus": [{
|
|
51054
|
+
name: "deviceId",
|
|
51055
|
+
form: "single",
|
|
51056
|
+
optional: false
|
|
51057
|
+
}],
|
|
50550
51058
|
"videoclips.dialClipStream": [{
|
|
50551
51059
|
name: "deviceId",
|
|
50552
51060
|
form: "single",
|
|
@@ -50582,6 +51090,11 @@ Object.freeze({
|
|
|
50582
51090
|
form: "single",
|
|
50583
51091
|
optional: false
|
|
50584
51092
|
}],
|
|
51093
|
+
"waterHeater.getStatus": [{
|
|
51094
|
+
name: "deviceId",
|
|
51095
|
+
form: "single",
|
|
51096
|
+
optional: false
|
|
51097
|
+
}],
|
|
50585
51098
|
"waterHeater.setAway": [{
|
|
50586
51099
|
name: "deviceId",
|
|
50587
51100
|
form: "single",
|
|
@@ -50597,6 +51110,11 @@ Object.freeze({
|
|
|
50597
51110
|
form: "single",
|
|
50598
51111
|
optional: false
|
|
50599
51112
|
}],
|
|
51113
|
+
"weather.getStatus": [{
|
|
51114
|
+
name: "deviceId",
|
|
51115
|
+
form: "single",
|
|
51116
|
+
optional: false
|
|
51117
|
+
}],
|
|
50600
51118
|
"webrtcSession.addIceCandidate": [{
|
|
50601
51119
|
name: "deviceId",
|
|
50602
51120
|
form: "single",
|
|
@@ -51384,7 +51902,7 @@ var PreviewTextField = string().max(200);
|
|
|
51384
51902
|
* Whether the notification's preview is a STILL or a short animation.
|
|
51385
51903
|
*
|
|
51386
51904
|
* The operator's ask, verbatim: *"inviato come gif o video (come per le altre
|
|
51387
|
-
* rule)"* — the other rules already offer an animated preview, and a ten-hour
|
|
51905
|
+
* rule)"* [sent as a gif or video (as for the other rules)] — the other rules already offer an animated preview, and a ten-hour
|
|
51388
51906
|
* night reads better as three seconds of motion than as one frame of it. Both
|
|
51389
51907
|
* modes get the SAME treatment (blurred frame, large centred title); `'gif'`
|
|
51390
51908
|
* simply applies it to a dozen frames sampled across the render and assembles
|