@camstack/addon-provider-velux 0.2.140 → 0.2.142

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
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- //#region ../types/dist/event-category-DOl51-Ij.mjs
2
+ //#region ../types/dist/event-category-BfJwUd2S.mjs
3
3
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4
4
  EventCategory["SystemBoot"] = "system.boot";
5
5
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -316,6 +316,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
316
316
  */
317
317
  EventCategory["PipelineDetectionBlind"] = "pipeline.detection-blind";
318
318
  /**
319
+ * A camera's motion source has fired constantly with no subject for an hour
320
+ * (motion duty or session count over the bar, zero detections) — it is not
321
+ * blind, its motion zones or sensitivity want tuning (D907). Paired with
322
+ * {@link PipelineMotionCalm}.
323
+ */
324
+ EventCategory["PipelineMotionNoisy"] = "pipeline.motion-noisy";
325
+ /** The recovery edge of {@link PipelineMotionNoisy}: the motion fell back, or a detection arrived. */
326
+ EventCategory["PipelineMotionCalm"] = "pipeline.motion-calm";
327
+ /**
319
328
  * Per-camera pipeline config was mutated by the orchestrator
320
329
  * (3-level settings change via `setAgentAddonDefaults` /
321
330
  * `setCameraStepToggle` / `setCameraPipelineForAgent` or a
@@ -687,6 +696,14 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
687
696
  EventCategory["BackupRestored"] = "backup.restored";
688
697
  EventCategory["NotificationDispatched"] = "notification.dispatched";
689
698
  EventCategory["NotificationFailed"] = "notification.failed";
699
+ /**
700
+ * A notification rule that cannot work (D905): its stored row does not load,
701
+ * or it still names a device / delivery target the prune CONFIRMED deleted.
702
+ * One edge per rule per distinct set of reasons; never on an unanswered read.
703
+ */
704
+ EventCategory["NotificationRuleBroken"] = "notification.rule-broken";
705
+ /** The clear of {@link NotificationRuleBroken}: the rule loads and names nothing deleted. */
706
+ EventCategory["NotificationRuleRepaired"] = "notification.rule-repaired";
690
707
  EventCategory["DeviceUpdated"] = "device.updated";
691
708
  /**
692
709
  * Transport-level connectivity. Emitted by the device driver when
@@ -5414,7 +5431,7 @@ var ZodIssueCode = {
5414
5431
  var ZodFirstPartyTypeKind;
5415
5432
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5416
5433
  //#endregion
5417
- //#region ../types/dist/sleep-_sV1BE2f.mjs
5434
+ //#region ../types/dist/sleep-DJFUfKvA.mjs
5418
5435
  /**
5419
5436
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5420
5437
  * window to float samples (D455).
@@ -7943,7 +7960,7 @@ var EntryDescriptorSchema = object({
7943
7960
  /** JSON Schema of the entry body; `secret: true` marks a password field. */
7944
7961
  fields: record(string(), unknown())
7945
7962
  }).strict();
7946
- /** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
7963
+ /** What crosses the wire from an addon: JSON only, no Zod. An unknown key is refused. */
7947
7964
  var RecordKindDeclarationSchema = object({
7948
7965
  database: _enum(RECORD_DATABASES).default("settings"),
7949
7966
  class: _enum(RECORD_CLASSES),
@@ -7962,14 +7979,6 @@ var RecordKindDeclarationSchema = object({
7962
7979
  secretPaths: array(string().min(1)).default([]),
7963
7980
  /** The id key of each array that carries a secret (`{ headers: 'name' }`). */
7964
7981
  secretArrayKeys: record(string(), string()).default({}),
7965
- /**
7966
- * RETIRED (D900): the legacy table a kind adopted from during the records
7967
- * migration. Nothing declares it any more and nothing reads it; the schema
7968
- * still ACCEPTS it because the catalog rows the migration wrote carry it
7969
- * (an orphaned kind is never redeclared) and an addon built before the
7970
- * removal still sends it. Never set it.
7971
- */
7972
- adoptsFrom: string().min(1).optional(),
7973
7982
  /** Kinds that must agree through `transact` sit in one file under one family name. */
7974
7983
  transactFamily: string().min(1).optional(),
7975
7984
  entry: EntryDescriptorSchema.optional()
@@ -12661,17 +12670,6 @@ object({
12661
12670
  createdAt: number(),
12662
12671
  updatedAt: number()
12663
12672
  });
12664
- object({
12665
- id: string(),
12666
- label: string(),
12667
- isAdmin: boolean().default(false),
12668
- allowedProviders: AllowedProviderSchema,
12669
- allowedDevices: AllowedDevicesSchema,
12670
- tokenHash: string(),
12671
- tokenPrefix: string(),
12672
- createdAt: number(),
12673
- lastUsedAt: number().optional()
12674
- });
12675
12673
  object({
12676
12674
  id: string(),
12677
12675
  userId: string(),
@@ -16653,16 +16651,36 @@ var RecordKindStateSchema = _enum([
16653
16651
  var DeclareKindResultSchema = object({
16654
16652
  kindId: number().int(),
16655
16653
  state: RecordKindStateSchema,
16656
- createdIndexes: array(string()),
16657
- /**
16658
- * RETIRED (D900): always `null`. It carried the records-migration boot guard;
16659
- * it stays on the wire, null, because an addon built before the removal reads
16660
- * an ABSENT field as "adoption pending" and refuses to start.
16661
- */
16662
- adoptionPending: _null()
16654
+ createdIndexes: array(string())
16663
16655
  });
16664
16656
  /** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
16665
16657
  var SecretRefsList = array(string());
16658
+ /**
16659
+ * One op of a `transact`: the single-row writes, each on a kind of the caller.
16660
+ * All ops of one call share ONE database file and ONE `transactFamily`.
16661
+ */
16662
+ var RecordTransactOpSchema = discriminatedUnion("op", [
16663
+ object({
16664
+ op: literal("put"),
16665
+ kind: RecordKindNameSchema,
16666
+ record: RecordInputSchema,
16667
+ ifRev: number().int().min(0).optional()
16668
+ }),
16669
+ object({
16670
+ op: literal("patch"),
16671
+ kind: RecordKindNameSchema,
16672
+ id: RecordIdSchema,
16673
+ data: RecordBodySchema,
16674
+ at: number().int().nullable().optional(),
16675
+ expiresAt: number().int().nullable().optional(),
16676
+ ifRev: number().int().min(1).optional()
16677
+ }),
16678
+ object({
16679
+ op: literal("delete"),
16680
+ kind: RecordKindNameSchema,
16681
+ id: RecordIdSchema
16682
+ })
16683
+ ]);
16666
16684
  var RecordSecretRefsSchema = record(string(), record(string(), string()));
16667
16685
  method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
16668
16686
  kind: "mutation",
@@ -16769,6 +16787,16 @@ method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema)
16769
16787
  }), {
16770
16788
  kind: "mutation",
16771
16789
  auth: "admin"
16790
+ }), method(object({ ops: array(RecordTransactOpSchema).min(1).max(RECORD_BATCH_MAX) }), object({
16791
+ results: array(object({
16792
+ rev: number().int().nullable(),
16793
+ deleted: boolean()
16794
+ })),
16795
+ releasedRefs: SecretRefsList,
16796
+ secretRefs: SecretRefsList
16797
+ }), {
16798
+ kind: "mutation",
16799
+ auth: "admin"
16772
16800
  }), method(object({
16773
16801
  deviceId: number().int(),
16774
16802
  kinds: array(RecordKindNameSchema).optional()
@@ -42476,9 +42504,13 @@ var NcSystemEventKindSchema = _enum([
42476
42504
  "node-updating",
42477
42505
  "node-inference-unavailable",
42478
42506
  "detection-blind",
42507
+ "motion-noisy",
42508
+ "motion-calm",
42479
42509
  "recording-stalled",
42480
42510
  "recording-healthy",
42481
42511
  "recording-degraded",
42512
+ "device-attention-required",
42513
+ "device-attention-resolved",
42482
42514
  "storage-location-low",
42483
42515
  "storage-location-critical",
42484
42516
  "storage-location-ok",
@@ -42502,6 +42534,8 @@ var NcSystemEventKindSchema = _enum([
42502
42534
  "alert-critical",
42503
42535
  "alert-error",
42504
42536
  "alert-critical-resolved",
42537
+ "rule-broken",
42538
+ "rule-repaired",
42505
42539
  "camera-online",
42506
42540
  "camera-offline",
42507
42541
  "camera-disabled",
@@ -55800,6 +55834,16 @@ var DishwasherStatusSchema = object({
55800
55834
  powerState: string().nullable(),
55801
55835
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
55802
55836
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55837
+ /**
55838
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
55839
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
55840
+ * when none is reported. A cleared reminder is not an unknown one.
55841
+ */
55842
+ filterCleaningDue: boolean().nullable(),
55843
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
55844
+ machineCareDue: boolean().nullable(),
55845
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
55846
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
55803
55847
  /** Option states: null when the appliance does not expose the option or has not said. */
55804
55848
  halfLoad: boolean().nullable(),
55805
55849
  hygienePlus: boolean().nullable(),
@@ -64450,16 +64494,6 @@ var UpdateUserInputSchema = object({
64450
64494
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
64451
64495
  scopes: array(TokenScopeSchema).optional()
64452
64496
  });
64453
- var ApiKeySummarySchema = object({
64454
- id: string(),
64455
- label: string(),
64456
- isAdmin: boolean().default(false),
64457
- allowedProviders: union([array(string()), literal("*")]).optional(),
64458
- allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
64459
- tokenPrefix: string(),
64460
- createdAt: number(),
64461
- lastUsedAt: number().optional()
64462
- });
64463
64497
  var OauthSessionSummarySchema = object({
64464
64498
  id: string(),
64465
64499
  userId: string(),
@@ -64481,8 +64515,7 @@ var TotpStatusSchema = object({
64481
64515
  confirmedAt: number().nullable()
64482
64516
  });
64483
64517
  /**
64484
- * user-management — singleton capability for user accounts and the
64485
- * legacy API-key rows.
64518
+ * user-management — singleton capability for user accounts.
64486
64519
  *
64487
64520
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
64488
64521
  * — the subset check on `setUserScopes` is moot
@@ -64538,10 +64571,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
64538
64571
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
64539
64572
  kind: "mutation",
64540
64573
  access: "view"
64541
- }), method(_void(), array(ApiKeySummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: literal(true) }), {
64542
- kind: "mutation",
64543
- auth: "admin",
64544
- access: "delete"
64545
64574
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
64546
64575
  kind: "mutation",
64547
64576
  auth: "admin",
@@ -73997,6 +74026,12 @@ Object.freeze({
73997
74026
  addonId: null,
73998
74027
  access: "view"
73999
74028
  },
74029
+ "records.transact": {
74030
+ capName: "records",
74031
+ capScope: "system",
74032
+ addonId: null,
74033
+ access: "create"
74034
+ },
74000
74035
  "sceneMonitor.captureReference": {
74001
74036
  capName: "scene-monitor",
74002
74037
  capScope: "device",
@@ -75329,12 +75364,6 @@ Object.freeze({
75329
75364
  addonId: null,
75330
75365
  access: "view"
75331
75366
  },
75332
- "userManagement.listApiKeys": {
75333
- capName: "user-management",
75334
- capScope: "system",
75335
- addonId: null,
75336
- access: "view"
75337
- },
75338
75367
  "userManagement.listExternalIdentities": {
75339
75368
  capName: "user-management",
75340
75369
  capScope: "system",
@@ -75389,12 +75418,6 @@ Object.freeze({
75389
75418
  addonId: null,
75390
75419
  access: "create"
75391
75420
  },
75392
- "userManagement.revokeApiKey": {
75393
- capName: "user-management",
75394
- capScope: "system",
75395
- addonId: null,
75396
- access: "delete"
75397
- },
75398
75421
  "userManagement.revokeOauthSession": {
75399
75422
  capName: "user-management",
75400
75423
  capScope: "system",
@@ -78759,9 +78782,13 @@ new Map(Object.entries({
78759
78782
  "stream-online": "device-events",
78760
78783
  "stream-offline": "device-events",
78761
78784
  "detection-blind": "device-events",
78785
+ "motion-noisy": "device-events",
78786
+ "motion-calm": "device-events",
78762
78787
  "recording-stalled": "device-events",
78763
78788
  "recording-healthy": "device-events",
78764
78789
  "recording-degraded": "device-events",
78790
+ "device-attention-required": "device-events",
78791
+ "device-attention-resolved": "device-events",
78765
78792
  "node-online": "system",
78766
78793
  "node-offline": "system",
78767
78794
  "node-restarting": "system",
@@ -78778,6 +78805,8 @@ new Map(Object.entries({
78778
78805
  "alert-critical": "system",
78779
78806
  "alert-error": "system",
78780
78807
  "alert-critical-resolved": "system",
78808
+ "rule-broken": "system",
78809
+ "rule-repaired": "system",
78781
78810
  "storage-location-low": "system",
78782
78811
  "storage-location-critical": "system",
78783
78812
  "storage-location-ok": "system",
@@ -78842,6 +78871,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78842
78871
  label: "Detecting nothing",
78843
78872
  kinds: ["detection-blind"]
78844
78873
  },
78874
+ {
78875
+ id: "motion-noise",
78876
+ family: "device-events",
78877
+ label: "Motion without a subject",
78878
+ kinds: ["motion-noisy", "motion-calm"]
78879
+ },
78845
78880
  {
78846
78881
  id: "recording",
78847
78882
  family: "device-events",
@@ -78852,6 +78887,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78852
78887
  "recording-degraded"
78853
78888
  ]
78854
78889
  },
78890
+ {
78891
+ id: "device-attention",
78892
+ family: "device-events",
78893
+ label: "Needs attention",
78894
+ kinds: ["device-attention-required", "device-attention-resolved"]
78895
+ },
78855
78896
  {
78856
78897
  id: "nodes",
78857
78898
  family: "system",
@@ -78912,6 +78953,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78912
78953
  "alert-critical-resolved"
78913
78954
  ]
78914
78955
  },
78956
+ {
78957
+ id: "rule-health",
78958
+ family: "system",
78959
+ label: "Notification rules",
78960
+ kinds: ["rule-broken", "rule-repaired"]
78961
+ },
78915
78962
  {
78916
78963
  id: "alarm",
78917
78964
  family: "alarm",
@@ -78985,6 +79032,7 @@ var ALERT_EPISODE = [
78985
79032
  "alert-error",
78986
79033
  "alert-critical-resolved"
78987
79034
  ];
79035
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
78988
79036
  var UPDATES = [
78989
79037
  "addon-update-available",
78990
79038
  "server-update-available",
@@ -79014,9 +79062,12 @@ var DEVICE_EVENTS = [
79014
79062
  "stream-online",
79015
79063
  "stream-offline",
79016
79064
  "detection-blind",
79065
+ "motion-noisy",
79066
+ "motion-calm",
79017
79067
  "recording-stalled",
79018
79068
  "recording-healthy",
79019
79069
  "recording-degraded",
79070
+ ...DEVICE_ATTENTION,
79020
79071
  ...ALARM
79021
79072
  ];
79022
79073
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -79184,7 +79235,13 @@ var STATE_SUMMARY_VARS = [
79184
79235
  [...RULE_TEXT],
79185
79236
  [...RULE_TEXT],
79186
79237
  [...RULE_TEXT],
79187
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79238
+ [...RULE_TEXT],
79239
+ [...RULE_TEXT],
79240
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79241
+ [...RULE_TEXT],
79242
+ [...RULE_TEXT],
79243
+ [...RULE_TEXT],
79244
+ [...RULE_TEXT],
79188
79245
  [...RULE_TEXT],
79189
79246
  [...RULE_TEXT],
79190
79247
  [...RULE_TEXT],
@@ -79202,11 +79259,11 @@ var STATE_SUMMARY_VARS = [
79202
79259
  [...RULE_TEXT],
79203
79260
  [...RULE_TEXT],
79204
79261
  [...RULE_TEXT],
79262
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79205
79263
  ([...RULE_TEXT], [...ALERT_EPISODE]),
79264
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79206
79265
  ([...RULE_TEXT], [...ALERT_EPISODE]),
79207
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79208
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79209
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79266
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79210
79267
  [...RULE_TEXT],
79211
79268
  [...RULE_TEXT],
79212
79269
  [...RULE_TEXT],
@@ -79227,6 +79284,125 @@ var STATE_SUMMARY_VARS = [
79227
79284
  [...RULE_TEXT],
79228
79285
  ...STATE_SUMMARY_VARS
79229
79286
  ];
79287
+ new Map([
79288
+ {
79289
+ id: "device-connectivity",
79290
+ family: "device-events",
79291
+ label: "Device connectivity (offline / back online)",
79292
+ bad: ["device-offline"],
79293
+ recovery: ["device-online"],
79294
+ snapshotLabel: "Devices offline now",
79295
+ snapshotSection: "device-state"
79296
+ },
79297
+ {
79298
+ id: "device-switch",
79299
+ family: "device-events",
79300
+ label: "Device switched off / back on",
79301
+ bad: ["device-disabled"],
79302
+ recovery: ["device-enabled"],
79303
+ snapshotLabel: "Devices switched off now",
79304
+ snapshotSection: "device-state"
79305
+ },
79306
+ {
79307
+ id: "stream-connectivity",
79308
+ family: "device-events",
79309
+ label: "Stream connectivity (offline / back online)",
79310
+ bad: ["stream-offline"],
79311
+ recovery: ["stream-online"],
79312
+ snapshotLabel: "Streams offline now",
79313
+ snapshotSection: "streams"
79314
+ },
79315
+ {
79316
+ id: "battery",
79317
+ family: "device-events",
79318
+ label: "Battery (low / back to normal)",
79319
+ bad: ["device-battery-low"],
79320
+ recovery: ["device-battery-normal"],
79321
+ snapshotLabel: "Batteries low now",
79322
+ snapshotSection: "battery"
79323
+ },
79324
+ {
79325
+ id: "consumables",
79326
+ family: "device-events",
79327
+ label: "Consumables (low / replaced)",
79328
+ bad: ["device-consumable-low"],
79329
+ recovery: ["device-consumable-normal"],
79330
+ snapshotLabel: "Consumables low now",
79331
+ snapshotSection: "consumables"
79332
+ },
79333
+ {
79334
+ id: "tanks",
79335
+ family: "device-events",
79336
+ label: "Tanks (low or full / back to normal)",
79337
+ bad: ["device-tank-low", "device-tank-full"],
79338
+ recovery: ["device-tank-normal"],
79339
+ snapshotLabel: "Tanks low or full now",
79340
+ snapshotSection: "tanks"
79341
+ },
79342
+ {
79343
+ id: "motion-noise",
79344
+ family: "device-events",
79345
+ label: "Motion without a subject (constant / calm again)",
79346
+ bad: ["motion-noisy"],
79347
+ recovery: ["motion-calm"],
79348
+ snapshotLabel: "Cameras with constant motion now",
79349
+ snapshotSection: null
79350
+ },
79351
+ {
79352
+ id: "recording-health",
79353
+ family: "device-events",
79354
+ label: "Recording health (stalled or degraded / recording again)",
79355
+ bad: ["recording-stalled", "recording-degraded"],
79356
+ recovery: ["recording-healthy"],
79357
+ snapshotLabel: "Recordings stalled now",
79358
+ snapshotSection: null
79359
+ },
79360
+ {
79361
+ id: "device-attention",
79362
+ family: "device-events",
79363
+ label: "Device needs attention (raised / resolved)",
79364
+ bad: ["device-attention-required"],
79365
+ recovery: ["device-attention-resolved"],
79366
+ snapshotLabel: "Devices needing attention now",
79367
+ snapshotSection: null
79368
+ },
79369
+ {
79370
+ id: "node-connectivity",
79371
+ family: "system",
79372
+ label: "Node connectivity (offline / back online)",
79373
+ bad: ["node-offline"],
79374
+ recovery: ["node-online"],
79375
+ snapshotLabel: "Nodes offline now",
79376
+ snapshotSection: "nodes"
79377
+ },
79378
+ {
79379
+ id: "storage-space",
79380
+ family: "system",
79381
+ label: "Storage space (low or critical / ok again)",
79382
+ bad: ["storage-location-low", "storage-location-critical"],
79383
+ recovery: ["storage-location-ok"],
79384
+ snapshotLabel: "Storage locations low now",
79385
+ snapshotSection: null
79386
+ },
79387
+ {
79388
+ id: "critical-alerts",
79389
+ family: "system",
79390
+ label: "Critical alerts (raised / resolved)",
79391
+ bad: ["alert-critical"],
79392
+ recovery: ["alert-critical-resolved"],
79393
+ snapshotLabel: "Critical alerts open now",
79394
+ snapshotSection: null
79395
+ },
79396
+ {
79397
+ id: "rule-health",
79398
+ family: "system",
79399
+ label: "Rule health (broken / repaired)",
79400
+ bad: ["rule-broken"],
79401
+ recovery: ["rule-repaired"],
79402
+ snapshotLabel: "Notification rules broken now",
79403
+ snapshotSection: null
79404
+ }
79405
+ ].flatMap((spec) => [...spec.bad, ...spec.recovery].map((kind) => [kind, spec])));
79230
79406
  new Set([
79231
79407
  "disarmed",
79232
79408
  "armed_home",
@@ -79831,7 +80007,7 @@ function buildConnectionFormSchema() {
79831
80007
  id: "connection",
79832
80008
  title: "Connection",
79833
80009
  titleKey: "provider-velux:connection.s_connection.title",
79834
- description: "CamStack connects to the KLF-200 over the local network and polls its actuator nodes. The password is the WiFi/web password printed on the back of the unit.",
80010
+ description: "The password is the WiFi/web password printed on the back of the unit.",
79835
80011
  descriptionKey: "provider-velux:connection.s_connection.description",
79836
80012
  columns: 2,
79837
80013
  fields: [
package/dist/addon.mjs CHANGED
@@ -1,4 +1,4 @@
1
- //#region ../types/dist/event-category-DOl51-Ij.mjs
1
+ //#region ../types/dist/event-category-BfJwUd2S.mjs
2
2
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
3
3
  EventCategory["SystemBoot"] = "system.boot";
4
4
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -315,6 +315,15 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
315
315
  */
316
316
  EventCategory["PipelineDetectionBlind"] = "pipeline.detection-blind";
317
317
  /**
318
+ * A camera's motion source has fired constantly with no subject for an hour
319
+ * (motion duty or session count over the bar, zero detections) — it is not
320
+ * blind, its motion zones or sensitivity want tuning (D907). Paired with
321
+ * {@link PipelineMotionCalm}.
322
+ */
323
+ EventCategory["PipelineMotionNoisy"] = "pipeline.motion-noisy";
324
+ /** The recovery edge of {@link PipelineMotionNoisy}: the motion fell back, or a detection arrived. */
325
+ EventCategory["PipelineMotionCalm"] = "pipeline.motion-calm";
326
+ /**
318
327
  * Per-camera pipeline config was mutated by the orchestrator
319
328
  * (3-level settings change via `setAgentAddonDefaults` /
320
329
  * `setCameraStepToggle` / `setCameraPipelineForAgent` or a
@@ -686,6 +695,14 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
686
695
  EventCategory["BackupRestored"] = "backup.restored";
687
696
  EventCategory["NotificationDispatched"] = "notification.dispatched";
688
697
  EventCategory["NotificationFailed"] = "notification.failed";
698
+ /**
699
+ * A notification rule that cannot work (D905): its stored row does not load,
700
+ * or it still names a device / delivery target the prune CONFIRMED deleted.
701
+ * One edge per rule per distinct set of reasons; never on an unanswered read.
702
+ */
703
+ EventCategory["NotificationRuleBroken"] = "notification.rule-broken";
704
+ /** The clear of {@link NotificationRuleBroken}: the rule loads and names nothing deleted. */
705
+ EventCategory["NotificationRuleRepaired"] = "notification.rule-repaired";
689
706
  EventCategory["DeviceUpdated"] = "device.updated";
690
707
  /**
691
708
  * Transport-level connectivity. Emitted by the device driver when
@@ -5413,7 +5430,7 @@ var ZodIssueCode = {
5413
5430
  var ZodFirstPartyTypeKind;
5414
5431
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5415
5432
  //#endregion
5416
- //#region ../types/dist/sleep-_sV1BE2f.mjs
5433
+ //#region ../types/dist/sleep-DJFUfKvA.mjs
5417
5434
  /**
5418
5435
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5419
5436
  * window to float samples (D455).
@@ -7942,7 +7959,7 @@ var EntryDescriptorSchema = object({
7942
7959
  /** JSON Schema of the entry body; `secret: true` marks a password field. */
7943
7960
  fields: record(string(), unknown())
7944
7961
  }).strict();
7945
- /** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
7962
+ /** What crosses the wire from an addon: JSON only, no Zod. An unknown key is refused. */
7946
7963
  var RecordKindDeclarationSchema = object({
7947
7964
  database: _enum(RECORD_DATABASES).default("settings"),
7948
7965
  class: _enum(RECORD_CLASSES),
@@ -7961,14 +7978,6 @@ var RecordKindDeclarationSchema = object({
7961
7978
  secretPaths: array(string().min(1)).default([]),
7962
7979
  /** The id key of each array that carries a secret (`{ headers: 'name' }`). */
7963
7980
  secretArrayKeys: record(string(), string()).default({}),
7964
- /**
7965
- * RETIRED (D900): the legacy table a kind adopted from during the records
7966
- * migration. Nothing declares it any more and nothing reads it; the schema
7967
- * still ACCEPTS it because the catalog rows the migration wrote carry it
7968
- * (an orphaned kind is never redeclared) and an addon built before the
7969
- * removal still sends it. Never set it.
7970
- */
7971
- adoptsFrom: string().min(1).optional(),
7972
7981
  /** Kinds that must agree through `transact` sit in one file under one family name. */
7973
7982
  transactFamily: string().min(1).optional(),
7974
7983
  entry: EntryDescriptorSchema.optional()
@@ -12660,17 +12669,6 @@ object({
12660
12669
  createdAt: number(),
12661
12670
  updatedAt: number()
12662
12671
  });
12663
- object({
12664
- id: string(),
12665
- label: string(),
12666
- isAdmin: boolean().default(false),
12667
- allowedProviders: AllowedProviderSchema,
12668
- allowedDevices: AllowedDevicesSchema,
12669
- tokenHash: string(),
12670
- tokenPrefix: string(),
12671
- createdAt: number(),
12672
- lastUsedAt: number().optional()
12673
- });
12674
12672
  object({
12675
12673
  id: string(),
12676
12674
  userId: string(),
@@ -16652,16 +16650,36 @@ var RecordKindStateSchema = _enum([
16652
16650
  var DeclareKindResultSchema = object({
16653
16651
  kindId: number().int(),
16654
16652
  state: RecordKindStateSchema,
16655
- createdIndexes: array(string()),
16656
- /**
16657
- * RETIRED (D900): always `null`. It carried the records-migration boot guard;
16658
- * it stays on the wire, null, because an addon built before the removal reads
16659
- * an ABSENT field as "adoption pending" and refuses to start.
16660
- */
16661
- adoptionPending: _null()
16653
+ createdIndexes: array(string())
16662
16654
  });
16663
16655
  /** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
16664
16656
  var SecretRefsList = array(string());
16657
+ /**
16658
+ * One op of a `transact`: the single-row writes, each on a kind of the caller.
16659
+ * All ops of one call share ONE database file and ONE `transactFamily`.
16660
+ */
16661
+ var RecordTransactOpSchema = discriminatedUnion("op", [
16662
+ object({
16663
+ op: literal("put"),
16664
+ kind: RecordKindNameSchema,
16665
+ record: RecordInputSchema,
16666
+ ifRev: number().int().min(0).optional()
16667
+ }),
16668
+ object({
16669
+ op: literal("patch"),
16670
+ kind: RecordKindNameSchema,
16671
+ id: RecordIdSchema,
16672
+ data: RecordBodySchema,
16673
+ at: number().int().nullable().optional(),
16674
+ expiresAt: number().int().nullable().optional(),
16675
+ ifRev: number().int().min(1).optional()
16676
+ }),
16677
+ object({
16678
+ op: literal("delete"),
16679
+ kind: RecordKindNameSchema,
16680
+ id: RecordIdSchema
16681
+ })
16682
+ ]);
16665
16683
  var RecordSecretRefsSchema = record(string(), record(string(), string()));
16666
16684
  method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
16667
16685
  kind: "mutation",
@@ -16768,6 +16786,16 @@ method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema)
16768
16786
  }), {
16769
16787
  kind: "mutation",
16770
16788
  auth: "admin"
16789
+ }), method(object({ ops: array(RecordTransactOpSchema).min(1).max(RECORD_BATCH_MAX) }), object({
16790
+ results: array(object({
16791
+ rev: number().int().nullable(),
16792
+ deleted: boolean()
16793
+ })),
16794
+ releasedRefs: SecretRefsList,
16795
+ secretRefs: SecretRefsList
16796
+ }), {
16797
+ kind: "mutation",
16798
+ auth: "admin"
16771
16799
  }), method(object({
16772
16800
  deviceId: number().int(),
16773
16801
  kinds: array(RecordKindNameSchema).optional()
@@ -42475,9 +42503,13 @@ var NcSystemEventKindSchema = _enum([
42475
42503
  "node-updating",
42476
42504
  "node-inference-unavailable",
42477
42505
  "detection-blind",
42506
+ "motion-noisy",
42507
+ "motion-calm",
42478
42508
  "recording-stalled",
42479
42509
  "recording-healthy",
42480
42510
  "recording-degraded",
42511
+ "device-attention-required",
42512
+ "device-attention-resolved",
42481
42513
  "storage-location-low",
42482
42514
  "storage-location-critical",
42483
42515
  "storage-location-ok",
@@ -42501,6 +42533,8 @@ var NcSystemEventKindSchema = _enum([
42501
42533
  "alert-critical",
42502
42534
  "alert-error",
42503
42535
  "alert-critical-resolved",
42536
+ "rule-broken",
42537
+ "rule-repaired",
42504
42538
  "camera-online",
42505
42539
  "camera-offline",
42506
42540
  "camera-disabled",
@@ -55799,6 +55833,16 @@ var DishwasherStatusSchema = object({
55799
55833
  powerState: string().nullable(),
55800
55834
  saltLevel: DishwasherConsumableLevelSchema.nullable(),
55801
55835
  rinseAidLevel: DishwasherConsumableLevelSchema.nullable(),
55836
+ /**
55837
+ * True while the appliance asks for its filter to be cleaned (smart-filter, filter-system or
55838
+ * combined care-and-filter reminder raised); false when every such reminder reads clear; null
55839
+ * when none is reported. A cleared reminder is not an unknown one.
55840
+ */
55841
+ filterCleaningDue: boolean().nullable(),
55842
+ /** True while the machine-care (descaling / cleaning-program) reminder is raised; false when clear; null when not reported. */
55843
+ machineCareDue: boolean().nullable(),
55844
+ /** Program runs left before the machine-care reminder is due; null when the appliance does not say. */
55845
+ machineCareRemainingRuns: number().int().nonnegative().nullable(),
55802
55846
  /** Option states: null when the appliance does not expose the option or has not said. */
55803
55847
  halfLoad: boolean().nullable(),
55804
55848
  hygienePlus: boolean().nullable(),
@@ -64449,16 +64493,6 @@ var UpdateUserInputSchema = object({
64449
64493
  allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
64450
64494
  scopes: array(TokenScopeSchema).optional()
64451
64495
  });
64452
- var ApiKeySummarySchema = object({
64453
- id: string(),
64454
- label: string(),
64455
- isAdmin: boolean().default(false),
64456
- allowedProviders: union([array(string()), literal("*")]).optional(),
64457
- allowedDevices: record(string(), union([array(string()), literal("*")])).optional(),
64458
- tokenPrefix: string(),
64459
- createdAt: number(),
64460
- lastUsedAt: number().optional()
64461
- });
64462
64496
  var OauthSessionSummarySchema = object({
64463
64497
  id: string(),
64464
64498
  userId: string(),
@@ -64480,8 +64514,7 @@ var TotpStatusSchema = object({
64480
64514
  confirmedAt: number().nullable()
64481
64515
  });
64482
64516
  /**
64483
- * user-management — singleton capability for user accounts and the
64484
- * legacy API-key rows.
64517
+ * user-management — singleton capability for user accounts.
64485
64518
  *
64486
64519
  * v2 model: every method gated by `auth: 'admin'`. Admin-only delegation
64487
64520
  * — the subset check on `setUserScopes` is moot
@@ -64537,10 +64570,6 @@ method(_void(), array(UserSummarySchema), { auth: "admin" }), method(CreateUserI
64537
64570
  }), UserSummarySchema.extend({ passwordHash: string() }).nullable(), {
64538
64571
  kind: "mutation",
64539
64572
  access: "view"
64540
- }), method(_void(), array(ApiKeySummarySchema), { auth: "admin" }), method(object({ id: string() }), object({ success: literal(true) }), {
64541
- kind: "mutation",
64542
- auth: "admin",
64543
- access: "delete"
64544
64573
  }), method(object({ userId: string() }), TotpSetupResultSchema, {
64545
64574
  kind: "mutation",
64546
64575
  auth: "admin",
@@ -73996,6 +74025,12 @@ Object.freeze({
73996
74025
  addonId: null,
73997
74026
  access: "view"
73998
74027
  },
74028
+ "records.transact": {
74029
+ capName: "records",
74030
+ capScope: "system",
74031
+ addonId: null,
74032
+ access: "create"
74033
+ },
73999
74034
  "sceneMonitor.captureReference": {
74000
74035
  capName: "scene-monitor",
74001
74036
  capScope: "device",
@@ -75328,12 +75363,6 @@ Object.freeze({
75328
75363
  addonId: null,
75329
75364
  access: "view"
75330
75365
  },
75331
- "userManagement.listApiKeys": {
75332
- capName: "user-management",
75333
- capScope: "system",
75334
- addonId: null,
75335
- access: "view"
75336
- },
75337
75366
  "userManagement.listExternalIdentities": {
75338
75367
  capName: "user-management",
75339
75368
  capScope: "system",
@@ -75388,12 +75417,6 @@ Object.freeze({
75388
75417
  addonId: null,
75389
75418
  access: "create"
75390
75419
  },
75391
- "userManagement.revokeApiKey": {
75392
- capName: "user-management",
75393
- capScope: "system",
75394
- addonId: null,
75395
- access: "delete"
75396
- },
75397
75420
  "userManagement.revokeOauthSession": {
75398
75421
  capName: "user-management",
75399
75422
  capScope: "system",
@@ -78758,9 +78781,13 @@ new Map(Object.entries({
78758
78781
  "stream-online": "device-events",
78759
78782
  "stream-offline": "device-events",
78760
78783
  "detection-blind": "device-events",
78784
+ "motion-noisy": "device-events",
78785
+ "motion-calm": "device-events",
78761
78786
  "recording-stalled": "device-events",
78762
78787
  "recording-healthy": "device-events",
78763
78788
  "recording-degraded": "device-events",
78789
+ "device-attention-required": "device-events",
78790
+ "device-attention-resolved": "device-events",
78764
78791
  "node-online": "system",
78765
78792
  "node-offline": "system",
78766
78793
  "node-restarting": "system",
@@ -78777,6 +78804,8 @@ new Map(Object.entries({
78777
78804
  "alert-critical": "system",
78778
78805
  "alert-error": "system",
78779
78806
  "alert-critical-resolved": "system",
78807
+ "rule-broken": "system",
78808
+ "rule-repaired": "system",
78780
78809
  "storage-location-low": "system",
78781
78810
  "storage-location-critical": "system",
78782
78811
  "storage-location-ok": "system",
@@ -78841,6 +78870,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78841
78870
  label: "Detecting nothing",
78842
78871
  kinds: ["detection-blind"]
78843
78872
  },
78873
+ {
78874
+ id: "motion-noise",
78875
+ family: "device-events",
78876
+ label: "Motion without a subject",
78877
+ kinds: ["motion-noisy", "motion-calm"]
78878
+ },
78844
78879
  {
78845
78880
  id: "recording",
78846
78881
  family: "device-events",
@@ -78851,6 +78886,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78851
78886
  "recording-degraded"
78852
78887
  ]
78853
78888
  },
78889
+ {
78890
+ id: "device-attention",
78891
+ family: "device-events",
78892
+ label: "Needs attention",
78893
+ kinds: ["device-attention-required", "device-attention-resolved"]
78894
+ },
78854
78895
  {
78855
78896
  id: "nodes",
78856
78897
  family: "system",
@@ -78911,6 +78952,12 @@ var NC_SYSTEM_EVENT_KIND_GROUP_SPECS = [
78911
78952
  "alert-critical-resolved"
78912
78953
  ]
78913
78954
  },
78955
+ {
78956
+ id: "rule-health",
78957
+ family: "system",
78958
+ label: "Notification rules",
78959
+ kinds: ["rule-broken", "rule-repaired"]
78960
+ },
78914
78961
  {
78915
78962
  id: "alarm",
78916
78963
  family: "alarm",
@@ -78984,6 +79031,7 @@ var ALERT_EPISODE = [
78984
79031
  "alert-error",
78985
79032
  "alert-critical-resolved"
78986
79033
  ];
79034
+ var DEVICE_ATTENTION = ["device-attention-required", "device-attention-resolved"];
78987
79035
  var UPDATES = [
78988
79036
  "addon-update-available",
78989
79037
  "server-update-available",
@@ -79013,9 +79061,12 @@ var DEVICE_EVENTS = [
79013
79061
  "stream-online",
79014
79062
  "stream-offline",
79015
79063
  "detection-blind",
79064
+ "motion-noisy",
79065
+ "motion-calm",
79016
79066
  "recording-stalled",
79017
79067
  "recording-healthy",
79018
79068
  "recording-degraded",
79069
+ ...DEVICE_ATTENTION,
79019
79070
  ...ALARM
79020
79071
  ];
79021
79072
  /** Every kind a summary may speak about — the two summarisable families. */
@@ -79183,7 +79234,13 @@ var STATE_SUMMARY_VARS = [
79183
79234
  [...RULE_TEXT],
79184
79235
  [...RULE_TEXT],
79185
79236
  [...RULE_TEXT],
79186
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79237
+ [...RULE_TEXT],
79238
+ [...RULE_TEXT],
79239
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79240
+ [...RULE_TEXT],
79241
+ [...RULE_TEXT],
79242
+ [...RULE_TEXT],
79243
+ [...RULE_TEXT],
79187
79244
  [...RULE_TEXT],
79188
79245
  [...RULE_TEXT],
79189
79246
  [...RULE_TEXT],
@@ -79201,11 +79258,11 @@ var STATE_SUMMARY_VARS = [
79201
79258
  [...RULE_TEXT],
79202
79259
  [...RULE_TEXT],
79203
79260
  [...RULE_TEXT],
79261
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79204
79262
  ([...RULE_TEXT], [...ALERT_EPISODE]),
79263
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79205
79264
  ([...RULE_TEXT], [...ALERT_EPISODE]),
79206
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79207
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79208
- ([...RULE_TEXT], [...ALERT_EPISODE]),
79265
+ ([...RULE_TEXT], [...DEVICE_ATTENTION, ...ALERT_EPISODE]),
79209
79266
  [...RULE_TEXT],
79210
79267
  [...RULE_TEXT],
79211
79268
  [...RULE_TEXT],
@@ -79226,6 +79283,125 @@ var STATE_SUMMARY_VARS = [
79226
79283
  [...RULE_TEXT],
79227
79284
  ...STATE_SUMMARY_VARS
79228
79285
  ];
79286
+ new Map([
79287
+ {
79288
+ id: "device-connectivity",
79289
+ family: "device-events",
79290
+ label: "Device connectivity (offline / back online)",
79291
+ bad: ["device-offline"],
79292
+ recovery: ["device-online"],
79293
+ snapshotLabel: "Devices offline now",
79294
+ snapshotSection: "device-state"
79295
+ },
79296
+ {
79297
+ id: "device-switch",
79298
+ family: "device-events",
79299
+ label: "Device switched off / back on",
79300
+ bad: ["device-disabled"],
79301
+ recovery: ["device-enabled"],
79302
+ snapshotLabel: "Devices switched off now",
79303
+ snapshotSection: "device-state"
79304
+ },
79305
+ {
79306
+ id: "stream-connectivity",
79307
+ family: "device-events",
79308
+ label: "Stream connectivity (offline / back online)",
79309
+ bad: ["stream-offline"],
79310
+ recovery: ["stream-online"],
79311
+ snapshotLabel: "Streams offline now",
79312
+ snapshotSection: "streams"
79313
+ },
79314
+ {
79315
+ id: "battery",
79316
+ family: "device-events",
79317
+ label: "Battery (low / back to normal)",
79318
+ bad: ["device-battery-low"],
79319
+ recovery: ["device-battery-normal"],
79320
+ snapshotLabel: "Batteries low now",
79321
+ snapshotSection: "battery"
79322
+ },
79323
+ {
79324
+ id: "consumables",
79325
+ family: "device-events",
79326
+ label: "Consumables (low / replaced)",
79327
+ bad: ["device-consumable-low"],
79328
+ recovery: ["device-consumable-normal"],
79329
+ snapshotLabel: "Consumables low now",
79330
+ snapshotSection: "consumables"
79331
+ },
79332
+ {
79333
+ id: "tanks",
79334
+ family: "device-events",
79335
+ label: "Tanks (low or full / back to normal)",
79336
+ bad: ["device-tank-low", "device-tank-full"],
79337
+ recovery: ["device-tank-normal"],
79338
+ snapshotLabel: "Tanks low or full now",
79339
+ snapshotSection: "tanks"
79340
+ },
79341
+ {
79342
+ id: "motion-noise",
79343
+ family: "device-events",
79344
+ label: "Motion without a subject (constant / calm again)",
79345
+ bad: ["motion-noisy"],
79346
+ recovery: ["motion-calm"],
79347
+ snapshotLabel: "Cameras with constant motion now",
79348
+ snapshotSection: null
79349
+ },
79350
+ {
79351
+ id: "recording-health",
79352
+ family: "device-events",
79353
+ label: "Recording health (stalled or degraded / recording again)",
79354
+ bad: ["recording-stalled", "recording-degraded"],
79355
+ recovery: ["recording-healthy"],
79356
+ snapshotLabel: "Recordings stalled now",
79357
+ snapshotSection: null
79358
+ },
79359
+ {
79360
+ id: "device-attention",
79361
+ family: "device-events",
79362
+ label: "Device needs attention (raised / resolved)",
79363
+ bad: ["device-attention-required"],
79364
+ recovery: ["device-attention-resolved"],
79365
+ snapshotLabel: "Devices needing attention now",
79366
+ snapshotSection: null
79367
+ },
79368
+ {
79369
+ id: "node-connectivity",
79370
+ family: "system",
79371
+ label: "Node connectivity (offline / back online)",
79372
+ bad: ["node-offline"],
79373
+ recovery: ["node-online"],
79374
+ snapshotLabel: "Nodes offline now",
79375
+ snapshotSection: "nodes"
79376
+ },
79377
+ {
79378
+ id: "storage-space",
79379
+ family: "system",
79380
+ label: "Storage space (low or critical / ok again)",
79381
+ bad: ["storage-location-low", "storage-location-critical"],
79382
+ recovery: ["storage-location-ok"],
79383
+ snapshotLabel: "Storage locations low now",
79384
+ snapshotSection: null
79385
+ },
79386
+ {
79387
+ id: "critical-alerts",
79388
+ family: "system",
79389
+ label: "Critical alerts (raised / resolved)",
79390
+ bad: ["alert-critical"],
79391
+ recovery: ["alert-critical-resolved"],
79392
+ snapshotLabel: "Critical alerts open now",
79393
+ snapshotSection: null
79394
+ },
79395
+ {
79396
+ id: "rule-health",
79397
+ family: "system",
79398
+ label: "Rule health (broken / repaired)",
79399
+ bad: ["rule-broken"],
79400
+ recovery: ["rule-repaired"],
79401
+ snapshotLabel: "Notification rules broken now",
79402
+ snapshotSection: null
79403
+ }
79404
+ ].flatMap((spec) => [...spec.bad, ...spec.recovery].map((kind) => [kind, spec])));
79229
79405
  new Set([
79230
79406
  "disarmed",
79231
79407
  "armed_home",
@@ -79830,7 +80006,7 @@ function buildConnectionFormSchema() {
79830
80006
  id: "connection",
79831
80007
  title: "Connection",
79832
80008
  titleKey: "provider-velux:connection.s_connection.title",
79833
- description: "CamStack connects to the KLF-200 over the local network and polls its actuator nodes. The password is the WiFi/web password printed on the back of the unit.",
80009
+ description: "The password is the WiFi/web password printed on the back of the unit.",
79834
80010
  descriptionKey: "provider-velux:connection.s_connection.description",
79835
80011
  columns: 2,
79836
80012
  fields: [
package/i18n/en.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "connection.s_identity.title": "Gateway",
3
3
  "connection.s_identity.name.label": "Name",
4
4
  "connection.s_connection.title": "Connection",
5
- "connection.s_connection.description": "CamStack connects to the KLF-200 over the local network and polls its actuator nodes. The password is the WiFi/web password printed on the back of the unit.",
5
+ "connection.s_connection.description": "The password is the WiFi/web password printed on the back of the unit.",
6
6
  "connection.s_connection.host.label": "Gateway host / IP",
7
7
  "connection.s_connection.password.label": "Password",
8
8
  "connection.s_connection.pollIntervalMs.label": "Poll interval (ms)"
package/i18n/it.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "connection.s_identity.title": "Gateway",
3
3
  "connection.s_identity.name.label": "Nome",
4
4
  "connection.s_connection.title": "Connessione",
5
- "connection.s_connection.description": "CamStack si collega al KLF-200 in rete locale e legge i suoi attuatori. La password è quella WiFi/web stampata sul retro del dispositivo.",
5
+ "connection.s_connection.description": "La password è quella WiFi/web stampata sul retro del dispositivo.",
6
6
  "connection.s_connection.host.label": "Host / IP del gateway",
7
7
  "connection.s_connection.password.label": "Password",
8
8
  "connection.s_connection.pollIntervalMs.label": "Intervallo di lettura (ms)"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-provider-velux",
3
- "version": "0.2.140",
3
+ "version": "0.2.142",
4
4
  "description": "Velux KLF-200 device-provider addon for CamStack — local-gateway window + shutter covers (positional, no tilt)",
5
5
  "keywords": [
6
6
  "camstack",