@camera.ui/server 2.1.11 → 2.1.13
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/interface/assets/{404-B4_ZWIGx.js → 404-CVkDpT0X.js} +1 -1
- package/dist/interface/assets/{About-Cd8Ipr7a.js → About-CUgIR2xi.js} +1 -1
- package/dist/interface/assets/Automation-BYRKp0AC.js +3 -0
- package/dist/interface/assets/{AutomationImport-BTkkRikE.js → AutomationImport-L_OzZZgi.js} +2 -2
- package/dist/interface/assets/{AutomationStore-VdGEOwci.js → AutomationStore-DaNQqJoT.js} +2 -2
- package/dist/interface/assets/AutomationStoreDetail-Seor4Ohh.js +2 -0
- package/dist/interface/assets/Automations-BMQIkpUa.js +2 -0
- package/dist/interface/assets/Camera-3umh2Xjc.js +2 -0
- package/dist/interface/assets/{CameraConsole-KqRFGZzT.js → CameraConsole-BLlgkKDp.js} +2 -2
- package/dist/interface/assets/Cameras-DvK8E1Vk.js +651 -0
- package/dist/interface/assets/{Camview-Lp3QU0de.css → Camview-DIEa8IRE.css} +1 -1
- package/dist/interface/assets/Camview-DSO2lWxT.js +1 -0
- package/dist/interface/assets/{CertificateUpload-Dd4Ec7bt.js → CertificateUpload-BsnlaxRS.js} +1 -1
- package/dist/interface/assets/{Config-Db-Eh4Lf.js → Config-BXj83-No.js} +1 -1
- package/dist/interface/assets/{ConfigActionCameraControl-CbG-HEuU.js → ConfigActionCameraControl-BGfvT6ME.js} +1 -1
- package/dist/interface/assets/{ConfigActionDelay-BoGIhNHr.js → ConfigActionDelay-D10_C6yo.js} +1 -1
- package/dist/interface/assets/{ConfigActionHttp-DyPo2XvQ.js → ConfigActionHttp-DL4jh9Wz.js} +1 -1
- package/dist/interface/assets/{ConfigActionImageInput-C9aYztb6.js → ConfigActionImageInput-DVvMUzrT.js} +1 -1
- package/dist/interface/assets/{ConfigActionMqtt-kQz9Y9OZ.js → ConfigActionMqtt-BqK3q4cC.js} +1 -1
- package/dist/interface/assets/ConfigActionNotification-D_H5Q68D.js +1 -0
- package/dist/interface/assets/{ConfigActionNotificationControl-DEOv_FGO.js → ConfigActionNotificationControl-BnTJl4dr.js} +1 -1
- package/dist/interface/assets/{ConfigActionOutput-CGtG-8PF.js → ConfigActionOutput-udY95_rH.js} +1 -1
- package/dist/interface/assets/{ConfigActionPlugin-C8v0CWrz.js → ConfigActionPlugin-C51LrkZb.js} +1 -1
- package/dist/interface/assets/{ConfigActionSensor-CESXnRuQ.js → ConfigActionSensor-B2tFf8x6.js} +1 -1
- package/dist/interface/assets/{ConfigActionSnapshot-TVhjeFKP.js → ConfigActionSnapshot-BzmeByH3.js} +1 -1
- package/dist/interface/assets/{ConfigActionVariable-DwRFwopb.js → ConfigActionVariable-BagC3lj5.js} +1 -1
- package/dist/interface/assets/{ConfigConditionIfElse-CmtoYTUU.js → ConfigConditionIfElse-CQOZJ19Y.js} +1 -1
- package/dist/interface/assets/{ConfigConditionSensorState-3B9Sjxdb.js → ConfigConditionSensorState-SGYpkNP5.js} +1 -1
- package/dist/interface/assets/ConfigConditionSwitch-BXR6xUN8.js +1 -0
- package/dist/interface/assets/{ConfigConditionTime-Djq2yOCr.js → ConfigConditionTime-BrEhw1R9.js} +1 -1
- package/dist/interface/assets/{ConfigSensorValueInput-DZ7r71aU.js → ConfigSensorValueInput-DezTWtbA.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerDetection-B62txb4H.js → ConfigTriggerDetection-xo0imE_3.js} +1 -1
- package/dist/interface/assets/ConfigTriggerGeofence-BmJpP4Ew.js +1 -0
- package/dist/interface/assets/{ConfigTriggerManual-nrYy4xBP.js → ConfigTriggerManual-CmAdnZQK.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerMqtt-CK8FEVxs.js → ConfigTriggerMqtt-F19dhVm1.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSchedule-DN3Tl7f4.js → ConfigTriggerSchedule-BGci3Aed.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSensor-DBXrlYyS.js → ConfigTriggerSensor-DSEDGB2X.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSystem-QFLNb9GC.js → ConfigTriggerSystem-DPy8Zir4.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerWebhook-46mdJk6X.js → ConfigTriggerWebhook-Dv0Kmwg8.js} +1 -1
- package/dist/interface/assets/Console-Cuh-Vc4u.js +1 -0
- package/dist/interface/assets/{CuiAutomationRunsDialog-BvtQfpTx.js → CuiAutomationRunsDialog-B1UeVC6Q.js} +1 -1
- package/dist/interface/assets/{CuiBottomSheet-UiJcO4M3.js → CuiBottomSheet-BjkDE7_9.js} +1 -1
- package/dist/interface/assets/CuiBottomSheet-C9G-NoMU.js +1 -0
- package/dist/interface/assets/CuiCameraPipCard-nrln9zp-.js +1 -0
- package/dist/interface/assets/CuiCameraRecordings-B7BhgPpP.css +1 -0
- package/dist/interface/assets/CuiCameraRecordings-HKwhFpea.js +1 -0
- package/dist/interface/assets/{CuiCameraShares-46_p-wPD.js → CuiCameraShares-D-fhJCro.js} +1 -1
- package/dist/interface/assets/{CuiCameraTable-BXm5THd1.js → CuiCameraTable-BTVfK-HY.js} +2 -2
- package/dist/interface/assets/CuiCameraTable-DGg4_c_u.js +1 -0
- package/dist/interface/assets/{CuiChartTable-ByHWgFTc.js → CuiChartTable-DAUYP-EW.js} +1 -1
- package/dist/interface/assets/{CuiConsole-BOyrbC0a.js → CuiConsole-C7aZj4wK.js} +2 -2
- package/dist/interface/assets/{CuiDataTable-BDyku8Vr.js → CuiDataTable-1B8aaZQO.js} +1 -1
- package/dist/interface/assets/CuiLightControl-CSA1PYc8.js +1 -0
- package/dist/interface/assets/{CuiList-D1d-S_-K.js → CuiList-D-hOSNou.js} +1 -1
- package/dist/interface/assets/CuiMarkdownContent-D2bWw1GN.js +1 -0
- package/dist/interface/assets/{CuiMarkdownContent-bAQw35id.js → CuiMarkdownContent-gJ8gvmYA.js} +1 -1
- package/dist/interface/assets/CuiPluginCard-D1Hkyiy4.js +2 -0
- package/dist/interface/assets/{CuiPluginCategoryChip-CCnZkkL5.js → CuiPluginCategoryChip-qnn-HD6g.js} +1 -1
- package/dist/interface/assets/{CuiPluginOAuthButton-CTKbdFZJ.js → CuiPluginOAuthButton-CXextmBv.js} +2 -2
- package/dist/interface/assets/{CuiPluginTrustBadge-B_1b1iYf.js → CuiPluginTrustBadge-C-8MN2Qc.js} +1 -1
- package/dist/interface/assets/{CuiQRCode-B0CF6e-5.js → CuiQRCode-D1qmU4qU.js} +1 -1
- package/dist/interface/assets/CuiSchema-DnHOpBg4.js +1 -0
- package/dist/interface/assets/{CuiTopNavbarItem-Bs4iRb31.js → CuiTopNavbarItem-Csb3O1-n.js} +1 -1
- package/dist/interface/assets/Faces-C0QpQxuF.js +1 -0
- package/dist/interface/assets/FirstSteps-BqZQovY7.js +1 -0
- package/dist/interface/assets/{Floorplan-Da5gt435.css → Floorplan-Bxhdg4C2.css} +1 -1
- package/dist/interface/assets/Floorplan-CW-W5ZkV.js +1 -0
- package/dist/interface/assets/Instances-VSkiqKKf.js +1 -0
- package/dist/interface/assets/{Logs-Bnq3wEXS.js → Logs-DQFS2AUi.js} +2 -2
- package/dist/interface/assets/{Menu-M1PaPt5e.js → Menu-COvvZ_vz.js} +1 -1
- package/dist/interface/assets/Metrics-cvbQzChA.js +9 -0
- package/dist/interface/assets/OAuthDeviceFlow-3ZC2QCAs.js +1 -0
- package/dist/interface/assets/Plugin-DjQd3Y9J.js +1 -0
- package/dist/interface/assets/{PluginConsole-f5xf7P3Y.js → PluginConsole-BaUkghQD.js} +2 -2
- package/dist/interface/assets/PluginDetail-Ofj1hk2q.js +2 -0
- package/dist/interface/assets/{PluginSchema-DMjDPtOB.js → PluginSchema-f-ER7hlx.js} +1 -1
- package/dist/interface/assets/PluginSearch-Ce3S1HDv.js +1 -0
- package/dist/interface/assets/PluginSearch-D5eQsj5p.js +2 -0
- package/dist/interface/assets/{PluginUpdateProgress-FVY9RtmB.js → PluginUpdateProgress-BfYNLvVX.js} +1 -1
- package/dist/interface/assets/Plugins-DtDN9z0k.js +1 -0
- package/dist/interface/assets/Recordings-CQGnTZFt.js +1 -0
- package/dist/interface/assets/SensorEdit-BZtiJyoI.js +1 -0
- package/dist/interface/assets/{SensorHistory-5nCWisih.js → SensorHistory-BFkT3teu.js} +1 -1
- package/dist/interface/assets/{Sensors-BsLHVGqk.css → Sensors-CaKl4PQY.css} +1 -1
- package/dist/interface/assets/Sensors-DSR-AUqb.js +2 -0
- package/dist/interface/assets/{Settings-DsxjHlTb.js → Settings-DV3JZFjc.js} +1 -1
- package/dist/interface/assets/SettingsAccount-Cd5JPsv2.js +1 -0
- package/dist/interface/assets/SettingsAccount-D4ib7Asi.js +1 -0
- package/dist/interface/assets/SettingsAppearance-BYsQmdyo.js +1 -0
- package/dist/interface/assets/{SettingsAppearance-Dc5qomCw.js → SettingsAppearance-CC6StMAi.js} +1 -1
- package/dist/interface/assets/{SettingsBackup-xZ6fRlMp.js → SettingsBackup-BcVFCbhB.js} +1 -1
- package/dist/interface/assets/{SettingsList-M3eOiLIi.js → SettingsList-04HiM3OT.js} +1 -1
- package/dist/interface/assets/SettingsMqtt-XaJdsYPn.js +1 -0
- package/dist/interface/assets/SettingsNotifications-CUoYMHwr.js +1 -0
- package/dist/interface/assets/{SettingsPermissions-g6ppqzcI.js → SettingsPermissions-gFDNSlTh.js} +1 -1
- package/dist/interface/assets/SettingsRecordings-Bw64UZWe.js +1 -0
- package/dist/interface/assets/SettingsRemote-BnFW-uT-.js +2 -0
- package/dist/interface/assets/{SettingsSystem-EaqPKfS_.js → SettingsSystem-Cdjg5GNY.js} +2 -2
- package/dist/interface/assets/{SettingsUsers-B3m7YHzN.js → SettingsUsers-DphPL78H.js} +1 -1
- package/dist/interface/assets/{Terminal-BXQKgvte.js → Terminal-CrNjqzTs.js} +2 -2
- package/dist/interface/assets/{Updates-Difs3xzH.js → Updates-V5B9LSD-.js} +2 -2
- package/dist/interface/assets/{VariableInput-DNlqv5NS.js → VariableInput-n0TxKRqq.js} +1 -1
- package/dist/interface/assets/{VariableSuggestions-cR1Q4nfD.js → VariableSuggestions-C4LmaCAo.js} +1 -1
- package/dist/interface/assets/{VersionsHandler-BHyZgGCP.js → VersionsHandler-BPocJcb0.js} +2 -2
- package/dist/interface/assets/{VirtualSensorCreate-CSzlXcHk.js → VirtualSensorCreate-BPvbrzGS.js} +1 -1
- package/dist/interface/assets/Workers-DEvQNzUi.js +2 -0
- package/dist/interface/assets/{lightbulb-outline-BtraGBwO.js → alert-outline-DtiCgufF.js} +1 -1
- package/dist/interface/assets/{api-Bpl4Sd0_.js → api-BXmkXIE8.js} +1 -1
- package/dist/interface/assets/api-DO5wBndX.css +2 -0
- package/dist/interface/assets/api-x8zXlvtm.js +4 -0
- package/dist/interface/assets/{auth-O2tHbgZf.js → auth-BKJnreuu.js} +1 -1
- package/dist/interface/assets/{automations-C3f5HUy2.js → automations-CVuIXlAQ.js} +1 -1
- package/dist/interface/assets/cameraSources-C3cl6FVD.js +1 -0
- package/dist/interface/assets/cloudHandoff-BZvvihwX.js +1 -0
- package/dist/interface/assets/{config-BIxANITl.js → config-Sw94rZxF.js} +1 -1
- package/dist/interface/assets/{flowSchema-Cu_f8mZr.js → flowSchema-BOrDqdeG.js} +1 -1
- package/dist/interface/assets/{intercomService-JoKcW49f.js → intercomService-CfCIMUlA.js} +1 -1
- package/dist/interface/assets/main-Jl93jEZK.js +3 -0
- package/dist/interface/assets/{main-BF8Mg561.css → main-Qqk3RyYP.css} +1 -1
- package/dist/interface/assets/{mqtt-D_ToI2JF.js → mqtt-BaCMJJk_.js} +1 -1
- package/dist/interface/assets/nodeDefinitions-a8iyp3yk.js +1 -0
- package/dist/interface/assets/{notifications-BZCPhbuG.js → notifications-l-x8vA4D.js} +1 -1
- package/dist/interface/assets/{plugins-DXYT--j6.js → plugins-GA9v-eQx.js} +1 -1
- package/dist/interface/assets/{rooms-BXXhWbYq.js → rooms-DX7PBdpP.js} +1 -1
- package/dist/interface/assets/sensorIcons-BTgouEmX.js +1 -0
- package/dist/interface/assets/{sensors-ud0INKWh.js → sensors-LJkBCaMk.js} +1 -1
- package/dist/interface/assets/{server-_f9tZajz.js → server-dOx3q8o1.js} +1 -1
- package/dist/interface/assets/theme-DgrclY58.js +1 -0
- package/dist/interface/assets/types-CSWXRySW.js +1 -0
- package/dist/interface/assets/{types-CCCcoJBr.js → types-D19FOdYo.js} +1 -1
- package/dist/interface/assets/types-Yq0FH8fa.js +1 -0
- package/dist/interface/assets/ungrouped-B_u9a5wm.js +1 -0
- package/dist/interface/assets/{ungrouped-uv64nr5n.css → ungrouped-DTYy_Pud.css} +1 -1
- package/dist/interface/assets/{updates-i-Ukebxe.js → updates-BVN6uGXy.js} +1 -1
- package/dist/interface/assets/{useAppVersion-DY0h_lct.js → useAppVersion-BUDIkitU.js} +1 -1
- package/dist/interface/assets/useBackupRestore-CnSZNCC8.js +1 -0
- package/dist/interface/assets/{useCameraOptions-C-rXBi8d.js → useCameraOptions-Cgb4eV2d.js} +1 -1
- package/dist/interface/assets/{useLogsSocket-Bigb4u3j.js → useLogsSocket-CGKtL049.js} +1 -1
- package/dist/interface/assets/{useNavLayout-C9FWniNC.js → useNavLayout-Dcngcb73.js} +1 -1
- package/dist/interface/assets/{usePermissions-C_4RPiE4.js → usePermissions-zJF4LCPm.js} +1 -1
- package/dist/interface/assets/{usePluginUpdates-CQwLK3om.js → usePluginUpdates-DP--lRxm.js} +1 -1
- package/dist/interface/assets/{usePushRegistration-sYPibp5s.js → usePushRegistration-BhPBp28J.js} +1 -1
- package/dist/interface/assets/{useServerRestart-B0Cfu10q.js → useServerRestart-BpCDYbPH.js} +1 -1
- package/dist/interface/assets/{useStreamStatus-BLXdLAvK.js → useStreamStatus-BoVMk6KT.js} +1 -1
- package/dist/interface/assets/{useTabSwipe-C3qfclkm.js → useTabSwipe--t-Qqa31.js} +1 -1
- package/dist/interface/assets/{useUpdateChannel-DvO5NQPE.js → useUpdateChannel-DAuhU-__.js} +1 -1
- package/dist/interface/assets/{useUpdatesSocket-C6wTDGIg.js → useUpdatesSocket-C-j3b3tU.js} +1 -1
- package/dist/interface/assets/{useUserOptions-B9T46skV.js → useUserOptions-CcLVC73O.js} +1 -1
- package/dist/interface/assets/vendor-cameraui-phsC2Mmi.js +2326 -0
- package/dist/interface/assets/vendor-core-C0ZWoGJD.js +1 -0
- package/dist/interface/assets/{vendor-markdown-pUmink8s.js → vendor-markdown-aj6qAoLx.js} +3 -3
- package/dist/interface/assets/{vendor-primevue-CvHDsVi_.js → vendor-primevue-nPess0JU.js} +76 -76
- package/dist/interface/assets/vendor-zod-CJ7LAMqQ.js +99 -0
- package/dist/interface/ha/404-PedrGUiq.js +60 -0
- package/dist/interface/ha/About-l5fkBqG7.js +55 -0
- package/dist/interface/ha/Automation-CaSlGjT4.js +2015 -0
- package/dist/interface/ha/AutomationImport-BNavtjDq.js +206 -0
- package/dist/interface/ha/AutomationStore-BVSW8TVt.js +335 -0
- package/dist/interface/ha/AutomationStoreDetail-DHZwlpz0.js +122 -0
- package/dist/interface/ha/Automations-CZ2jvH6d.js +437 -0
- package/dist/interface/ha/Camera-CggUrrPm.js +625 -0
- package/dist/interface/ha/CameraConsole-DpzF48TF.js +52 -0
- package/dist/interface/ha/Cameras-K-kQF5tG.js +1970 -0
- package/dist/interface/ha/Camview-zJVP7JwZ.js +1337 -0
- package/dist/interface/ha/CertificateUpload-DbBQ87OT.js +117 -0
- package/dist/interface/ha/Config-Bsud2DYI.js +356 -0
- package/dist/interface/ha/ConfigActionCameraControl-Czkfw_NO.js +152 -0
- package/dist/interface/ha/ConfigActionDelay-BHug57u7.js +61 -0
- package/dist/interface/ha/ConfigActionHttp-LfbxbfgG.js +134 -0
- package/dist/interface/ha/ConfigActionImageInput-Ce2GJzCm.js +171 -0
- package/dist/interface/ha/ConfigActionMqtt-KmCGcNZb.js +81 -0
- package/dist/interface/ha/ConfigActionNotification-DUMY_3IT.js +199 -0
- package/dist/interface/ha/ConfigActionNotificationControl-B9Z2i5WR.js +111 -0
- package/dist/interface/ha/ConfigActionOutput-CX-ZQjcs.js +98 -0
- package/dist/interface/ha/ConfigActionPlugin-y5PuPwdk.js +172 -0
- package/dist/interface/ha/ConfigActionSensor-CC39Rpxi.js +139 -0
- package/dist/interface/ha/ConfigActionSnapshot-CWyhx6rk.js +48 -0
- package/dist/interface/ha/ConfigActionVariable-BNRLCthd.js +88 -0
- package/dist/interface/ha/ConfigConditionIfElse-BayS5_Dr.js +124 -0
- package/dist/interface/ha/ConfigConditionSensorState-DLXNqL-R.js +192 -0
- package/dist/interface/ha/ConfigConditionSwitch-BBesQgWi.js +128 -0
- package/dist/interface/ha/ConfigConditionTime-aD8mk2aa.js +95 -0
- package/dist/interface/ha/ConfigSensorValueInput-5JzesEuD.js +169 -0
- package/dist/interface/ha/ConfigTriggerDetection--BcjPuyh.js +241 -0
- package/dist/interface/ha/ConfigTriggerGeofence-BZi5a2Yv.js +4896 -0
- package/dist/interface/ha/ConfigTriggerManual-ConxhgNx.js +14 -0
- package/dist/interface/ha/ConfigTriggerMqtt-B6C9injX.js +134 -0
- package/dist/interface/ha/ConfigTriggerSchedule-Vv5iNKL3.js +72 -0
- package/dist/interface/ha/ConfigTriggerSensor-beixHfSD.js +73 -0
- package/dist/interface/ha/ConfigTriggerSystem-BHDpn485.js +188 -0
- package/dist/interface/ha/ConfigTriggerWebhook-D9cuCU_p.js +94 -0
- package/dist/interface/ha/Console-CbQnrt6X.js +348 -0
- package/dist/interface/ha/CuiAutomationRunsDialog-CckgCRNS.js +130 -0
- package/dist/interface/ha/CuiBottomSheet-juhGdTsO.js +270 -0
- package/dist/interface/ha/CuiCameraRecordings-CLzZiXhk.js +552 -0
- package/dist/interface/ha/CuiCameraShares-Dzx1jZGE.js +121 -0
- package/dist/interface/ha/CuiCameraTable-ug0ik9N-.js +153 -0
- package/dist/interface/ha/CuiChartTable-7EnAA-WG.js +6784 -0
- package/dist/interface/ha/CuiConsole-DOnyBSL7.js +244 -0
- package/dist/interface/ha/CuiDataTable-Cx9GBqsV.js +8725 -0
- package/dist/interface/ha/CuiList-C45psxFZ.js +57 -0
- package/dist/interface/ha/CuiMarkdownContent-D7sCtnNQ.js +4716 -0
- package/dist/interface/ha/CuiPluginCard-ChLIfOms.js +769 -0
- package/dist/interface/ha/CuiPluginOAuthButton-B6vPOEx2.js +105 -0
- package/dist/interface/ha/CuiPluginTrustBadge-BvPV93D0.js +123 -0
- package/dist/interface/ha/CuiQRCode-Djr3z54t.js +86 -0
- package/dist/interface/ha/CuiSchema-dl7TXv-k.js +963 -0
- package/dist/interface/ha/CuiTopNavbarItem-BXoda5eM.js +141 -0
- package/dist/interface/ha/Faces-DnqWMGWW.js +1281 -0
- package/dist/interface/ha/FirstSteps-CFawb017.js +251 -0
- package/dist/interface/ha/Floorplan-Mv-Ootly.js +3677 -0
- package/dist/interface/ha/Instances-DJjZ3btI.js +680 -0
- package/dist/interface/ha/Logs-CLFhW1xq.js +418 -0
- package/dist/interface/ha/Menu-D7QTRqMJ.js +161 -0
- package/dist/interface/ha/Metrics-CCvFtezL.js +1330 -0
- package/dist/interface/ha/OAuthDeviceFlow-4YupTNsK.js +112 -0
- package/dist/interface/ha/Plugin-BHU0yhBa.js +1404 -0
- package/dist/interface/ha/PluginConsole-CNrLuFQM.js +56 -0
- package/dist/interface/ha/PluginDetail-Bm3X-xN4.js +230 -0
- package/dist/interface/ha/PluginSearch-C0be8cYD.js +475 -0
- package/dist/interface/ha/PluginUpdateProgress-DVvgYMLG.js +34 -0
- package/dist/interface/ha/Plugins-R-uz0Se-.js +705 -0
- package/dist/interface/ha/Recordings-DAwbihs8.js +1463 -0
- package/dist/interface/ha/SensorEdit-BxE1cRLR.js +1460 -0
- package/dist/interface/ha/SensorHistory-DUGlH2pU.js +54 -0
- package/dist/interface/ha/Sensors-Cax5RlPH.js +1358 -0
- package/dist/interface/ha/Settings-DKtlCoyz.js +218 -0
- package/dist/interface/ha/SettingsAccount-2e_Vjpev.js +970 -0
- package/dist/interface/ha/SettingsAppearance-DCm60FhX.js +220 -0
- package/dist/interface/ha/SettingsBackup-CiM_nNWt.js +556 -0
- package/dist/interface/ha/SettingsList-D4D3cmLo.js +40 -0
- package/dist/interface/ha/SettingsMqtt-CID4L0PD.js +526 -0
- package/dist/interface/ha/SettingsNotifications-DGJkhm8T.js +529 -0
- package/dist/interface/ha/SettingsPermissions-Cd0rtgli.js +84 -0
- package/dist/interface/ha/SettingsRecordings-pR4L0wgy.js +151 -0
- package/dist/interface/ha/SettingsRemote-CYg-LSQK.js +1810 -0
- package/dist/interface/ha/SettingsSystem-BeYJN1Ut.js +376 -0
- package/dist/interface/ha/SettingsUsers-F4CZggSR.js +379 -0
- package/dist/interface/ha/Terminal-iQahUx9P.js +631 -0
- package/dist/interface/ha/Updates-ClQ77p-o.js +356 -0
- package/dist/interface/ha/VariableInput-BOHBmNff.js +52 -0
- package/dist/interface/ha/VariableSuggestions-BE06z6SW.js +201 -0
- package/dist/interface/ha/VersionsHandler-Cx9u0oj8.js +211 -0
- package/dist/interface/ha/VirtualSensorCreate-CvSzLo4N.js +101 -0
- package/dist/interface/ha/Workers-CEJtdSu-.js +765 -0
- package/dist/interface/ha/accordion-BT2wHwK8.js +577 -0
- package/dist/interface/ha/account-B1xL2wxD.js +19 -0
- package/dist/interface/ha/ace-Dh61T4RV.js +13238 -0
- package/dist/interface/ha/ace.config-HyzcNHkM.js +1429 -0
- package/dist/interface/ha/alert-circle-CLRn5GAd.js +19 -0
- package/dist/interface/ha/alert-outline-CGTMAqXf.js +75 -0
- package/dist/interface/ha/api-BmNBy1ay.js +29 -0
- package/dist/interface/ha/api-CWJkvtnM.js +60866 -0
- package/dist/interface/ha/arrow-left-DkvcResi.js +19 -0
- package/dist/interface/ha/auth-X6tkVYJs.js +271 -0
- package/dist/interface/ha/autocomplete-L_jK3s3m.js +1373 -0
- package/dist/interface/ha/automationBlueprint-D1TiCF7R.js +249 -0
- package/dist/interface/ha/back-filled-Cxzg5vQg.js +20 -0
- package/dist/interface/ha/base-D_LAf3cS.js +26 -0
- package/dist/interface/ha/base-c1lsE5TW.js +125 -0
- package/dist/interface/ha/bell-ring-xrXdzNHW.js +19 -0
- package/dist/interface/ha/brain-DyOOk3m3.js +19 -0
- package/dist/interface/ha/browser-Bxx7joo_.js +1227 -0
- package/dist/interface/ha/browserconfig.xml +11 -0
- package/dist/interface/ha/button-BlYuI0Q7.js +406 -0
- package/dist/interface/ha/cameraui-cards.js +190 -0
- package/dist/interface/ha/cards-CNOyNWMA.js +13316 -0
- package/dist/interface/ha/cctv-Bz6BH0ns.js +19 -0
- package/dist/interface/ha/check-circle-D_wDxrLs.js +19 -0
- package/dist/interface/ha/chevron-down-P5MtUhJO.js +19 -0
- package/dist/interface/ha/chip-DxGABeun.js +149 -0
- package/dist/interface/ha/clock-outline-JxApewmA.js +19 -0
- package/dist/interface/ha/close-Eq3txTBS.js +19 -0
- package/dist/interface/ha/close-circle-C2nTtN_-.js +19 -0
- package/dist/interface/ha/config-E4Jkelkr.js +116 -0
- package/dist/interface/ha/content-copy-DpPXKtKE.js +19 -0
- package/dist/interface/ha/copy-C48Ur26H.js +22 -0
- package/dist/interface/ha/datepicker-BuvKhBWJ.js +3236 -0
- package/dist/interface/ha/definitions-E-sY7Cxg.js +23 -0
- package/dist/interface/ha/delete-D-m8mqly.js +19 -0
- package/dist/interface/ha/dist-B7lgvbyI.js +279 -0
- package/dist/interface/ha/dist-Ca9_5rzq.js +3457 -0
- package/dist/interface/ha/divider-jkWvVbPJ.js +110 -0
- package/dist/interface/ha/download-Cnr7IQKX.js +19 -0
- package/dist/interface/ha/esm-1sIZN4t7.js +6 -0
- package/dist/interface/ha/esm-6hnPZcZr.js +15 -0
- package/dist/interface/ha/esm-B72ViJ7F.js +5 -0
- package/dist/interface/ha/esm-BGlkcEes.js +156 -0
- package/dist/interface/ha/esm-BKPZuThK.js +5 -0
- package/dist/interface/ha/esm-BMx7MsZ_.js +15 -0
- package/dist/interface/ha/esm-CChFtwcx.js +21 -0
- package/dist/interface/ha/esm-CMTmAdHP.js +5 -0
- package/dist/interface/ha/esm-CkoEL9YX.js +7 -0
- package/dist/interface/ha/esm-CvxDASXR.js +23 -0
- package/dist/interface/ha/esm-Demxl4zQ.js +5 -0
- package/dist/interface/ha/esm-DiBhi9zp.js +5 -0
- package/dist/interface/ha/esm-XFPB9fYb.js +15 -0
- package/dist/interface/ha/eventLabels-B4C1_4vT.js +42 -0
- package/dist/interface/ha/eye-off-AdumIw0H.js +33 -0
- package/dist/interface/ha/eye-off-outline-DO3xfiua.js +19 -0
- package/dist/interface/ha/fonts/InterVariable.woff2 +0 -0
- package/dist/interface/ha/history-BoZc8mgf.js +19 -0
- package/dist/interface/ha/home-am0tRTsk.js +19 -0
- package/dist/interface/ha/information-outline-DIdNxPCN.js +19 -0
- package/dist/interface/ha/inputicon-6-vaPLbw.js +324 -0
- package/dist/interface/ha/inputnumber-B1Buq8Nc.js +1033 -0
- package/dist/interface/ha/inputtext-DGIESrd0.js +257 -0
- package/dist/interface/ha/intercomService-jB2mTgsn.js +1406 -0
- package/dist/interface/ha/message-C8U_kMBA.js +244 -0
- package/dist/interface/ha/minus-DKa9TXat.js +19 -0
- package/dist/interface/ha/minus-QyTgaT70.js +46 -0
- package/dist/interface/ha/mqtt-BmDCmG9h.js +56 -0
- package/dist/interface/ha/multiselect-BbgV_fPx.js +1492 -0
- package/dist/interface/ha/native-BaNeloQn.js +35 -0
- package/dist/interface/ha/native-C8PbNqsJ.js +29 -0
- package/dist/interface/ha/notifications-B51yvrGL.js +159 -0
- package/dist/interface/ha/og-share.png +0 -0
- package/dist/interface/ha/pencil-outline-BqfTDXIh.js +19 -0
- package/dist/interface/ha/pinia-3D39Do4a.js +6934 -0
- package/dist/interface/ha/platformLabels-C3d1PLg-.js +27 -0
- package/dist/interface/ha/plugin-DAGqBiG_.js +38 -0
- package/dist/interface/ha/plugins-dkWbXWVM.js +592 -0
- package/dist/interface/ha/plus-CNdrByQb.js +46 -0
- package/dist/interface/ha/plus-d_caPq5l.js +19 -0
- package/dist/interface/ha/progressbar-CIoPoMSe.js +95 -0
- package/dist/interface/ha/protocol-BB4jdtUC-K1r3LFCq.js +706 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-dark-1136x640.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-dark-1334x750.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-dark-1792x828.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-dark-2048x1536.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-dark-2160x1620.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-dark-2208x1242.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-dark-2224x1668.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-dark-2388x1668.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-dark-2436x1125.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-dark-2532x1170.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-dark-2556x1179.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-dark-2688x1242.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-dark-2732x2048.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-dark-2778x1284.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-dark-2796x1290.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-light-1136x640.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-light-1334x750.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-light-1792x828.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-light-2048x1536.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-light-2160x1620.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-light-2208x1242.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-light-2224x1668.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-light-2388x1668.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-light-2436x1125.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-light-2532x1170.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-light-2556x1179.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-light-2688x1242.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-light-2732x2048.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-light-2778x1284.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-landscape-light-2796x1290.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-dark-1125x2436.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-dark-1170x2532.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-dark-1179x2556.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-dark-1242x2208.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-dark-1242x2688.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-dark-1284x2778.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-dark-1290x2796.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-dark-1536x2048.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-dark-1620x2160.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-dark-1668x2224.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-dark-1668x2388.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-dark-2048x2732.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-dark-640x1136.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-dark-750x1334.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-dark-828x1792.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-light-1125x2436.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-light-1170x2532.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-light-1179x2556.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-light-1242x2208.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-light-1242x2688.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-light-1284x2778.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-light-1290x2796.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-light-1536x2048.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-light-1620x2160.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-light-1668x2224.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-light-1668x2388.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-light-2048x2732.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-light-640x1136.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-light-750x1334.png +0 -0
- package/dist/interface/ha/pwa/apple-splash-portrait-light-828x1792.png +0 -0
- package/dist/interface/ha/pwa/apple-touch-icon-180x180.png +0 -0
- package/dist/interface/ha/pwa/favicon-16.ico +0 -0
- package/dist/interface/ha/pwa/favicon-32.ico +0 -0
- package/dist/interface/ha/pwa/favicon-48.ico +0 -0
- package/dist/interface/ha/pwa/favicon-64.ico +0 -0
- package/dist/interface/ha/pwa/logo.svg +1 -0
- package/dist/interface/ha/pwa/maskable-icon-1240x600.png +0 -0
- package/dist/interface/ha/pwa/maskable-icon-512x512.png +0 -0
- package/dist/interface/ha/pwa/maskable-icon-620x300.png +0 -0
- package/dist/interface/ha/pwa/pwa-1024x1024.png +0 -0
- package/dist/interface/ha/pwa/pwa-120x120.png +0 -0
- package/dist/interface/ha/pwa/pwa-144x144.png +0 -0
- package/dist/interface/ha/pwa/pwa-152x152.png +0 -0
- package/dist/interface/ha/pwa/pwa-167x167.png +0 -0
- package/dist/interface/ha/pwa/pwa-180x180.png +0 -0
- package/dist/interface/ha/pwa/pwa-192x192.png +0 -0
- package/dist/interface/ha/pwa/pwa-24x24.png +0 -0
- package/dist/interface/ha/pwa/pwa-300x300.png +0 -0
- package/dist/interface/ha/pwa/pwa-36x36.png +0 -0
- package/dist/interface/ha/pwa/pwa-48x48.png +0 -0
- package/dist/interface/ha/pwa/pwa-50x50.png +0 -0
- package/dist/interface/ha/pwa/pwa-64x64.png +0 -0
- package/dist/interface/ha/pwa/pwa-72x72.png +0 -0
- package/dist/interface/ha/pwa/pwa-88x88.png +0 -0
- package/dist/interface/ha/pwa/pwa-96x96.png +0 -0
- package/dist/interface/ha/radar-C7lI26j4.js +19 -0
- package/dist/interface/ha/refresh-BIhepekY.js +19 -0
- package/dist/interface/ha/ring-resize-VS4MSeBv.js +16 -0
- package/dist/interface/ha/ripple-BilzxWfY.js +2928 -0
- package/dist/interface/ha/robots.txt +2 -0
- package/dist/interface/ha/rolldown-runtime-CEFd7nDs.js +30 -0
- package/dist/interface/ha/rooms-B-FUXQ1p.js +45 -0
- package/dist/interface/ha/round-alt-arrow-left-bold-CWEg-ZLF.js +37 -0
- package/dist/interface/ha/runtime-core.esm-bundler-D8slQ3BU.js +3295 -0
- package/dist/interface/ha/search-CoOsbgeb.js +19 -0
- package/dist/interface/ha/select-DjWkRqsI.js +1382 -0
- package/dist/interface/ha/server-CKJKoFfg.js +239 -0
- package/dist/interface/ha/settings-EKkSQLzv.js +22 -0
- package/dist/interface/ha/source-branch-CZwSOrQA.js +19 -0
- package/dist/interface/ha/speeddial-Dv9txWte.js +682 -0
- package/dist/interface/ha/spinner-D6iUldg9.js +46 -0
- package/dist/interface/ha/synapse-CGrlyQDE.js +35 -0
- package/dist/interface/ha/tag-CXgC9OZ6.js +95 -0
- package/dist/interface/ha/textarea-DvLkfUX7.js +130 -0
- package/dist/interface/ha/tooltip-BIrD_hC8.js +277 -0
- package/dist/interface/ha/trash-2-C4zSCZfs.js +23 -0
- package/dist/interface/ha/trash-can-outline-DCqsCOd2.js +19 -0
- package/dist/interface/ha/trash-fill-BPsrwR8X.js +21 -0
- package/dist/interface/ha/types-C7MzwoQR.js +28 -0
- package/dist/interface/ha/types-J_J0HKlK.js +1032 -0
- package/dist/interface/ha/ungrouped-BpaM88Y-.js +1116 -0
- package/dist/interface/ha/updates-BdVmkKAa.js +341 -0
- package/dist/interface/ha/upload-2xJkVPZE.js +19 -0
- package/dist/interface/ha/upload-wQHBRZX_.js +23 -0
- package/dist/interface/ha/useAppVersion-DzDaOsKc.js +22 -0
- package/dist/interface/ha/useLogsSocket-CWUE-KXV.js +59 -0
- package/dist/interface/ha/useNavLayout-BqpyvD2F.js +125 -0
- package/dist/interface/ha/usePermissions-BIUeW4ef.js +72 -0
- package/dist/interface/ha/useServerRestart-0c4gA1fG.js +23 -0
- package/dist/interface/ha/useTabSwipe-C8LdKw23.js +45 -0
- package/dist/interface/ha/useUpdateChannel-CHVLthZB.js +22 -0
- package/dist/interface/ha/useUpdatesSocket-CaxEs511.js +34 -0
- package/dist/interface/ha/useUserOptions-Rk_71WAK.js +15 -0
- package/dist/interface/ha/utils-DYtBrGDz.js +7 -0
- package/dist/interface/ha/virtualscroller-s_gNqN5p.js +996 -0
- package/dist/interface/ha/vue-flow-background-B0Vu4-8M.js +6840 -0
- package/dist/interface/ha/vue-i18n-Dcb07o5U.js +2409 -0
- package/dist/interface/ha/web-0Kyq65na.js +78 -0
- package/dist/interface/ha/web-B7Dt2zZN.js +340 -0
- package/dist/interface/ha/web-BNdrPSpb.js +102 -0
- package/dist/interface/ha/web-BPBZBCtX.js +8 -0
- package/dist/interface/ha/web-BjKL51lK-qwJdIpM1.js +221 -0
- package/dist/interface/ha/web-C01i9qI1.js +57 -0
- package/dist/interface/ha/web-CH3JeXWa.js +211 -0
- package/dist/interface/ha/web-Cpm1-DVe.js +33 -0
- package/dist/interface/ha/web-DqRMXrnx.js +31 -0
- package/dist/interface/ha/web-DtVT7WYt.js +17 -0
- package/dist/interface/ha/web-DxJQZCiR.js +59 -0
- package/dist/interface/ha/web-I7Urp4AE.js +46 -0
- package/dist/interface/ha/web-aSaPk7kr.js +57 -0
- package/dist/interface/ha/web-pMey9p3Y.js +79 -0
- package/dist/interface/ha/xterm-B6xA6E5i.js +14833 -0
- package/dist/interface/ha/zoom-in-CNVB9H3D.js +41 -0
- package/dist/interface/index.html +29 -29
- package/dist/interface/sw.js +1 -1
- package/dist/server/package.json +10 -10
- package/dist/server/requirements.txt +3 -3
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc/client.py +9 -6
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc/types.py +2 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/__init__.py +4 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/config.py +8 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/device.py +4 -3
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/__init__.py +6 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/sensor_rpc.py +17 -6
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/manager/__init__.py +24 -70
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/interfaces.py +46 -19
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/__init__.py +2 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/base.py +65 -8
- package/dist/server/src/api/database/index.d.ts +1 -1
- package/dist/server/src/api/database/index.js +4 -32
- package/dist/server/src/api/database/index.js.map +1 -1
- package/dist/server/src/api/database/migrations/v2-1-17.d.ts +3 -0
- package/dist/server/src/api/database/migrations/v2-1-17.js +14 -0
- package/dist/server/src/api/database/migrations/v2-1-17.js.map +1 -0
- package/dist/server/src/api/database/migrations/v2-1-18.d.ts +3 -0
- package/dist/server/src/api/database/migrations/v2-1-18.js +24 -0
- package/dist/server/src/api/database/migrations/v2-1-18.js.map +1 -0
- package/dist/server/src/api/database/record-schemas.d.ts +1 -0
- package/dist/server/src/api/database/types.d.ts +4 -3
- package/dist/server/src/api/schemas/cameras.schema.d.ts +53 -15
- package/dist/server/src/api/schemas/cameras.schema.js +5 -1
- package/dist/server/src/api/schemas/cameras.schema.js.map +1 -1
- package/dist/server/src/api/schemas/users.schema.d.ts +7 -0
- package/dist/server/src/api/schemas/users.schema.js +1 -1
- package/dist/server/src/api/schemas/users.schema.js.map +1 -1
- package/dist/server/src/api/services/cameras.service.js +14 -21
- package/dist/server/src/api/services/cameras.service.js.map +1 -1
- package/dist/server/src/api/services/sensors.service.d.ts +3 -3
- package/dist/server/src/api/services/sensors.service.js +3 -24
- package/dist/server/src/api/services/sensors.service.js.map +1 -1
- package/dist/server/src/api/services/server.service.js +1 -1
- package/dist/server/src/api/services/server.service.js.map +1 -1
- package/dist/server/src/api/utils/cert.js +18 -8
- package/dist/server/src/api/utils/cert.js.map +1 -1
- package/dist/server/src/api/utils/regex.d.ts +2 -0
- package/dist/server/src/api/utils/regex.js +2 -0
- package/dist/server/src/api/utils/regex.js.map +1 -1
- package/dist/server/src/api/websocket/nsp/sensors.d.ts +3 -1
- package/dist/server/src/api/websocket/nsp/sensors.js +13 -3
- package/dist/server/src/api/websocket/nsp/sensors.js.map +1 -1
- package/dist/server/src/camera/decoder/debug/detection-record.d.ts +3 -1
- package/dist/server/src/camera/decoder/debug/detection-record.js +6 -2
- package/dist/server/src/camera/decoder/debug/detection-record.js.map +1 -1
- package/dist/server/src/camera/decoder/detection-coordinator.d.ts +2 -0
- package/dist/server/src/camera/decoder/detection-coordinator.js +44 -25
- package/dist/server/src/camera/decoder/detection-coordinator.js.map +1 -1
- package/dist/server/src/camera/decoder/detection-pipeline.d.ts +3 -1
- package/dist/server/src/camera/decoder/detection-pipeline.js +3 -22
- package/dist/server/src/camera/decoder/detection-pipeline.js.map +1 -1
- package/dist/server/src/camera/decoder/event-manager.d.ts +4 -3
- package/dist/server/src/camera/decoder/event-manager.js +17 -5
- package/dist/server/src/camera/decoder/event-manager.js.map +1 -1
- package/dist/server/src/camera/decoder/event-thumbnailer.d.ts +3 -0
- package/dist/server/src/camera/decoder/event-thumbnailer.js +13 -8
- package/dist/server/src/camera/decoder/event-thumbnailer.js.map +1 -1
- package/dist/server/src/camera/decoder/event-trace.d.ts +58 -0
- package/dist/server/src/camera/decoder/event-trace.js +118 -0
- package/dist/server/src/camera/decoder/event-trace.js.map +1 -0
- package/dist/server/src/camera/decoder/nvr-sink.d.ts +2 -0
- package/dist/server/src/camera/decoder/nvr-sink.js.map +1 -1
- package/dist/server/src/camera/decoder/reconnect-backoff.js +1 -1
- package/dist/server/src/camera/decoder/reconnect-backoff.js.map +1 -1
- package/dist/server/src/camera/decoder/sources/analysis-source.d.ts +1 -0
- package/dist/server/src/camera/decoder/sources/buffered-source.d.ts +7 -1
- package/dist/server/src/camera/decoder/sources/buffered-source.js +27 -15
- package/dist/server/src/camera/decoder/sources/buffered-source.js.map +1 -1
- package/dist/server/src/camera/decoder/sources/frame-handle.d.ts +2 -1
- package/dist/server/src/camera/decoder/sources/frame-handle.js +5 -3
- package/dist/server/src/camera/decoder/sources/frame-handle.js.map +1 -1
- package/dist/server/src/camera/decoder/sources/frame-source.d.ts +1 -0
- package/dist/server/src/camera/decoder/sources/frame-source.js +7 -2
- package/dist/server/src/camera/decoder/sources/frame-source.js.map +1 -1
- package/dist/server/src/camera/decoder/sources/rtp-index.d.ts +9 -0
- package/dist/server/src/camera/decoder/sources/rtp-index.js +24 -0
- package/dist/server/src/camera/decoder/sources/rtp-index.js.map +1 -0
- package/dist/server/src/camera/decoder/worker.js +1 -0
- package/dist/server/src/camera/decoder/worker.js.map +1 -1
- package/dist/server/src/camera/streaming/rtp-session.js +12 -9
- package/dist/server/src/camera/streaming/rtp-session.js.map +1 -1
- package/dist/server/src/go2rtc/types.d.ts +1 -1
- package/dist/server/src/go2rtc/types.js +1 -1
- package/dist/server/src/go2rtc/types.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/child.js +1 -0
- package/dist/server/src/plugins/runtime/node/child.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js +3 -0
- package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/proxy/sensorManager.d.ts +2 -5
- package/dist/server/src/plugins/runtime/node/proxy/sensorManager.js +95 -24
- package/dist/server/src/plugins/runtime/node/proxy/sensorManager.js.map +1 -1
- package/dist/server/src/plugins/runtime/python/child.py +1 -0
- package/dist/server/src/plugins/runtime/python/proxy/camera_device.py +9 -0
- package/dist/server/src/plugins/runtime/python/proxy/sensor.py +2 -1
- package/dist/server/src/plugins/runtime/python/proxy/sensor_manager.py +185 -88
- package/dist/server/src/plugins/runtime/python/typings.py +18 -0
- package/dist/server/src/rpc/interfaces/sensor.d.ts +19 -4
- package/dist/server/src/sensors/discovery.d.ts +1 -1
- package/dist/server/src/sensors/discovery.js +12 -21
- package/dist/server/src/sensors/discovery.js.map +1 -1
- package/dist/server/src/sensors/registry.d.ts +6 -2
- package/dist/server/src/sensors/registry.js +75 -6
- package/dist/server/src/sensors/registry.js.map +1 -1
- package/dist/server/src/services/config/defaults.js +1 -1
- package/dist/server/src/services/config/defaults.js.map +1 -1
- package/dist/server/src/services/config/index.js +4 -6
- package/dist/server/src/services/config/index.js.map +1 -1
- package/dist/server/src/utils/camera.d.ts +12 -2
- package/dist/server/src/utils/camera.js +27 -1
- package/dist/server/src/utils/camera.js.map +1 -1
- package/dist/server/src/workers/pairing.js +17 -8
- package/dist/server/src/workers/pairing.js.map +1 -1
- package/package.json +10 -10
- package/dist/interface/assets/Automation-COZFDnKK.js +0 -3
- package/dist/interface/assets/AutomationStoreDetail-BQ2fER7x.js +0 -2
- package/dist/interface/assets/Automations-QmfGIQXO.js +0 -2
- package/dist/interface/assets/Camera-g95slrO0.js +0 -2
- package/dist/interface/assets/Cameras-BO4SDgY0.js +0 -652
- package/dist/interface/assets/Camview-yzOY3cnD.js +0 -1
- package/dist/interface/assets/ConfigActionNotification-CbhQpAqn.js +0 -1
- package/dist/interface/assets/ConfigConditionSwitch-CA-tuT-G.js +0 -1
- package/dist/interface/assets/ConfigTriggerGeofence-sbEglk8c.js +0 -1
- package/dist/interface/assets/Console-B78qXoaH.js +0 -1
- package/dist/interface/assets/CuiBottomSheet-BjkvcU8T.js +0 -1
- package/dist/interface/assets/CuiCameraPipCard-BOky075i.js +0 -1
- package/dist/interface/assets/CuiCameraRecordings-BzbwSK8-.css +0 -1
- package/dist/interface/assets/CuiCameraRecordings-DIBgpGaS.js +0 -1
- package/dist/interface/assets/CuiCameraTable-DwRywA0z.js +0 -1
- package/dist/interface/assets/CuiLightControl-CsK2cn7L.js +0 -1
- package/dist/interface/assets/CuiMarkdownContent-CckAX6Ci.js +0 -1
- package/dist/interface/assets/CuiPluginCard-C-1ZhHi8.js +0 -2
- package/dist/interface/assets/CuiSchema-CxRd72K7.js +0 -1
- package/dist/interface/assets/Faces-kl1hwT5M.js +0 -1
- package/dist/interface/assets/FirstSteps-BYGvfH-S.js +0 -1
- package/dist/interface/assets/Floorplan-DNd9aQv3.js +0 -1
- package/dist/interface/assets/Instances-aZApGeHu.js +0 -1
- package/dist/interface/assets/Metrics-D5UHs6wj.js +0 -9
- package/dist/interface/assets/OAuthDeviceFlow-o2Irbs3_.js +0 -1
- package/dist/interface/assets/Plugin-CEpSsNQA.js +0 -1
- package/dist/interface/assets/PluginDetail-Ca-NJcL1.js +0 -2
- package/dist/interface/assets/PluginSearch-DurGrb4n.js +0 -1
- package/dist/interface/assets/PluginSearch-Tmg5vCQF.js +0 -2
- package/dist/interface/assets/Plugins-ocuSdXhB.js +0 -1
- package/dist/interface/assets/Recordings-CtSj2RuO.js +0 -1
- package/dist/interface/assets/SensorEdit-CcD4LvZr.js +0 -1
- package/dist/interface/assets/Sensors-CWjmo27p.js +0 -2
- package/dist/interface/assets/SettingsAccount-DQm9vFIT.js +0 -1
- package/dist/interface/assets/SettingsAccount-DekJwq5r.js +0 -1
- package/dist/interface/assets/SettingsAppearance-B7mm_vGf.js +0 -1
- package/dist/interface/assets/SettingsMqtt-D8grttey.js +0 -1
- package/dist/interface/assets/SettingsNotifications-BtFyN8J3.js +0 -1
- package/dist/interface/assets/SettingsRecordings-DVEsPab-.js +0 -1
- package/dist/interface/assets/SettingsRemote-Dqs-d-Xk.js +0 -2
- package/dist/interface/assets/Workers-L7PPidAd.js +0 -2
- package/dist/interface/assets/alert-outline-KxFvd3i6.js +0 -1
- package/dist/interface/assets/api-CEbDxsSY.css +0 -2
- package/dist/interface/assets/api-ou2-S3Z9.js +0 -2
- package/dist/interface/assets/cameras.schema-BzSBpeUl.js +0 -1
- package/dist/interface/assets/cloudHandoff-ChRx5fsr.js +0 -1
- package/dist/interface/assets/main-CT2dZ3bR.js +0 -3
- package/dist/interface/assets/nodeDefinitions-D6zhuw60.js +0 -1
- package/dist/interface/assets/sensorIcons-tORVN7ay.js +0 -1
- package/dist/interface/assets/theme-t4dIArYy.js +0 -1
- package/dist/interface/assets/types-D889aM6c.js +0 -1
- package/dist/interface/assets/types-Dg1X10xd.js +0 -1
- package/dist/interface/assets/ungrouped-Pn6rAXZt.js +0 -1
- package/dist/interface/assets/useBackupRestore-BcAR3KYA.js +0 -1
- package/dist/interface/assets/vendor-cameraui-OySaGjmo.js +0 -2326
- package/dist/interface/assets/vendor-core-BZ52eUwC.js +0 -1
- package/dist/interface/assets/vendor-zod-B0ZFM2Pr.js +0 -127
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import asyncio
|
|
3
4
|
import contextlib
|
|
4
5
|
from typing import TYPE_CHECKING, Any, cast
|
|
5
6
|
|
|
6
7
|
from _camera_ui_tools.camera_ui_common import TaskSet
|
|
7
8
|
from _camera_ui_tools.camera_ui_sdk import (
|
|
9
|
+
AdoptedSensor,
|
|
8
10
|
BasePlugin,
|
|
9
|
-
|
|
11
|
+
PluginInterface,
|
|
10
12
|
Sensor,
|
|
13
|
+
SensorDiscoveryProvider,
|
|
11
14
|
SensorHistoryEntry,
|
|
12
15
|
SensorLike,
|
|
13
16
|
SensorType,
|
|
@@ -23,10 +26,12 @@ from plugins.runtime.python.proxy.sensor import (
|
|
|
23
26
|
if TYPE_CHECKING:
|
|
24
27
|
from _camera_ui_tools.camera_ui_common import LoggerService
|
|
25
28
|
from _camera_ui_tools.camera_ui_rpc import CloseHandler, RPCClient
|
|
29
|
+
from _camera_ui_tools.camera_ui_sdk.internal import SensorSourcePatch
|
|
26
30
|
from plugins.runtime.python.storage_controller import StorageController
|
|
27
31
|
from plugins.runtime.python.typings import (
|
|
28
32
|
PluginInfo,
|
|
29
33
|
SensorAddedEvent,
|
|
34
|
+
SensorAdoptedEvent,
|
|
30
35
|
SensorAssignmentChangedEvent,
|
|
31
36
|
SensorConnectedChangedEvent,
|
|
32
37
|
SensorDeletedEvent,
|
|
@@ -49,6 +54,19 @@ DETECTION_SENSOR_TYPES: frozenset[SensorType] = frozenset(
|
|
|
49
54
|
)
|
|
50
55
|
|
|
51
56
|
|
|
57
|
+
def to_adopted(data: StoredSensorData) -> AdoptedSensor:
|
|
58
|
+
record: AdoptedSensor = {
|
|
59
|
+
"id": data["id"],
|
|
60
|
+
"nativeId": data["nativeId"],
|
|
61
|
+
"name": data["name"],
|
|
62
|
+
"type": data["type"],
|
|
63
|
+
}
|
|
64
|
+
address = data.get("address")
|
|
65
|
+
if address is not None:
|
|
66
|
+
record["address"] = address
|
|
67
|
+
return record
|
|
68
|
+
|
|
69
|
+
|
|
52
70
|
class SensorManagerProxy:
|
|
53
71
|
def __init__(
|
|
54
72
|
self,
|
|
@@ -84,11 +102,25 @@ class SensorManagerProxy:
|
|
|
84
102
|
def _consumes_something(self) -> bool:
|
|
85
103
|
return len(self._plugin["contract"].get("consumes", [])) > 0
|
|
86
104
|
|
|
105
|
+
@property
|
|
106
|
+
def _provides_adopted(self) -> bool:
|
|
107
|
+
return PluginInterface.SensorDiscovery in self._plugin["contract"].get("interfaces", [])
|
|
108
|
+
|
|
109
|
+
@property
|
|
110
|
+
def _discovery_plugin(self) -> SensorDiscoveryProvider | None:
|
|
111
|
+
# typed as object: mypy cannot intersect BasePlugin with a Protocol
|
|
112
|
+
plugin: object = self._plugin_instance
|
|
113
|
+
if not self._provides_adopted or not isinstance(plugin, SensorDiscoveryProvider):
|
|
114
|
+
return None
|
|
115
|
+
return plugin
|
|
116
|
+
|
|
87
117
|
async def init(self) -> None:
|
|
88
|
-
if not self._consumes_something:
|
|
118
|
+
if not self._consumes_something and not self._provides_adopted:
|
|
89
119
|
return
|
|
90
120
|
|
|
91
121
|
await self._ensure_global_subscription()
|
|
122
|
+
if not self._consumes_something:
|
|
123
|
+
return
|
|
92
124
|
|
|
93
125
|
try:
|
|
94
126
|
sensors = await self._registry_proxy.getSensors(self._plugin["id"])
|
|
@@ -108,27 +140,123 @@ class SensorManagerProxy:
|
|
|
108
140
|
cast("list[SensorLike]", list(self._consumed.values()))
|
|
109
141
|
)
|
|
110
142
|
|
|
111
|
-
async def
|
|
112
|
-
|
|
113
|
-
|
|
143
|
+
async def configure_adopted_sensors(self) -> None:
|
|
144
|
+
plugin = self._discovery_plugin
|
|
145
|
+
if plugin is None:
|
|
146
|
+
return
|
|
147
|
+
|
|
148
|
+
try:
|
|
149
|
+
stored = await self._registry_proxy.getSensors(self._plugin["id"])
|
|
150
|
+
records = [to_adopted(data) for data in stored if self._is_own_adopted(data)]
|
|
151
|
+
except Exception as e:
|
|
152
|
+
self._logger.warn(f"Could not load the adopted sensors: {e}")
|
|
153
|
+
return
|
|
154
|
+
|
|
155
|
+
try:
|
|
156
|
+
sensors = await plugin.configureAdoptedSensors(records)
|
|
157
|
+
except Exception as e:
|
|
158
|
+
self._logger.warn(f"configureAdoptedSensors failed: {e}")
|
|
159
|
+
return
|
|
160
|
+
|
|
161
|
+
by_native_id = {record["nativeId"]: record for record in records}
|
|
162
|
+
bound: set[str] = set()
|
|
163
|
+
|
|
164
|
+
async def bind(sensor: Sensor[Any, Any, Any]) -> None:
|
|
165
|
+
record = by_native_id.get(sensor.nativeId) if sensor.nativeId else None
|
|
166
|
+
if record is None:
|
|
167
|
+
self._logger.warn(
|
|
168
|
+
f'Sensor "{sensor.name}" returned by configureAdoptedSensors has no adopted record '
|
|
169
|
+
f"(nativeId {sensor.nativeId or 'missing'}), ignored"
|
|
170
|
+
)
|
|
171
|
+
return
|
|
172
|
+
if record["nativeId"] in bound or record["id"] in self._owned:
|
|
173
|
+
return
|
|
174
|
+
bound.add(record["nativeId"])
|
|
175
|
+
await self._bind_adopted(sensor, record)
|
|
176
|
+
|
|
177
|
+
await asyncio.gather(*(bind(sensor) for sensor in sensors))
|
|
178
|
+
|
|
179
|
+
missing = len(records) - len(bound)
|
|
180
|
+
if missing > 0:
|
|
181
|
+
self._logger.warn(
|
|
182
|
+
f"{missing} adopted sensor(s) got no runtime sensor from the plugin, they stay disconnected"
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
async def getSensorHistory(self, sensorIds: list[str], start: int, end: int) -> list[SensorHistoryEntry]:
|
|
186
|
+
return await self._registry_proxy.getSensorHistory(sensorIds, start, end)
|
|
114
187
|
|
|
115
|
-
|
|
188
|
+
# keeps a camera-registered sensor's assignedCameraIds in sync with the global stream
|
|
189
|
+
async def track_camera_sensor(self, sensor: Sensor[Any, Any, Any]) -> None:
|
|
190
|
+
await self._ensure_global_subscription()
|
|
191
|
+
self._external[sensor.id] = sensor
|
|
192
|
+
|
|
193
|
+
def untrack_camera_sensor(self, sensor_id: str) -> None:
|
|
194
|
+
self._external.pop(sensor_id, None)
|
|
195
|
+
|
|
196
|
+
def on_rpc_reconnected(self) -> None:
|
|
197
|
+
if self._closed:
|
|
198
|
+
return
|
|
199
|
+
self._tasks.add(self._resync_all_consumed())
|
|
200
|
+
|
|
201
|
+
async def close(self) -> None:
|
|
202
|
+
self._closed = True
|
|
203
|
+
|
|
204
|
+
if self._global_unsubscribe:
|
|
205
|
+
with contextlib.suppress(Exception):
|
|
206
|
+
await self._global_unsubscribe()
|
|
207
|
+
self._global_unsubscribe = None
|
|
208
|
+
|
|
209
|
+
for sensor_proxy in self._consumed.values():
|
|
210
|
+
with contextlib.suppress(Exception):
|
|
211
|
+
await sensor_proxy._unsubscribe_from_events() # pyright: ignore[reportPrivateUsage]
|
|
212
|
+
self._consumed.clear()
|
|
213
|
+
self._external.clear()
|
|
214
|
+
|
|
215
|
+
for cleanup in list(self._cleanups.values()):
|
|
216
|
+
with contextlib.suppress(Exception):
|
|
217
|
+
await cleanup()
|
|
218
|
+
self._cleanups.clear()
|
|
219
|
+
|
|
220
|
+
for sensor in self._owned.values():
|
|
221
|
+
sensor._cleanup() # pyright: ignore[reportPrivateUsage]
|
|
222
|
+
self._owned.clear()
|
|
223
|
+
|
|
224
|
+
self._tasks.remove_all()
|
|
225
|
+
|
|
226
|
+
async def _bind_adopted(self, sensor: Sensor[Any, Any, Any], record: AdoptedSensor) -> None:
|
|
227
|
+
try:
|
|
228
|
+
async with registration_slot():
|
|
229
|
+
await self._bind(sensor, record["id"])
|
|
230
|
+
except Exception as e:
|
|
231
|
+
self._logger.warn(f'Binding adopted sensor "{record["name"]}" failed: {e}')
|
|
232
|
+
|
|
233
|
+
def _unbind(self, sensor_id: str) -> Sensor[Any, Any, Any] | None:
|
|
234
|
+
sensor = self._owned.pop(sensor_id, None)
|
|
235
|
+
if sensor is None:
|
|
236
|
+
return None
|
|
237
|
+
cleanup = self._cleanups.pop(sensor_id, None)
|
|
238
|
+
if cleanup:
|
|
239
|
+
|
|
240
|
+
async def run_cleanup() -> None:
|
|
241
|
+
with contextlib.suppress(Exception):
|
|
242
|
+
await cleanup()
|
|
243
|
+
|
|
244
|
+
self._tasks.add(run_cleanup())
|
|
245
|
+
sensor._cleanup() # pyright: ignore[reportPrivateUsage]
|
|
246
|
+
return sensor
|
|
247
|
+
|
|
248
|
+
async def _bind(self, sensor: Sensor[Any, Any, Any], record_id: str) -> None:
|
|
116
249
|
# producers need the global stream too: assignment changes must reach
|
|
117
250
|
# owned sensors, their detection fan-out reads assignedCameraIds
|
|
118
251
|
await self._ensure_global_subscription()
|
|
119
252
|
|
|
120
253
|
plugin_id = self._plugin["id"]
|
|
121
254
|
sensor._setPluginId(plugin_id) # pyright: ignore[reportPrivateUsage]
|
|
255
|
+
sensor._setId(record_id) # pyright: ignore[reportPrivateUsage]
|
|
122
256
|
|
|
123
257
|
sensor_json = sensor.toJSON()
|
|
124
258
|
sensor_json["requiresFrames"] = getattr(sensor, "_requires_frames", False) is True
|
|
125
259
|
|
|
126
|
-
# resolve the durable id first and wire storage with it, so registration
|
|
127
|
-
# data (modelSpec) can read sensor storage
|
|
128
|
-
sensor_id = await self._registry_proxy.resolveSensor(sensor_json, plugin_id)
|
|
129
|
-
sensor._setId(sensor_id) # pyright: ignore[reportPrivateUsage]
|
|
130
|
-
sensor_json["id"] = sensor_id
|
|
131
|
-
|
|
132
260
|
storage = self._storage_controller.createSensorStorage(plugin_id, sensor.id, sensor.storage_schema)
|
|
133
261
|
await storage.register_storage()
|
|
134
262
|
sensor._setStorage(storage) # pyright: ignore[reportPrivateUsage]
|
|
@@ -147,6 +275,7 @@ class SensorManagerProxy:
|
|
|
147
275
|
lambda properties: self._on_sensor_state_write(sensor, sensor_type, properties)
|
|
148
276
|
)
|
|
149
277
|
sensor._initCapabilities(lambda caps: self._on_sensor_capabilities_changed(sensor.id, caps)) # pyright: ignore[reportPrivateUsage]
|
|
278
|
+
sensor._initSource(lambda patch: self._on_sensor_source_changed(sensor.id, patch)) # pyright: ignore[reportPrivateUsage]
|
|
150
279
|
|
|
151
280
|
rpc_cleanup = await self._proxy.register_handler(sensor_namespace, sensor, without_decorators=True)
|
|
152
281
|
|
|
@@ -172,82 +301,6 @@ class SensorManagerProxy:
|
|
|
172
301
|
|
|
173
302
|
sensor._setActive(True) # pyright: ignore[reportPrivateUsage]
|
|
174
303
|
|
|
175
|
-
async def removeSensor(self, sensor: Sensor[Any, Any, Any]) -> None:
|
|
176
|
-
try:
|
|
177
|
-
await self._registry_proxy.unregisterSensor(sensor.id)
|
|
178
|
-
except Exception as e:
|
|
179
|
-
self._logger.warn(f"Failed to unregister sensor {sensor.id}: {e}")
|
|
180
|
-
|
|
181
|
-
cleanup = self._cleanups.pop(sensor.id, None)
|
|
182
|
-
if cleanup:
|
|
183
|
-
await cleanup()
|
|
184
|
-
|
|
185
|
-
self._owned.pop(sensor.id, None)
|
|
186
|
-
sensor._cleanup() # pyright: ignore[reportPrivateUsage]
|
|
187
|
-
|
|
188
|
-
def getSensors(self) -> list[Sensor[Any, Any, Any]]:
|
|
189
|
-
return list(self._owned.values())
|
|
190
|
-
|
|
191
|
-
async def getRegisteredSensors(self) -> list[RegisteredSensorInfo]:
|
|
192
|
-
plugin_id = self._plugin["id"]
|
|
193
|
-
stored = await self._registry_proxy.getSensors(plugin_id)
|
|
194
|
-
result: list[RegisteredSensorInfo] = []
|
|
195
|
-
for data in stored:
|
|
196
|
-
if data.get("pluginId") != plugin_id:
|
|
197
|
-
continue
|
|
198
|
-
info: RegisteredSensorInfo = {
|
|
199
|
-
"id": data["id"],
|
|
200
|
-
"type": data["type"],
|
|
201
|
-
"name": data["name"],
|
|
202
|
-
"connected": data["connected"],
|
|
203
|
-
}
|
|
204
|
-
native_id = data.get("nativeId")
|
|
205
|
-
if native_id is not None:
|
|
206
|
-
info["nativeId"] = native_id
|
|
207
|
-
result.append(info)
|
|
208
|
-
return result
|
|
209
|
-
|
|
210
|
-
async def getSensorHistory(self, sensorIds: list[str], start: int, end: int) -> list[SensorHistoryEntry]:
|
|
211
|
-
return await self._registry_proxy.getSensorHistory(sensorIds, start, end)
|
|
212
|
-
|
|
213
|
-
# keeps a camera-registered sensor's assignedCameraIds in sync with the global stream
|
|
214
|
-
async def track_camera_sensor(self, sensor: Sensor[Any, Any, Any]) -> None:
|
|
215
|
-
await self._ensure_global_subscription()
|
|
216
|
-
self._external[sensor.id] = sensor
|
|
217
|
-
|
|
218
|
-
def untrack_camera_sensor(self, sensor_id: str) -> None:
|
|
219
|
-
self._external.pop(sensor_id, None)
|
|
220
|
-
|
|
221
|
-
def on_rpc_reconnected(self) -> None:
|
|
222
|
-
if self._closed:
|
|
223
|
-
return
|
|
224
|
-
self._tasks.add(self._resync_all_consumed())
|
|
225
|
-
|
|
226
|
-
async def close(self) -> None:
|
|
227
|
-
self._closed = True
|
|
228
|
-
|
|
229
|
-
if self._global_unsubscribe:
|
|
230
|
-
with contextlib.suppress(Exception):
|
|
231
|
-
await self._global_unsubscribe()
|
|
232
|
-
self._global_unsubscribe = None
|
|
233
|
-
|
|
234
|
-
for sensor_proxy in self._consumed.values():
|
|
235
|
-
with contextlib.suppress(Exception):
|
|
236
|
-
await sensor_proxy._unsubscribe_from_events() # pyright: ignore[reportPrivateUsage]
|
|
237
|
-
self._consumed.clear()
|
|
238
|
-
self._external.clear()
|
|
239
|
-
|
|
240
|
-
for cleanup in list(self._cleanups.values()):
|
|
241
|
-
with contextlib.suppress(Exception):
|
|
242
|
-
await cleanup()
|
|
243
|
-
self._cleanups.clear()
|
|
244
|
-
|
|
245
|
-
for sensor in self._owned.values():
|
|
246
|
-
sensor._cleanup() # pyright: ignore[reportPrivateUsage]
|
|
247
|
-
self._owned.clear()
|
|
248
|
-
|
|
249
|
-
self._tasks.remove_all()
|
|
250
|
-
|
|
251
304
|
async def _ensure_global_subscription(self) -> None:
|
|
252
305
|
if self._global_unsubscribe is not None:
|
|
253
306
|
return
|
|
@@ -275,6 +328,13 @@ class SensorManagerProxy:
|
|
|
275
328
|
if state:
|
|
276
329
|
sensor_proxy._apply_refreshed_state(state) # pyright: ignore[reportPrivateUsage]
|
|
277
330
|
|
|
331
|
+
def _is_own_adopted(self, data: StoredSensorData) -> bool:
|
|
332
|
+
return (
|
|
333
|
+
data["pluginId"] == self._plugin["id"]
|
|
334
|
+
and not data.get("boundCameraId")
|
|
335
|
+
and bool(data.get("nativeId"))
|
|
336
|
+
)
|
|
337
|
+
|
|
278
338
|
def _is_consumable(self, data: StoredSensorData) -> bool:
|
|
279
339
|
if data["id"] in self._owned or data["pluginId"] == self._plugin["id"]:
|
|
280
340
|
return False
|
|
@@ -330,8 +390,38 @@ class SensorManagerProxy:
|
|
|
330
390
|
if self._plugin_instance:
|
|
331
391
|
await self._plugin_instance.onSensorAdded(sensor_proxy)
|
|
332
392
|
|
|
393
|
+
elif event_type == "sensor:adopted":
|
|
394
|
+
adopted = cast("SensorAdoptedEvent", message.get("data"))
|
|
395
|
+
plugin = self._discovery_plugin
|
|
396
|
+
if (
|
|
397
|
+
plugin is None
|
|
398
|
+
or not self._is_own_adopted(adopted["sensor"])
|
|
399
|
+
or adopted["sensor"]["id"] in self._owned
|
|
400
|
+
):
|
|
401
|
+
return
|
|
402
|
+
record = to_adopted(adopted["sensor"])
|
|
403
|
+
try:
|
|
404
|
+
sensor = await plugin.onSensorAdopted(record)
|
|
405
|
+
except Exception as e:
|
|
406
|
+
self._logger.warn(f'onSensorAdopted failed for "{record["name"]}": {e}')
|
|
407
|
+
return
|
|
408
|
+
if sensor.nativeId != record["nativeId"]:
|
|
409
|
+
self._logger.warn(
|
|
410
|
+
f'Sensor "{sensor.name}" returned by onSensorAdopted carries nativeId '
|
|
411
|
+
f"{sensor.nativeId or 'missing'}, expected {record['nativeId']}, ignored"
|
|
412
|
+
)
|
|
413
|
+
return
|
|
414
|
+
await self._bind_adopted(sensor, record)
|
|
415
|
+
|
|
333
416
|
elif event_type == "sensor:deleted":
|
|
334
417
|
deleted = cast("SensorDeletedEvent", message.get("data"))
|
|
418
|
+
unbound = self._unbind(deleted["sensorId"])
|
|
419
|
+
plugin = self._discovery_plugin
|
|
420
|
+
if unbound is not None and unbound.nativeId and plugin is not None:
|
|
421
|
+
try:
|
|
422
|
+
await plugin.onSensorUnadopted(unbound.nativeId)
|
|
423
|
+
except Exception as e:
|
|
424
|
+
self._logger.warn(f"onSensorUnadopted failed for {unbound.nativeId}: {e}")
|
|
335
425
|
await self._release_consumed(deleted["sensorId"])
|
|
336
426
|
|
|
337
427
|
elif event_type == "sensor:connected:changed":
|
|
@@ -424,3 +514,10 @@ class SensorManagerProxy:
|
|
|
424
514
|
await self._registry_proxy.updateCapabilities(sensor_id, capabilities)
|
|
425
515
|
|
|
426
516
|
self._tasks.add(notify())
|
|
517
|
+
|
|
518
|
+
def _on_sensor_source_changed(self, sensor_id: str, patch: SensorSourcePatch) -> None:
|
|
519
|
+
async def notify() -> None:
|
|
520
|
+
with contextlib.suppress(Exception):
|
|
521
|
+
await self._registry_proxy.updateSource(sensor_id, patch)
|
|
522
|
+
|
|
523
|
+
self._tasks.add(notify())
|
|
@@ -5,6 +5,7 @@ from _camera_ui_tools.camera_ui_sdk import (
|
|
|
5
5
|
Camera,
|
|
6
6
|
ModelSpec,
|
|
7
7
|
PluginInfo,
|
|
8
|
+
SensorSourceState,
|
|
8
9
|
SensorType,
|
|
9
10
|
)
|
|
10
11
|
from _camera_ui_tools.camera_ui_sdk.internal import PropertyChangedEvent
|
|
@@ -57,6 +58,9 @@ class StoredSensorData(TypedDict):
|
|
|
57
58
|
assignedCameraIds: list[str]
|
|
58
59
|
boundCameraId: NotRequired[str]
|
|
59
60
|
exposed: bool
|
|
61
|
+
origin: NotRequired[str]
|
|
62
|
+
address: NotRequired[str]
|
|
63
|
+
sourceState: NotRequired[SensorSourceState]
|
|
60
64
|
connected: bool
|
|
61
65
|
properties: dict[str, Any]
|
|
62
66
|
capabilities: NotRequired[list[str]]
|
|
@@ -82,6 +86,16 @@ class SensorAddedEvent(TypedDict):
|
|
|
82
86
|
state: SensorRefreshedState
|
|
83
87
|
|
|
84
88
|
|
|
89
|
+
class SensorAdoptedEvent(TypedDict):
|
|
90
|
+
sensor: StoredSensorData
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class SensorSourceChangedEvent(TypedDict):
|
|
94
|
+
sensorId: str
|
|
95
|
+
sourceState: NotRequired[SensorSourceState]
|
|
96
|
+
address: NotRequired[str]
|
|
97
|
+
|
|
98
|
+
|
|
85
99
|
class SensorDeletedEvent(TypedDict):
|
|
86
100
|
sensorId: str
|
|
87
101
|
sensorType: SensorType
|
|
@@ -120,6 +134,8 @@ class SensorEventMessage(TypedDict):
|
|
|
120
134
|
type: Literal[
|
|
121
135
|
"property:changed",
|
|
122
136
|
"sensor:added",
|
|
137
|
+
"sensor:adopted",
|
|
138
|
+
"sensor:source:changed",
|
|
123
139
|
"sensor:deleted",
|
|
124
140
|
"sensor:connected:changed",
|
|
125
141
|
"sensor:displayName:changed",
|
|
@@ -130,6 +146,8 @@ class SensorEventMessage(TypedDict):
|
|
|
130
146
|
data: (
|
|
131
147
|
PropertyChangedEvent
|
|
132
148
|
| SensorAddedEvent
|
|
149
|
+
| SensorAdoptedEvent
|
|
150
|
+
| SensorSourceChangedEvent
|
|
133
151
|
| SensorDeletedEvent
|
|
134
152
|
| SensorConnectedChangedEvent
|
|
135
153
|
| SensorDisplayNameChangedEvent
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Camera, DiscoveredSensor, ModelSpec, SensorType } from '@camera.ui/sdk';
|
|
2
|
-
import type { PropertyChangedEvent, SensorJSON } from '@camera.ui/sdk/internal';
|
|
1
|
+
import type { Camera, DiscoveredSensor, ModelSpec, SensorSourceState, SensorType } from '@camera.ui/sdk';
|
|
2
|
+
import type { PropertyChangedEvent, SensorJSON, SensorSourcePatch } from '@camera.ui/sdk/internal';
|
|
3
3
|
export interface DiscoveredSensorListItem extends DiscoveredSensor {
|
|
4
4
|
pluginId: string;
|
|
5
5
|
pluginName: string;
|
|
@@ -21,6 +21,9 @@ export interface SensorDiscoveryGenericEvent<K extends keyof SensorDiscoveryEven
|
|
|
21
21
|
type: K;
|
|
22
22
|
data: SensorDiscoveryEvents[K];
|
|
23
23
|
}
|
|
24
|
+
export interface SensorsNamespaceEvents extends SensorDiscoveryEvents {
|
|
25
|
+
'sensor:source:changed': SensorSourceChangedEvent;
|
|
26
|
+
}
|
|
24
27
|
export interface StoredSensorData {
|
|
25
28
|
id: string;
|
|
26
29
|
type: SensorType;
|
|
@@ -32,6 +35,8 @@ export interface StoredSensorData {
|
|
|
32
35
|
boundCameraId?: string;
|
|
33
36
|
exposed: boolean;
|
|
34
37
|
origin?: string;
|
|
38
|
+
address?: string;
|
|
39
|
+
sourceState?: SensorSourceState;
|
|
35
40
|
connected: boolean;
|
|
36
41
|
properties: Record<string, unknown>;
|
|
37
42
|
capabilities: string[];
|
|
@@ -65,6 +70,7 @@ export interface SensorRegistryInterface {
|
|
|
65
70
|
updatePropertyValues(sensorId: string, properties: Record<string, unknown>): void;
|
|
66
71
|
updateCapabilities(sensorId: string, capabilities: string[]): void;
|
|
67
72
|
updateModelSpec(sensorId: string, modelSpec: ModelSpec): void;
|
|
73
|
+
updateSource(sensorId: string, patch: SensorSourcePatch): void;
|
|
68
74
|
getPropertyValue(sensorId: string, property: string): unknown;
|
|
69
75
|
getAllPropertyValues(sensorId: string): Record<string, unknown>;
|
|
70
76
|
getSensorState(sensorId: string): SensorRefreshedState | undefined;
|
|
@@ -86,6 +92,15 @@ export interface SensorAddedEvent {
|
|
|
86
92
|
sensor: StoredSensorData;
|
|
87
93
|
state: SensorRefreshedState;
|
|
88
94
|
}
|
|
95
|
+
export interface SensorAdoptedEvent {
|
|
96
|
+
sensor: StoredSensorData;
|
|
97
|
+
}
|
|
98
|
+
export interface SensorSourceChangedEvent {
|
|
99
|
+
sensorId: string;
|
|
100
|
+
sensorType: SensorType;
|
|
101
|
+
sourceState?: SensorSourceState;
|
|
102
|
+
address?: string;
|
|
103
|
+
}
|
|
89
104
|
export interface SensorDeletedEvent {
|
|
90
105
|
sensorId: string;
|
|
91
106
|
sensorType: SensorType;
|
|
@@ -116,8 +131,8 @@ export interface SensorAssignmentChangedEvent {
|
|
|
116
131
|
assigned: boolean;
|
|
117
132
|
}
|
|
118
133
|
export interface SensorEventMessage {
|
|
119
|
-
type: 'property:changed' | 'sensor:added' | 'sensor:deleted' | 'sensor:connected:changed' | 'sensor:displayName:changed' | 'sensor:capabilities:changed' | 'sensor:assignment:changed' | 'sensor:exposed:changed';
|
|
120
|
-
data: PropertyChangedEvent | SensorAddedEvent | SensorDeletedEvent | SensorConnectedChangedEvent | SensorDisplayNameChangedEvent | SensorCapabilitiesChangedEvent | SensorAssignmentChangedEvent | SensorExposedChangedEvent;
|
|
134
|
+
type: 'property:changed' | 'sensor:added' | 'sensor:adopted' | 'sensor:source:changed' | 'sensor:deleted' | 'sensor:connected:changed' | 'sensor:displayName:changed' | 'sensor:capabilities:changed' | 'sensor:assignment:changed' | 'sensor:exposed:changed';
|
|
135
|
+
data: PropertyChangedEvent | SensorAddedEvent | SensorAdoptedEvent | SensorSourceChangedEvent | SensorDeletedEvent | SensorConnectedChangedEvent | SensorDisplayNameChangedEvent | SensorCapabilitiesChangedEvent | SensorAssignmentChangedEvent | SensorExposedChangedEvent;
|
|
121
136
|
}
|
|
122
137
|
export interface CameraEventMessage {
|
|
123
138
|
type: 'removed' | 'updated' | 'cameraState' | 'frameWorkerState';
|
|
@@ -21,7 +21,7 @@ export declare class SensorDiscoveryManager {
|
|
|
21
21
|
destroy(): void;
|
|
22
22
|
private list;
|
|
23
23
|
private isSensorDiscoveryPlugin;
|
|
24
|
-
private
|
|
24
|
+
private adoptedNativeIds;
|
|
25
25
|
private publish;
|
|
26
26
|
private startAutoRescanTimer;
|
|
27
27
|
private stopAutoRescanTimer;
|
|
@@ -28,7 +28,7 @@ export class SensorDiscoveryManager {
|
|
|
28
28
|
}
|
|
29
29
|
const cacheIsFresh = this.lastScanCompletedAt > 0 && Date.now() - this.lastScanCompletedAt < MIN_SCAN_INTERVAL_MS;
|
|
30
30
|
if (!this.isScanning && !cacheIsFresh) {
|
|
31
|
-
|
|
31
|
+
this.scan();
|
|
32
32
|
}
|
|
33
33
|
return this.list();
|
|
34
34
|
}
|
|
@@ -51,7 +51,7 @@ export class SensorDiscoveryManager {
|
|
|
51
51
|
if (!plugin || !this.isSensorDiscoveryPlugin(plugin) || !plugin.worker?.isRunning()) {
|
|
52
52
|
throw new Error('Plugin not found or not running');
|
|
53
53
|
}
|
|
54
|
-
|
|
54
|
+
this.registry.createAdoptedSensor(pluginId, sensor);
|
|
55
55
|
const items = this.cache.get(pluginId);
|
|
56
56
|
if (items) {
|
|
57
57
|
this.cache.set(pluginId, items.filter((item) => item.id !== sensor.id));
|
|
@@ -68,8 +68,10 @@ export class SensorDiscoveryManager {
|
|
|
68
68
|
await Promise.all(providers.map(async (plugin) => {
|
|
69
69
|
try {
|
|
70
70
|
const sensors = (await plugin.worker.pluginProxy.onDiscoverSensors?.()) ?? [];
|
|
71
|
-
|
|
72
|
-
const items = sensors
|
|
71
|
+
const adopted = this.adoptedNativeIds(plugin.id);
|
|
72
|
+
const items = sensors
|
|
73
|
+
.filter((sensor) => !adopted.has(sensor.id))
|
|
74
|
+
.map((sensor) => ({ ...sensor, pluginId: plugin.id, pluginName: plugin.contract.name }));
|
|
73
75
|
this.cache.set(plugin.id, items);
|
|
74
76
|
// per plugin as each answers, an empty list clears its entries
|
|
75
77
|
this.publish('sensors:discovered', { sensors: items, source: plugin.id });
|
|
@@ -103,24 +105,13 @@ export class SensorDiscoveryManager {
|
|
|
103
105
|
isSensorDiscoveryPlugin(plugin) {
|
|
104
106
|
return plugin.contract.interfaces.includes(PluginInterface.SensorDiscovery);
|
|
105
107
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
return;
|
|
109
|
-
const offered = new Set(sensors.map((sensor) => sensor.id));
|
|
108
|
+
adoptedNativeIds(pluginId) {
|
|
109
|
+
const ids = new Set();
|
|
110
110
|
for (const record of this.registry.getRecords()) {
|
|
111
|
-
if (record.pluginInfo.id
|
|
112
|
-
|
|
113
|
-
if (!record.nativeId || !offered.has(record.nativeId))
|
|
114
|
-
continue;
|
|
115
|
-
if (this.registry.isConnected(record._id))
|
|
116
|
-
continue;
|
|
117
|
-
try {
|
|
118
|
-
await this.registry.deleteSensor(record._id);
|
|
119
|
-
}
|
|
120
|
-
catch {
|
|
121
|
-
// raced a re-registration, the record is live again and stays
|
|
122
|
-
}
|
|
111
|
+
if (record.pluginInfo.id === pluginId && record.nativeId)
|
|
112
|
+
ids.add(record.nativeId);
|
|
123
113
|
}
|
|
114
|
+
return ids;
|
|
124
115
|
}
|
|
125
116
|
publish(type, data) {
|
|
126
117
|
const event = { type, data };
|
|
@@ -130,7 +121,7 @@ export class SensorDiscoveryManager {
|
|
|
130
121
|
this.stopAutoRescanTimer();
|
|
131
122
|
this.autoRescanTimer = setInterval(() => {
|
|
132
123
|
if (!this.isScanning) {
|
|
133
|
-
|
|
124
|
+
this.scan();
|
|
134
125
|
}
|
|
135
126
|
}, AUTO_RESCAN_INTERVAL_MS);
|
|
136
127
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../../src/sensors/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AASxD,MAAM,oBAAoB,GAAG,MAAM,CAAC;AACpC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAEvC,MAAM,OAAO,sBAAsB;IACzB,QAAQ,CAAiB;IACzB,WAAW,CAAc;IACzB,MAAM,CAAgB;IACtB,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IAEtC,KAAK,GAAG,IAAI,GAAG,EAAsC,CAAC;IACtD,UAAU,GAAG,KAAK,CAAC;IACnB,eAAe,GAAG,CAAC,CAAC;IACpB,mBAAmB,GAAG,CAAC,CAAC;IACxB,eAAe,CAAkB;IAEjC,UAAU,GAAG,gBAAgB,CAAC,yBAAyB,EAAE,CAAC;IAElE;QACE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAiB,gBAAgB,CAAC,CAAC;QACpE,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,OAAO,CAAc,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,OAAO,CAAgB,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAEM,SAAS;QACd,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI,iBAAiB,EAAE,CAAC;YACtB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,mBAAmB,GAAG,oBAAoB,CAAC;QAClH,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,YAAY,EAAE,CAAC;YACtC,
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../../src/sensors/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,8 @@ import { SensorType } from '@camera.ui/sdk';
|
|
|
2
2
|
import { ServerSensor } from '../sensors/sensor.js';
|
|
3
3
|
import type { Logger } from '@camera.ui/common/logger';
|
|
4
4
|
import type { Promisify, RPCClient } from '@camera.ui/rpc';
|
|
5
|
-
import type { ModelSpec } from '@camera.ui/sdk';
|
|
6
|
-
import type { SensorJSON } from '@camera.ui/sdk/internal';
|
|
5
|
+
import type { DiscoveredSensor, ModelSpec } from '@camera.ui/sdk';
|
|
6
|
+
import type { SensorJSON, SensorSourcePatch } from '@camera.ui/sdk/internal';
|
|
7
7
|
import type { DBSensor, DBSensorHistoryEntry } from '../api/database/types.js';
|
|
8
8
|
import type { DetectionCoordinatorInterface } from '../rpc/interfaces/detection.js';
|
|
9
9
|
import type { RegisterSensorOptions, SensorRefreshedState, SensorRegistration, StoredSensorData } from '../rpc/interfaces/sensor.js';
|
|
@@ -33,6 +33,8 @@ export declare class SensorRegistry {
|
|
|
33
33
|
resolveSensor(sensor: SensorJSON, pluginId: string, options?: RegisterSensorOptions): string;
|
|
34
34
|
unregisterSensor(sensorId: string): void;
|
|
35
35
|
removePluginSensors(pluginId: string): void;
|
|
36
|
+
createAdoptedSensor(pluginId: string, sensor: DiscoveredSensor): DBSensor;
|
|
37
|
+
updateSource(sensorId: string, patch: SensorSourcePatch): void;
|
|
36
38
|
deleteSensor(sensorId: string): Promise<void>;
|
|
37
39
|
createVirtualSensor(input: {
|
|
38
40
|
type: SensorType;
|
|
@@ -67,6 +69,8 @@ export declare class SensorRegistry {
|
|
|
67
69
|
toStoredData(record: DBSensor): StoredSensorData;
|
|
68
70
|
coordinatorFor(cameraId: string): Promisify<DetectionCoordinatorInterface>;
|
|
69
71
|
private validateContract;
|
|
72
|
+
private findByNativeId;
|
|
73
|
+
private assertMayCreate;
|
|
70
74
|
private reconcile;
|
|
71
75
|
private disconnectSensor;
|
|
72
76
|
syncCameraProviders(cameraId: string): Promise<void>;
|