@camstack/addon-provider-amcrest 0.2.158 → 0.2.160

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
@@ -35,7 +35,7 @@ let node_stream_promises = require("node:stream/promises");
35
35
  let node_child_process = require("node:child_process");
36
36
  require("node:zlib");
37
37
  let node_os = require("node:os");
38
- //#region ../types/dist/event-category-Ceif8n-v.mjs
38
+ //#region ../types/dist/event-category-DHXxB8t9.mjs
39
39
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
40
40
  EventCategory["SystemBoot"] = "system.boot";
41
41
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -331,7 +331,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
331
331
  * TRANSITION into that state (never per dispatch), and the node is dropped
332
332
  * from the placement candidate set for as long as it holds.
333
333
  *
334
- * This exists because the state was previously invisible: little-unraid
334
+ * This exists because the state was previously invisible: agent-a
335
335
  * absorbed 283k inference errors in a day while still being handed cameras,
336
336
  * and nothing in the system said so.
337
337
  *
@@ -5470,7 +5470,7 @@ var ZodIssueCode = {
5470
5470
  var ZodFirstPartyTypeKind;
5471
5471
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5472
5472
  //#endregion
5473
- //#region ../types/dist/sleep-CYfIZzGv.mjs
5473
+ //#region ../types/dist/sleep-BErAxhul.mjs
5474
5474
  /**
5475
5475
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5476
5476
  * window to float samples (D455).
@@ -8493,6 +8493,1980 @@ method(object({ deviceId: number() }), array(StreamSourceEntrySchema)), method(o
8493
8493
  kind: "mutation",
8494
8494
  auth: "admin"
8495
8495
  }), method(object({ deviceId: number() }), unknown().nullable()), method(object({ deviceId: number() }), RawStateResultSchema.nullable(), { auth: "protected" });
8496
+ Object.freeze({ "doorbell": "lastPressedAt" });
8497
+ /** Every capability name, so addon code can check a name without the schema graph. */
8498
+ var CAP_NAMES = Object.freeze([
8499
+ "accessories",
8500
+ "addon-pages",
8501
+ "addon-pages-source",
8502
+ "addon-routes",
8503
+ "addon-settings",
8504
+ "addon-widgets",
8505
+ "addon-widgets-source",
8506
+ "addons",
8507
+ "admin-ui",
8508
+ "air-quality-sensor",
8509
+ "alarm-panel",
8510
+ "alerts",
8511
+ "ambient-light-sensor",
8512
+ "audio-analysis",
8513
+ "audio-analyzer",
8514
+ "audio-codec",
8515
+ "audio-metrics",
8516
+ "auth-provider",
8517
+ "automation-control",
8518
+ "backup",
8519
+ "battery",
8520
+ "binary",
8521
+ "brightness",
8522
+ "broker",
8523
+ "button",
8524
+ "calendar-source",
8525
+ "calendars",
8526
+ "camera-credentials",
8527
+ "camera-grid-layout",
8528
+ "camera-pipeline-config",
8529
+ "camera-streams",
8530
+ "carbon-monoxide",
8531
+ "climate-control",
8532
+ "color",
8533
+ "composer",
8534
+ "connection-test",
8535
+ "connectivity",
8536
+ "consumables",
8537
+ "contact",
8538
+ "control",
8539
+ "core-blocks",
8540
+ "cover",
8541
+ "custom-model-registry",
8542
+ "data-store-provider",
8543
+ "database-snapshot",
8544
+ "day-night",
8545
+ "decoder",
8546
+ "detection-pipeline",
8547
+ "device-admin-link",
8548
+ "device-adoption",
8549
+ "device-credentials",
8550
+ "device-discovery",
8551
+ "device-export",
8552
+ "device-extension",
8553
+ "device-history",
8554
+ "device-manager",
8555
+ "device-ops",
8556
+ "device-provider",
8557
+ "device-removal-hook",
8558
+ "device-state",
8559
+ "device-status",
8560
+ "dishwasher",
8561
+ "display-palette",
8562
+ "doorbell",
8563
+ "embedding-encoder",
8564
+ "enum-sensor",
8565
+ "event-emitter",
8566
+ "face-gallery",
8567
+ "failure-contribution",
8568
+ "fan-control",
8569
+ "feature-probe",
8570
+ "filesystem-browse",
8571
+ "flood",
8572
+ "gas",
8573
+ "heating-valve",
8574
+ "humidifier",
8575
+ "humidity-sensor",
8576
+ "image",
8577
+ "image-settings",
8578
+ "integrations",
8579
+ "intercom",
8580
+ "keychain",
8581
+ "keychain-admin",
8582
+ "lawn-mower-control",
8583
+ "llm",
8584
+ "llm-runtime",
8585
+ "load-contribution",
8586
+ "local-network",
8587
+ "lock-control",
8588
+ "log-channels",
8589
+ "log-destination",
8590
+ "login-method",
8591
+ "media-player",
8592
+ "mesh-network",
8593
+ "metrics-provider",
8594
+ "model-convert",
8595
+ "model-distributor",
8596
+ "motion",
8597
+ "motion-detection",
8598
+ "motion-trigger",
8599
+ "motion-zones",
8600
+ "mqtt-broker",
8601
+ "native-object-detection",
8602
+ "navigation",
8603
+ "network-access",
8604
+ "network-link",
8605
+ "network-quality",
8606
+ "node-certificates",
8607
+ "nodes",
8608
+ "notification-output",
8609
+ "notification-rules",
8610
+ "notifier",
8611
+ "numeric-sensor",
8612
+ "oauth-integration",
8613
+ "oidc-connections",
8614
+ "osd",
8615
+ "osd-manager",
8616
+ "pet-feeder",
8617
+ "pipeline-analytics",
8618
+ "pipeline-executor",
8619
+ "pipeline-orchestrator",
8620
+ "pipeline-runner",
8621
+ "plate-gallery",
8622
+ "platform-probe",
8623
+ "power-meter",
8624
+ "presence",
8625
+ "pressure-sensor",
8626
+ "privacy-mask",
8627
+ "ptz",
8628
+ "ptz-autotrack",
8629
+ "reboot",
8630
+ "record-entries",
8631
+ "recording",
8632
+ "recording-archive",
8633
+ "recording-export",
8634
+ "recording-onboard",
8635
+ "recording-signal",
8636
+ "records",
8637
+ "running-state",
8638
+ "scene-monitor",
8639
+ "script-runner",
8640
+ "server-management",
8641
+ "settings-store",
8642
+ "smoke",
8643
+ "smtp-provider",
8644
+ "snapshot",
8645
+ "sso-bridge",
8646
+ "storage",
8647
+ "storage-admin",
8648
+ "storage-evictable",
8649
+ "storage-migration",
8650
+ "storage-occupancy",
8651
+ "storage-provider",
8652
+ "stream-broker",
8653
+ "stream-catalog",
8654
+ "stream-params",
8655
+ "stream-signals",
8656
+ "switch",
8657
+ "system",
8658
+ "tamper",
8659
+ "temperature-sensor",
8660
+ "terminal-session",
8661
+ "toast",
8662
+ "training",
8663
+ "training-provider",
8664
+ "turn-provider",
8665
+ "update",
8666
+ "user-management",
8667
+ "user-passkeys",
8668
+ "vacuum-control",
8669
+ "valve",
8670
+ "vector-store",
8671
+ "vibration",
8672
+ "videoclips",
8673
+ "viewer-ui",
8674
+ "water-heater",
8675
+ "weather",
8676
+ "webrtc-session",
8677
+ "zone-analytics",
8678
+ "zone-rules",
8679
+ "zones"
8680
+ ]);
8681
+ Object.freeze({
8682
+ "air-quality-sensor": [
8683
+ {
8684
+ "path": "co2Ppm",
8685
+ "valueType": "number"
8686
+ },
8687
+ {
8688
+ "path": "vocPpb",
8689
+ "valueType": "number"
8690
+ },
8691
+ {
8692
+ "path": "pm25",
8693
+ "valueType": "number"
8694
+ },
8695
+ {
8696
+ "path": "pm10",
8697
+ "valueType": "number"
8698
+ },
8699
+ {
8700
+ "path": "aqi",
8701
+ "valueType": "number"
8702
+ },
8703
+ {
8704
+ "path": "unit",
8705
+ "valueType": "string"
8706
+ },
8707
+ {
8708
+ "path": "precision",
8709
+ "valueType": "number"
8710
+ }
8711
+ ],
8712
+ "alarm-panel": [
8713
+ {
8714
+ "path": "state",
8715
+ "valueType": "enum",
8716
+ "enumValues": [
8717
+ "disarmed",
8718
+ "armed_home",
8719
+ "armed_away",
8720
+ "armed_night",
8721
+ "armed_vacation",
8722
+ "armed_custom_bypass",
8723
+ "arming",
8724
+ "disarming",
8725
+ "pending",
8726
+ "triggered"
8727
+ ]
8728
+ },
8729
+ {
8730
+ "path": "targetMode",
8731
+ "valueType": "enum",
8732
+ "enumValues": [
8733
+ "home",
8734
+ "away",
8735
+ "night",
8736
+ "vacation",
8737
+ "custom_bypass"
8738
+ ]
8739
+ },
8740
+ {
8741
+ "path": "requiresCode",
8742
+ "valueType": "boolean"
8743
+ }
8744
+ ],
8745
+ "ambient-light-sensor": [
8746
+ {
8747
+ "path": "lux",
8748
+ "valueType": "number"
8749
+ },
8750
+ {
8751
+ "path": "unit",
8752
+ "valueType": "string"
8753
+ },
8754
+ {
8755
+ "path": "precision",
8756
+ "valueType": "number"
8757
+ }
8758
+ ],
8759
+ "audio-metrics": [
8760
+ {
8761
+ "path": "ts",
8762
+ "valueType": "number"
8763
+ },
8764
+ {
8765
+ "path": "windowSec",
8766
+ "valueType": "number"
8767
+ },
8768
+ {
8769
+ "path": "level.rms",
8770
+ "valueType": "number"
8771
+ },
8772
+ {
8773
+ "path": "level.dbfs",
8774
+ "valueType": "number"
8775
+ },
8776
+ {
8777
+ "path": "peakDbfs",
8778
+ "valueType": "number"
8779
+ },
8780
+ {
8781
+ "path": "avgDbfs",
8782
+ "valueType": "number"
8783
+ },
8784
+ {
8785
+ "path": "current.className",
8786
+ "valueType": "string"
8787
+ },
8788
+ {
8789
+ "path": "current.score",
8790
+ "valueType": "number"
8791
+ },
8792
+ {
8793
+ "path": "current.timestamp",
8794
+ "valueType": "number"
8795
+ }
8796
+ ],
8797
+ "automation-control": [
8798
+ {
8799
+ "path": "enabled",
8800
+ "valueType": "boolean"
8801
+ },
8802
+ {
8803
+ "path": "isRunning",
8804
+ "valueType": "boolean"
8805
+ },
8806
+ {
8807
+ "path": "lastTriggeredAt",
8808
+ "valueType": "number"
8809
+ },
8810
+ {
8811
+ "path": "lastError",
8812
+ "valueType": "string"
8813
+ }
8814
+ ],
8815
+ "battery": [
8816
+ {
8817
+ "path": "percentage",
8818
+ "valueType": "number"
8819
+ },
8820
+ {
8821
+ "path": "charging",
8822
+ "valueType": "enum",
8823
+ "enumValues": [
8824
+ "dc",
8825
+ "solar",
8826
+ "none",
8827
+ "unknown"
8828
+ ]
8829
+ },
8830
+ {
8831
+ "path": "sleeping",
8832
+ "valueType": "boolean"
8833
+ },
8834
+ {
8835
+ "path": "lastUpdated",
8836
+ "valueType": "number"
8837
+ },
8838
+ {
8839
+ "path": "lastContactAt",
8840
+ "valueType": "number"
8841
+ },
8842
+ {
8843
+ "path": "lastFullRefreshAt",
8844
+ "valueType": "number"
8845
+ },
8846
+ {
8847
+ "path": "binary",
8848
+ "valueType": "boolean"
8849
+ }
8850
+ ],
8851
+ "binary": [{
8852
+ "path": "on",
8853
+ "valueType": "boolean"
8854
+ }],
8855
+ "brightness": [{
8856
+ "path": "percentage",
8857
+ "valueType": "number"
8858
+ }],
8859
+ "broker": [{
8860
+ "path": "brokerCount",
8861
+ "valueType": "number"
8862
+ }, {
8863
+ "path": "connectedCount",
8864
+ "valueType": "number"
8865
+ }],
8866
+ "camera-credentials": [
8867
+ {
8868
+ "path": "host",
8869
+ "valueType": "string"
8870
+ },
8871
+ {
8872
+ "path": "port",
8873
+ "valueType": "number"
8874
+ },
8875
+ {
8876
+ "path": "onvifPort",
8877
+ "valueType": "number"
8878
+ },
8879
+ {
8880
+ "path": "rtspPort",
8881
+ "valueType": "number"
8882
+ },
8883
+ {
8884
+ "path": "https",
8885
+ "valueType": "boolean"
8886
+ },
8887
+ {
8888
+ "path": "hasUsername",
8889
+ "valueType": "boolean"
8890
+ },
8891
+ {
8892
+ "path": "hasPassword",
8893
+ "valueType": "boolean"
8894
+ },
8895
+ {
8896
+ "path": "onvifProfile",
8897
+ "valueType": "string"
8898
+ }
8899
+ ],
8900
+ "camera-streams": [
8901
+ {
8902
+ "path": "online",
8903
+ "valueType": "boolean"
8904
+ },
8905
+ {
8906
+ "path": "slotStatuses.high",
8907
+ "valueType": "enum",
8908
+ "enumValues": [
8909
+ "unassigned",
8910
+ "idle",
8911
+ "connecting",
8912
+ "streaming",
8913
+ "error"
8914
+ ]
8915
+ },
8916
+ {
8917
+ "path": "slotStatuses.mid",
8918
+ "valueType": "enum",
8919
+ "enumValues": [
8920
+ "unassigned",
8921
+ "idle",
8922
+ "connecting",
8923
+ "streaming",
8924
+ "error"
8925
+ ]
8926
+ },
8927
+ {
8928
+ "path": "slotStatuses.low",
8929
+ "valueType": "enum",
8930
+ "enumValues": [
8931
+ "unassigned",
8932
+ "idle",
8933
+ "connecting",
8934
+ "streaming",
8935
+ "error"
8936
+ ]
8937
+ },
8938
+ {
8939
+ "path": "slotErrors.high",
8940
+ "valueType": "string"
8941
+ },
8942
+ {
8943
+ "path": "slotErrors.mid",
8944
+ "valueType": "string"
8945
+ },
8946
+ {
8947
+ "path": "slotErrors.low",
8948
+ "valueType": "string"
8949
+ }
8950
+ ],
8951
+ "carbon-monoxide": [{
8952
+ "path": "detected",
8953
+ "valueType": "boolean"
8954
+ }],
8955
+ "climate-control": [
8956
+ {
8957
+ "path": "mode",
8958
+ "valueType": "enum",
8959
+ "enumValues": [
8960
+ "off",
8961
+ "heat",
8962
+ "cool",
8963
+ "auto",
8964
+ "heat_cool",
8965
+ "fan_only",
8966
+ "dry"
8967
+ ]
8968
+ },
8969
+ {
8970
+ "path": "fanMode",
8971
+ "valueType": "string"
8972
+ },
8973
+ {
8974
+ "path": "preset",
8975
+ "valueType": "string"
8976
+ },
8977
+ {
8978
+ "path": "target",
8979
+ "valueType": "number"
8980
+ },
8981
+ {
8982
+ "path": "targetHigh",
8983
+ "valueType": "number"
8984
+ },
8985
+ {
8986
+ "path": "targetLow",
8987
+ "valueType": "number"
8988
+ },
8989
+ {
8990
+ "path": "targetHumidity",
8991
+ "valueType": "number"
8992
+ },
8993
+ {
8994
+ "path": "currentTemp",
8995
+ "valueType": "number"
8996
+ },
8997
+ {
8998
+ "path": "currentHumidity",
8999
+ "valueType": "number"
9000
+ },
9001
+ {
9002
+ "path": "swingVertical",
9003
+ "valueType": "boolean"
9004
+ },
9005
+ {
9006
+ "path": "swingHorizontal",
9007
+ "valueType": "boolean"
9008
+ },
9009
+ {
9010
+ "path": "minTemp",
9011
+ "valueType": "number"
9012
+ },
9013
+ {
9014
+ "path": "maxTemp",
9015
+ "valueType": "number"
9016
+ },
9017
+ {
9018
+ "path": "tempStep",
9019
+ "valueType": "number"
9020
+ }
9021
+ ],
9022
+ "color": [
9023
+ {
9024
+ "path": "mode",
9025
+ "valueType": "enum",
9026
+ "enumValues": [
9027
+ "rgb",
9028
+ "hsv",
9029
+ "mired"
9030
+ ]
9031
+ },
9032
+ {
9033
+ "path": "rgb.r",
9034
+ "valueType": "number"
9035
+ },
9036
+ {
9037
+ "path": "rgb.g",
9038
+ "valueType": "number"
9039
+ },
9040
+ {
9041
+ "path": "rgb.b",
9042
+ "valueType": "number"
9043
+ },
9044
+ {
9045
+ "path": "hsv.h",
9046
+ "valueType": "number"
9047
+ },
9048
+ {
9049
+ "path": "hsv.s",
9050
+ "valueType": "number"
9051
+ },
9052
+ {
9053
+ "path": "hsv.v",
9054
+ "valueType": "number"
9055
+ },
9056
+ {
9057
+ "path": "mireds",
9058
+ "valueType": "number"
9059
+ }
9060
+ ],
9061
+ "connectivity": [{
9062
+ "path": "connected",
9063
+ "valueType": "boolean"
9064
+ }],
9065
+ "contact": [{
9066
+ "path": "entryOpen",
9067
+ "valueType": "boolean"
9068
+ }],
9069
+ "control": [
9070
+ {
9071
+ "path": "kind",
9072
+ "valueType": "enum",
9073
+ "enumValues": [
9074
+ "numeric",
9075
+ "select",
9076
+ "text",
9077
+ "datetime"
9078
+ ]
9079
+ },
9080
+ {
9081
+ "path": "unit",
9082
+ "valueType": "string"
9083
+ },
9084
+ {
9085
+ "path": "min",
9086
+ "valueType": "number"
9087
+ },
9088
+ {
9089
+ "path": "max",
9090
+ "valueType": "number"
9091
+ },
9092
+ {
9093
+ "path": "step",
9094
+ "valueType": "number"
9095
+ },
9096
+ {
9097
+ "path": "precision",
9098
+ "valueType": "number"
9099
+ },
9100
+ {
9101
+ "path": "format",
9102
+ "valueType": "enum",
9103
+ "enumValues": [
9104
+ "date",
9105
+ "time",
9106
+ "datetime"
9107
+ ]
9108
+ }
9109
+ ],
9110
+ "cover": [
9111
+ {
9112
+ "path": "state",
9113
+ "valueType": "enum",
9114
+ "enumValues": [
9115
+ "open",
9116
+ "opening",
9117
+ "closing",
9118
+ "closed",
9119
+ "stopped"
9120
+ ]
9121
+ },
9122
+ {
9123
+ "path": "position",
9124
+ "valueType": "number"
9125
+ },
9126
+ {
9127
+ "path": "tiltPosition",
9128
+ "valueType": "number"
9129
+ }
9130
+ ],
9131
+ "day-night": [
9132
+ {
9133
+ "path": "mode",
9134
+ "valueType": "enum",
9135
+ "enumValues": [
9136
+ "auto",
9137
+ "day",
9138
+ "night",
9139
+ "schedule"
9140
+ ]
9141
+ },
9142
+ {
9143
+ "path": "sensitivity",
9144
+ "valueType": "number"
9145
+ },
9146
+ {
9147
+ "path": "switchDelaySec",
9148
+ "valueType": "number"
9149
+ }
9150
+ ],
9151
+ "device-adoption": [
9152
+ {
9153
+ "path": "lastDiscoveryAt",
9154
+ "valueType": "number"
9155
+ },
9156
+ {
9157
+ "path": "candidateCount",
9158
+ "valueType": "number"
9159
+ },
9160
+ {
9161
+ "path": "adoptedCount",
9162
+ "valueType": "number"
9163
+ },
9164
+ {
9165
+ "path": "lastError",
9166
+ "valueType": "string"
9167
+ }
9168
+ ],
9169
+ "device-discovery": [{
9170
+ "path": "lastDiscoveryAt",
9171
+ "valueType": "number"
9172
+ }, {
9173
+ "path": "lastError",
9174
+ "valueType": "string"
9175
+ }],
9176
+ "device-export": [
9177
+ {
9178
+ "path": "linkState",
9179
+ "valueType": "enum",
9180
+ "enumValues": [
9181
+ "unlinked",
9182
+ "linked",
9183
+ "error"
9184
+ ]
9185
+ },
9186
+ {
9187
+ "path": "exposedDeviceCount",
9188
+ "valueType": "number"
9189
+ },
9190
+ {
9191
+ "path": "error",
9192
+ "valueType": "string"
9193
+ },
9194
+ {
9195
+ "path": "setup.qr",
9196
+ "valueType": "string"
9197
+ },
9198
+ {
9199
+ "path": "setup.note",
9200
+ "valueType": "string"
9201
+ }
9202
+ ],
9203
+ "device-status": [{
9204
+ "path": "online",
9205
+ "valueType": "boolean"
9206
+ }],
9207
+ "dishwasher": [
9208
+ {
9209
+ "path": "availability",
9210
+ "valueType": "enum",
9211
+ "enumValues": [
9212
+ "available",
9213
+ "offline",
9214
+ "description-missing"
9215
+ ]
9216
+ },
9217
+ {
9218
+ "path": "state",
9219
+ "valueType": "enum",
9220
+ "enumValues": [
9221
+ "idle",
9222
+ "running",
9223
+ "paused",
9224
+ "finished",
9225
+ "error",
9226
+ "unavailable"
9227
+ ]
9228
+ },
9229
+ {
9230
+ "path": "operationState",
9231
+ "valueType": "enum",
9232
+ "enumValues": [
9233
+ "Inactive",
9234
+ "Ready",
9235
+ "DelayedStart",
9236
+ "Run",
9237
+ "Pause",
9238
+ "ActionRequired",
9239
+ "Finished",
9240
+ "Error",
9241
+ "Aborting"
9242
+ ]
9243
+ },
9244
+ {
9245
+ "path": "program",
9246
+ "valueType": "string"
9247
+ },
9248
+ {
9249
+ "path": "selectedProgram",
9250
+ "valueType": "string"
9251
+ },
9252
+ {
9253
+ "path": "remainingSeconds",
9254
+ "valueType": "number"
9255
+ },
9256
+ {
9257
+ "path": "delayedStartSeconds",
9258
+ "valueType": "number"
9259
+ },
9260
+ {
9261
+ "path": "progressPercent",
9262
+ "valueType": "number"
9263
+ },
9264
+ {
9265
+ "path": "doorOpen",
9266
+ "valueType": "boolean"
9267
+ },
9268
+ {
9269
+ "path": "doorLocked",
9270
+ "valueType": "boolean"
9271
+ },
9272
+ {
9273
+ "path": "remoteStartAllowed",
9274
+ "valueType": "boolean"
9275
+ },
9276
+ {
9277
+ "path": "remoteControlActive",
9278
+ "valueType": "boolean"
9279
+ },
9280
+ {
9281
+ "path": "localControlActive",
9282
+ "valueType": "boolean"
9283
+ },
9284
+ {
9285
+ "path": "powerOn",
9286
+ "valueType": "boolean"
9287
+ },
9288
+ {
9289
+ "path": "powerState",
9290
+ "valueType": "string"
9291
+ },
9292
+ {
9293
+ "path": "filterCleaningDue",
9294
+ "valueType": "boolean"
9295
+ },
9296
+ {
9297
+ "path": "machineCareDue",
9298
+ "valueType": "boolean"
9299
+ },
9300
+ {
9301
+ "path": "machineCareRemainingRuns",
9302
+ "valueType": "number"
9303
+ },
9304
+ {
9305
+ "path": "halfLoad",
9306
+ "valueType": "boolean"
9307
+ },
9308
+ {
9309
+ "path": "hygienePlus",
9310
+ "valueType": "boolean"
9311
+ },
9312
+ {
9313
+ "path": "extraDry",
9314
+ "valueType": "boolean"
9315
+ },
9316
+ {
9317
+ "path": "intensiveZone",
9318
+ "valueType": "boolean"
9319
+ },
9320
+ {
9321
+ "path": "varioSpeedPlus",
9322
+ "valueType": "boolean"
9323
+ },
9324
+ {
9325
+ "path": "childLock",
9326
+ "valueType": "boolean"
9327
+ },
9328
+ {
9329
+ "path": "errorCode",
9330
+ "valueType": "number"
9331
+ },
9332
+ {
9333
+ "path": "errorLabel",
9334
+ "valueType": "string"
9335
+ }
9336
+ ],
9337
+ "doorbell": [{
9338
+ "path": "lastPressedAt",
9339
+ "valueType": "number"
9340
+ }, {
9341
+ "path": "pressCountSinceStart",
9342
+ "valueType": "number"
9343
+ }],
9344
+ "enum-sensor": [{
9345
+ "path": "value",
9346
+ "valueType": "string"
9347
+ }, {
9348
+ "path": "format",
9349
+ "valueType": "enum",
9350
+ "enumValues": [
9351
+ "date",
9352
+ "time",
9353
+ "datetime"
9354
+ ]
9355
+ }],
9356
+ "event-emitter": [
9357
+ {
9358
+ "path": "lastEvent.deviceId",
9359
+ "valueType": "number"
9360
+ },
9361
+ {
9362
+ "path": "lastEvent.eventType",
9363
+ "valueType": "string"
9364
+ },
9365
+ {
9366
+ "path": "lastEvent.timestamp",
9367
+ "valueType": "number"
9368
+ },
9369
+ {
9370
+ "path": "lastEvent.seq",
9371
+ "valueType": "number"
9372
+ },
9373
+ {
9374
+ "path": "eventCountSinceStart",
9375
+ "valueType": "number"
9376
+ }
9377
+ ],
9378
+ "fan-control": [
9379
+ {
9380
+ "path": "percentage",
9381
+ "valueType": "number"
9382
+ },
9383
+ {
9384
+ "path": "percentageStep",
9385
+ "valueType": "number"
9386
+ },
9387
+ {
9388
+ "path": "preset",
9389
+ "valueType": "string"
9390
+ },
9391
+ {
9392
+ "path": "direction",
9393
+ "valueType": "enum",
9394
+ "enumValues": ["forward", "reverse"]
9395
+ },
9396
+ {
9397
+ "path": "oscillating",
9398
+ "valueType": "boolean"
9399
+ }
9400
+ ],
9401
+ "feature-probe": [
9402
+ {
9403
+ "path": "deviceType",
9404
+ "valueType": "string"
9405
+ },
9406
+ {
9407
+ "path": "model",
9408
+ "valueType": "string"
9409
+ },
9410
+ {
9411
+ "path": "channelCount",
9412
+ "valueType": "number"
9413
+ },
9414
+ {
9415
+ "path": "lastProbedAt",
9416
+ "valueType": "number"
9417
+ }
9418
+ ],
9419
+ "flood": [{
9420
+ "path": "flooded",
9421
+ "valueType": "boolean"
9422
+ }],
9423
+ "gas": [{
9424
+ "path": "detected",
9425
+ "valueType": "boolean"
9426
+ }],
9427
+ "heating-valve": [{
9428
+ "path": "position",
9429
+ "valueType": "number"
9430
+ }],
9431
+ "humidifier": [
9432
+ {
9433
+ "path": "on",
9434
+ "valueType": "boolean"
9435
+ },
9436
+ {
9437
+ "path": "currentHumidity",
9438
+ "valueType": "number"
9439
+ },
9440
+ {
9441
+ "path": "targetHumidity",
9442
+ "valueType": "number"
9443
+ },
9444
+ {
9445
+ "path": "mode",
9446
+ "valueType": "string"
9447
+ },
9448
+ {
9449
+ "path": "action",
9450
+ "valueType": "string"
9451
+ },
9452
+ {
9453
+ "path": "minHumidity",
9454
+ "valueType": "number"
9455
+ },
9456
+ {
9457
+ "path": "maxHumidity",
9458
+ "valueType": "number"
9459
+ }
9460
+ ],
9461
+ "humidity-sensor": [
9462
+ {
9463
+ "path": "percent",
9464
+ "valueType": "number"
9465
+ },
9466
+ {
9467
+ "path": "unit",
9468
+ "valueType": "string"
9469
+ },
9470
+ {
9471
+ "path": "precision",
9472
+ "valueType": "number"
9473
+ }
9474
+ ],
9475
+ "image": [{
9476
+ "path": "url",
9477
+ "valueType": "string"
9478
+ }, {
9479
+ "path": "lastUpdated",
9480
+ "valueType": "number"
9481
+ }],
9482
+ "image-settings": [
9483
+ {
9484
+ "path": "brightness",
9485
+ "valueType": "number"
9486
+ },
9487
+ {
9488
+ "path": "contrast",
9489
+ "valueType": "number"
9490
+ },
9491
+ {
9492
+ "path": "saturation",
9493
+ "valueType": "number"
9494
+ },
9495
+ {
9496
+ "path": "sharpness",
9497
+ "valueType": "number"
9498
+ },
9499
+ {
9500
+ "path": "mirror",
9501
+ "valueType": "boolean"
9502
+ },
9503
+ {
9504
+ "path": "flip",
9505
+ "valueType": "boolean"
9506
+ },
9507
+ {
9508
+ "path": "rotate",
9509
+ "valueType": "enum",
9510
+ "enumValues": [
9511
+ "0",
9512
+ "90",
9513
+ "180",
9514
+ "270"
9515
+ ]
9516
+ },
9517
+ {
9518
+ "path": "whiteBalance",
9519
+ "valueType": "enum",
9520
+ "enumValues": ["auto", "manual"]
9521
+ },
9522
+ {
9523
+ "path": "warmth",
9524
+ "valueType": "number"
9525
+ },
9526
+ {
9527
+ "path": "exposureMode",
9528
+ "valueType": "enum",
9529
+ "enumValues": ["auto", "manual"]
9530
+ },
9531
+ {
9532
+ "path": "backlightMode",
9533
+ "valueType": "enum",
9534
+ "enumValues": [
9535
+ "off",
9536
+ "blc",
9537
+ "wdr",
9538
+ "hlc"
9539
+ ]
9540
+ }
9541
+ ],
9542
+ "intercom": [
9543
+ {
9544
+ "path": "talking",
9545
+ "valueType": "boolean"
9546
+ },
9547
+ {
9548
+ "path": "lastSessionAt",
9549
+ "valueType": "number"
9550
+ },
9551
+ {
9552
+ "path": "ability.sampleRate",
9553
+ "valueType": "number"
9554
+ },
9555
+ {
9556
+ "path": "ability.duplex",
9557
+ "valueType": "enum",
9558
+ "enumValues": ["half", "full"]
9559
+ },
9560
+ {
9561
+ "path": "ability.maxBacklogMs",
9562
+ "valueType": "number"
9563
+ }
9564
+ ],
9565
+ "lawn-mower-control": [
9566
+ {
9567
+ "path": "activity",
9568
+ "valueType": "enum",
9569
+ "enumValues": [
9570
+ "idle",
9571
+ "mowing",
9572
+ "paused",
9573
+ "docked",
9574
+ "error"
9575
+ ]
9576
+ },
9577
+ {
9578
+ "path": "batteryLevel",
9579
+ "valueType": "number"
9580
+ },
9581
+ {
9582
+ "path": "progressPercent",
9583
+ "valueType": "number"
9584
+ },
9585
+ {
9586
+ "path": "currentCode",
9587
+ "valueType": "number"
9588
+ },
9589
+ {
9590
+ "path": "currentCodeLabel",
9591
+ "valueType": "string"
9592
+ },
9593
+ {
9594
+ "path": "severity",
9595
+ "valueType": "enum",
9596
+ "enumValues": [
9597
+ "info",
9598
+ "warning",
9599
+ "error"
9600
+ ]
9601
+ }
9602
+ ],
9603
+ "lock-control": [{
9604
+ "path": "state",
9605
+ "valueType": "enum",
9606
+ "enumValues": [
9607
+ "locked",
9608
+ "unlocked",
9609
+ "locking",
9610
+ "unlocking",
9611
+ "jammed"
9612
+ ]
9613
+ }],
9614
+ "media-player": [
9615
+ {
9616
+ "path": "state",
9617
+ "valueType": "enum",
9618
+ "enumValues": [
9619
+ "off",
9620
+ "on",
9621
+ "idle",
9622
+ "playing",
9623
+ "paused",
9624
+ "buffering",
9625
+ "standby"
9626
+ ]
9627
+ },
9628
+ {
9629
+ "path": "volumeLevel",
9630
+ "valueType": "number"
9631
+ },
9632
+ {
9633
+ "path": "isMuted",
9634
+ "valueType": "boolean"
9635
+ },
9636
+ {
9637
+ "path": "source",
9638
+ "valueType": "string"
9639
+ },
9640
+ {
9641
+ "path": "currentMedia.type",
9642
+ "valueType": "string"
9643
+ },
9644
+ {
9645
+ "path": "currentMedia.title",
9646
+ "valueType": "string"
9647
+ },
9648
+ {
9649
+ "path": "currentMedia.artist",
9650
+ "valueType": "string"
9651
+ },
9652
+ {
9653
+ "path": "currentMedia.album",
9654
+ "valueType": "string"
9655
+ },
9656
+ {
9657
+ "path": "currentMedia.imageUrl",
9658
+ "valueType": "string"
9659
+ },
9660
+ {
9661
+ "path": "positionMs",
9662
+ "valueType": "number"
9663
+ },
9664
+ {
9665
+ "path": "durationMs",
9666
+ "valueType": "number"
9667
+ },
9668
+ {
9669
+ "path": "shuffle",
9670
+ "valueType": "boolean"
9671
+ },
9672
+ {
9673
+ "path": "repeat",
9674
+ "valueType": "enum",
9675
+ "enumValues": [
9676
+ "off",
9677
+ "all",
9678
+ "one"
9679
+ ]
9680
+ }
9681
+ ],
9682
+ "motion": [
9683
+ {
9684
+ "path": "detected",
9685
+ "valueType": "boolean"
9686
+ },
9687
+ {
9688
+ "path": "lastDetectedAt",
9689
+ "valueType": "number"
9690
+ },
9691
+ {
9692
+ "path": "autoClearAfterMs",
9693
+ "valueType": "number"
9694
+ }
9695
+ ],
9696
+ "motion-trigger": [{
9697
+ "path": "enabled",
9698
+ "valueType": "boolean"
9699
+ }],
9700
+ "motion-zones": [{
9701
+ "path": "enabled",
9702
+ "valueType": "boolean"
9703
+ }, {
9704
+ "path": "sensitivity",
9705
+ "valueType": "number"
9706
+ }],
9707
+ "mqtt-broker": [{
9708
+ "path": "brokerCount",
9709
+ "valueType": "number"
9710
+ }, {
9711
+ "path": "embeddedRunning",
9712
+ "valueType": "boolean"
9713
+ }],
9714
+ "native-object-detection": [{
9715
+ "path": "enabled",
9716
+ "valueType": "boolean"
9717
+ }],
9718
+ "navigation": [
9719
+ {
9720
+ "path": "mode",
9721
+ "valueType": "enum",
9722
+ "enumValues": [
9723
+ "idle",
9724
+ "cleaning",
9725
+ "spot",
9726
+ "following",
9727
+ "goto",
9728
+ "returning",
9729
+ "paused",
9730
+ "unknown"
9731
+ ]
9732
+ },
9733
+ {
9734
+ "path": "following",
9735
+ "valueType": "boolean"
9736
+ },
9737
+ {
9738
+ "path": "flash",
9739
+ "valueType": "boolean"
9740
+ },
9741
+ {
9742
+ "path": "lightMode",
9743
+ "valueType": "enum",
9744
+ "enumValues": ["auto", "manual"]
9745
+ },
9746
+ {
9747
+ "path": "lightLevel",
9748
+ "valueType": "number"
9749
+ }
9750
+ ],
9751
+ "network-link": [
9752
+ {
9753
+ "path": "type",
9754
+ "valueType": "enum",
9755
+ "enumValues": [
9756
+ "wifi",
9757
+ "ethernet",
9758
+ "cellular",
9759
+ "unknown"
9760
+ ]
9761
+ },
9762
+ {
9763
+ "path": "signalPercent",
9764
+ "valueType": "number"
9765
+ },
9766
+ {
9767
+ "path": "rssiDbm",
9768
+ "valueType": "number"
9769
+ },
9770
+ {
9771
+ "path": "ssid",
9772
+ "valueType": "string"
9773
+ },
9774
+ {
9775
+ "path": "lastUpdated",
9776
+ "valueType": "number"
9777
+ }
9778
+ ],
9779
+ "notifier": [
9780
+ {
9781
+ "path": "lastSentAt",
9782
+ "valueType": "number"
9783
+ },
9784
+ {
9785
+ "path": "lastError",
9786
+ "valueType": "string"
9787
+ },
9788
+ {
9789
+ "path": "queueDepth",
9790
+ "valueType": "number"
9791
+ },
9792
+ {
9793
+ "path": "supports.image",
9794
+ "valueType": "boolean"
9795
+ },
9796
+ {
9797
+ "path": "supports.priority",
9798
+ "valueType": "boolean"
9799
+ },
9800
+ {
9801
+ "path": "supports.data",
9802
+ "valueType": "boolean"
9803
+ },
9804
+ {
9805
+ "path": "supports.actions",
9806
+ "valueType": "boolean"
9807
+ },
9808
+ {
9809
+ "path": "supports.recipients",
9810
+ "valueType": "boolean"
9811
+ }
9812
+ ],
9813
+ "numeric-sensor": [
9814
+ {
9815
+ "path": "value",
9816
+ "valueType": "number"
9817
+ },
9818
+ {
9819
+ "path": "unit",
9820
+ "valueType": "string"
9821
+ },
9822
+ {
9823
+ "path": "precision",
9824
+ "valueType": "number"
9825
+ }
9826
+ ],
9827
+ "pet-feeder": [
9828
+ {
9829
+ "path": "foodLevel",
9830
+ "valueType": "number"
9831
+ },
9832
+ {
9833
+ "path": "food1",
9834
+ "valueType": "number"
9835
+ },
9836
+ {
9837
+ "path": "food2",
9838
+ "valueType": "number"
9839
+ },
9840
+ {
9841
+ "path": "lowFood",
9842
+ "valueType": "boolean"
9843
+ },
9844
+ {
9845
+ "path": "batteryPower",
9846
+ "valueType": "number"
9847
+ },
9848
+ {
9849
+ "path": "desiccantLeftDays",
9850
+ "valueType": "number"
9851
+ },
9852
+ {
9853
+ "path": "feeding",
9854
+ "valueType": "boolean"
9855
+ },
9856
+ {
9857
+ "path": "status",
9858
+ "valueType": "enum",
9859
+ "enumValues": [
9860
+ "normal",
9861
+ "offline",
9862
+ "on_batteries"
9863
+ ]
9864
+ },
9865
+ {
9866
+ "path": "error",
9867
+ "valueType": "string"
9868
+ },
9869
+ {
9870
+ "path": "errorCode",
9871
+ "valueType": "number"
9872
+ },
9873
+ {
9874
+ "path": "isDualHopper",
9875
+ "valueType": "boolean"
9876
+ },
9877
+ {
9878
+ "path": "childLock",
9879
+ "valueType": "boolean"
9880
+ },
9881
+ {
9882
+ "path": "indicatorLight",
9883
+ "valueType": "boolean"
9884
+ },
9885
+ {
9886
+ "path": "feedSound",
9887
+ "valueType": "boolean"
9888
+ },
9889
+ {
9890
+ "path": "volume",
9891
+ "valueType": "number"
9892
+ }
9893
+ ],
9894
+ "power-meter": [
9895
+ {
9896
+ "path": "watts",
9897
+ "valueType": "number"
9898
+ },
9899
+ {
9900
+ "path": "kwhTotal",
9901
+ "valueType": "number"
9902
+ },
9903
+ {
9904
+ "path": "volts",
9905
+ "valueType": "number"
9906
+ },
9907
+ {
9908
+ "path": "amps",
9909
+ "valueType": "number"
9910
+ },
9911
+ {
9912
+ "path": "va",
9913
+ "valueType": "number"
9914
+ },
9915
+ {
9916
+ "path": "powerFactor",
9917
+ "valueType": "number"
9918
+ },
9919
+ {
9920
+ "path": "unit",
9921
+ "valueType": "string"
9922
+ },
9923
+ {
9924
+ "path": "precision",
9925
+ "valueType": "number"
9926
+ }
9927
+ ],
9928
+ "presence": [
9929
+ {
9930
+ "path": "state",
9931
+ "valueType": "string"
9932
+ },
9933
+ {
9934
+ "path": "location",
9935
+ "valueType": "string"
9936
+ },
9937
+ {
9938
+ "path": "gps.latitude",
9939
+ "valueType": "number"
9940
+ },
9941
+ {
9942
+ "path": "gps.longitude",
9943
+ "valueType": "number"
9944
+ },
9945
+ {
9946
+ "path": "gps.accuracyMeters",
9947
+ "valueType": "number"
9948
+ },
9949
+ {
9950
+ "path": "batteryPercent",
9951
+ "valueType": "number"
9952
+ }
9953
+ ],
9954
+ "pressure-sensor": [
9955
+ {
9956
+ "path": "hpa",
9957
+ "valueType": "number"
9958
+ },
9959
+ {
9960
+ "path": "unit",
9961
+ "valueType": "string"
9962
+ },
9963
+ {
9964
+ "path": "precision",
9965
+ "valueType": "number"
9966
+ }
9967
+ ],
9968
+ "privacy-mask": [{
9969
+ "path": "enabled",
9970
+ "valueType": "boolean"
9971
+ }, {
9972
+ "path": "audioEnabled",
9973
+ "valueType": "boolean"
9974
+ }],
9975
+ "ptz": [
9976
+ {
9977
+ "path": "pan",
9978
+ "valueType": "number"
9979
+ },
9980
+ {
9981
+ "path": "tilt",
9982
+ "valueType": "number"
9983
+ },
9984
+ {
9985
+ "path": "zoom",
9986
+ "valueType": "number"
9987
+ },
9988
+ {
9989
+ "path": "autofocus",
9990
+ "valueType": "boolean"
9991
+ }
9992
+ ],
9993
+ "ptz-autotrack": [
9994
+ {
9995
+ "path": "enabled",
9996
+ "valueType": "boolean"
9997
+ },
9998
+ {
9999
+ "path": "currentSettings.targetType",
10000
+ "valueType": "string"
10001
+ },
10002
+ {
10003
+ "path": "currentSettings.stopDelaySeconds",
10004
+ "valueType": "number"
10005
+ },
10006
+ {
10007
+ "path": "currentSettings.disappearDelaySeconds",
10008
+ "valueType": "number"
10009
+ }
10010
+ ],
10011
+ "recording-archive": [
10012
+ {
10013
+ "path": "deviceId",
10014
+ "valueType": "number"
10015
+ },
10016
+ {
10017
+ "path": "enabled",
10018
+ "valueType": "boolean"
10019
+ },
10020
+ {
10021
+ "path": "activeMode",
10022
+ "valueType": "enum",
10023
+ "enumValues": [
10024
+ "off",
10025
+ "events",
10026
+ "continuous",
10027
+ "on-device-decision"
10028
+ ]
10029
+ },
10030
+ {
10031
+ "path": "nodeId",
10032
+ "valueType": "string"
10033
+ },
10034
+ {
10035
+ "path": "storageBytes",
10036
+ "valueType": "number"
10037
+ }
10038
+ ],
10039
+ "recording-onboard": [
10040
+ {
10041
+ "path": "primaryTrackId",
10042
+ "valueType": "string"
10043
+ },
10044
+ {
10045
+ "path": "enabled",
10046
+ "valueType": "boolean"
10047
+ },
10048
+ {
10049
+ "path": "overwriteWhenFull",
10050
+ "valueType": "boolean"
10051
+ },
10052
+ {
10053
+ "path": "preRecordSec",
10054
+ "valueType": "number"
10055
+ },
10056
+ {
10057
+ "path": "postRecordSec",
10058
+ "valueType": "number"
10059
+ },
10060
+ {
10061
+ "path": "segmentMinutes",
10062
+ "valueType": "number"
10063
+ },
10064
+ {
10065
+ "path": "unreadableWindows",
10066
+ "valueType": "number"
10067
+ },
10068
+ {
10069
+ "path": "recordingToNowhere",
10070
+ "valueType": "boolean"
10071
+ }
10072
+ ],
10073
+ "recording-signal": [{
10074
+ "path": "active",
10075
+ "valueType": "boolean"
10076
+ }, {
10077
+ "path": "reason",
10078
+ "valueType": "string"
10079
+ }],
10080
+ "running-state": [
10081
+ {
10082
+ "path": "running",
10083
+ "valueType": "boolean"
10084
+ },
10085
+ {
10086
+ "path": "since",
10087
+ "valueType": "number"
10088
+ },
10089
+ {
10090
+ "path": "source",
10091
+ "valueType": "enum",
10092
+ "enumValues": ["native", "assigned"]
10093
+ },
10094
+ {
10095
+ "path": "phase",
10096
+ "valueType": "string"
10097
+ }
10098
+ ],
10099
+ "script-runner": [
10100
+ {
10101
+ "path": "isRunning",
10102
+ "valueType": "boolean"
10103
+ },
10104
+ {
10105
+ "path": "lastRunAt",
10106
+ "valueType": "number"
10107
+ },
10108
+ {
10109
+ "path": "lastRunSuccess",
10110
+ "valueType": "boolean"
10111
+ },
10112
+ {
10113
+ "path": "lastError",
10114
+ "valueType": "string"
10115
+ }
10116
+ ],
10117
+ "smoke": [{
10118
+ "path": "detected",
10119
+ "valueType": "boolean"
10120
+ }],
10121
+ "snapshot": [
10122
+ {
10123
+ "path": "lastCapturedAt",
10124
+ "valueType": "number"
10125
+ },
10126
+ {
10127
+ "path": "cacheAgeMs",
10128
+ "valueType": "number"
10129
+ },
10130
+ {
10131
+ "path": "lastBytes",
10132
+ "valueType": "number"
10133
+ },
10134
+ {
10135
+ "path": "lastStreamId",
10136
+ "valueType": "string"
10137
+ }
10138
+ ],
10139
+ "stream-params": [
10140
+ {
10141
+ "path": "main.width",
10142
+ "valueType": "number"
10143
+ },
10144
+ {
10145
+ "path": "main.height",
10146
+ "valueType": "number"
10147
+ },
10148
+ {
10149
+ "path": "main.codec",
10150
+ "valueType": "enum",
10151
+ "enumValues": ["h264", "h265"]
10152
+ },
10153
+ {
10154
+ "path": "main.framerate",
10155
+ "valueType": "number"
10156
+ },
10157
+ {
10158
+ "path": "main.bitrate",
10159
+ "valueType": "number"
10160
+ },
10161
+ {
10162
+ "path": "main.bitrateMode",
10163
+ "valueType": "enum",
10164
+ "enumValues": ["vbr", "cbr"]
10165
+ },
10166
+ {
10167
+ "path": "main.encoderProfile",
10168
+ "valueType": "enum",
10169
+ "enumValues": [
10170
+ "high",
10171
+ "main",
10172
+ "baseline"
10173
+ ]
10174
+ },
10175
+ {
10176
+ "path": "main.gop",
10177
+ "valueType": "number"
10178
+ },
10179
+ {
10180
+ "path": "main.audio",
10181
+ "valueType": "boolean"
10182
+ },
10183
+ {
10184
+ "path": "sub.width",
10185
+ "valueType": "number"
10186
+ },
10187
+ {
10188
+ "path": "sub.height",
10189
+ "valueType": "number"
10190
+ },
10191
+ {
10192
+ "path": "sub.codec",
10193
+ "valueType": "enum",
10194
+ "enumValues": ["h264", "h265"]
10195
+ },
10196
+ {
10197
+ "path": "sub.framerate",
10198
+ "valueType": "number"
10199
+ },
10200
+ {
10201
+ "path": "sub.bitrate",
10202
+ "valueType": "number"
10203
+ },
10204
+ {
10205
+ "path": "sub.bitrateMode",
10206
+ "valueType": "enum",
10207
+ "enumValues": ["vbr", "cbr"]
10208
+ },
10209
+ {
10210
+ "path": "sub.encoderProfile",
10211
+ "valueType": "enum",
10212
+ "enumValues": [
10213
+ "high",
10214
+ "main",
10215
+ "baseline"
10216
+ ]
10217
+ },
10218
+ {
10219
+ "path": "sub.gop",
10220
+ "valueType": "number"
10221
+ },
10222
+ {
10223
+ "path": "sub.audio",
10224
+ "valueType": "boolean"
10225
+ },
10226
+ {
10227
+ "path": "ext.width",
10228
+ "valueType": "number"
10229
+ },
10230
+ {
10231
+ "path": "ext.height",
10232
+ "valueType": "number"
10233
+ },
10234
+ {
10235
+ "path": "ext.codec",
10236
+ "valueType": "enum",
10237
+ "enumValues": ["h264", "h265"]
10238
+ },
10239
+ {
10240
+ "path": "ext.framerate",
10241
+ "valueType": "number"
10242
+ },
10243
+ {
10244
+ "path": "ext.bitrate",
10245
+ "valueType": "number"
10246
+ },
10247
+ {
10248
+ "path": "ext.bitrateMode",
10249
+ "valueType": "enum",
10250
+ "enumValues": ["vbr", "cbr"]
10251
+ },
10252
+ {
10253
+ "path": "ext.encoderProfile",
10254
+ "valueType": "enum",
10255
+ "enumValues": [
10256
+ "high",
10257
+ "main",
10258
+ "baseline"
10259
+ ]
10260
+ },
10261
+ {
10262
+ "path": "ext.gop",
10263
+ "valueType": "number"
10264
+ },
10265
+ {
10266
+ "path": "ext.audio",
10267
+ "valueType": "boolean"
10268
+ }
10269
+ ],
10270
+ "switch": [{
10271
+ "path": "on",
10272
+ "valueType": "boolean"
10273
+ }],
10274
+ "tamper": [{
10275
+ "path": "tampered",
10276
+ "valueType": "boolean"
10277
+ }],
10278
+ "temperature-sensor": [
10279
+ {
10280
+ "path": "celsius",
10281
+ "valueType": "number"
10282
+ },
10283
+ {
10284
+ "path": "unit",
10285
+ "valueType": "string"
10286
+ },
10287
+ {
10288
+ "path": "precision",
10289
+ "valueType": "number"
10290
+ }
10291
+ ],
10292
+ "update": [
10293
+ {
10294
+ "path": "currentVersion",
10295
+ "valueType": "string"
10296
+ },
10297
+ {
10298
+ "path": "availableVersion",
10299
+ "valueType": "string"
10300
+ },
10301
+ {
10302
+ "path": "updatable",
10303
+ "valueType": "boolean"
10304
+ },
10305
+ {
10306
+ "path": "state",
10307
+ "valueType": "string"
10308
+ },
10309
+ {
10310
+ "path": "inProgress",
10311
+ "valueType": "boolean"
10312
+ }
10313
+ ],
10314
+ "vacuum-control": [
10315
+ {
10316
+ "path": "state",
10317
+ "valueType": "enum",
10318
+ "enumValues": [
10319
+ "idle",
10320
+ "cleaning",
10321
+ "paused",
10322
+ "returning",
10323
+ "docked",
10324
+ "drying",
10325
+ "error"
10326
+ ]
10327
+ },
10328
+ {
10329
+ "path": "batteryLevel",
10330
+ "valueType": "number"
10331
+ },
10332
+ {
10333
+ "path": "fanSpeed",
10334
+ "valueType": "string"
10335
+ },
10336
+ {
10337
+ "path": "progressPercent",
10338
+ "valueType": "number"
10339
+ },
10340
+ {
10341
+ "path": "errorCode",
10342
+ "valueType": "number"
10343
+ },
10344
+ {
10345
+ "path": "errorLabel",
10346
+ "valueType": "string"
10347
+ }
10348
+ ],
10349
+ "valve": [{
10350
+ "path": "state",
10351
+ "valueType": "enum",
10352
+ "enumValues": [
10353
+ "open",
10354
+ "opening",
10355
+ "closing",
10356
+ "closed",
10357
+ "stopped"
10358
+ ]
10359
+ }, {
10360
+ "path": "position",
10361
+ "valueType": "number"
10362
+ }],
10363
+ "vibration": [{
10364
+ "path": "detected",
10365
+ "valueType": "boolean"
10366
+ }],
10367
+ "water-heater": [
10368
+ {
10369
+ "path": "currentTemp",
10370
+ "valueType": "number"
10371
+ },
10372
+ {
10373
+ "path": "targetTemp",
10374
+ "valueType": "number"
10375
+ },
10376
+ {
10377
+ "path": "operationMode",
10378
+ "valueType": "string"
10379
+ },
10380
+ {
10381
+ "path": "away",
10382
+ "valueType": "boolean"
10383
+ },
10384
+ {
10385
+ "path": "minTemp",
10386
+ "valueType": "number"
10387
+ },
10388
+ {
10389
+ "path": "maxTemp",
10390
+ "valueType": "number"
10391
+ }
10392
+ ],
10393
+ "weather": [
10394
+ {
10395
+ "path": "condition",
10396
+ "valueType": "string"
10397
+ },
10398
+ {
10399
+ "path": "temperature",
10400
+ "valueType": "number"
10401
+ },
10402
+ {
10403
+ "path": "temperatureUnit",
10404
+ "valueType": "string"
10405
+ },
10406
+ {
10407
+ "path": "humidity",
10408
+ "valueType": "number"
10409
+ },
10410
+ {
10411
+ "path": "pressure",
10412
+ "valueType": "number"
10413
+ },
10414
+ {
10415
+ "path": "pressureUnit",
10416
+ "valueType": "string"
10417
+ },
10418
+ {
10419
+ "path": "windSpeed",
10420
+ "valueType": "number"
10421
+ },
10422
+ {
10423
+ "path": "windSpeedUnit",
10424
+ "valueType": "string"
10425
+ },
10426
+ {
10427
+ "path": "windBearing",
10428
+ "valueType": "number"
10429
+ }
10430
+ ],
10431
+ "zone-analytics": [
10432
+ {
10433
+ "path": "ts",
10434
+ "valueType": "number"
10435
+ },
10436
+ {
10437
+ "path": "frameWidth",
10438
+ "valueType": "number"
10439
+ },
10440
+ {
10441
+ "path": "frameHeight",
10442
+ "valueType": "number"
10443
+ },
10444
+ {
10445
+ "path": "frame.totalObjects",
10446
+ "valueType": "number"
10447
+ },
10448
+ {
10449
+ "path": "frame.standingObjects",
10450
+ "valueType": "number"
10451
+ },
10452
+ {
10453
+ "path": "frame.transientObjects",
10454
+ "valueType": "number"
10455
+ },
10456
+ {
10457
+ "path": "unzoned.totalObjects",
10458
+ "valueType": "number"
10459
+ },
10460
+ {
10461
+ "path": "unzoned.standingObjects",
10462
+ "valueType": "number"
10463
+ },
10464
+ {
10465
+ "path": "unzoned.transientObjects",
10466
+ "valueType": "number"
10467
+ }
10468
+ ]
10469
+ });
8496
10470
  object({
8497
10471
  code: string().regex(/^[a-z][a-z0-9-]*(\.[a-z0-9-]+)+$/),
8498
10472
  params: record(string(), union([string(), number()])).optional()
@@ -8855,7 +10829,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
8855
10829
  return DeviceRole;
8856
10830
  }({});
8857
10831
  //#endregion
8858
- //#region ../types/dist/composition-BJ8iAZb3.mjs
10832
+ //#region ../types/dist/composition-kEl9mevu.mjs
8859
10833
  /**
8860
10834
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8861
10835
  *
@@ -12108,7 +14082,7 @@ var LogChannelDescriptorSchema = object({
12108
14082
  * `true` is a PROMISE with two halves, and both must hold: the gate is
12109
14083
  * consulted with the numeric device id, AND every line the channel admits
12110
14084
  * carries `tags: { deviceId }` with that same numeric id. The second half is
12111
- * what makes `| json | deviceId="617"` work in Loki — `loki-payload.ts`
14085
+ * what makes `| json | deviceId="102"` work in Loki — `loki-payload.ts`
12112
14086
  * keeps `deviceId` out of the stream labels for cardinality, so the tag in
12113
14087
  * the body is the only way to filter.
12114
14088
  *
@@ -12296,7 +14270,7 @@ var ModelVariantGroupSchema = object({
12296
14270
  precision: _enum(["fp32", "int8"]).optional(),
12297
14271
  /**
12298
14272
  * Training / latency-variant axis. Omit ⇒ the standard build. `test` marks
12299
- * an alternate training of the same family (Scrypted `relu_test`); chip
14273
+ * an alternate training of the same family (plugin catalog `relu_test`); chip
12300
14274
  * label is "Test".
12301
14275
  */
12302
14276
  optimization: _enum(["standard", "test"]).optional(),
@@ -12548,8 +14522,8 @@ var ModelCatalogEntrySchema = object({
12548
14522
  provider: ModelProviderIdSchema.optional(),
12549
14523
  /**
12550
14524
  * Per-MODEL class map override. Absent ⇒ the step's `StepDefinition.classMap`
12551
- * applies (Frigate / COCO public catalog). Set on a custom model whose raw
12552
- * labels already ARE the CamStack macros (Scrypted identity map).
14525
+ * applies (plus catalog / COCO public catalog). Set on a custom model whose raw
14526
+ * labels already ARE the CamStack macros (plugin catalog identity map).
12553
14527
  */
12554
14528
  classMap: DetectionCatalogClassMapSchema.optional(),
12555
14529
  /**
@@ -15518,7 +17492,7 @@ method(object({
15518
17492
  * `1` is real time and is the ONLY value that allows the copy branch —
15519
17493
  * anything else forces `libx264` over the window. That was priced
15520
17494
  * before it was chosen: a per-event burst measured at 0.23 s and 254 KB
15521
- * on a real 615 720p cut, against 922 KB for the copy it replaces. A
17495
+ * on a real 101 720p cut, against 922 KB for the copy it replaces. A
15522
17496
  * re-encode is capped at 720p (`EVENT_CLIP_ENCODE_MAX_WIDTH`), because
15523
17497
  * once the decode is forced the width stops being free.
15524
17498
  */
@@ -16044,6 +18018,7 @@ var CompositionRunStatusSchema = _enum([
16044
18018
  "starting",
16045
18019
  "running",
16046
18020
  "degraded",
18021
+ "incomplete",
16047
18022
  "failed"
16048
18023
  ]);
16049
18024
  var CompositionFieldStateKindSchema = _enum([
@@ -16257,6 +18232,7 @@ var CoreBlockStatusSchema = _enum([
16257
18232
  "starting",
16258
18233
  "running",
16259
18234
  "degraded",
18235
+ "incomplete",
16260
18236
  "failed"
16261
18237
  ]);
16262
18238
  /** path → TypeScript source for a multi-file block. */
@@ -38404,7 +40380,7 @@ var PRIMARY_CATEGORIES = new Set(ENTRIES.map((e) => e.primaryCategory));
38404
40380
  * `locationKey` is ALWAYS {@link locationIconKey} of the label — never the
38405
40381
  * operator's casing. The registry matches labels trimmed + case-insensitively
38406
40382
  * everywhere (`addLocation`, `removeLocation`, `renameLocation`), and a
38407
- * case-only rename (`cucina` → `Cucina`) is a real edit this repo supports; a
40383
+ * case-only rename (`kitchen` → `Kitchen`) is a real edit this repo supports; a
38408
40384
  * map keyed on the displayed casing would orphan its entry on exactly that
38409
40385
  * edit. Consumers join by keying their own label through `locationIconKey`.
38410
40386
  */
@@ -38429,7 +40405,7 @@ var LocationDescriptionAssignmentSchema = object({
38429
40405
  /**
38430
40406
  * A SITE ZONE — a named part of the property that several locations belong to.
38431
40407
  *
38432
- * "Zona notte" holds every bedroom; "Zona giorno" the living room and the
40408
+ * "Night zone" holds every bedroom; "Zona giorno" the living room and the
38433
40409
  * kitchen. A camera belongs to exactly one location, and a location to at most
38434
40410
  * one zone, so a camera's zone is derived and never stored on the device: the
38435
40411
  * whole point of this entity is that grouping rooms touches no device row.
@@ -38458,7 +40434,7 @@ var LocationDescriptionAssignmentSchema = object({
38458
40434
  * the locations inside it.
38459
40435
  *
38460
40436
  * The LABEL is carried alongside the key because the key is lossy on purpose —
38461
- * a surface must show "Zona notte", not "zona notte". Locations are carried
40437
+ * a surface must show "Night zone", not "night zone". Locations are carried
38462
40438
  * here, rather than left to a second call, because every consumer wants both
38463
40439
  * at once and a viewer that asked twice could render a zone whose membership
38464
40440
  * it has not fetched yet.
@@ -40652,8 +42628,8 @@ var LoadContributionSchema = object({
40652
42628
  "unattributable"
40653
42629
  ]),
40654
42630
  /**
40655
- * What ONE entry is, in the contributor's own words — `615/high`,
40656
- * `617/native`, `cuda:0 shared pool`. Free text because the unit differs per
42631
+ * What ONE entry is, in the contributor's own words — `101/high`,
42632
+ * `102/native`, `cuda:0 shared pool`. Free text because the unit differs per
40657
42633
  * family and inventing a common one would lose the only information that
40658
42634
  * makes two entries for the same camera distinguishable.
40659
42635
  */
@@ -43657,7 +45633,7 @@ var NcConditionsSchema = object({
43657
45633
  * with the list under it is worse than no switch (D62).
43658
45634
  *
43659
45635
  * MEMBERS ARE FACE-GALLERY `Identity.id`s (uuid), not display names. A name is
43660
- * renameable, and a rule authored on "Gianluca" went silently dark the moment
45636
+ * renameable, and a rule authored on "Alice" went silently dark the moment
43661
45637
  * the operator fixed the spelling. The id reaches the record on
43662
45638
  * `LabelAttribution.identityId`; the name is what the editor shows and what
43663
45639
  * `{{label}}` renders.
@@ -44208,7 +46184,7 @@ var NcRulePatchSchema = NcRuleInputSchema.partial().extend({
44208
46184
  * A rule scoped to one camera and one zone silently became a rule that
44209
46185
  * matches EVERY event on EVERY camera, and lost its `media` policy
44210
46186
  * (zoneCrop / gif / clip / frame) and its `priority` at the same time. Seen
44211
- * live on 2026-08-12: a rule scoped to device 617 fired on 590 and 615
46187
+ * live on 2026-08-12: a rule scoped to device 102 fired on 104 and 101
44212
46188
  * within a minute of a two-field patch.
44213
46189
  *
44214
46190
  * So every defaulted field is re-declared here WITHOUT its default. The
@@ -46021,7 +47997,7 @@ var LabelAttributionSchema = object({
46021
47997
  * `Identity.id` or a plate-gallery `Vehicle.id` (both `randomUUID`).
46022
47998
  *
46023
47999
  * The text alone is a DISPLAY NAME, and a display name is renameable: a
46024
- * notification rule authored on "Gianluca" stopped matching the moment the
48000
+ * notification rule authored on "Alice" stopped matching the moment the
46025
48001
  * operator fixed the spelling in the gallery, and nothing said so. The id is
46026
48002
  * the thing that does not move, so it is what a rule matches on
46027
48003
  * (`NcConditions.identities`) and the text is what a human is shown.
@@ -48560,7 +50536,7 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
48560
50536
  /**
48561
50537
  * Root-supplied detections for the tree's ROOT step (D730). Set by
48562
50538
  * `runDetailSubtree` when the camera's root model supplies a crop-kind
48563
- * step (a Frigate+ `license_plate` for `plate-detection`): the step is
50539
+ * step (a plus catalog `license_plate` for `plate-detection`): the step is
48564
50540
  * NOT inferred, these boxes are its output, and its children (the plate
48565
50541
  * reader) run on them through their own crop policy. Boxes are in the
48566
50542
  * PIXELS of the image this call carries. Absent ⇒ the root step runs.
@@ -50237,7 +52213,7 @@ var RunnerCameraConfigSchema = object({
50237
52213
  * detection session that asks for history. What shipped was a last-moment
50238
52214
  * discard — `FrameSlot`'s throttle compares wall clocks, and ~4 s of media
50239
52215
  * arriving inside a few hundred ms of wall clock looks to it like one frame's
50240
- * worth. Device 617, 2026-09-08: a re-run of the SAME model over the stored
52216
+ * worth. Device 102, 2026-09-08: a re-run of the SAME model over the stored
50241
52217
  * recording scored the subject `vehicle 0.5669` — above the 0.50 floor —
50242
52218
  * 1.68 s BEFORE the live track was born, on a frame that was in the pre-roll,
50243
52219
  * was decoded, and was freed.
@@ -52371,7 +54347,7 @@ method(_void(), ProviderInfoSchema, { auth: "admin" }), method(object({ config:
52371
54347
  * The signals a device can emit to WAKE its own stream.
52372
54348
  *
52373
54349
  * A camera whose stream is built on demand sleeps until something asks for it,
52374
- * and "something" cannot be a consumer that is merely attached — a Frigate-style
54350
+ * and "something" cannot be a consumer that is merely attached — a external-catalog
52375
54351
  * puller holds a session open for ever, and treating that as demand would keep
52376
54352
  * a battery camera awake for ever, which is the whole thing the battery is for
52377
54353
  * (D173). So the wake has to come from the CAMERA: an event it noticed by
@@ -53130,7 +55106,7 @@ var ClipSchema = object({
53130
55106
  * {@link MAX_CLIP_EVENT_IDS}. Empty on footage-only clips.
53131
55107
  *
53132
55108
  * Bounded because it is not a payload the surface pages through: one visit on
53133
- * device 615 carried 2 345 ids, and `eventIds` was 99% of a 153 KB
55109
+ * device 101 carried 2 345 ids, and `eventIds` was 99% of a 153 KB
53134
55110
  * camera-day. Read {@link eventCount} for the true total.
53135
55111
  */
53136
55112
  eventIds: array(string()).optional(),
@@ -53275,7 +55251,7 @@ var ClipPlaybackSchema = object({
53275
55251
  * camera has no recordings", which is the defect this whole line of work is
53276
55252
  * about: a battery camera nobody woke (`sleeping`), a camera that could not be
53277
55253
  * reached at all (`unreachable`, also what a provider that THREW reports), a
53278
- * camera whose SD card is not mounted (`no-storage`, measured on 640 —
55254
+ * camera whose SD card is not mounted (`no-storage`, measured on 106 —
53279
55255
  * `HddInfo mount 0`, honestly nothing to list rather than "no clips"), and a
53280
55256
  * camera whose OWN index disagrees with its OWN calendar (`index-empty`,
53281
55257
  * measured on 618: the calendar marks 3–20 September, days 6–20 list zero
@@ -53736,7 +55712,7 @@ var videoclipsCapability = {
53736
55712
  *
53737
55713
  * It was optional, documented as "absent means the device's BOUND
53738
55714
  * provider, which is CamStack on every camera". No code implemented
53739
- * that. Measured on the live hub 2026-09-20 — device 592, bound to
55715
+ * that. Measured on the live hub 2026-09-20 — device 107, bound to
53740
55716
  * `recorder` AND `provider-reolink` — a bare call with `limit: 3`
53741
55717
  * answered SIX rows, three from each source, merged newest-first:
53742
55718
  * `device-collection-dispatch.ts` simply left the fan-out un-narrowed,
@@ -55053,7 +57029,10 @@ var airQualitySensorCapability = {
55053
57029
  */
55054
57030
  var AmbientLightSensorStatusSchema = object({
55055
57031
  /** Current illuminance in lux (lx). */
55056
- lux: number().min(0),
57032
+ lux: number().min(0).meta({
57033
+ unit: "lx",
57034
+ label: "Illuminance"
57035
+ }),
55057
57036
  /** Ms epoch when the slice was last updated. */
55058
57037
  lastFetchedAt: number(),
55059
57038
  /** Live display unit from the upstream source (e.g. HA
@@ -55096,7 +57075,12 @@ var ambientLightSensorCapability = {
55096
57075
  } } },
55097
57076
  /** Clock fields: written, but excluded from the compare that decides
55098
57077
  * whether persisting is worth a SQLite commit. */
55099
- volatileStateFields: ["lastFetchedAt"]
57078
+ volatileStateFields: ["lastFetchedAt"],
57079
+ customize: {
57080
+ version: 1,
57081
+ advanced: "derive",
57082
+ targets: []
57083
+ }
55100
57084
  };
55101
57085
  /**
55102
57086
  * Per-class audio metrics aggregated over a sliding window.
@@ -55323,7 +57307,10 @@ var BatteryStatusSchema = object({
55323
57307
  * Consumers must SKIP a null rather than coerce it — `battery-band` already
55324
57308
  * declines to band a non-finite reading, which is the correct shape.
55325
57309
  */
55326
- percentage: number().min(0).max(100).nullable(),
57310
+ percentage: number().min(0).max(100).nullable().meta({
57311
+ unit: "%",
57312
+ label: "Charge"
57313
+ }),
55327
57314
  /**
55328
57315
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
55329
57316
  * Reolink-specific for the Solar Panel 2 accessory (will become
@@ -55342,13 +57329,13 @@ var BatteryStatusSchema = object({
55342
57329
  "solar",
55343
57330
  "none",
55344
57331
  "unknown"
55345
- ]),
57332
+ ]).meta({ label: "Charging source" }),
55346
57333
  /**
55347
57334
  * True when the camera firmware has gone into low-power mode. Battery
55348
57335
  * providers MUST avoid polling during sleep — reading the battery
55349
57336
  * wakes the camera up and drains charge.
55350
57337
  */
55351
- sleeping: boolean(),
57338
+ sleeping: boolean().meta({ label: "Sleeping" }),
55352
57339
  /** Ms epoch of the last observation. Lets consumers reason about freshness. */
55353
57340
  lastUpdated: number(),
55354
57341
  /**
@@ -55388,7 +57375,7 @@ var BatteryStatusSchema = object({
55388
57375
  * sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
55389
57376
  * misleading exact percentage. Absent/false → genuine 0–100 % reading.
55390
57377
  */
55391
- binary: boolean().optional()
57378
+ binary: boolean().optional().meta({ label: "Binary indicator" })
55392
57379
  });
55393
57380
  var BATTERY_DEVICE_TYPES = [
55394
57381
  DeviceType.Camera,
@@ -55402,6 +57389,7 @@ var BATTERY_DEVICE_TYPES = [
55402
57389
  /** Generic Customize target for the percentage reading (D936). */
55403
57390
  var batteryCustomize = {
55404
57391
  version: 1,
57392
+ advanced: "derive",
55405
57393
  targets: [{
55406
57394
  id: "percentage",
55407
57395
  cardinality: "scalar",
@@ -55552,7 +57540,7 @@ onStatusChanged: { data: object({
55552
57540
  * with the right HomeKit / Alexa display category.
55553
57541
  */
55554
57542
  var BinaryStatusSchema = object({
55555
- on: boolean(),
57543
+ on: boolean().meta({ label: "On" }),
55556
57544
  /** Ms epoch of the last transition. 0 if never observed. */
55557
57545
  lastChangedAt: number()
55558
57546
  });
@@ -55581,7 +57569,12 @@ var binaryCapability = {
55581
57569
  history: { fields: { on: { kind: "boolean" } } },
55582
57570
  /** Clock fields: written, but excluded from the compare that decides
55583
57571
  * whether persisting is worth a SQLite commit. */
55584
- volatileStateFields: ["lastChangedAt"]
57572
+ volatileStateFields: ["lastChangedAt"],
57573
+ customize: {
57574
+ version: 1,
57575
+ advanced: "derive",
57576
+ targets: []
57577
+ }
55585
57578
  };
55586
57579
  /**
55587
57580
  * Dimmable-light brightness control. Co-exists with `switch` on the
@@ -55887,7 +57880,7 @@ var GridLayoutCellSchema = object({
55887
57880
  *
55888
57881
  * A grid's `high` composes its sources' `high` and its `low` their `low`, so a
55889
57882
  * profile is on offer only when EVERY source can serve it. The refusal NAMES
55890
- * the sources, because "this grid has no low" is not a finding — "615 has no
57883
+ * the sources, because "this grid has no low" is not a finding — "101 has no
55891
57884
  * low" is, and it is the one an operator can act on.
55892
57885
  */
55893
57886
  var GridProfileOfferSchema = object({
@@ -57452,6 +59445,7 @@ var doorbellCustomize = {
57452
59445
  applyAuthority: { kind: "composition-claim" },
57453
59446
  eventName: "onPressed",
57454
59447
  edges: ["rising"],
59448
+ defaultEdge: "rising",
57455
59449
  timestampPath: "lastPressedAt",
57456
59450
  counterPath: "pressCountSinceStart",
57457
59451
  highWater: "composer-advance",
@@ -58405,7 +60399,10 @@ var humidifierCapability = {
58405
60399
  */
58406
60400
  var HumiditySensorStatusSchema = object({
58407
60401
  /** Current relative humidity, 0..100. */
58408
- percent: number().min(0).max(100),
60402
+ percent: number().min(0).max(100).meta({
60403
+ unit: "%",
60404
+ label: "Humidity"
60405
+ }),
58409
60406
  /** Ms epoch when the slice was last updated. */
58410
60407
  lastFetchedAt: number(),
58411
60408
  /** Live display unit from the upstream source (e.g. HA
@@ -58447,7 +60444,12 @@ var humiditySensorCapability = {
58447
60444
  } } },
58448
60445
  /** Clock fields: written, but excluded from the compare that decides
58449
60446
  * whether persisting is worth a SQLite commit. */
58450
- volatileStateFields: ["lastFetchedAt"]
60447
+ volatileStateFields: ["lastFetchedAt"],
60448
+ customize: {
60449
+ version: 1,
60450
+ advanced: "derive",
60451
+ targets: []
60452
+ }
58451
60453
  };
58452
60454
  /**
58453
60455
  * Image display cap. Models a single still image exposed by an integration —
@@ -62126,9 +64128,15 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
62126
64128
  */
62127
64129
  var PowerMeterStatusSchema = object({
62128
64130
  /** Instantaneous power draw in watts. */
62129
- watts: number().optional(),
64131
+ watts: number().optional().meta({
64132
+ unit: "W",
64133
+ label: "Power"
64134
+ }),
62130
64135
  /** Cumulative energy in kilowatt-hours since the meter was reset. */
62131
- kwhTotal: number().optional(),
64136
+ kwhTotal: number().optional().meta({
64137
+ unit: "kWh",
64138
+ label: "Energy"
64139
+ }),
62132
64140
  /** Voltage in volts. */
62133
64141
  volts: number().optional(),
62134
64142
  /** Current in amperes. */
@@ -62213,7 +64221,12 @@ var powerMeterCapability = {
62213
64221
  } },
62214
64222
  /** Clock fields: written, but excluded from the compare that decides
62215
64223
  * whether persisting is worth a SQLite commit. */
62216
- volatileStateFields: ["lastFetchedAt"]
64224
+ volatileStateFields: ["lastFetchedAt"],
64225
+ customize: {
64226
+ version: 1,
64227
+ advanced: "derive",
64228
+ targets: []
64229
+ }
62217
64230
  };
62218
64231
  /**
62219
64232
  * Presence cap. Models HA `person.*` and `device_tracker.*` entities
@@ -62658,9 +64671,9 @@ var PtzOptionsSchema = object({
62658
64671
  * Reolink preset 0, Hikvision preset '1', Dahua preset 1 -- and on this fleet
62659
64672
  * not one of the three cameras honours its own:
62660
64673
  *
62661
- * 592 Videocamera camera Daniel (reolink) preset 0 holds "stanza"
62662
- * 1438 Videocamera dispensa (hikvision) preset 1 holds "Credenza"
62663
- * 3836 Videocamera studio (amcrest) preset 1 holds "Preset1"
64674
+ * 107 Camera camera Carol (reolink) preset 0 holds "stanza"
64675
+ * 1438 Camera dispensa (hikvision) preset 1 holds "Credenza"
64676
+ * 3836 Camera studio (amcrest) preset 1 holds "Preset1"
62664
64677
  *
62665
64678
  * So `goHome` meant "go wherever the operator happened to save in slot 0 or 1",
62666
64679
  * and two of the three swallowed the failure in a bare `catch`. For autotrack
@@ -62993,7 +65006,7 @@ var RunningStateStatusSchema = object({
62993
65006
  running: boolean().nullable(),
62994
65007
  /** Epoch ms the current boolean began; null while `running` is null. */
62995
65008
  since: number().nullable(),
62996
- source: RunningStateSourceSchema,
65009
+ source: RunningStateSourceSchema.meta({ label: "Source" }),
62997
65010
  phase: string().nullable(),
62998
65011
  /** null until a reading has been published (D393). */
62999
65012
  lastFetchedAt: number().nullable()
@@ -63007,6 +65020,7 @@ var RUNNING_DEVICE_TYPES = Object.values(DeviceType);
63007
65020
  /** Generic Customize target for the running boolean (D936). */
63008
65021
  var runningCustomize = {
63009
65022
  version: 1,
65023
+ advanced: "derive",
63010
65024
  targets: [{
63011
65025
  id: "running",
63012
65026
  cardinality: "scalar",
@@ -63042,6 +65056,7 @@ var runningCustomize = {
63042
65056
  requiredUnit: "W",
63043
65057
  transforms: [{
63044
65058
  kind: "threshold",
65059
+ comparisons: ["gte", "lte"],
63045
65060
  comparison: "gte",
63046
65061
  defaultThreshold: 5,
63047
65062
  defaultStartDwellMs: RUNNING_POWER_START_DELAY_MS,
@@ -63145,7 +65160,7 @@ var RecordingAvailabilitySchema = object({
63145
65160
  * would look identical. But the answer used to say nothing about that, so a
63146
65161
  * caller asking "what can I export?" read the single preferred profile as
63147
65162
  * the only one that exists — on this deployment every camera records `high`
63148
- * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
65163
+ * AND `low`, the low tree holding 14 GB for camera 101 alone, and the export
63149
65164
  * UI could not see it.
63150
65165
  *
63151
65166
  * Cheap: it is the same shallow directory read the profile CHOICE already
@@ -63244,7 +65259,7 @@ var RecordingSourceOptionsSchema = object({
63244
65259
  * `sparse` = gaps are the absence of one, and must be drawn as such.
63245
65260
  *
63246
65261
  * Not an onboard-only concession: measured 2026-09-24, OUR bar covers 98.8 %
63247
- * of 592's day and 1.2 % of 1436's. It is a fact about a (source, camera)
65262
+ * of 107's day and 1.2 % of 1436's. It is a fact about a (source, camera)
63248
65263
  * pair, and ours answers it per camera from `deriveRecordingMode`. */
63249
65264
  coverage: _enum(["continuous", "sparse"]),
63250
65265
  /** Where the playhead may be put.
@@ -63320,7 +65335,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(RecordingSourceS
63320
65335
  * merely discouraged (D554 amended).
63321
65336
  *
63322
65337
  * It was learned the expensive way on `videoclips.listClips`: measured
63323
- * on the live hub 2026-09-20, device 592 bound to `recorder` AND
65338
+ * on the live hub 2026-09-20, device 107 bound to `recorder` AND
63324
65339
  * `provider-reolink`, a bare call with `limit: 3` answered SIX rows,
63325
65340
  * three from each source, merged — `device-collection-dispatch.ts`
63326
65341
  * leaves an unpinned fan-out un-narrowed, so absence buys the union the
@@ -63921,7 +65936,7 @@ var ExportSpeedSchema = number().min(.25).max(32);
63921
65936
  * on a 10 h window holding 29,393 s of footage every range landed late by the
63922
65937
  * gap accumulated before it — up to 6,607 s, well past EOF. Nothing matched,
63923
65938
  * the video was a uniform timelapse, and the log line reported the five ranges
63924
- * that had been ASKED for (2026-08-13, export `57d14363`, camera 615).
65939
+ * that had been ASKED for (2026-08-13, export `57d14363`, camera 101).
63925
65940
  *
63926
65941
  * Relative and not absolute epoch, because an absolute epoch would make every
63927
65942
  * call site responsible for the same subtraction.
@@ -64738,7 +66753,7 @@ getStatus: method(object({ deviceId: number() }), RecordingSignalStatusSchema) }
64738
66753
  * which put a "Scenes" tab on one camera's detail page. That is the wrong shape
64739
66754
  * for the thing: a scene is a standing question about the property ("is the bin
64740
66755
  * still out"), and the operator's question is "which of my scenes have tripped",
64741
- * across every camera at once — not "what does camera 617 think". Buried one
66756
+ * across every camera at once — not "what does camera 102 think". Buried one
64742
66757
  * camera deep it also could not be found. The surface is now a top-level admin
64743
66758
  * page (`/scenes`, `pages/Scenes.tsx`) that lists every scene on every camera and
64744
66759
  * picks the camera inside the create flow, the same shape Events and Faces have.
@@ -65795,7 +67810,7 @@ function buildStreamParamsConfigSchema(options, status) {
65795
67810
  * `getSettingsUISchema()` surface.
65796
67811
  */
65797
67812
  var SwitchStatusSchema = object({
65798
- on: boolean(),
67813
+ on: boolean().meta({ label: "On" }),
65799
67814
  /** Ms epoch of the last state change. Useful for UI "X minutes ago". */
65800
67815
  lastChangedAt: number()
65801
67816
  });
@@ -65854,7 +67869,12 @@ var switchCapability = {
65854
67869
  label: "On",
65855
67870
  kind: "boolean"
65856
67871
  }
65857
- }] }
67872
+ }] },
67873
+ customize: {
67874
+ version: 1,
67875
+ advanced: "derive",
67876
+ targets: []
67877
+ }
65858
67878
  };
65859
67879
  /** C0 controls, DEL and the C1 range: none of them belongs in a name. */
65860
67880
  function hasControlCharacter(value) {
@@ -66450,7 +68470,10 @@ var tamperCapability = {
66450
68470
  */
66451
68471
  var TemperatureSensorStatusSchema = object({
66452
68472
  /** Current temperature in Celsius. */
66453
- celsius: number(),
68473
+ celsius: number().meta({
68474
+ unit: "°C",
68475
+ label: "Temperature"
68476
+ }),
66454
68477
  /** Ms epoch when the slice was last updated (push or poll). */
66455
68478
  lastFetchedAt: number(),
66456
68479
  /** Live display unit from the upstream source (e.g. HA
@@ -66493,7 +68516,12 @@ var temperatureSensorCapability = {
66493
68516
  } } },
66494
68517
  /** Clock fields: written, but excluded from the compare that decides
66495
68518
  * whether persisting is worth a SQLite commit. */
66496
- volatileStateFields: ["lastFetchedAt"]
68519
+ volatileStateFields: ["lastFetchedAt"],
68520
+ customize: {
68521
+ version: 1,
68522
+ advanced: "derive",
68523
+ targets: []
68524
+ }
66497
68525
  };
66498
68526
  /**
66499
68527
  * toast — system-scoped singleton capability that streams toast
@@ -68172,6 +70200,10 @@ function withClipEventLabels(provider, deps) {
68172
70200
  };
68173
70201
  }
68174
70202
  SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
70203
+ DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher, DeviceType.Camera, DeviceType.Camera, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
70204
+ String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
70205
+ DeviceRole.BinarySensor, DeviceRole.MotionSensor;
70206
+ new Set(CAP_NAMES);
68175
70207
  Object.freeze({
68176
70208
  person: .5,
68177
70209
  vehicle: .5,
@@ -69405,7 +71437,7 @@ var BaseDeviceProvider = class extends BaseAddon {
69405
71437
  * A top-level persisted row with NO configuration is a leftover, not a
69406
71438
  * device — quarantine it instead of dialling it.
69407
71439
  *
69408
- * Device 614 was deleted, resurrected as a config-less shell by a write
71440
+ * Device 105 was deleted, resurrected as a config-less shell by a write
69409
71441
  * already in flight (D376), and then dialled at every single boot: eight
69410
71442
  * `Failed to restore device — bounded retry scheduled` lines in one day,
69411
71443
  * each one the same Zod refusal on `host` and `password`. The bound was
@@ -82657,7 +84689,7 @@ var SENSOR_CAP_VOCABULARY = {
82657
84689
  state: [{
82658
84690
  kind: "boolean",
82659
84691
  field: "on",
82660
- label: t("Active", "Attivo"),
84692
+ label: t("On", "Acceso"),
82661
84693
  whenTrue: t("When {device} turns active", "Quando {device} si attiva"),
82662
84694
  whenFalse: t("When {device} turns inactive", "Quando {device} si disattiva"),
82663
84695
  icon: "toggle-right"
@@ -86287,7 +88319,6 @@ Object.freeze({
86287
88319
  "smtp-provider": "email"
86288
88320
  });
86289
88321
  DeviceType.Camera;
86290
- DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat, DeviceType.Camera, DeviceType.Hub, DeviceType.Light, DeviceType.Siren, DeviceType.Switch, DeviceType.Sensor, DeviceType.Thermostat, DeviceType.Climate, DeviceType.Button, DeviceType.EventEmitter, DeviceType.Update, DeviceType.Generic, DeviceType.Notifier, DeviceType.Script, DeviceType.Automation, DeviceType.Lock, DeviceType.Cover, DeviceType.Valve, DeviceType.Humidifier, DeviceType.WaterHeater, DeviceType.Fan, DeviceType.MediaPlayer, DeviceType.AlarmPanel, DeviceType.Control, DeviceType.Presence, DeviceType.Weather, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.Container, DeviceType.Image, DeviceType.PetFeeder, DeviceType.Dishwasher, DeviceType.Camera, DeviceType.Camera, DeviceType.Dishwasher, DeviceType.Vacuum, DeviceType.LawnMower, DeviceType.MediaPlayer, DeviceType.WaterHeater, DeviceType.Humidifier, DeviceType.Fan, DeviceType.Climate, DeviceType.Thermostat, DeviceType.PetFeeder;
86291
88322
  /**
86292
88323
  * A saved Customize assignment (D936). The schema is the type: callers use
86293
88324
  * `z.infer`, they do not restate the shape.
@@ -86344,6 +88375,11 @@ var PulseOverrideDraftSchema = object({
86344
88375
  targetId: string().min(1),
86345
88376
  enabled: boolean(),
86346
88377
  debounceMs: number().nonnegative(),
88378
+ edges: array(_enum([
88379
+ "rising",
88380
+ "button",
88381
+ "native-event"
88382
+ ])).min(1).optional(),
86347
88383
  sources: array(OverrideSourceSchema).min(1)
86348
88384
  });
86349
88385
  var SpanSourceDraftSchema = OverrideSourceSchema.extend({ mode: _enum([
@@ -86376,7 +88412,6 @@ object({
86376
88412
  ]),
86377
88413
  reason: string().nullable()
86378
88414
  });
86379
- String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
86380
88415
  var G711_SCALE_CORRECTION_DB = {
86381
88416
  PCMU: 20 * Math.log10(4),
86382
88417
  PCMA: 20 * Math.log10(8)
@@ -86749,7 +88784,7 @@ var STATE_SUMMARY_SECTION_VARS = [
86749
88784
  {
86750
88785
  name: "summaryStreams",
86751
88786
  label: "Summary: streams offline",
86752
- example: "Ingresso (high) — since 06:40",
88787
+ example: "Front door (high) — since 06:40",
86753
88788
  kinds: ["stream-offline", "stream-online"]
86754
88789
  },
86755
88790
  {
@@ -86767,13 +88802,13 @@ var STATE_SUMMARY_SECTION_VARS = [
86767
88802
  {
86768
88803
  name: "summaryDetection",
86769
88804
  label: "Summary: cameras detecting nothing",
86770
- example: "Ingresso — since 05:10",
88805
+ example: "Front door — since 05:10",
86771
88806
  kinds: ["detection-blind"]
86772
88807
  },
86773
88808
  {
86774
88809
  name: "summaryNodes",
86775
88810
  label: "Summary: nodes",
86776
- example: "little-unraid — offline since 03:00",
88811
+ example: "agent-a — offline since 03:00",
86777
88812
  kinds: [
86778
88813
  "node-offline",
86779
88814
  "node-online",
@@ -89578,7 +91613,7 @@ var amcrestCameraSchema = object({
89578
91613
  *
89579
91614
  * Empty = nothing configured, and `goHome` then REFUSES. It used to go to a
89580
91615
  * hardcoded slot on a vendor "convention" this fleet contradicts: reolink
89581
- * went to preset 0, which on device 592 holds "stanza"; amcrest went to
91616
+ * went to preset 0, which on device 107 holds "stanza"; amcrest went to
89582
91617
  * preset 1, which on device 3836 holds "Preset1". Both swallowed the failure
89583
91618
  * in a bare catch, so a head that never moved was indistinguishable from a
89584
91619
  * head that went home.