@camstack/addon-provider-homematic 1.2.93 → 1.2.94

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 CHANGED
@@ -19990,7 +19990,17 @@ var EventDensityBucketSchema = object({
19990
19990
  bucketStart: number(),
19991
19991
  motion: number().int(),
19992
19992
  object: number().int(),
19993
- audio: number().int()
19993
+ audio: number().int(),
19994
+ /**
19995
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
19996
+ * as opposed to `audio`, which is their COUNT (D431).
19997
+ *
19998
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
19999
+ * measured", which is not the same claim as silence, and a lane that cannot
20000
+ * tell them apart paints a quiet hour at full scale — which is exactly what
20001
+ * the count-on-a-level-meter did.
20002
+ */
20003
+ audioDbfs: number().optional()
19994
20004
  });
19995
20005
  /**
19996
20006
  * One camera's row in a `getEventDensityBatch` answer.
@@ -30005,7 +30015,23 @@ var RecordingRangeSchema = object({
30005
30015
  });
30006
30016
  var RecordingAvailabilitySchema = object({
30007
30017
  deviceId: number(),
30008
- ranges: array(RecordingRangeSchema)
30018
+ ranges: array(RecordingRangeSchema),
30019
+ /**
30020
+ * Every profile this camera has footage in — not only the one `ranges`
30021
+ * describes (D433).
30022
+ *
30023
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
30024
+ * and enumerating all of them triples the directory reads for a bar that
30025
+ * would look identical. But the answer used to say nothing about that, so a
30026
+ * caller asking "what can I export?" read the single preferred profile as
30027
+ * the only one that exists — on this deployment every camera records `high`
30028
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
30029
+ * UI could not see it.
30030
+ *
30031
+ * Cheap: it is the same shallow directory read the profile CHOICE already
30032
+ * makes. Ask for a specific profile's ranges with the `profile` input.
30033
+ */
30034
+ profilesWithFootage: array(string())
30009
30035
  });
30010
30036
  var RecordingDaysSchema = object({
30011
30037
  deviceId: number(),
@@ -30031,7 +30057,11 @@ var RecordingDaysSchema = object({
30031
30057
  var RecordingAvailabilityForDeviceSchema = object({
30032
30058
  deviceId: number(),
30033
30059
  read: _enum(["read", "unreadable"]),
30034
- ranges: array(RecordingRangeSchema).readonly()
30060
+ ranges: array(RecordingRangeSchema).readonly(),
30061
+ /** Same field, same meaning, as the singular answer (D433). A row that
30062
+ * dropped it would tell a grid caller the archive holds one profile.
30063
+ * Empty on an `'unreadable'` row: nobody looked. */
30064
+ profilesWithFootage: array(string()).readonly()
30035
30065
  });
30036
30066
  /**
30037
30067
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -30321,7 +30351,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
30321
30351
  method(object({
30322
30352
  deviceId: number(),
30323
30353
  fromMs: number(),
30324
- toMs: number()
30354
+ toMs: number(),
30355
+ /**
30356
+ * Answer for THIS profile instead of the preferred one (D433). Absent
30357
+ * keeps the timeline's behaviour — one bar, one profile, one set of
30358
+ * reads. `profilesWithFootage` on the answer says what may be asked
30359
+ * for.
30360
+ */
30361
+ profile: string().optional()
30325
30362
  }), RecordingAvailabilitySchema, {
30326
30363
  kind: "query",
30327
30364
  auth: "protected"
package/dist/addon.mjs CHANGED
@@ -19991,7 +19991,17 @@ var EventDensityBucketSchema = object({
19991
19991
  bucketStart: number(),
19992
19992
  motion: number().int(),
19993
19993
  object: number().int(),
19994
- audio: number().int()
19994
+ audio: number().int(),
19995
+ /**
19996
+ * Energy-weighted mean dBFS of the audio events in this bucket — the LEVEL,
19997
+ * as opposed to `audio`, which is their COUNT (D431).
19998
+ *
19999
+ * ABSENT when the bucket holds no audio event. Absence means "nothing was
20000
+ * measured", which is not the same claim as silence, and a lane that cannot
20001
+ * tell them apart paints a quiet hour at full scale — which is exactly what
20002
+ * the count-on-a-level-meter did.
20003
+ */
20004
+ audioDbfs: number().optional()
19995
20005
  });
19996
20006
  /**
19997
20007
  * One camera's row in a `getEventDensityBatch` answer.
@@ -30006,7 +30016,23 @@ var RecordingRangeSchema = object({
30006
30016
  });
30007
30017
  var RecordingAvailabilitySchema = object({
30008
30018
  deviceId: number(),
30009
- ranges: array(RecordingRangeSchema)
30019
+ ranges: array(RecordingRangeSchema),
30020
+ /**
30021
+ * Every profile this camera has footage in — not only the one `ranges`
30022
+ * describes (D433).
30023
+ *
30024
+ * `ranges` answers for ONE profile by design: the timeline is a single bar,
30025
+ * and enumerating all of them triples the directory reads for a bar that
30026
+ * would look identical. But the answer used to say nothing about that, so a
30027
+ * caller asking "what can I export?" read the single preferred profile as
30028
+ * the only one that exists — on this deployment every camera records `high`
30029
+ * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
30030
+ * UI could not see it.
30031
+ *
30032
+ * Cheap: it is the same shallow directory read the profile CHOICE already
30033
+ * makes. Ask for a specific profile's ranges with the `profile` input.
30034
+ */
30035
+ profilesWithFootage: array(string())
30010
30036
  });
30011
30037
  var RecordingDaysSchema = object({
30012
30038
  deviceId: number(),
@@ -30032,7 +30058,11 @@ var RecordingDaysSchema = object({
30032
30058
  var RecordingAvailabilityForDeviceSchema = object({
30033
30059
  deviceId: number(),
30034
30060
  read: _enum(["read", "unreadable"]),
30035
- ranges: array(RecordingRangeSchema).readonly()
30061
+ ranges: array(RecordingRangeSchema).readonly(),
30062
+ /** Same field, same meaning, as the singular answer (D433). A row that
30063
+ * dropped it would tell a grid caller the archive holds one profile.
30064
+ * Empty on an `'unreadable'` row: nobody looked. */
30065
+ profilesWithFootage: array(string()).readonly()
30036
30066
  });
30037
30067
  /**
30038
30068
  * One camera's row in a `getDaysWithRecordingsBatch` answer. Same rule as
@@ -30322,7 +30352,14 @@ var ReadWindowBytesResultSchema = discriminatedUnion("kind", [object({
30322
30352
  method(object({
30323
30353
  deviceId: number(),
30324
30354
  fromMs: number(),
30325
- toMs: number()
30355
+ toMs: number(),
30356
+ /**
30357
+ * Answer for THIS profile instead of the preferred one (D433). Absent
30358
+ * keeps the timeline's behaviour — one bar, one profile, one set of
30359
+ * reads. `profilesWithFootage` on the answer says what may be asked
30360
+ * for.
30361
+ */
30362
+ profile: string().optional()
30326
30363
  }), RecordingAvailabilitySchema, {
30327
30364
  kind: "query",
30328
30365
  auth: "protected"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-homematic",
3
- "version": "1.2.93",
3
+ "version": "1.2.94",
4
4
  "description": "Homematic / HomematicIP (CCU3 / RaspberryMatic) device-provider addon for CamStack — wraps the nodehomematic library",
5
5
  "keywords": [
6
6
  "camstack",