@camstack/addon-agent-ui 1.2.266 → 1.2.268

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,6 +1,6 @@
1
1
  import path from "node:path";
2
2
  import { fileURLToPath } from "node:url";
3
- //#region ../types/dist/event-category-Ceif8n-v.mjs
3
+ //#region ../types/dist/event-category-DHXxB8t9.mjs
4
4
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
5
5
  EventCategory["SystemBoot"] = "system.boot";
6
6
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -296,7 +296,7 @@ var EventCategory = /* @__PURE__ */ function(EventCategory) {
296
296
  * TRANSITION into that state (never per dispatch), and the node is dropped
297
297
  * from the placement candidate set for as long as it holds.
298
298
  *
299
- * This exists because the state was previously invisible: little-unraid
299
+ * This exists because the state was previously invisible: agent-a
300
300
  * absorbed 283k inference errors in a day while still being handed cameras,
301
301
  * and nothing in the system said so.
302
302
  *
@@ -5435,7 +5435,7 @@ var ZodIssueCode = {
5435
5435
  var ZodFirstPartyTypeKind;
5436
5436
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5437
5437
  //#endregion
5438
- //#region ../types/dist/sleep-CYfIZzGv.mjs
5438
+ //#region ../types/dist/sleep-BErAxhul.mjs
5439
5439
  /**
5440
5440
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5441
5441
  * window to float samples (D455).
@@ -8405,6 +8405,1980 @@ method(object({ deviceId: number() }), array(StreamSourceEntrySchema)), method(o
8405
8405
  kind: "mutation",
8406
8406
  auth: "admin"
8407
8407
  }), method(object({ deviceId: number() }), unknown().nullable()), method(object({ deviceId: number() }), RawStateResultSchema.nullable(), { auth: "protected" });
8408
+ Object.freeze({ "doorbell": "lastPressedAt" });
8409
+ /** Every capability name, so addon code can check a name without the schema graph. */
8410
+ var CAP_NAMES = Object.freeze([
8411
+ "accessories",
8412
+ "addon-pages",
8413
+ "addon-pages-source",
8414
+ "addon-routes",
8415
+ "addon-settings",
8416
+ "addon-widgets",
8417
+ "addon-widgets-source",
8418
+ "addons",
8419
+ "admin-ui",
8420
+ "air-quality-sensor",
8421
+ "alarm-panel",
8422
+ "alerts",
8423
+ "ambient-light-sensor",
8424
+ "audio-analysis",
8425
+ "audio-analyzer",
8426
+ "audio-codec",
8427
+ "audio-metrics",
8428
+ "auth-provider",
8429
+ "automation-control",
8430
+ "backup",
8431
+ "battery",
8432
+ "binary",
8433
+ "brightness",
8434
+ "broker",
8435
+ "button",
8436
+ "calendar-source",
8437
+ "calendars",
8438
+ "camera-credentials",
8439
+ "camera-grid-layout",
8440
+ "camera-pipeline-config",
8441
+ "camera-streams",
8442
+ "carbon-monoxide",
8443
+ "climate-control",
8444
+ "color",
8445
+ "composer",
8446
+ "connection-test",
8447
+ "connectivity",
8448
+ "consumables",
8449
+ "contact",
8450
+ "control",
8451
+ "core-blocks",
8452
+ "cover",
8453
+ "custom-model-registry",
8454
+ "data-store-provider",
8455
+ "database-snapshot",
8456
+ "day-night",
8457
+ "decoder",
8458
+ "detection-pipeline",
8459
+ "device-admin-link",
8460
+ "device-adoption",
8461
+ "device-credentials",
8462
+ "device-discovery",
8463
+ "device-export",
8464
+ "device-extension",
8465
+ "device-history",
8466
+ "device-manager",
8467
+ "device-ops",
8468
+ "device-provider",
8469
+ "device-removal-hook",
8470
+ "device-state",
8471
+ "device-status",
8472
+ "dishwasher",
8473
+ "display-palette",
8474
+ "doorbell",
8475
+ "embedding-encoder",
8476
+ "enum-sensor",
8477
+ "event-emitter",
8478
+ "face-gallery",
8479
+ "failure-contribution",
8480
+ "fan-control",
8481
+ "feature-probe",
8482
+ "filesystem-browse",
8483
+ "flood",
8484
+ "gas",
8485
+ "heating-valve",
8486
+ "humidifier",
8487
+ "humidity-sensor",
8488
+ "image",
8489
+ "image-settings",
8490
+ "integrations",
8491
+ "intercom",
8492
+ "keychain",
8493
+ "keychain-admin",
8494
+ "lawn-mower-control",
8495
+ "llm",
8496
+ "llm-runtime",
8497
+ "load-contribution",
8498
+ "local-network",
8499
+ "lock-control",
8500
+ "log-channels",
8501
+ "log-destination",
8502
+ "login-method",
8503
+ "media-player",
8504
+ "mesh-network",
8505
+ "metrics-provider",
8506
+ "model-convert",
8507
+ "model-distributor",
8508
+ "motion",
8509
+ "motion-detection",
8510
+ "motion-trigger",
8511
+ "motion-zones",
8512
+ "mqtt-broker",
8513
+ "native-object-detection",
8514
+ "navigation",
8515
+ "network-access",
8516
+ "network-link",
8517
+ "network-quality",
8518
+ "node-certificates",
8519
+ "nodes",
8520
+ "notification-output",
8521
+ "notification-rules",
8522
+ "notifier",
8523
+ "numeric-sensor",
8524
+ "oauth-integration",
8525
+ "oidc-connections",
8526
+ "osd",
8527
+ "osd-manager",
8528
+ "pet-feeder",
8529
+ "pipeline-analytics",
8530
+ "pipeline-executor",
8531
+ "pipeline-orchestrator",
8532
+ "pipeline-runner",
8533
+ "plate-gallery",
8534
+ "platform-probe",
8535
+ "power-meter",
8536
+ "presence",
8537
+ "pressure-sensor",
8538
+ "privacy-mask",
8539
+ "ptz",
8540
+ "ptz-autotrack",
8541
+ "reboot",
8542
+ "record-entries",
8543
+ "recording",
8544
+ "recording-archive",
8545
+ "recording-export",
8546
+ "recording-onboard",
8547
+ "recording-signal",
8548
+ "records",
8549
+ "running-state",
8550
+ "scene-monitor",
8551
+ "script-runner",
8552
+ "server-management",
8553
+ "settings-store",
8554
+ "smoke",
8555
+ "smtp-provider",
8556
+ "snapshot",
8557
+ "sso-bridge",
8558
+ "storage",
8559
+ "storage-admin",
8560
+ "storage-evictable",
8561
+ "storage-migration",
8562
+ "storage-occupancy",
8563
+ "storage-provider",
8564
+ "stream-broker",
8565
+ "stream-catalog",
8566
+ "stream-params",
8567
+ "stream-signals",
8568
+ "switch",
8569
+ "system",
8570
+ "tamper",
8571
+ "temperature-sensor",
8572
+ "terminal-session",
8573
+ "toast",
8574
+ "training",
8575
+ "training-provider",
8576
+ "turn-provider",
8577
+ "update",
8578
+ "user-management",
8579
+ "user-passkeys",
8580
+ "vacuum-control",
8581
+ "valve",
8582
+ "vector-store",
8583
+ "vibration",
8584
+ "videoclips",
8585
+ "viewer-ui",
8586
+ "water-heater",
8587
+ "weather",
8588
+ "webrtc-session",
8589
+ "zone-analytics",
8590
+ "zone-rules",
8591
+ "zones"
8592
+ ]);
8593
+ Object.freeze({
8594
+ "air-quality-sensor": [
8595
+ {
8596
+ "path": "co2Ppm",
8597
+ "valueType": "number"
8598
+ },
8599
+ {
8600
+ "path": "vocPpb",
8601
+ "valueType": "number"
8602
+ },
8603
+ {
8604
+ "path": "pm25",
8605
+ "valueType": "number"
8606
+ },
8607
+ {
8608
+ "path": "pm10",
8609
+ "valueType": "number"
8610
+ },
8611
+ {
8612
+ "path": "aqi",
8613
+ "valueType": "number"
8614
+ },
8615
+ {
8616
+ "path": "unit",
8617
+ "valueType": "string"
8618
+ },
8619
+ {
8620
+ "path": "precision",
8621
+ "valueType": "number"
8622
+ }
8623
+ ],
8624
+ "alarm-panel": [
8625
+ {
8626
+ "path": "state",
8627
+ "valueType": "enum",
8628
+ "enumValues": [
8629
+ "disarmed",
8630
+ "armed_home",
8631
+ "armed_away",
8632
+ "armed_night",
8633
+ "armed_vacation",
8634
+ "armed_custom_bypass",
8635
+ "arming",
8636
+ "disarming",
8637
+ "pending",
8638
+ "triggered"
8639
+ ]
8640
+ },
8641
+ {
8642
+ "path": "targetMode",
8643
+ "valueType": "enum",
8644
+ "enumValues": [
8645
+ "home",
8646
+ "away",
8647
+ "night",
8648
+ "vacation",
8649
+ "custom_bypass"
8650
+ ]
8651
+ },
8652
+ {
8653
+ "path": "requiresCode",
8654
+ "valueType": "boolean"
8655
+ }
8656
+ ],
8657
+ "ambient-light-sensor": [
8658
+ {
8659
+ "path": "lux",
8660
+ "valueType": "number"
8661
+ },
8662
+ {
8663
+ "path": "unit",
8664
+ "valueType": "string"
8665
+ },
8666
+ {
8667
+ "path": "precision",
8668
+ "valueType": "number"
8669
+ }
8670
+ ],
8671
+ "audio-metrics": [
8672
+ {
8673
+ "path": "ts",
8674
+ "valueType": "number"
8675
+ },
8676
+ {
8677
+ "path": "windowSec",
8678
+ "valueType": "number"
8679
+ },
8680
+ {
8681
+ "path": "level.rms",
8682
+ "valueType": "number"
8683
+ },
8684
+ {
8685
+ "path": "level.dbfs",
8686
+ "valueType": "number"
8687
+ },
8688
+ {
8689
+ "path": "peakDbfs",
8690
+ "valueType": "number"
8691
+ },
8692
+ {
8693
+ "path": "avgDbfs",
8694
+ "valueType": "number"
8695
+ },
8696
+ {
8697
+ "path": "current.className",
8698
+ "valueType": "string"
8699
+ },
8700
+ {
8701
+ "path": "current.score",
8702
+ "valueType": "number"
8703
+ },
8704
+ {
8705
+ "path": "current.timestamp",
8706
+ "valueType": "number"
8707
+ }
8708
+ ],
8709
+ "automation-control": [
8710
+ {
8711
+ "path": "enabled",
8712
+ "valueType": "boolean"
8713
+ },
8714
+ {
8715
+ "path": "isRunning",
8716
+ "valueType": "boolean"
8717
+ },
8718
+ {
8719
+ "path": "lastTriggeredAt",
8720
+ "valueType": "number"
8721
+ },
8722
+ {
8723
+ "path": "lastError",
8724
+ "valueType": "string"
8725
+ }
8726
+ ],
8727
+ "battery": [
8728
+ {
8729
+ "path": "percentage",
8730
+ "valueType": "number"
8731
+ },
8732
+ {
8733
+ "path": "charging",
8734
+ "valueType": "enum",
8735
+ "enumValues": [
8736
+ "dc",
8737
+ "solar",
8738
+ "none",
8739
+ "unknown"
8740
+ ]
8741
+ },
8742
+ {
8743
+ "path": "sleeping",
8744
+ "valueType": "boolean"
8745
+ },
8746
+ {
8747
+ "path": "lastUpdated",
8748
+ "valueType": "number"
8749
+ },
8750
+ {
8751
+ "path": "lastContactAt",
8752
+ "valueType": "number"
8753
+ },
8754
+ {
8755
+ "path": "lastFullRefreshAt",
8756
+ "valueType": "number"
8757
+ },
8758
+ {
8759
+ "path": "binary",
8760
+ "valueType": "boolean"
8761
+ }
8762
+ ],
8763
+ "binary": [{
8764
+ "path": "on",
8765
+ "valueType": "boolean"
8766
+ }],
8767
+ "brightness": [{
8768
+ "path": "percentage",
8769
+ "valueType": "number"
8770
+ }],
8771
+ "broker": [{
8772
+ "path": "brokerCount",
8773
+ "valueType": "number"
8774
+ }, {
8775
+ "path": "connectedCount",
8776
+ "valueType": "number"
8777
+ }],
8778
+ "camera-credentials": [
8779
+ {
8780
+ "path": "host",
8781
+ "valueType": "string"
8782
+ },
8783
+ {
8784
+ "path": "port",
8785
+ "valueType": "number"
8786
+ },
8787
+ {
8788
+ "path": "onvifPort",
8789
+ "valueType": "number"
8790
+ },
8791
+ {
8792
+ "path": "rtspPort",
8793
+ "valueType": "number"
8794
+ },
8795
+ {
8796
+ "path": "https",
8797
+ "valueType": "boolean"
8798
+ },
8799
+ {
8800
+ "path": "hasUsername",
8801
+ "valueType": "boolean"
8802
+ },
8803
+ {
8804
+ "path": "hasPassword",
8805
+ "valueType": "boolean"
8806
+ },
8807
+ {
8808
+ "path": "onvifProfile",
8809
+ "valueType": "string"
8810
+ }
8811
+ ],
8812
+ "camera-streams": [
8813
+ {
8814
+ "path": "online",
8815
+ "valueType": "boolean"
8816
+ },
8817
+ {
8818
+ "path": "slotStatuses.high",
8819
+ "valueType": "enum",
8820
+ "enumValues": [
8821
+ "unassigned",
8822
+ "idle",
8823
+ "connecting",
8824
+ "streaming",
8825
+ "error"
8826
+ ]
8827
+ },
8828
+ {
8829
+ "path": "slotStatuses.mid",
8830
+ "valueType": "enum",
8831
+ "enumValues": [
8832
+ "unassigned",
8833
+ "idle",
8834
+ "connecting",
8835
+ "streaming",
8836
+ "error"
8837
+ ]
8838
+ },
8839
+ {
8840
+ "path": "slotStatuses.low",
8841
+ "valueType": "enum",
8842
+ "enumValues": [
8843
+ "unassigned",
8844
+ "idle",
8845
+ "connecting",
8846
+ "streaming",
8847
+ "error"
8848
+ ]
8849
+ },
8850
+ {
8851
+ "path": "slotErrors.high",
8852
+ "valueType": "string"
8853
+ },
8854
+ {
8855
+ "path": "slotErrors.mid",
8856
+ "valueType": "string"
8857
+ },
8858
+ {
8859
+ "path": "slotErrors.low",
8860
+ "valueType": "string"
8861
+ }
8862
+ ],
8863
+ "carbon-monoxide": [{
8864
+ "path": "detected",
8865
+ "valueType": "boolean"
8866
+ }],
8867
+ "climate-control": [
8868
+ {
8869
+ "path": "mode",
8870
+ "valueType": "enum",
8871
+ "enumValues": [
8872
+ "off",
8873
+ "heat",
8874
+ "cool",
8875
+ "auto",
8876
+ "heat_cool",
8877
+ "fan_only",
8878
+ "dry"
8879
+ ]
8880
+ },
8881
+ {
8882
+ "path": "fanMode",
8883
+ "valueType": "string"
8884
+ },
8885
+ {
8886
+ "path": "preset",
8887
+ "valueType": "string"
8888
+ },
8889
+ {
8890
+ "path": "target",
8891
+ "valueType": "number"
8892
+ },
8893
+ {
8894
+ "path": "targetHigh",
8895
+ "valueType": "number"
8896
+ },
8897
+ {
8898
+ "path": "targetLow",
8899
+ "valueType": "number"
8900
+ },
8901
+ {
8902
+ "path": "targetHumidity",
8903
+ "valueType": "number"
8904
+ },
8905
+ {
8906
+ "path": "currentTemp",
8907
+ "valueType": "number"
8908
+ },
8909
+ {
8910
+ "path": "currentHumidity",
8911
+ "valueType": "number"
8912
+ },
8913
+ {
8914
+ "path": "swingVertical",
8915
+ "valueType": "boolean"
8916
+ },
8917
+ {
8918
+ "path": "swingHorizontal",
8919
+ "valueType": "boolean"
8920
+ },
8921
+ {
8922
+ "path": "minTemp",
8923
+ "valueType": "number"
8924
+ },
8925
+ {
8926
+ "path": "maxTemp",
8927
+ "valueType": "number"
8928
+ },
8929
+ {
8930
+ "path": "tempStep",
8931
+ "valueType": "number"
8932
+ }
8933
+ ],
8934
+ "color": [
8935
+ {
8936
+ "path": "mode",
8937
+ "valueType": "enum",
8938
+ "enumValues": [
8939
+ "rgb",
8940
+ "hsv",
8941
+ "mired"
8942
+ ]
8943
+ },
8944
+ {
8945
+ "path": "rgb.r",
8946
+ "valueType": "number"
8947
+ },
8948
+ {
8949
+ "path": "rgb.g",
8950
+ "valueType": "number"
8951
+ },
8952
+ {
8953
+ "path": "rgb.b",
8954
+ "valueType": "number"
8955
+ },
8956
+ {
8957
+ "path": "hsv.h",
8958
+ "valueType": "number"
8959
+ },
8960
+ {
8961
+ "path": "hsv.s",
8962
+ "valueType": "number"
8963
+ },
8964
+ {
8965
+ "path": "hsv.v",
8966
+ "valueType": "number"
8967
+ },
8968
+ {
8969
+ "path": "mireds",
8970
+ "valueType": "number"
8971
+ }
8972
+ ],
8973
+ "connectivity": [{
8974
+ "path": "connected",
8975
+ "valueType": "boolean"
8976
+ }],
8977
+ "contact": [{
8978
+ "path": "entryOpen",
8979
+ "valueType": "boolean"
8980
+ }],
8981
+ "control": [
8982
+ {
8983
+ "path": "kind",
8984
+ "valueType": "enum",
8985
+ "enumValues": [
8986
+ "numeric",
8987
+ "select",
8988
+ "text",
8989
+ "datetime"
8990
+ ]
8991
+ },
8992
+ {
8993
+ "path": "unit",
8994
+ "valueType": "string"
8995
+ },
8996
+ {
8997
+ "path": "min",
8998
+ "valueType": "number"
8999
+ },
9000
+ {
9001
+ "path": "max",
9002
+ "valueType": "number"
9003
+ },
9004
+ {
9005
+ "path": "step",
9006
+ "valueType": "number"
9007
+ },
9008
+ {
9009
+ "path": "precision",
9010
+ "valueType": "number"
9011
+ },
9012
+ {
9013
+ "path": "format",
9014
+ "valueType": "enum",
9015
+ "enumValues": [
9016
+ "date",
9017
+ "time",
9018
+ "datetime"
9019
+ ]
9020
+ }
9021
+ ],
9022
+ "cover": [
9023
+ {
9024
+ "path": "state",
9025
+ "valueType": "enum",
9026
+ "enumValues": [
9027
+ "open",
9028
+ "opening",
9029
+ "closing",
9030
+ "closed",
9031
+ "stopped"
9032
+ ]
9033
+ },
9034
+ {
9035
+ "path": "position",
9036
+ "valueType": "number"
9037
+ },
9038
+ {
9039
+ "path": "tiltPosition",
9040
+ "valueType": "number"
9041
+ }
9042
+ ],
9043
+ "day-night": [
9044
+ {
9045
+ "path": "mode",
9046
+ "valueType": "enum",
9047
+ "enumValues": [
9048
+ "auto",
9049
+ "day",
9050
+ "night",
9051
+ "schedule"
9052
+ ]
9053
+ },
9054
+ {
9055
+ "path": "sensitivity",
9056
+ "valueType": "number"
9057
+ },
9058
+ {
9059
+ "path": "switchDelaySec",
9060
+ "valueType": "number"
9061
+ }
9062
+ ],
9063
+ "device-adoption": [
9064
+ {
9065
+ "path": "lastDiscoveryAt",
9066
+ "valueType": "number"
9067
+ },
9068
+ {
9069
+ "path": "candidateCount",
9070
+ "valueType": "number"
9071
+ },
9072
+ {
9073
+ "path": "adoptedCount",
9074
+ "valueType": "number"
9075
+ },
9076
+ {
9077
+ "path": "lastError",
9078
+ "valueType": "string"
9079
+ }
9080
+ ],
9081
+ "device-discovery": [{
9082
+ "path": "lastDiscoveryAt",
9083
+ "valueType": "number"
9084
+ }, {
9085
+ "path": "lastError",
9086
+ "valueType": "string"
9087
+ }],
9088
+ "device-export": [
9089
+ {
9090
+ "path": "linkState",
9091
+ "valueType": "enum",
9092
+ "enumValues": [
9093
+ "unlinked",
9094
+ "linked",
9095
+ "error"
9096
+ ]
9097
+ },
9098
+ {
9099
+ "path": "exposedDeviceCount",
9100
+ "valueType": "number"
9101
+ },
9102
+ {
9103
+ "path": "error",
9104
+ "valueType": "string"
9105
+ },
9106
+ {
9107
+ "path": "setup.qr",
9108
+ "valueType": "string"
9109
+ },
9110
+ {
9111
+ "path": "setup.note",
9112
+ "valueType": "string"
9113
+ }
9114
+ ],
9115
+ "device-status": [{
9116
+ "path": "online",
9117
+ "valueType": "boolean"
9118
+ }],
9119
+ "dishwasher": [
9120
+ {
9121
+ "path": "availability",
9122
+ "valueType": "enum",
9123
+ "enumValues": [
9124
+ "available",
9125
+ "offline",
9126
+ "description-missing"
9127
+ ]
9128
+ },
9129
+ {
9130
+ "path": "state",
9131
+ "valueType": "enum",
9132
+ "enumValues": [
9133
+ "idle",
9134
+ "running",
9135
+ "paused",
9136
+ "finished",
9137
+ "error",
9138
+ "unavailable"
9139
+ ]
9140
+ },
9141
+ {
9142
+ "path": "operationState",
9143
+ "valueType": "enum",
9144
+ "enumValues": [
9145
+ "Inactive",
9146
+ "Ready",
9147
+ "DelayedStart",
9148
+ "Run",
9149
+ "Pause",
9150
+ "ActionRequired",
9151
+ "Finished",
9152
+ "Error",
9153
+ "Aborting"
9154
+ ]
9155
+ },
9156
+ {
9157
+ "path": "program",
9158
+ "valueType": "string"
9159
+ },
9160
+ {
9161
+ "path": "selectedProgram",
9162
+ "valueType": "string"
9163
+ },
9164
+ {
9165
+ "path": "remainingSeconds",
9166
+ "valueType": "number"
9167
+ },
9168
+ {
9169
+ "path": "delayedStartSeconds",
9170
+ "valueType": "number"
9171
+ },
9172
+ {
9173
+ "path": "progressPercent",
9174
+ "valueType": "number"
9175
+ },
9176
+ {
9177
+ "path": "doorOpen",
9178
+ "valueType": "boolean"
9179
+ },
9180
+ {
9181
+ "path": "doorLocked",
9182
+ "valueType": "boolean"
9183
+ },
9184
+ {
9185
+ "path": "remoteStartAllowed",
9186
+ "valueType": "boolean"
9187
+ },
9188
+ {
9189
+ "path": "remoteControlActive",
9190
+ "valueType": "boolean"
9191
+ },
9192
+ {
9193
+ "path": "localControlActive",
9194
+ "valueType": "boolean"
9195
+ },
9196
+ {
9197
+ "path": "powerOn",
9198
+ "valueType": "boolean"
9199
+ },
9200
+ {
9201
+ "path": "powerState",
9202
+ "valueType": "string"
9203
+ },
9204
+ {
9205
+ "path": "filterCleaningDue",
9206
+ "valueType": "boolean"
9207
+ },
9208
+ {
9209
+ "path": "machineCareDue",
9210
+ "valueType": "boolean"
9211
+ },
9212
+ {
9213
+ "path": "machineCareRemainingRuns",
9214
+ "valueType": "number"
9215
+ },
9216
+ {
9217
+ "path": "halfLoad",
9218
+ "valueType": "boolean"
9219
+ },
9220
+ {
9221
+ "path": "hygienePlus",
9222
+ "valueType": "boolean"
9223
+ },
9224
+ {
9225
+ "path": "extraDry",
9226
+ "valueType": "boolean"
9227
+ },
9228
+ {
9229
+ "path": "intensiveZone",
9230
+ "valueType": "boolean"
9231
+ },
9232
+ {
9233
+ "path": "varioSpeedPlus",
9234
+ "valueType": "boolean"
9235
+ },
9236
+ {
9237
+ "path": "childLock",
9238
+ "valueType": "boolean"
9239
+ },
9240
+ {
9241
+ "path": "errorCode",
9242
+ "valueType": "number"
9243
+ },
9244
+ {
9245
+ "path": "errorLabel",
9246
+ "valueType": "string"
9247
+ }
9248
+ ],
9249
+ "doorbell": [{
9250
+ "path": "lastPressedAt",
9251
+ "valueType": "number"
9252
+ }, {
9253
+ "path": "pressCountSinceStart",
9254
+ "valueType": "number"
9255
+ }],
9256
+ "enum-sensor": [{
9257
+ "path": "value",
9258
+ "valueType": "string"
9259
+ }, {
9260
+ "path": "format",
9261
+ "valueType": "enum",
9262
+ "enumValues": [
9263
+ "date",
9264
+ "time",
9265
+ "datetime"
9266
+ ]
9267
+ }],
9268
+ "event-emitter": [
9269
+ {
9270
+ "path": "lastEvent.deviceId",
9271
+ "valueType": "number"
9272
+ },
9273
+ {
9274
+ "path": "lastEvent.eventType",
9275
+ "valueType": "string"
9276
+ },
9277
+ {
9278
+ "path": "lastEvent.timestamp",
9279
+ "valueType": "number"
9280
+ },
9281
+ {
9282
+ "path": "lastEvent.seq",
9283
+ "valueType": "number"
9284
+ },
9285
+ {
9286
+ "path": "eventCountSinceStart",
9287
+ "valueType": "number"
9288
+ }
9289
+ ],
9290
+ "fan-control": [
9291
+ {
9292
+ "path": "percentage",
9293
+ "valueType": "number"
9294
+ },
9295
+ {
9296
+ "path": "percentageStep",
9297
+ "valueType": "number"
9298
+ },
9299
+ {
9300
+ "path": "preset",
9301
+ "valueType": "string"
9302
+ },
9303
+ {
9304
+ "path": "direction",
9305
+ "valueType": "enum",
9306
+ "enumValues": ["forward", "reverse"]
9307
+ },
9308
+ {
9309
+ "path": "oscillating",
9310
+ "valueType": "boolean"
9311
+ }
9312
+ ],
9313
+ "feature-probe": [
9314
+ {
9315
+ "path": "deviceType",
9316
+ "valueType": "string"
9317
+ },
9318
+ {
9319
+ "path": "model",
9320
+ "valueType": "string"
9321
+ },
9322
+ {
9323
+ "path": "channelCount",
9324
+ "valueType": "number"
9325
+ },
9326
+ {
9327
+ "path": "lastProbedAt",
9328
+ "valueType": "number"
9329
+ }
9330
+ ],
9331
+ "flood": [{
9332
+ "path": "flooded",
9333
+ "valueType": "boolean"
9334
+ }],
9335
+ "gas": [{
9336
+ "path": "detected",
9337
+ "valueType": "boolean"
9338
+ }],
9339
+ "heating-valve": [{
9340
+ "path": "position",
9341
+ "valueType": "number"
9342
+ }],
9343
+ "humidifier": [
9344
+ {
9345
+ "path": "on",
9346
+ "valueType": "boolean"
9347
+ },
9348
+ {
9349
+ "path": "currentHumidity",
9350
+ "valueType": "number"
9351
+ },
9352
+ {
9353
+ "path": "targetHumidity",
9354
+ "valueType": "number"
9355
+ },
9356
+ {
9357
+ "path": "mode",
9358
+ "valueType": "string"
9359
+ },
9360
+ {
9361
+ "path": "action",
9362
+ "valueType": "string"
9363
+ },
9364
+ {
9365
+ "path": "minHumidity",
9366
+ "valueType": "number"
9367
+ },
9368
+ {
9369
+ "path": "maxHumidity",
9370
+ "valueType": "number"
9371
+ }
9372
+ ],
9373
+ "humidity-sensor": [
9374
+ {
9375
+ "path": "percent",
9376
+ "valueType": "number"
9377
+ },
9378
+ {
9379
+ "path": "unit",
9380
+ "valueType": "string"
9381
+ },
9382
+ {
9383
+ "path": "precision",
9384
+ "valueType": "number"
9385
+ }
9386
+ ],
9387
+ "image": [{
9388
+ "path": "url",
9389
+ "valueType": "string"
9390
+ }, {
9391
+ "path": "lastUpdated",
9392
+ "valueType": "number"
9393
+ }],
9394
+ "image-settings": [
9395
+ {
9396
+ "path": "brightness",
9397
+ "valueType": "number"
9398
+ },
9399
+ {
9400
+ "path": "contrast",
9401
+ "valueType": "number"
9402
+ },
9403
+ {
9404
+ "path": "saturation",
9405
+ "valueType": "number"
9406
+ },
9407
+ {
9408
+ "path": "sharpness",
9409
+ "valueType": "number"
9410
+ },
9411
+ {
9412
+ "path": "mirror",
9413
+ "valueType": "boolean"
9414
+ },
9415
+ {
9416
+ "path": "flip",
9417
+ "valueType": "boolean"
9418
+ },
9419
+ {
9420
+ "path": "rotate",
9421
+ "valueType": "enum",
9422
+ "enumValues": [
9423
+ "0",
9424
+ "90",
9425
+ "180",
9426
+ "270"
9427
+ ]
9428
+ },
9429
+ {
9430
+ "path": "whiteBalance",
9431
+ "valueType": "enum",
9432
+ "enumValues": ["auto", "manual"]
9433
+ },
9434
+ {
9435
+ "path": "warmth",
9436
+ "valueType": "number"
9437
+ },
9438
+ {
9439
+ "path": "exposureMode",
9440
+ "valueType": "enum",
9441
+ "enumValues": ["auto", "manual"]
9442
+ },
9443
+ {
9444
+ "path": "backlightMode",
9445
+ "valueType": "enum",
9446
+ "enumValues": [
9447
+ "off",
9448
+ "blc",
9449
+ "wdr",
9450
+ "hlc"
9451
+ ]
9452
+ }
9453
+ ],
9454
+ "intercom": [
9455
+ {
9456
+ "path": "talking",
9457
+ "valueType": "boolean"
9458
+ },
9459
+ {
9460
+ "path": "lastSessionAt",
9461
+ "valueType": "number"
9462
+ },
9463
+ {
9464
+ "path": "ability.sampleRate",
9465
+ "valueType": "number"
9466
+ },
9467
+ {
9468
+ "path": "ability.duplex",
9469
+ "valueType": "enum",
9470
+ "enumValues": ["half", "full"]
9471
+ },
9472
+ {
9473
+ "path": "ability.maxBacklogMs",
9474
+ "valueType": "number"
9475
+ }
9476
+ ],
9477
+ "lawn-mower-control": [
9478
+ {
9479
+ "path": "activity",
9480
+ "valueType": "enum",
9481
+ "enumValues": [
9482
+ "idle",
9483
+ "mowing",
9484
+ "paused",
9485
+ "docked",
9486
+ "error"
9487
+ ]
9488
+ },
9489
+ {
9490
+ "path": "batteryLevel",
9491
+ "valueType": "number"
9492
+ },
9493
+ {
9494
+ "path": "progressPercent",
9495
+ "valueType": "number"
9496
+ },
9497
+ {
9498
+ "path": "currentCode",
9499
+ "valueType": "number"
9500
+ },
9501
+ {
9502
+ "path": "currentCodeLabel",
9503
+ "valueType": "string"
9504
+ },
9505
+ {
9506
+ "path": "severity",
9507
+ "valueType": "enum",
9508
+ "enumValues": [
9509
+ "info",
9510
+ "warning",
9511
+ "error"
9512
+ ]
9513
+ }
9514
+ ],
9515
+ "lock-control": [{
9516
+ "path": "state",
9517
+ "valueType": "enum",
9518
+ "enumValues": [
9519
+ "locked",
9520
+ "unlocked",
9521
+ "locking",
9522
+ "unlocking",
9523
+ "jammed"
9524
+ ]
9525
+ }],
9526
+ "media-player": [
9527
+ {
9528
+ "path": "state",
9529
+ "valueType": "enum",
9530
+ "enumValues": [
9531
+ "off",
9532
+ "on",
9533
+ "idle",
9534
+ "playing",
9535
+ "paused",
9536
+ "buffering",
9537
+ "standby"
9538
+ ]
9539
+ },
9540
+ {
9541
+ "path": "volumeLevel",
9542
+ "valueType": "number"
9543
+ },
9544
+ {
9545
+ "path": "isMuted",
9546
+ "valueType": "boolean"
9547
+ },
9548
+ {
9549
+ "path": "source",
9550
+ "valueType": "string"
9551
+ },
9552
+ {
9553
+ "path": "currentMedia.type",
9554
+ "valueType": "string"
9555
+ },
9556
+ {
9557
+ "path": "currentMedia.title",
9558
+ "valueType": "string"
9559
+ },
9560
+ {
9561
+ "path": "currentMedia.artist",
9562
+ "valueType": "string"
9563
+ },
9564
+ {
9565
+ "path": "currentMedia.album",
9566
+ "valueType": "string"
9567
+ },
9568
+ {
9569
+ "path": "currentMedia.imageUrl",
9570
+ "valueType": "string"
9571
+ },
9572
+ {
9573
+ "path": "positionMs",
9574
+ "valueType": "number"
9575
+ },
9576
+ {
9577
+ "path": "durationMs",
9578
+ "valueType": "number"
9579
+ },
9580
+ {
9581
+ "path": "shuffle",
9582
+ "valueType": "boolean"
9583
+ },
9584
+ {
9585
+ "path": "repeat",
9586
+ "valueType": "enum",
9587
+ "enumValues": [
9588
+ "off",
9589
+ "all",
9590
+ "one"
9591
+ ]
9592
+ }
9593
+ ],
9594
+ "motion": [
9595
+ {
9596
+ "path": "detected",
9597
+ "valueType": "boolean"
9598
+ },
9599
+ {
9600
+ "path": "lastDetectedAt",
9601
+ "valueType": "number"
9602
+ },
9603
+ {
9604
+ "path": "autoClearAfterMs",
9605
+ "valueType": "number"
9606
+ }
9607
+ ],
9608
+ "motion-trigger": [{
9609
+ "path": "enabled",
9610
+ "valueType": "boolean"
9611
+ }],
9612
+ "motion-zones": [{
9613
+ "path": "enabled",
9614
+ "valueType": "boolean"
9615
+ }, {
9616
+ "path": "sensitivity",
9617
+ "valueType": "number"
9618
+ }],
9619
+ "mqtt-broker": [{
9620
+ "path": "brokerCount",
9621
+ "valueType": "number"
9622
+ }, {
9623
+ "path": "embeddedRunning",
9624
+ "valueType": "boolean"
9625
+ }],
9626
+ "native-object-detection": [{
9627
+ "path": "enabled",
9628
+ "valueType": "boolean"
9629
+ }],
9630
+ "navigation": [
9631
+ {
9632
+ "path": "mode",
9633
+ "valueType": "enum",
9634
+ "enumValues": [
9635
+ "idle",
9636
+ "cleaning",
9637
+ "spot",
9638
+ "following",
9639
+ "goto",
9640
+ "returning",
9641
+ "paused",
9642
+ "unknown"
9643
+ ]
9644
+ },
9645
+ {
9646
+ "path": "following",
9647
+ "valueType": "boolean"
9648
+ },
9649
+ {
9650
+ "path": "flash",
9651
+ "valueType": "boolean"
9652
+ },
9653
+ {
9654
+ "path": "lightMode",
9655
+ "valueType": "enum",
9656
+ "enumValues": ["auto", "manual"]
9657
+ },
9658
+ {
9659
+ "path": "lightLevel",
9660
+ "valueType": "number"
9661
+ }
9662
+ ],
9663
+ "network-link": [
9664
+ {
9665
+ "path": "type",
9666
+ "valueType": "enum",
9667
+ "enumValues": [
9668
+ "wifi",
9669
+ "ethernet",
9670
+ "cellular",
9671
+ "unknown"
9672
+ ]
9673
+ },
9674
+ {
9675
+ "path": "signalPercent",
9676
+ "valueType": "number"
9677
+ },
9678
+ {
9679
+ "path": "rssiDbm",
9680
+ "valueType": "number"
9681
+ },
9682
+ {
9683
+ "path": "ssid",
9684
+ "valueType": "string"
9685
+ },
9686
+ {
9687
+ "path": "lastUpdated",
9688
+ "valueType": "number"
9689
+ }
9690
+ ],
9691
+ "notifier": [
9692
+ {
9693
+ "path": "lastSentAt",
9694
+ "valueType": "number"
9695
+ },
9696
+ {
9697
+ "path": "lastError",
9698
+ "valueType": "string"
9699
+ },
9700
+ {
9701
+ "path": "queueDepth",
9702
+ "valueType": "number"
9703
+ },
9704
+ {
9705
+ "path": "supports.image",
9706
+ "valueType": "boolean"
9707
+ },
9708
+ {
9709
+ "path": "supports.priority",
9710
+ "valueType": "boolean"
9711
+ },
9712
+ {
9713
+ "path": "supports.data",
9714
+ "valueType": "boolean"
9715
+ },
9716
+ {
9717
+ "path": "supports.actions",
9718
+ "valueType": "boolean"
9719
+ },
9720
+ {
9721
+ "path": "supports.recipients",
9722
+ "valueType": "boolean"
9723
+ }
9724
+ ],
9725
+ "numeric-sensor": [
9726
+ {
9727
+ "path": "value",
9728
+ "valueType": "number"
9729
+ },
9730
+ {
9731
+ "path": "unit",
9732
+ "valueType": "string"
9733
+ },
9734
+ {
9735
+ "path": "precision",
9736
+ "valueType": "number"
9737
+ }
9738
+ ],
9739
+ "pet-feeder": [
9740
+ {
9741
+ "path": "foodLevel",
9742
+ "valueType": "number"
9743
+ },
9744
+ {
9745
+ "path": "food1",
9746
+ "valueType": "number"
9747
+ },
9748
+ {
9749
+ "path": "food2",
9750
+ "valueType": "number"
9751
+ },
9752
+ {
9753
+ "path": "lowFood",
9754
+ "valueType": "boolean"
9755
+ },
9756
+ {
9757
+ "path": "batteryPower",
9758
+ "valueType": "number"
9759
+ },
9760
+ {
9761
+ "path": "desiccantLeftDays",
9762
+ "valueType": "number"
9763
+ },
9764
+ {
9765
+ "path": "feeding",
9766
+ "valueType": "boolean"
9767
+ },
9768
+ {
9769
+ "path": "status",
9770
+ "valueType": "enum",
9771
+ "enumValues": [
9772
+ "normal",
9773
+ "offline",
9774
+ "on_batteries"
9775
+ ]
9776
+ },
9777
+ {
9778
+ "path": "error",
9779
+ "valueType": "string"
9780
+ },
9781
+ {
9782
+ "path": "errorCode",
9783
+ "valueType": "number"
9784
+ },
9785
+ {
9786
+ "path": "isDualHopper",
9787
+ "valueType": "boolean"
9788
+ },
9789
+ {
9790
+ "path": "childLock",
9791
+ "valueType": "boolean"
9792
+ },
9793
+ {
9794
+ "path": "indicatorLight",
9795
+ "valueType": "boolean"
9796
+ },
9797
+ {
9798
+ "path": "feedSound",
9799
+ "valueType": "boolean"
9800
+ },
9801
+ {
9802
+ "path": "volume",
9803
+ "valueType": "number"
9804
+ }
9805
+ ],
9806
+ "power-meter": [
9807
+ {
9808
+ "path": "watts",
9809
+ "valueType": "number"
9810
+ },
9811
+ {
9812
+ "path": "kwhTotal",
9813
+ "valueType": "number"
9814
+ },
9815
+ {
9816
+ "path": "volts",
9817
+ "valueType": "number"
9818
+ },
9819
+ {
9820
+ "path": "amps",
9821
+ "valueType": "number"
9822
+ },
9823
+ {
9824
+ "path": "va",
9825
+ "valueType": "number"
9826
+ },
9827
+ {
9828
+ "path": "powerFactor",
9829
+ "valueType": "number"
9830
+ },
9831
+ {
9832
+ "path": "unit",
9833
+ "valueType": "string"
9834
+ },
9835
+ {
9836
+ "path": "precision",
9837
+ "valueType": "number"
9838
+ }
9839
+ ],
9840
+ "presence": [
9841
+ {
9842
+ "path": "state",
9843
+ "valueType": "string"
9844
+ },
9845
+ {
9846
+ "path": "location",
9847
+ "valueType": "string"
9848
+ },
9849
+ {
9850
+ "path": "gps.latitude",
9851
+ "valueType": "number"
9852
+ },
9853
+ {
9854
+ "path": "gps.longitude",
9855
+ "valueType": "number"
9856
+ },
9857
+ {
9858
+ "path": "gps.accuracyMeters",
9859
+ "valueType": "number"
9860
+ },
9861
+ {
9862
+ "path": "batteryPercent",
9863
+ "valueType": "number"
9864
+ }
9865
+ ],
9866
+ "pressure-sensor": [
9867
+ {
9868
+ "path": "hpa",
9869
+ "valueType": "number"
9870
+ },
9871
+ {
9872
+ "path": "unit",
9873
+ "valueType": "string"
9874
+ },
9875
+ {
9876
+ "path": "precision",
9877
+ "valueType": "number"
9878
+ }
9879
+ ],
9880
+ "privacy-mask": [{
9881
+ "path": "enabled",
9882
+ "valueType": "boolean"
9883
+ }, {
9884
+ "path": "audioEnabled",
9885
+ "valueType": "boolean"
9886
+ }],
9887
+ "ptz": [
9888
+ {
9889
+ "path": "pan",
9890
+ "valueType": "number"
9891
+ },
9892
+ {
9893
+ "path": "tilt",
9894
+ "valueType": "number"
9895
+ },
9896
+ {
9897
+ "path": "zoom",
9898
+ "valueType": "number"
9899
+ },
9900
+ {
9901
+ "path": "autofocus",
9902
+ "valueType": "boolean"
9903
+ }
9904
+ ],
9905
+ "ptz-autotrack": [
9906
+ {
9907
+ "path": "enabled",
9908
+ "valueType": "boolean"
9909
+ },
9910
+ {
9911
+ "path": "currentSettings.targetType",
9912
+ "valueType": "string"
9913
+ },
9914
+ {
9915
+ "path": "currentSettings.stopDelaySeconds",
9916
+ "valueType": "number"
9917
+ },
9918
+ {
9919
+ "path": "currentSettings.disappearDelaySeconds",
9920
+ "valueType": "number"
9921
+ }
9922
+ ],
9923
+ "recording-archive": [
9924
+ {
9925
+ "path": "deviceId",
9926
+ "valueType": "number"
9927
+ },
9928
+ {
9929
+ "path": "enabled",
9930
+ "valueType": "boolean"
9931
+ },
9932
+ {
9933
+ "path": "activeMode",
9934
+ "valueType": "enum",
9935
+ "enumValues": [
9936
+ "off",
9937
+ "events",
9938
+ "continuous",
9939
+ "on-device-decision"
9940
+ ]
9941
+ },
9942
+ {
9943
+ "path": "nodeId",
9944
+ "valueType": "string"
9945
+ },
9946
+ {
9947
+ "path": "storageBytes",
9948
+ "valueType": "number"
9949
+ }
9950
+ ],
9951
+ "recording-onboard": [
9952
+ {
9953
+ "path": "primaryTrackId",
9954
+ "valueType": "string"
9955
+ },
9956
+ {
9957
+ "path": "enabled",
9958
+ "valueType": "boolean"
9959
+ },
9960
+ {
9961
+ "path": "overwriteWhenFull",
9962
+ "valueType": "boolean"
9963
+ },
9964
+ {
9965
+ "path": "preRecordSec",
9966
+ "valueType": "number"
9967
+ },
9968
+ {
9969
+ "path": "postRecordSec",
9970
+ "valueType": "number"
9971
+ },
9972
+ {
9973
+ "path": "segmentMinutes",
9974
+ "valueType": "number"
9975
+ },
9976
+ {
9977
+ "path": "unreadableWindows",
9978
+ "valueType": "number"
9979
+ },
9980
+ {
9981
+ "path": "recordingToNowhere",
9982
+ "valueType": "boolean"
9983
+ }
9984
+ ],
9985
+ "recording-signal": [{
9986
+ "path": "active",
9987
+ "valueType": "boolean"
9988
+ }, {
9989
+ "path": "reason",
9990
+ "valueType": "string"
9991
+ }],
9992
+ "running-state": [
9993
+ {
9994
+ "path": "running",
9995
+ "valueType": "boolean"
9996
+ },
9997
+ {
9998
+ "path": "since",
9999
+ "valueType": "number"
10000
+ },
10001
+ {
10002
+ "path": "source",
10003
+ "valueType": "enum",
10004
+ "enumValues": ["native", "assigned"]
10005
+ },
10006
+ {
10007
+ "path": "phase",
10008
+ "valueType": "string"
10009
+ }
10010
+ ],
10011
+ "script-runner": [
10012
+ {
10013
+ "path": "isRunning",
10014
+ "valueType": "boolean"
10015
+ },
10016
+ {
10017
+ "path": "lastRunAt",
10018
+ "valueType": "number"
10019
+ },
10020
+ {
10021
+ "path": "lastRunSuccess",
10022
+ "valueType": "boolean"
10023
+ },
10024
+ {
10025
+ "path": "lastError",
10026
+ "valueType": "string"
10027
+ }
10028
+ ],
10029
+ "smoke": [{
10030
+ "path": "detected",
10031
+ "valueType": "boolean"
10032
+ }],
10033
+ "snapshot": [
10034
+ {
10035
+ "path": "lastCapturedAt",
10036
+ "valueType": "number"
10037
+ },
10038
+ {
10039
+ "path": "cacheAgeMs",
10040
+ "valueType": "number"
10041
+ },
10042
+ {
10043
+ "path": "lastBytes",
10044
+ "valueType": "number"
10045
+ },
10046
+ {
10047
+ "path": "lastStreamId",
10048
+ "valueType": "string"
10049
+ }
10050
+ ],
10051
+ "stream-params": [
10052
+ {
10053
+ "path": "main.width",
10054
+ "valueType": "number"
10055
+ },
10056
+ {
10057
+ "path": "main.height",
10058
+ "valueType": "number"
10059
+ },
10060
+ {
10061
+ "path": "main.codec",
10062
+ "valueType": "enum",
10063
+ "enumValues": ["h264", "h265"]
10064
+ },
10065
+ {
10066
+ "path": "main.framerate",
10067
+ "valueType": "number"
10068
+ },
10069
+ {
10070
+ "path": "main.bitrate",
10071
+ "valueType": "number"
10072
+ },
10073
+ {
10074
+ "path": "main.bitrateMode",
10075
+ "valueType": "enum",
10076
+ "enumValues": ["vbr", "cbr"]
10077
+ },
10078
+ {
10079
+ "path": "main.encoderProfile",
10080
+ "valueType": "enum",
10081
+ "enumValues": [
10082
+ "high",
10083
+ "main",
10084
+ "baseline"
10085
+ ]
10086
+ },
10087
+ {
10088
+ "path": "main.gop",
10089
+ "valueType": "number"
10090
+ },
10091
+ {
10092
+ "path": "main.audio",
10093
+ "valueType": "boolean"
10094
+ },
10095
+ {
10096
+ "path": "sub.width",
10097
+ "valueType": "number"
10098
+ },
10099
+ {
10100
+ "path": "sub.height",
10101
+ "valueType": "number"
10102
+ },
10103
+ {
10104
+ "path": "sub.codec",
10105
+ "valueType": "enum",
10106
+ "enumValues": ["h264", "h265"]
10107
+ },
10108
+ {
10109
+ "path": "sub.framerate",
10110
+ "valueType": "number"
10111
+ },
10112
+ {
10113
+ "path": "sub.bitrate",
10114
+ "valueType": "number"
10115
+ },
10116
+ {
10117
+ "path": "sub.bitrateMode",
10118
+ "valueType": "enum",
10119
+ "enumValues": ["vbr", "cbr"]
10120
+ },
10121
+ {
10122
+ "path": "sub.encoderProfile",
10123
+ "valueType": "enum",
10124
+ "enumValues": [
10125
+ "high",
10126
+ "main",
10127
+ "baseline"
10128
+ ]
10129
+ },
10130
+ {
10131
+ "path": "sub.gop",
10132
+ "valueType": "number"
10133
+ },
10134
+ {
10135
+ "path": "sub.audio",
10136
+ "valueType": "boolean"
10137
+ },
10138
+ {
10139
+ "path": "ext.width",
10140
+ "valueType": "number"
10141
+ },
10142
+ {
10143
+ "path": "ext.height",
10144
+ "valueType": "number"
10145
+ },
10146
+ {
10147
+ "path": "ext.codec",
10148
+ "valueType": "enum",
10149
+ "enumValues": ["h264", "h265"]
10150
+ },
10151
+ {
10152
+ "path": "ext.framerate",
10153
+ "valueType": "number"
10154
+ },
10155
+ {
10156
+ "path": "ext.bitrate",
10157
+ "valueType": "number"
10158
+ },
10159
+ {
10160
+ "path": "ext.bitrateMode",
10161
+ "valueType": "enum",
10162
+ "enumValues": ["vbr", "cbr"]
10163
+ },
10164
+ {
10165
+ "path": "ext.encoderProfile",
10166
+ "valueType": "enum",
10167
+ "enumValues": [
10168
+ "high",
10169
+ "main",
10170
+ "baseline"
10171
+ ]
10172
+ },
10173
+ {
10174
+ "path": "ext.gop",
10175
+ "valueType": "number"
10176
+ },
10177
+ {
10178
+ "path": "ext.audio",
10179
+ "valueType": "boolean"
10180
+ }
10181
+ ],
10182
+ "switch": [{
10183
+ "path": "on",
10184
+ "valueType": "boolean"
10185
+ }],
10186
+ "tamper": [{
10187
+ "path": "tampered",
10188
+ "valueType": "boolean"
10189
+ }],
10190
+ "temperature-sensor": [
10191
+ {
10192
+ "path": "celsius",
10193
+ "valueType": "number"
10194
+ },
10195
+ {
10196
+ "path": "unit",
10197
+ "valueType": "string"
10198
+ },
10199
+ {
10200
+ "path": "precision",
10201
+ "valueType": "number"
10202
+ }
10203
+ ],
10204
+ "update": [
10205
+ {
10206
+ "path": "currentVersion",
10207
+ "valueType": "string"
10208
+ },
10209
+ {
10210
+ "path": "availableVersion",
10211
+ "valueType": "string"
10212
+ },
10213
+ {
10214
+ "path": "updatable",
10215
+ "valueType": "boolean"
10216
+ },
10217
+ {
10218
+ "path": "state",
10219
+ "valueType": "string"
10220
+ },
10221
+ {
10222
+ "path": "inProgress",
10223
+ "valueType": "boolean"
10224
+ }
10225
+ ],
10226
+ "vacuum-control": [
10227
+ {
10228
+ "path": "state",
10229
+ "valueType": "enum",
10230
+ "enumValues": [
10231
+ "idle",
10232
+ "cleaning",
10233
+ "paused",
10234
+ "returning",
10235
+ "docked",
10236
+ "drying",
10237
+ "error"
10238
+ ]
10239
+ },
10240
+ {
10241
+ "path": "batteryLevel",
10242
+ "valueType": "number"
10243
+ },
10244
+ {
10245
+ "path": "fanSpeed",
10246
+ "valueType": "string"
10247
+ },
10248
+ {
10249
+ "path": "progressPercent",
10250
+ "valueType": "number"
10251
+ },
10252
+ {
10253
+ "path": "errorCode",
10254
+ "valueType": "number"
10255
+ },
10256
+ {
10257
+ "path": "errorLabel",
10258
+ "valueType": "string"
10259
+ }
10260
+ ],
10261
+ "valve": [{
10262
+ "path": "state",
10263
+ "valueType": "enum",
10264
+ "enumValues": [
10265
+ "open",
10266
+ "opening",
10267
+ "closing",
10268
+ "closed",
10269
+ "stopped"
10270
+ ]
10271
+ }, {
10272
+ "path": "position",
10273
+ "valueType": "number"
10274
+ }],
10275
+ "vibration": [{
10276
+ "path": "detected",
10277
+ "valueType": "boolean"
10278
+ }],
10279
+ "water-heater": [
10280
+ {
10281
+ "path": "currentTemp",
10282
+ "valueType": "number"
10283
+ },
10284
+ {
10285
+ "path": "targetTemp",
10286
+ "valueType": "number"
10287
+ },
10288
+ {
10289
+ "path": "operationMode",
10290
+ "valueType": "string"
10291
+ },
10292
+ {
10293
+ "path": "away",
10294
+ "valueType": "boolean"
10295
+ },
10296
+ {
10297
+ "path": "minTemp",
10298
+ "valueType": "number"
10299
+ },
10300
+ {
10301
+ "path": "maxTemp",
10302
+ "valueType": "number"
10303
+ }
10304
+ ],
10305
+ "weather": [
10306
+ {
10307
+ "path": "condition",
10308
+ "valueType": "string"
10309
+ },
10310
+ {
10311
+ "path": "temperature",
10312
+ "valueType": "number"
10313
+ },
10314
+ {
10315
+ "path": "temperatureUnit",
10316
+ "valueType": "string"
10317
+ },
10318
+ {
10319
+ "path": "humidity",
10320
+ "valueType": "number"
10321
+ },
10322
+ {
10323
+ "path": "pressure",
10324
+ "valueType": "number"
10325
+ },
10326
+ {
10327
+ "path": "pressureUnit",
10328
+ "valueType": "string"
10329
+ },
10330
+ {
10331
+ "path": "windSpeed",
10332
+ "valueType": "number"
10333
+ },
10334
+ {
10335
+ "path": "windSpeedUnit",
10336
+ "valueType": "string"
10337
+ },
10338
+ {
10339
+ "path": "windBearing",
10340
+ "valueType": "number"
10341
+ }
10342
+ ],
10343
+ "zone-analytics": [
10344
+ {
10345
+ "path": "ts",
10346
+ "valueType": "number"
10347
+ },
10348
+ {
10349
+ "path": "frameWidth",
10350
+ "valueType": "number"
10351
+ },
10352
+ {
10353
+ "path": "frameHeight",
10354
+ "valueType": "number"
10355
+ },
10356
+ {
10357
+ "path": "frame.totalObjects",
10358
+ "valueType": "number"
10359
+ },
10360
+ {
10361
+ "path": "frame.standingObjects",
10362
+ "valueType": "number"
10363
+ },
10364
+ {
10365
+ "path": "frame.transientObjects",
10366
+ "valueType": "number"
10367
+ },
10368
+ {
10369
+ "path": "unzoned.totalObjects",
10370
+ "valueType": "number"
10371
+ },
10372
+ {
10373
+ "path": "unzoned.standingObjects",
10374
+ "valueType": "number"
10375
+ },
10376
+ {
10377
+ "path": "unzoned.transientObjects",
10378
+ "valueType": "number"
10379
+ }
10380
+ ]
10381
+ });
8408
10382
  object({
8409
10383
  code: string().regex(/^[a-z][a-z0-9-]*(\.[a-z0-9-]+)+$/),
8410
10384
  params: record(string(), union([string(), number()])).optional()
@@ -8753,7 +10727,7 @@ var DeviceRole = /* @__PURE__ */ function(DeviceRole) {
8753
10727
  return DeviceRole;
8754
10728
  }({});
8755
10729
  //#endregion
8756
- //#region ../types/dist/composition-BJ8iAZb3.mjs
10730
+ //#region ../types/dist/composition-kEl9mevu.mjs
8757
10731
  /**
8758
10732
  * The ffmpeg build every CamStack node downloads, per platform and arch.
8759
10733
  *
@@ -11968,7 +13942,7 @@ var LogChannelDescriptorSchema = object({
11968
13942
  * `true` is a PROMISE with two halves, and both must hold: the gate is
11969
13943
  * consulted with the numeric device id, AND every line the channel admits
11970
13944
  * carries `tags: { deviceId }` with that same numeric id. The second half is
11971
- * what makes `| json | deviceId="617"` work in Loki — `loki-payload.ts`
13945
+ * what makes `| json | deviceId="102"` work in Loki — `loki-payload.ts`
11972
13946
  * keeps `deviceId` out of the stream labels for cardinality, so the tag in
11973
13947
  * the body is the only way to filter.
11974
13948
  *
@@ -12156,7 +14130,7 @@ var ModelVariantGroupSchema = object({
12156
14130
  precision: _enum(["fp32", "int8"]).optional(),
12157
14131
  /**
12158
14132
  * Training / latency-variant axis. Omit ⇒ the standard build. `test` marks
12159
- * an alternate training of the same family (Scrypted `relu_test`); chip
14133
+ * an alternate training of the same family (plugin catalog `relu_test`); chip
12160
14134
  * label is "Test".
12161
14135
  */
12162
14136
  optimization: _enum(["standard", "test"]).optional(),
@@ -12408,8 +14382,8 @@ var ModelCatalogEntrySchema = object({
12408
14382
  provider: ModelProviderIdSchema.optional(),
12409
14383
  /**
12410
14384
  * Per-MODEL class map override. Absent ⇒ the step's `StepDefinition.classMap`
12411
- * applies (Frigate / COCO public catalog). Set on a custom model whose raw
12412
- * labels already ARE the CamStack macros (Scrypted identity map).
14385
+ * applies (plus catalog / COCO public catalog). Set on a custom model whose raw
14386
+ * labels already ARE the CamStack macros (plugin catalog identity map).
12413
14387
  */
12414
14388
  classMap: DetectionCatalogClassMapSchema.optional(),
12415
14389
  /**
@@ -15378,7 +17352,7 @@ method(object({
15378
17352
  * `1` is real time and is the ONLY value that allows the copy branch —
15379
17353
  * anything else forces `libx264` over the window. That was priced
15380
17354
  * before it was chosen: a per-event burst measured at 0.23 s and 254 KB
15381
- * on a real 615 720p cut, against 922 KB for the copy it replaces. A
17355
+ * on a real 101 720p cut, against 922 KB for the copy it replaces. A
15382
17356
  * re-encode is capped at 720p (`EVENT_CLIP_ENCODE_MAX_WIDTH`), because
15383
17357
  * once the decode is forced the width stops being free.
15384
17358
  */
@@ -15798,6 +17772,7 @@ var CompositionRunStatusSchema = _enum([
15798
17772
  "starting",
15799
17773
  "running",
15800
17774
  "degraded",
17775
+ "incomplete",
15801
17776
  "failed"
15802
17777
  ]);
15803
17778
  var CompositionFieldStateKindSchema = _enum([
@@ -16011,6 +17986,7 @@ var CoreBlockStatusSchema = _enum([
16011
17986
  "starting",
16012
17987
  "running",
16013
17988
  "degraded",
17989
+ "incomplete",
16014
17990
  "failed"
16015
17991
  ]);
16016
17992
  /** path → TypeScript source for a multi-file block. */
@@ -37934,7 +39910,7 @@ var PRIMARY_CATEGORIES = new Set(ENTRIES.map((e) => e.primaryCategory));
37934
39910
  * `locationKey` is ALWAYS {@link locationIconKey} of the label — never the
37935
39911
  * operator's casing. The registry matches labels trimmed + case-insensitively
37936
39912
  * everywhere (`addLocation`, `removeLocation`, `renameLocation`), and a
37937
- * case-only rename (`cucina` → `Cucina`) is a real edit this repo supports; a
39913
+ * case-only rename (`kitchen` → `Kitchen`) is a real edit this repo supports; a
37938
39914
  * map keyed on the displayed casing would orphan its entry on exactly that
37939
39915
  * edit. Consumers join by keying their own label through `locationIconKey`.
37940
39916
  */
@@ -37959,7 +39935,7 @@ var LocationDescriptionAssignmentSchema = object({
37959
39935
  /**
37960
39936
  * A SITE ZONE — a named part of the property that several locations belong to.
37961
39937
  *
37962
- * "Zona notte" holds every bedroom; "Zona giorno" the living room and the
39938
+ * "Night zone" holds every bedroom; "Zona giorno" the living room and the
37963
39939
  * kitchen. A camera belongs to exactly one location, and a location to at most
37964
39940
  * one zone, so a camera's zone is derived and never stored on the device: the
37965
39941
  * whole point of this entity is that grouping rooms touches no device row.
@@ -37988,7 +39964,7 @@ var LocationDescriptionAssignmentSchema = object({
37988
39964
  * the locations inside it.
37989
39965
  *
37990
39966
  * The LABEL is carried alongside the key because the key is lossy on purpose —
37991
- * a surface must show "Zona notte", not "zona notte". Locations are carried
39967
+ * a surface must show "Night zone", not "night zone". Locations are carried
37992
39968
  * here, rather than left to a second call, because every consumer wants both
37993
39969
  * at once and a viewer that asked twice could render a zone whose membership
37994
39970
  * it has not fetched yet.
@@ -40101,8 +42077,8 @@ var LoadContributionSchema = object({
40101
42077
  "unattributable"
40102
42078
  ]),
40103
42079
  /**
40104
- * What ONE entry is, in the contributor's own words — `615/high`,
40105
- * `617/native`, `cuda:0 shared pool`. Free text because the unit differs per
42080
+ * What ONE entry is, in the contributor's own words — `101/high`,
42081
+ * `102/native`, `cuda:0 shared pool`. Free text because the unit differs per
40106
42082
  * family and inventing a common one would lose the only information that
40107
42083
  * makes two entries for the same camera distinguishable.
40108
42084
  */
@@ -43062,7 +45038,7 @@ var NcConditionsSchema = object({
43062
45038
  * with the list under it is worse than no switch (D62).
43063
45039
  *
43064
45040
  * MEMBERS ARE FACE-GALLERY `Identity.id`s (uuid), not display names. A name is
43065
- * renameable, and a rule authored on "Gianluca" went silently dark the moment
45041
+ * renameable, and a rule authored on "Alice" went silently dark the moment
43066
45042
  * the operator fixed the spelling. The id reaches the record on
43067
45043
  * `LabelAttribution.identityId`; the name is what the editor shows and what
43068
45044
  * `{{label}}` renders.
@@ -43613,7 +45589,7 @@ var NcRulePatchSchema = NcRuleInputSchema.partial().extend({
43613
45589
  * A rule scoped to one camera and one zone silently became a rule that
43614
45590
  * matches EVERY event on EVERY camera, and lost its `media` policy
43615
45591
  * (zoneCrop / gif / clip / frame) and its `priority` at the same time. Seen
43616
- * live on 2026-08-12: a rule scoped to device 617 fired on 590 and 615
45592
+ * live on 2026-08-12: a rule scoped to device 102 fired on 104 and 101
43617
45593
  * within a minute of a two-field patch.
43618
45594
  *
43619
45595
  * So every defaulted field is re-declared here WITHOUT its default. The
@@ -45426,7 +47402,7 @@ var LabelAttributionSchema = object({
45426
47402
  * `Identity.id` or a plate-gallery `Vehicle.id` (both `randomUUID`).
45427
47403
  *
45428
47404
  * The text alone is a DISPLAY NAME, and a display name is renameable: a
45429
- * notification rule authored on "Gianluca" stopped matching the moment the
47405
+ * notification rule authored on "Alice" stopped matching the moment the
45430
47406
  * operator fixed the spelling in the gallery, and nothing said so. The id is
45431
47407
  * the thing that does not move, so it is what a rule matches on
45432
47408
  * (`NcConditions.identities`) and the text is what a human is shown.
@@ -47965,7 +49941,7 @@ method(_void(), array(PipelineEngineChoiceSchema)), method(_void(), PipelineEngi
47965
49941
  /**
47966
49942
  * Root-supplied detections for the tree's ROOT step (D730). Set by
47967
49943
  * `runDetailSubtree` when the camera's root model supplies a crop-kind
47968
- * step (a Frigate+ `license_plate` for `plate-detection`): the step is
49944
+ * step (a plus catalog `license_plate` for `plate-detection`): the step is
47969
49945
  * NOT inferred, these boxes are its output, and its children (the plate
47970
49946
  * reader) run on them through their own crop policy. Boxes are in the
47971
49947
  * PIXELS of the image this call carries. Absent ⇒ the root step runs.
@@ -49598,7 +51574,7 @@ var RunnerCameraConfigSchema = object({
49598
51574
  * detection session that asks for history. What shipped was a last-moment
49599
51575
  * discard — `FrameSlot`'s throttle compares wall clocks, and ~4 s of media
49600
51576
  * arriving inside a few hundred ms of wall clock looks to it like one frame's
49601
- * worth. Device 617, 2026-09-08: a re-run of the SAME model over the stored
51577
+ * worth. Device 102, 2026-09-08: a re-run of the SAME model over the stored
49602
51578
  * recording scored the subject `vehicle 0.5669` — above the 0.50 floor —
49603
51579
  * 1.68 s BEFORE the live track was born, on a frame that was in the pre-roll,
49604
51580
  * was decoded, and was freed.
@@ -51628,7 +53604,7 @@ method(_void(), ProviderInfoSchema, { auth: "admin" }), method(object({ config:
51628
53604
  * The signals a device can emit to WAKE its own stream.
51629
53605
  *
51630
53606
  * A camera whose stream is built on demand sleeps until something asks for it,
51631
- * and "something" cannot be a consumer that is merely attached — a Frigate-style
53607
+ * and "something" cannot be a consumer that is merely attached — a external-catalog
51632
53608
  * puller holds a session open for ever, and treating that as demand would keep
51633
53609
  * a battery camera awake for ever, which is the whole thing the battery is for
51634
53610
  * (D173). So the wake has to come from the CAMERA: an event it noticed by
@@ -52315,7 +54291,7 @@ var ClipSchema = object({
52315
54291
  * {@link MAX_CLIP_EVENT_IDS}. Empty on footage-only clips.
52316
54292
  *
52317
54293
  * Bounded because it is not a payload the surface pages through: one visit on
52318
- * device 615 carried 2 345 ids, and `eventIds` was 99% of a 153 KB
54294
+ * device 101 carried 2 345 ids, and `eventIds` was 99% of a 153 KB
52319
54295
  * camera-day. Read {@link eventCount} for the true total.
52320
54296
  */
52321
54297
  eventIds: array(string()).optional(),
@@ -52460,7 +54436,7 @@ var ClipPlaybackSchema = object({
52460
54436
  * camera has no recordings", which is the defect this whole line of work is
52461
54437
  * about: a battery camera nobody woke (`sleeping`), a camera that could not be
52462
54438
  * reached at all (`unreachable`, also what a provider that THREW reports), a
52463
- * camera whose SD card is not mounted (`no-storage`, measured on 640 —
54439
+ * camera whose SD card is not mounted (`no-storage`, measured on 106 —
52464
54440
  * `HddInfo mount 0`, honestly nothing to list rather than "no clips"), and a
52465
54441
  * camera whose OWN index disagrees with its OWN calendar (`index-empty`,
52466
54442
  * measured on 618: the calendar marks 3–20 September, days 6–20 list zero
@@ -52725,7 +54701,7 @@ DeviceType.Camera, method(object({
52725
54701
  *
52726
54702
  * It was optional, documented as "absent means the device's BOUND
52727
54703
  * provider, which is CamStack on every camera". No code implemented
52728
- * that. Measured on the live hub 2026-09-20 — device 592, bound to
54704
+ * that. Measured on the live hub 2026-09-20 — device 107, bound to
52729
54705
  * `recorder` AND `provider-reolink` — a bare call with `limit: 3`
52730
54706
  * answered SIX rows, three from each source, merged newest-first:
52731
54707
  * `device-collection-dispatch.ts` simply left the fan-out un-narrowed,
@@ -53803,7 +55779,10 @@ object({
53803
55779
  DeviceType.Sensor;
53804
55780
  object({
53805
55781
  /** Current illuminance in lux (lx). */
53806
- lux: number().min(0),
55782
+ lux: number().min(0).meta({
55783
+ unit: "lx",
55784
+ label: "Illuminance"
55785
+ }),
53807
55786
  /** Ms epoch when the slice was last updated. */
53808
55787
  lastFetchedAt: number(),
53809
55788
  /** Live display unit from the upstream source (e.g. HA
@@ -53959,7 +55938,10 @@ var BatteryStatusSchema = object({
53959
55938
  * Consumers must SKIP a null rather than coerce it — `battery-band` already
53960
55939
  * declines to band a non-finite reading, which is the correct shape.
53961
55940
  */
53962
- percentage: number().min(0).max(100).nullable(),
55941
+ percentage: number().min(0).max(100).nullable().meta({
55942
+ unit: "%",
55943
+ label: "Charge"
55944
+ }),
53963
55945
  /**
53964
55946
  * Charging source. `'dc'` covers wall/USB adapters; `'solar'` is
53965
55947
  * Reolink-specific for the Solar Panel 2 accessory (will become
@@ -53978,13 +55960,13 @@ var BatteryStatusSchema = object({
53978
55960
  "solar",
53979
55961
  "none",
53980
55962
  "unknown"
53981
- ]),
55963
+ ]).meta({ label: "Charging source" }),
53982
55964
  /**
53983
55965
  * True when the camera firmware has gone into low-power mode. Battery
53984
55966
  * providers MUST avoid polling during sleep — reading the battery
53985
55967
  * wakes the camera up and drains charge.
53986
55968
  */
53987
- sleeping: boolean(),
55969
+ sleeping: boolean().meta({ label: "Sleeping" }),
53988
55970
  /** Ms epoch of the last observation. Lets consumers reason about freshness. */
53989
55971
  lastUpdated: number(),
53990
55972
  /**
@@ -54024,7 +56006,7 @@ var BatteryStatusSchema = object({
54024
56006
  * sub-threshold = low). UI MUST render "Normal"/"Low" instead of a
54025
56007
  * misleading exact percentage. Absent/false → genuine 0–100 % reading.
54026
56008
  */
54027
- binary: boolean().optional()
56009
+ binary: boolean().optional().meta({ label: "Binary indicator" })
54028
56010
  });
54029
56011
  DeviceType.Camera, DeviceType.Sensor, DeviceType.Button, DeviceType.Switch, DeviceType.PetFeeder, DeviceType.Container, DeviceType.Thermostat;
54030
56012
  method(object({
@@ -54039,7 +56021,7 @@ method(object({
54039
56021
  status: BatteryStatusSchema
54040
56022
  });
54041
56023
  object({
54042
- on: boolean(),
56024
+ on: boolean().meta({ label: "On" }),
54043
56025
  /** Ms epoch of the last transition. 0 if never observed. */
54044
56026
  lastChangedAt: number()
54045
56027
  });
@@ -54297,7 +56279,7 @@ var GridLayoutCellSchema = object({
54297
56279
  *
54298
56280
  * A grid's `high` composes its sources' `high` and its `low` their `low`, so a
54299
56281
  * profile is on offer only when EVERY source can serve it. The refusal NAMES
54300
- * the sources, because "this grid has no low" is not a finding — "615 has no
56282
+ * the sources, because "this grid has no low" is not a finding — "101 has no
54301
56283
  * low" is, and it is the one an operator can act on.
54302
56284
  */
54303
56285
  var GridProfileOfferSchema = object({
@@ -55848,7 +57830,10 @@ DeviceType.Humidifier, method(object({
55848
57830
  });
55849
57831
  object({
55850
57832
  /** Current relative humidity, 0..100. */
55851
- percent: number().min(0).max(100),
57833
+ percent: number().min(0).max(100).meta({
57834
+ unit: "%",
57835
+ label: "Humidity"
57836
+ }),
55852
57837
  /** Ms epoch when the slice was last updated. */
55853
57838
  lastFetchedAt: number(),
55854
57839
  /** Live display unit from the upstream source (e.g. HA
@@ -58625,9 +60610,15 @@ method(_void(), PlatformCapabilitiesSchema), method(_void(), HardwareInfoSchema)
58625
60610
  });
58626
60611
  object({
58627
60612
  /** Instantaneous power draw in watts. */
58628
- watts: number().optional(),
60613
+ watts: number().optional().meta({
60614
+ unit: "W",
60615
+ label: "Power"
60616
+ }),
58629
60617
  /** Cumulative energy in kilowatt-hours since the meter was reset. */
58630
- kwhTotal: number().optional(),
60618
+ kwhTotal: number().optional().meta({
60619
+ unit: "kWh",
60620
+ label: "Energy"
60621
+ }),
58631
60622
  /** Voltage in volts. */
58632
60623
  volts: number().optional(),
58633
60624
  /** Current in amperes. */
@@ -58946,9 +60937,9 @@ var PtzOptionsSchema = object({
58946
60937
  * Reolink preset 0, Hikvision preset '1', Dahua preset 1 -- and on this fleet
58947
60938
  * not one of the three cameras honours its own:
58948
60939
  *
58949
- * 592 Videocamera camera Daniel (reolink) preset 0 holds "stanza"
58950
- * 1438 Videocamera dispensa (hikvision) preset 1 holds "Credenza"
58951
- * 3836 Videocamera studio (amcrest) preset 1 holds "Preset1"
60940
+ * 107 Camera camera Carol (reolink) preset 0 holds "stanza"
60941
+ * 1438 Camera dispensa (hikvision) preset 1 holds "Credenza"
60942
+ * 3836 Camera studio (amcrest) preset 1 holds "Preset1"
58952
60943
  *
58953
60944
  * So `goHome` meant "go wherever the operator happened to save in slot 0 or 1",
58954
60945
  * and two of the three swallowed the failure in a bare `catch`. For autotrack
@@ -59095,7 +61086,7 @@ object({
59095
61086
  running: boolean().nullable(),
59096
61087
  /** Epoch ms the current boolean began; null while `running` is null. */
59097
61088
  since: number().nullable(),
59098
- source: RunningStateSourceSchema,
61089
+ source: RunningStateSourceSchema.meta({ label: "Source" }),
59099
61090
  phase: string().nullable(),
59100
61091
  /** null until a reading has been published (D393). */
59101
61092
  lastFetchedAt: number().nullable()
@@ -59148,7 +61139,7 @@ var RecordingAvailabilitySchema = object({
59148
61139
  * would look identical. But the answer used to say nothing about that, so a
59149
61140
  * caller asking "what can I export?" read the single preferred profile as
59150
61141
  * the only one that exists — on this deployment every camera records `high`
59151
- * AND `low`, the low tree holding 14 GB for camera 615 alone, and the export
61142
+ * AND `low`, the low tree holding 14 GB for camera 101 alone, and the export
59152
61143
  * UI could not see it.
59153
61144
  *
59154
61145
  * Cheap: it is the same shallow directory read the profile CHOICE already
@@ -59247,7 +61238,7 @@ var RecordingSourceOptionsSchema = object({
59247
61238
  * `sparse` = gaps are the absence of one, and must be drawn as such.
59248
61239
  *
59249
61240
  * Not an onboard-only concession: measured 2026-09-24, OUR bar covers 98.8 %
59250
- * of 592's day and 1.2 % of 1436's. It is a fact about a (source, camera)
61241
+ * of 107's day and 1.2 % of 1436's. It is a fact about a (source, camera)
59251
61242
  * pair, and ours answers it per camera from `deriveRecordingMode`. */
59252
61243
  coverage: _enum(["continuous", "sparse"]),
59253
61244
  /** Where the playhead may be put.
@@ -59323,7 +61314,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(RecordingSourceS
59323
61314
  * merely discouraged (D554 amended).
59324
61315
  *
59325
61316
  * It was learned the expensive way on `videoclips.listClips`: measured
59326
- * on the live hub 2026-09-20, device 592 bound to `recorder` AND
61317
+ * on the live hub 2026-09-20, device 107 bound to `recorder` AND
59327
61318
  * `provider-reolink`, a bare call with `limit: 3` answered SIX rows,
59328
61319
  * three from each source, merged — `device-collection-dispatch.ts`
59329
61320
  * leaves an unpinned fan-out un-narrowed, so absence buys the union the
@@ -59924,7 +61915,7 @@ var ExportSpeedSchema = number().min(.25).max(32);
59924
61915
  * on a 10 h window holding 29,393 s of footage every range landed late by the
59925
61916
  * gap accumulated before it — up to 6,607 s, well past EOF. Nothing matched,
59926
61917
  * the video was a uniform timelapse, and the log line reported the five ranges
59927
- * that had been ASKED for (2026-08-13, export `57d14363`, camera 615).
61918
+ * that had been ASKED for (2026-08-13, export `57d14363`, camera 101).
59928
61919
  *
59929
61920
  * Relative and not absolute epoch, because an absolute epoch would make every
59930
61921
  * call site responsible for the same subtraction.
@@ -60558,7 +62549,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), RecordingSignalStatusS
60558
62549
  * which put a "Scenes" tab on one camera's detail page. That is the wrong shape
60559
62550
  * for the thing: a scene is a standing question about the property ("is the bin
60560
62551
  * still out"), and the operator's question is "which of my scenes have tripped",
60561
- * across every camera at once — not "what does camera 617 think". Buried one
62552
+ * across every camera at once — not "what does camera 102 think". Buried one
60562
62553
  * camera deep it also could not be found. The surface is now a top-level admin
60563
62554
  * page (`/scenes`, `pages/Scenes.tsx`) that lists every scene on every camera and
60564
62555
  * picks the camera inside the create flow, the same shape Events and Faces have.
@@ -61141,7 +63132,7 @@ DeviceType.Camera, method(object({ deviceId: number() }), StreamParamsOptionsSch
61141
63132
  auth: "admin"
61142
63133
  }), method(object({ deviceId: number() }), unknown().nullable());
61143
63134
  object({
61144
- on: boolean(),
63135
+ on: boolean().meta({ label: "On" }),
61145
63136
  /** Ms epoch of the last state change. Useful for UI "X minutes ago". */
61146
63137
  lastChangedAt: number()
61147
63138
  });
@@ -61704,7 +63695,10 @@ object({
61704
63695
  DeviceType.Sensor;
61705
63696
  object({
61706
63697
  /** Current temperature in Celsius. */
61707
- celsius: number(),
63698
+ celsius: number().meta({
63699
+ unit: "°C",
63700
+ label: "Temperature"
63701
+ }),
61708
63702
  /** Ms epoch when the slice was last updated (push or poll). */
61709
63703
  lastFetchedAt: number(),
61710
63704
  /** Live display unit from the upstream source (e.g. HA
@@ -62852,6 +64846,10 @@ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" })
62852
64846
  auth: "admin"
62853
64847
  });
62854
64848
  SOURCE_CAPS.filter((cap) => cap !== "switch" && cap !== "motion");
64849
+ 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;
64850
+ String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
64851
+ DeviceRole.BinarySensor, DeviceRole.MotionSensor;
64852
+ new Set(CAP_NAMES);
62855
64853
  Object.freeze({
62856
64854
  person: .5,
62857
64855
  vehicle: .5,
@@ -75789,7 +77787,7 @@ var SENSOR_CAP_VOCABULARY = {
75789
77787
  state: [{
75790
77788
  kind: "boolean",
75791
77789
  field: "on",
75792
- label: t("Active", "Attivo"),
77790
+ label: t("On", "Acceso"),
75793
77791
  whenTrue: t("When {device} turns active", "Quando {device} si attiva"),
75794
77792
  whenFalse: t("When {device} turns inactive", "Quando {device} si disattiva"),
75795
77793
  icon: "toggle-right"
@@ -79213,7 +81211,6 @@ Object.freeze({
79213
81211
  "smtp-provider": "email"
79214
81212
  });
79215
81213
  DeviceType.Camera;
79216
- 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;
79217
81214
  /**
79218
81215
  * A saved Customize assignment (D936). The schema is the type: callers use
79219
81216
  * `z.infer`, they do not restate the shape.
@@ -79302,7 +81299,6 @@ object({
79302
81299
  ]),
79303
81300
  reason: string().nullable()
79304
81301
  });
79305
- String.raw`rose\(active(\d+), changed(\d+), (\d+(?:\.\d+)?)\)`;
79306
81302
  var G711_SCALE_CORRECTION_DB = {
79307
81303
  PCMU: 20 * Math.log10(4),
79308
81304
  PCMA: 20 * Math.log10(8)
@@ -79675,7 +81671,7 @@ var STATE_SUMMARY_SECTION_VARS = [
79675
81671
  {
79676
81672
  name: "summaryStreams",
79677
81673
  label: "Summary: streams offline",
79678
- example: "Ingresso (high) — since 06:40",
81674
+ example: "Front door (high) — since 06:40",
79679
81675
  kinds: ["stream-offline", "stream-online"]
79680
81676
  },
79681
81677
  {
@@ -79693,13 +81689,13 @@ var STATE_SUMMARY_SECTION_VARS = [
79693
81689
  {
79694
81690
  name: "summaryDetection",
79695
81691
  label: "Summary: cameras detecting nothing",
79696
- example: "Ingresso — since 05:10",
81692
+ example: "Front door — since 05:10",
79697
81693
  kinds: ["detection-blind"]
79698
81694
  },
79699
81695
  {
79700
81696
  name: "summaryNodes",
79701
81697
  label: "Summary: nodes",
79702
- example: "little-unraid — offline since 03:00",
81698
+ example: "agent-a — offline since 03:00",
79703
81699
  kinds: [
79704
81700
  "node-offline",
79705
81701
  "node-online",
@@ -80517,7 +82513,7 @@ var AgentUIAddon = class extends BaseAddon {
80517
82513
  capability: adminUiCapability,
80518
82514
  provider: {
80519
82515
  getStaticDir: async () => ({ staticDir: path.resolve(__dirname) }),
80520
- getVersion: async () => ({ version: "1.2.266" })
82516
+ getVersion: async () => ({ version: "1.2.268" })
80521
82517
  }
80522
82518
  }];
80523
82519
  }