@camera.ui/server 2.0.22 → 2.0.24
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-CRIhzt2J.js +1 -0
- package/dist/interface/assets/About-CvY4xvAU.js +1 -0
- package/dist/interface/assets/Adminpanel-4ilp8plp.js +1 -0
- package/dist/interface/assets/Automation-uaWWTeTZ.js +3 -0
- package/dist/interface/assets/AutomationImport-RNgRv6Uc.js +2 -0
- package/dist/interface/assets/AutomationStore-D8plMzVI.js +2 -0
- package/dist/interface/assets/AutomationStoreDetail-BO-9XCRn.js +2 -0
- package/dist/interface/assets/Automations-PHMVe6wG.js +2 -0
- package/dist/interface/assets/Camera-Akukeq4_.js +2 -0
- package/dist/interface/assets/CameraConsole-BnKiGukm.js +7 -0
- package/dist/interface/assets/Cameras-BuHNAHpD.js +652 -0
- package/dist/interface/assets/{Camview-CaEbdeQZ.css → Camview-Cj10uxGy.css} +1 -1
- package/dist/interface/assets/Camview-dF8o0iy2.js +1 -0
- package/dist/interface/assets/Config-iq-YI9Vg.js +2 -0
- package/dist/interface/assets/{ConfigActionCameraControl-DFdb4xzq.js → ConfigActionCameraControl-C2qva2mT.js} +1 -1
- package/dist/interface/assets/ConfigActionDelay-C02w0yBx.js +1 -0
- package/dist/interface/assets/ConfigActionHttp-DVf26mYG.js +1 -0
- package/dist/interface/assets/ConfigActionImageInput-BTlFV7kK.js +1 -0
- package/dist/interface/assets/ConfigActionMqtt-CD9RW5Lq.js +1 -0
- package/dist/interface/assets/ConfigActionNotification-CjbIPrEb.js +1 -0
- package/dist/interface/assets/ConfigActionNotificationControl-BCdKNvgC.js +1 -0
- package/dist/interface/assets/ConfigActionOutput-wV9RFDQO.js +1 -0
- package/dist/interface/assets/ConfigActionPlugin-DijuNALK.js +1 -0
- package/dist/interface/assets/ConfigActionSensor-C9q3sRuI.js +1 -0
- package/dist/interface/assets/ConfigActionSnapshot-B79IJLFV.js +1 -0
- package/dist/interface/assets/ConfigActionVariable-Do94c7oi.js +1 -0
- package/dist/interface/assets/ConfigConditionIfElse-BtbZhnCM.js +1 -0
- package/dist/interface/assets/ConfigConditionSensorState-D1V_FhNU.js +1 -0
- package/dist/interface/assets/ConfigConditionSwitch-C74dDt3R.js +1 -0
- package/dist/interface/assets/ConfigConditionTime-5IrJQgAV.js +1 -0
- package/dist/interface/assets/ConfigSensorValueInput-BcbzMf0g.js +1 -0
- package/dist/interface/assets/{ConfigTriggerDetection-Cjes6g7x.js → ConfigTriggerDetection-ld9Upgoc.js} +1 -1
- package/dist/interface/assets/ConfigTriggerGeofence-DbfBc1AM.js +1 -0
- package/dist/interface/assets/ConfigTriggerManual-t-J-HbqF.js +1 -0
- package/dist/interface/assets/ConfigTriggerMqtt-i57J8-Nq.js +1 -0
- package/dist/interface/assets/ConfigTriggerSchedule-Dv7wIG3G.js +1 -0
- package/dist/interface/assets/ConfigTriggerSensor-Ba2lCSGc.js +1 -0
- package/dist/interface/assets/{ConfigTriggerSystem-NaaBopYq.js → ConfigTriggerSystem-BWs3rP_W.js} +1 -1
- package/dist/interface/assets/ConfigTriggerWebhook-CpQakeYG.js +1 -0
- package/dist/interface/assets/Console-BTb5Yc32.js +1 -0
- package/dist/interface/assets/CuiAutomationRunsDialog-DX0xpNxx.js +1 -0
- package/dist/interface/assets/CuiBottomSheet-Bu0PtwX-.js +1 -0
- package/dist/interface/assets/CuiBottomSheet-DIg-nl0p.js +1 -0
- package/dist/interface/assets/CuiCameraPipCard-q3yeptLd.js +1 -0
- package/dist/interface/assets/CuiCameraRecordings-BWN8gBl4.js +1 -0
- package/dist/interface/assets/CuiCameraShares-BggG5Ic_.js +1 -0
- package/dist/interface/assets/CuiCameraTable-BCrE4TMJ.js +2 -0
- package/dist/interface/assets/CuiDataTable-Dk8LJl5S.js +1 -0
- package/dist/interface/assets/CuiLightControl-CaIl2eCO.js +1 -0
- package/dist/interface/assets/CuiLightControl-DFrZm_sv.css +1 -0
- package/dist/interface/assets/CuiList-Cjbxtb1E.js +1 -0
- package/dist/interface/assets/CuiMarkdownContent-Bjs3wRnq.js +1 -0
- package/dist/interface/assets/CuiMarkdownContent-Do8-vIl7.js +1 -0
- package/dist/interface/assets/CuiPluginCard-cvZkF8Cz.js +2 -0
- package/dist/interface/assets/{CuiPluginCategoryChip-D9Vi1SEP.js → CuiPluginCategoryChip-DsEuwQrw.js} +1 -1
- package/dist/interface/assets/CuiPluginOAuthButton-Bbwly_xJ.js +2 -0
- package/dist/interface/assets/{CuiPluginTrustBadge-D0rUX2i6.js → CuiPluginTrustBadge-BC6F9f-3.js} +1 -1
- package/dist/interface/assets/CuiQRCode-DKHFwuhr.js +1 -0
- package/dist/interface/assets/CuiRecordingsGrid-DSf7RXci.js +1 -0
- package/dist/interface/assets/CuiSchema-Dda4lNPz.js +1 -0
- package/dist/interface/assets/CuiTopNavbarItem-BZawroJz.js +1 -0
- package/dist/interface/assets/Faces-CvQCD53E.js +1 -0
- package/dist/interface/assets/FirstSteps-Dg0Bvjs2.js +1 -0
- package/dist/interface/assets/Instances-DisNu3zt.js +1 -0
- package/dist/interface/assets/Logs-DSSDjAY-.js +6 -0
- package/dist/interface/assets/Menu-CJ-MMxvd.js +1 -0
- package/dist/interface/assets/OAuthDeviceFlow-CKTokRaq.js +1 -0
- package/dist/interface/assets/Plugin-7daLGUVo.js +1 -0
- package/dist/interface/assets/PluginConsole-CcRMneFa.js +7 -0
- package/dist/interface/assets/PluginDetail-B1-NdurE.js +2 -0
- package/dist/interface/assets/PluginSchema-CP0JWUSD.js +1 -0
- package/dist/interface/assets/PluginSearch-BHN0J_JP.js +2 -0
- package/dist/interface/assets/PluginSearch-Cx_lzDqC.js +1 -0
- package/dist/interface/assets/Plugins-DnMPdcQF.js +1 -0
- package/dist/interface/assets/Recordings-Dxs3srmh.js +1 -0
- package/dist/interface/assets/SensorEdit-Dq2nV1Wf.js +1 -0
- package/dist/interface/assets/SensorHistory-BeCbNWJh.js +1 -0
- package/dist/interface/assets/Sensors-BA9P_Ray.css +1 -0
- package/dist/interface/assets/Sensors-D9DLdMaD.js +2 -0
- package/dist/interface/assets/Settings-DCHoD7r8.js +1 -0
- package/dist/interface/assets/SettingsAccount-BrhnlNuF.js +1 -0
- package/dist/interface/assets/SettingsAccount-djLxmQ9r.js +1 -0
- package/dist/interface/assets/{SettingsAccount-CyNJQSuV.css → SettingsAccount-si-6gWl5.css} +1 -1
- package/dist/interface/assets/SettingsAppearance-Bq-xM16S.js +1 -0
- package/dist/interface/assets/SettingsAppearance-JKbe5xiH.js +1 -0
- package/dist/interface/assets/SettingsBackup-CjlVk3hF.js +1 -0
- package/dist/interface/assets/SettingsList-C4mMOKJh.js +1 -0
- package/dist/interface/assets/SettingsMqtt-DoYFVHoD.js +1 -0
- package/dist/interface/assets/SettingsNotifications-Cmr9Bvy0.js +2 -0
- package/dist/interface/assets/SettingsPermissions-D33G-1kM.js +1 -0
- package/dist/interface/assets/SettingsRecordings-DYiuW0rA.js +1 -0
- package/dist/interface/assets/SettingsRemote-CROA1Oa7.js +1 -0
- package/dist/interface/assets/SettingsSystem-rgucO68X.js +2 -0
- package/dist/interface/assets/SettingsUsers-2uMPOpyC.js +1 -0
- package/dist/interface/assets/Terminal-BMFWoJ_k.js +4 -0
- package/dist/interface/assets/VariableInput-Cx9tgiM4.js +1 -0
- package/dist/interface/assets/VariableSuggestions-DV_QjTtU.js +1 -0
- package/dist/interface/assets/VersionsHandler-v4hH23M_.js +7 -0
- package/dist/interface/assets/VirtualSensorCreate-DhuGE1Mf.js +1 -0
- package/dist/interface/assets/Workers-DyJXudfY.js +2 -0
- package/dist/interface/assets/{account-sFoKqEOV.js → account-C5mHt2Ep.js} +1 -1
- package/dist/interface/assets/ace-BqKKexH4.js +1 -0
- package/dist/interface/assets/{ace.config-C_wgqTLD.js → ace.config-BNjBs7Fe.js} +1 -1
- package/dist/interface/assets/alarm-light-outline-jCTfmz5t.js +1 -0
- package/dist/interface/assets/{alert-circle-BQZQ417w.js → alert-circle-Cu_kjPlA.js} +1 -1
- package/dist/interface/assets/alert-outline-DXHNnhoP.js +1 -0
- package/dist/interface/assets/api-3va2gyB0.css +2 -0
- package/dist/interface/assets/{api-DEaXK1Kq.js → api-BKU9IS3U.js} +1 -1
- package/dist/interface/assets/api-Cc-rMHwl.js +2 -0
- package/dist/interface/assets/arrow-left-DPtWmM6S.js +1 -0
- package/dist/interface/assets/arrow-right-outline-BY1ggGA1.js +1 -0
- package/dist/interface/assets/{auth-XA5zkqwW.js → auth-B4latCDR.js} +1 -1
- package/dist/interface/assets/automationBlueprint-D0F9AHk9.js +1 -0
- package/dist/interface/assets/automations-BFkAMu3Y.js +1 -0
- package/dist/interface/assets/{back-filled-BdHG6uUx.js → back-filled-r7bN5ObT.js} +1 -1
- package/dist/interface/assets/{bell-ring-Dua4zXf_.js → bell-ring-C470qCAb.js} +1 -1
- package/dist/interface/assets/{cameras.schema-1a2URPGd.js → cameras.schema-BtaT3B32.js} +1 -1
- package/dist/interface/assets/{cctv-DEiPL3U8.js → cctv-BKVOVZCR.js} +1 -1
- package/dist/interface/assets/check-circle-Ce_sbfPZ.js +1 -0
- package/dist/interface/assets/chevron-down-CjSTp091.js +1 -0
- package/dist/interface/assets/chevron-right-B4vB0gm4.js +1 -0
- package/dist/interface/assets/{clock-outline-C_f3Ed8x.js → clock-outline-BgcDXoyp.js} +1 -1
- package/dist/interface/assets/{close-DNgGJYHi.js → close-CQoGQHOF.js} +1 -1
- package/dist/interface/assets/{close-circle-L5juejMg.js → close-circle-DYhkXsRj.js} +1 -1
- package/dist/interface/assets/{cloud-check-DD7oRzmo.js → cloud-check-CVx221dJ.js} +1 -1
- package/dist/interface/assets/cloudHandoff-CPrXpD0L.js +1 -0
- package/dist/interface/assets/{config-C2hgXHyj.js → config-B_lj3Myj.js} +1 -1
- package/dist/interface/assets/copy-yhHCVVOa.js +1 -0
- package/dist/interface/assets/cube-scan-Ccxismvr.js +1 -0
- package/dist/interface/assets/delete-xWUQUP2x.js +1 -0
- package/dist/interface/assets/dist-DVb-CALh.js +1 -0
- package/dist/interface/assets/download-PLxvyB7s.js +1 -0
- package/dist/interface/assets/esm-B4MXP42m.js +1 -0
- package/dist/interface/assets/esm-BW9m3dy4.js +1 -0
- package/dist/interface/assets/esm-BZ3gh7Fj.js +1 -0
- package/dist/interface/assets/esm-Blvz9SsB.js +1 -0
- package/dist/interface/assets/esm-CJXU9jaA.js +1 -0
- package/dist/interface/assets/esm-Cqqu_mer.js +1 -0
- package/dist/interface/assets/esm-CtKbLoV_.js +1 -0
- package/dist/interface/assets/esm-CwzNi2iW.js +1 -0
- package/dist/interface/assets/esm-KnO8wJyB.js +1 -0
- package/dist/interface/assets/esm-Lt6R0RFn.js +1 -0
- package/dist/interface/assets/esm-MvRctfDP.js +1 -0
- package/dist/interface/assets/esm-W4LX4Rpq.js +1 -0
- package/dist/interface/assets/esm-l57LNUWu.js +1 -0
- package/dist/interface/assets/esm-xofhyA8r.js +1 -0
- package/dist/interface/assets/eye-off-C8kzsdYU.js +1 -0
- package/dist/interface/assets/flowSchema-CyZseAPD.js +1 -0
- package/dist/interface/assets/{history-iAZcYg3f.js → history-QBEPNc4X.js} +1 -1
- package/dist/interface/assets/home-af3W_y8U.js +1 -0
- package/dist/interface/assets/{information-outline-CVsB1bl-.js → information-outline-BPCsozSU.js} +1 -1
- package/dist/interface/assets/{lightbulb-outline-nNLyXAIp.js → lightbulb-outline-ccTlGyvW.js} +1 -1
- package/dist/interface/assets/main-C4qjk6s5.js +3 -0
- package/dist/interface/assets/main-aZt-Pooz.css +1 -0
- package/dist/interface/assets/{microphone-CU0mFDMh.js → microphone-5exHwwyq.js} +1 -1
- package/dist/interface/assets/mqtt-CFw_CCq8.js +1 -0
- package/dist/interface/assets/native-Cpj7zrLp.js +1 -0
- package/dist/interface/assets/native-D--k2WN1.js +1 -0
- package/dist/interface/assets/nodeDefinitions-CRrkU6zR.js +1 -0
- package/dist/interface/assets/{notifications-BHQN6WD4.js → notifications-0_glcRlR.js} +1 -1
- package/dist/interface/assets/{pencil-outline-BQxLTlZx.js → pencil-outline-M9I4mCJO.js} +1 -1
- package/dist/interface/assets/plugin-D3FpjfF8.js +1 -0
- package/dist/interface/assets/{plugins-C0RtyBHQ.js → plugins-ICpmsguj.js} +1 -1
- package/dist/interface/assets/plus-CGIx-WV8.js +1 -0
- package/dist/interface/assets/{plus-Ct6WQfM1.js → plus-CrfQUUEC.js} +1 -1
- package/dist/interface/assets/power-VnZM2-0c.js +1 -0
- package/dist/interface/assets/{ring-resize-CZBThoQC.js → ring-resize-CodGa6wQ.js} +1 -1
- package/dist/interface/assets/rolldown-runtime-C0FnF6B9.js +1 -0
- package/dist/interface/assets/{round-alt-arrow-left-bold-BlpNMBxm.js → round-alt-arrow-left-bold-DTrlW4yx.js} +1 -1
- package/dist/interface/assets/round-restart-alt-CxUkNgtt.js +1 -0
- package/dist/interface/assets/{search-M4Rt52Co.js → search-miJXZGQz.js} +1 -1
- package/dist/interface/assets/sensors-Bh5GuQ78.js +1 -0
- package/dist/interface/assets/{server-CVSOthzT.js → server-DbpDC3pc.js} +1 -1
- package/dist/interface/assets/{settings-CgToKrFd.js → settings-DY0TJSAM.js} +1 -1
- package/dist/interface/assets/{source-branch-CoHKTGxb.js → source-branch-nw9fwXin.js} +1 -1
- package/dist/interface/assets/{theme-BZi7VV10.js → theme-DlMdsvGC.js} +1 -1
- package/dist/interface/assets/{trash-2-BKWfq15D.js → trash-2-B-di2M48.js} +1 -1
- package/dist/interface/assets/trash-can-outline-BbZkHoW7.js +1 -0
- package/dist/interface/assets/{trash-fill-yNQsFs0Y.js → trash-fill-Bgen5QTD.js} +1 -1
- package/dist/interface/assets/{trash2-DjTG9rG-.js → trash2-BP__fHgN.js} +1 -1
- package/dist/interface/assets/types-C1VwkReu.js +1 -0
- package/dist/interface/assets/{types-Bw8H-UB4.js → types-CggzoTPX.js} +1 -1
- package/dist/interface/assets/upload-CNYrnwuV.js +1 -0
- package/dist/interface/assets/{useAppVersion-CDTrwxkp.js → useAppVersion-CCxZnwIP.js} +1 -1
- package/dist/interface/assets/useBackupRestore-DQQc_D6D.js +1 -0
- package/dist/interface/assets/useCameraOptions-DVlhUpbE.js +1 -0
- package/dist/interface/assets/{useCardSelection-CgZ7QTaA.js → useCardSelection-B3B2qPHO.js} +1 -1
- package/dist/interface/assets/{useElectron-CgLWOhcS.js → useElectron-KnqvZz0q.js} +1 -1
- package/dist/interface/assets/useLogsSocket-CUQwZ6wm.js +5 -0
- package/dist/interface/assets/{usePermissions-tzi2t12h.js → usePermissions-C3D3JcPH.js} +1 -1
- package/dist/interface/assets/useServerRestart-CqZRPCpR.js +1 -0
- package/dist/interface/assets/{useStreamStatus-BV_L7pxB.js → useStreamStatus-CVJFHRLZ.js} +1 -1
- package/dist/interface/assets/useUserOptions-drl3-JUC.js +1 -0
- package/dist/interface/assets/{variable-Y3IAPnsB.js → variable-CbNySf4s.js} +1 -1
- package/dist/interface/assets/vendor-CSg6_Jfu.js +22 -0
- package/dist/interface/assets/vendor-ace-DIEVbs6L.js +1085 -0
- package/dist/interface/assets/vendor-cameraui-Cgb5z6NJ.js +2040 -0
- package/dist/interface/assets/vendor-capacitor-C-8IYzpJ.js +2 -0
- package/dist/interface/assets/vendor-chart-CoQ9HTE3.js +3 -0
- package/dist/interface/assets/vendor-core-BJsSXMFQ.js +1 -0
- package/dist/interface/assets/{vendor-dnd-hwiZJHjo.js → vendor-dnd-DQF7Aoap.js} +2 -2
- package/dist/interface/assets/vendor-draggabilly-Cghb3aIb.js +1 -0
- package/dist/interface/assets/vendor-gridstack-qw2ro2uB.js +3 -0
- package/dist/interface/assets/{vendor-leaflet-BMMJO5Nd.js → vendor-leaflet-Bcgd-fkG.js} +1 -1
- package/dist/interface/assets/vendor-markdown-DWwrEE67.js +14 -0
- package/dist/interface/assets/{vendor-primevue-C6wcTjtT.js → vendor-primevue-CyD8V_Ft.js} +85 -85
- package/dist/interface/assets/vendor-vueflow-crUU2mAI.js +26 -0
- package/dist/interface/assets/vendor-xterm-BafMBqaV.js +91 -0
- package/dist/interface/assets/vendor-zod-Dbq0fBXY.js +127 -0
- package/dist/interface/assets/web-BX3axHeB.js +1 -0
- package/dist/interface/assets/web-BcHmbPny.js +1 -0
- package/dist/interface/assets/web-BjKL51lK-BQjyRtns.js +1 -0
- package/dist/interface/assets/web-C8w-z-xR.js +1 -0
- package/dist/interface/assets/web-CHdniv8I.js +1 -0
- package/dist/interface/assets/web-CWBhY0Av.js +1 -0
- package/dist/interface/assets/web-Cf1yYy4u.js +1 -0
- package/dist/interface/assets/web-Ct6Vkr6F.js +1 -0
- package/dist/interface/assets/web-DARDw7d8.js +1 -0
- package/dist/interface/assets/web-DKBMdBSA.js +1 -0
- package/dist/interface/assets/web-Ddzvp-fv.js +1 -0
- package/dist/interface/assets/web-Dymr_MpD.js +1 -0
- package/dist/interface/assets/web-XIuTPdFc.js +1 -0
- package/dist/interface/assets/web-lrnXIJTz.js +1 -0
- package/dist/interface/assets/{webhook-yCryYojY.js → webhook-B7YgiSrF.js} +1 -1
- package/dist/interface/assets/workbox-window.prod.es5-BkFwsIPp.js +1 -0
- package/dist/interface/assets/{zoom-in-Da5uRiQq.js → zoom-in-D7BJNotF.js} +1 -1
- package/dist/interface/index.html +44 -40
- package/dist/interface/sw.js +1 -1
- package/dist/server/package.json +11 -11
- package/dist/server/requirements.txt +4 -6
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc/client.py +3 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_rpc/types.py +4 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/__init__.py +9 -14
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/__init__.py +0 -4
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/config.py +5 -12
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/detection.py +6 -23
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/device.py +60 -100
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/events.py +3 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/frames.py +2 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/__init__.py +2 -20
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/camera_config_internal.py +1 -1
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/camera_enums.py +3 -3
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/event_emitter.py +13 -26
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/manager_rpc.py +2 -5
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/sensor_rpc.py +21 -6
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/shared_utils.py +7 -18
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/manager/__init__.py +91 -29
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/observable/__init__.py +145 -37
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/__init__.py +10 -1
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/api.py +21 -68
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/contract.py +31 -58
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/helper.py +3 -12
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/interfaces.py +137 -99
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/notifier.py +34 -52
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/oauth.py +4 -4
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/__init__.py +3 -4
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/audio.py +45 -39
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/base.py +329 -256
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/battery.py +17 -16
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/classifier.py +31 -27
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/clip.py +14 -12
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/contact.py +11 -10
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/detection.py +34 -22
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/doorbell.py +19 -19
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/face.py +34 -28
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/garage.py +29 -20
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/humidity.py +22 -12
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/leak.py +12 -11
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/license_plate.py +35 -31
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/light.py +22 -18
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/lock.py +26 -19
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/motion.py +28 -27
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/object.py +37 -33
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/occupancy.py +11 -10
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/ptz.py +20 -24
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/security_system.py +22 -22
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/siren.py +17 -16
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/smoke.py +11 -10
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/spec.py +26 -22
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/switch.py +13 -12
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/temperature.py +22 -12
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/storage/__init__.py +56 -38
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/types.py +15 -18
- package/dist/server/src/api/controllers/auth.controller.js +2 -1
- package/dist/server/src/api/controllers/auth.controller.js.map +1 -1
- package/dist/server/src/api/controllers/cameras.controller.d.ts +6 -0
- package/dist/server/src/api/controllers/cameras.controller.js +21 -11
- package/dist/server/src/api/controllers/cameras.controller.js.map +1 -1
- package/dist/server/src/api/controllers/cast.controller.d.ts +11 -0
- package/dist/server/src/api/controllers/cast.controller.js +29 -0
- package/dist/server/src/api/controllers/cast.controller.js.map +1 -0
- package/dist/server/src/api/controllers/notifications.controller.d.ts +12 -0
- package/dist/server/src/api/controllers/notifications.controller.js +41 -0
- package/dist/server/src/api/controllers/notifications.controller.js.map +1 -1
- package/dist/server/src/api/controllers/nvr.controller.d.ts +14 -0
- package/dist/server/src/api/controllers/nvr.controller.js +61 -0
- package/dist/server/src/api/controllers/nvr.controller.js.map +1 -0
- package/dist/server/src/api/controllers/sensors.controller.d.ts +13 -0
- package/dist/server/src/api/controllers/sensors.controller.js +94 -0
- package/dist/server/src/api/controllers/sensors.controller.js.map +1 -0
- package/dist/server/src/api/controllers/server.controller.d.ts +1 -0
- package/dist/server/src/api/controllers/server.controller.js +11 -0
- package/dist/server/src/api/controllers/server.controller.js.map +1 -1
- package/dist/server/src/api/controllers/tunnel.controller.d.ts +0 -3
- package/dist/server/src/api/controllers/tunnel.controller.js +1 -21
- package/dist/server/src/api/controllers/tunnel.controller.js.map +1 -1
- package/dist/server/src/api/database/constants.d.ts +2 -0
- package/dist/server/src/api/database/constants.js +2 -0
- package/dist/server/src/api/database/constants.js.map +1 -1
- package/dist/server/src/api/database/index.d.ts +5 -2
- package/dist/server/src/api/database/index.js +7 -4
- package/dist/server/src/api/database/index.js.map +1 -1
- package/dist/server/src/api/database/migrations/v2-1-0.d.ts +3 -0
- package/dist/server/src/api/database/migrations/v2-1-0.js +72 -0
- package/dist/server/src/api/database/migrations/v2-1-0.js.map +1 -0
- package/dist/server/src/api/database/record-schemas.d.ts +2 -3
- package/dist/server/src/api/database/record-schemas.js +3 -3
- package/dist/server/src/api/database/record-schemas.js.map +1 -1
- package/dist/server/src/api/database/types.d.ts +27 -3
- package/dist/server/src/api/index.js +3 -0
- package/dist/server/src/api/index.js.map +1 -1
- package/dist/server/src/api/plugins/natsSubFirewall.d.ts +1 -1
- package/dist/server/src/api/plugins/natsSubFirewall.js +5 -2
- package/dist/server/src/api/plugins/natsSubFirewall.js.map +1 -1
- package/dist/server/src/api/plugins/proxy.plugin.js +5 -3
- package/dist/server/src/api/plugins/proxy.plugin.js.map +1 -1
- package/dist/server/src/api/routes/cameras.routes.js +14 -7
- package/dist/server/src/api/routes/cameras.routes.js.map +1 -1
- package/dist/server/src/api/routes/cast.routes.d.ts +2 -0
- package/dist/server/src/api/routes/cast.routes.js +29 -0
- package/dist/server/src/api/routes/cast.routes.js.map +1 -0
- package/dist/server/src/api/routes/index.js +6 -2
- package/dist/server/src/api/routes/index.js.map +1 -1
- package/dist/server/src/api/routes/notifications.routes.js +32 -0
- package/dist/server/src/api/routes/notifications.routes.js.map +1 -1
- package/dist/server/src/api/routes/nvr.routes.d.ts +2 -0
- package/dist/server/src/api/routes/nvr.routes.js +19 -0
- package/dist/server/src/api/routes/nvr.routes.js.map +1 -0
- package/dist/server/src/api/routes/sensors.routes.d.ts +2 -0
- package/dist/server/src/api/routes/sensors.routes.js +89 -0
- package/dist/server/src/api/routes/sensors.routes.js.map +1 -0
- package/dist/server/src/api/routes/server.routes.js +10 -0
- package/dist/server/src/api/routes/server.routes.js.map +1 -1
- package/dist/server/src/api/schemas/cameras.schema.d.ts +103 -45
- package/dist/server/src/api/schemas/cameras.schema.js +7 -10
- package/dist/server/src/api/schemas/cameras.schema.js.map +1 -1
- package/dist/server/src/api/schemas/cast.schema.d.ts +7 -0
- package/dist/server/src/api/schemas/cast.schema.js +7 -0
- package/dist/server/src/api/schemas/cast.schema.js.map +1 -0
- package/dist/server/src/api/schemas/nvr.schema.d.ts +10 -0
- package/dist/server/src/api/schemas/nvr.schema.js +13 -0
- package/dist/server/src/api/schemas/nvr.schema.js.map +1 -0
- package/dist/server/src/api/schemas/{virtualsensors.schema.d.ts → sensors.schema.d.ts} +15 -8
- package/dist/server/src/api/schemas/sensors.schema.js +25 -0
- package/dist/server/src/api/schemas/sensors.schema.js.map +1 -0
- package/dist/server/src/api/schemas/users.schema.d.ts +7 -18
- package/dist/server/src/api/schemas/users.schema.js +3 -7
- package/dist/server/src/api/schemas/users.schema.js.map +1 -1
- package/dist/server/src/api/services/cameras.service.js +1 -1
- package/dist/server/src/api/services/cameras.service.js.map +1 -1
- package/dist/server/src/api/services/cast.service.d.ts +7 -0
- package/dist/server/src/api/services/cast.service.js +14 -0
- package/dist/server/src/api/services/cast.service.js.map +1 -0
- package/dist/server/src/api/services/instances.service.js +1 -1
- package/dist/server/src/api/services/notifications.service.d.ts +3 -0
- package/dist/server/src/api/services/notifications.service.js +9 -0
- package/dist/server/src/api/services/notifications.service.js.map +1 -1
- package/dist/server/src/api/services/plugins.service.js +18 -3
- package/dist/server/src/api/services/plugins.service.js.map +1 -1
- package/dist/server/src/api/services/sensors.service.d.ts +41 -0
- package/dist/server/src/api/services/sensors.service.js +106 -0
- package/dist/server/src/api/services/sensors.service.js.map +1 -0
- package/dist/server/src/api/services/server.service.d.ts +4 -0
- package/dist/server/src/api/services/server.service.js +14 -0
- package/dist/server/src/api/services/server.service.js.map +1 -1
- package/dist/server/src/api/services/users.service.js +6 -9
- package/dist/server/src/api/services/users.service.js.map +1 -1
- package/dist/server/src/api/types/index.d.ts +19 -6
- package/dist/server/src/api/websocket/nsp/events.js +38 -15
- package/dist/server/src/api/websocket/nsp/events.js.map +1 -1
- package/dist/server/src/api.d.ts +0 -2
- package/dist/server/src/api.js +0 -12
- package/dist/server/src/api.js.map +1 -1
- package/dist/server/src/automations/actions/sensor.js +4 -7
- package/dist/server/src/automations/actions/sensor.js.map +1 -1
- package/dist/server/src/automations/conditions/sensorState.js +4 -4
- package/dist/server/src/automations/conditions/sensorState.js.map +1 -1
- package/dist/server/src/automations/context.d.ts +2 -1
- package/dist/server/src/automations/context.js +2 -1
- package/dist/server/src/automations/context.js.map +1 -1
- package/dist/server/src/automations/pluginMethodRegistry.d.ts +2 -0
- package/dist/server/src/automations/pluginMethodRegistry.js +14 -0
- package/dist/server/src/automations/pluginMethodRegistry.js.map +1 -1
- package/dist/server/src/automations/triggers/sensor.js +12 -23
- package/dist/server/src/automations/triggers/sensor.js.map +1 -1
- package/dist/server/src/camera/controller.d.ts +0 -1
- package/dist/server/src/camera/controller.js +9 -46
- package/dist/server/src/camera/controller.js.map +1 -1
- package/dist/server/src/camera/decoder/detection-coordinator.js +13 -11
- package/dist/server/src/camera/decoder/detection-coordinator.js.map +1 -1
- package/dist/server/src/camera/decoder/plugin-registry.d.ts +1 -0
- package/dist/server/src/camera/decoder/plugin-registry.js +13 -1
- package/dist/server/src/camera/decoder/plugin-registry.js.map +1 -1
- package/dist/server/src/camera/decoder/ptz/autotracker.js +2 -2
- package/dist/server/src/camera/decoder/ptz/autotracker.js.map +1 -1
- package/dist/server/src/camera/decoder/secondary-stage.js +6 -6
- package/dist/server/src/camera/decoder/secondary-stage.js.map +1 -1
- package/dist/server/src/camera/decoder/types.d.ts +7 -1
- package/dist/server/src/camera/decoder/types.js +4 -0
- package/dist/server/src/camera/decoder/types.js.map +1 -1
- package/dist/server/src/camera/decoder/worker.d.ts +2 -0
- package/dist/server/src/camera/decoder/worker.js +14 -3
- package/dist/server/src/camera/decoder/worker.js.map +1 -1
- package/dist/server/src/camera/index.d.ts +2 -14
- package/dist/server/src/camera/index.js +1 -32
- package/dist/server/src/camera/index.js.map +1 -1
- package/dist/server/src/camera/sensors/controller.d.ts +17 -77
- package/dist/server/src/camera/sensors/controller.js +60 -445
- package/dist/server/src/camera/sensors/controller.js.map +1 -1
- package/dist/server/src/internal-bus.d.ts +7 -13
- package/dist/server/src/internal-bus.js.map +1 -1
- package/dist/server/src/main.d.ts +1 -0
- package/dist/server/src/main.js +7 -0
- package/dist/server/src/main.js.map +1 -1
- package/dist/server/src/manager/castManager.d.ts +24 -0
- package/dist/server/src/manager/castManager.js +79 -0
- package/dist/server/src/manager/castManager.js.map +1 -0
- package/dist/server/src/manager/downloadManager.d.ts +1 -0
- package/dist/server/src/manager/downloadManager.js +6 -0
- package/dist/server/src/manager/downloadManager.js.map +1 -1
- package/dist/server/src/manager/notificationManager.d.ts +6 -0
- package/dist/server/src/manager/notificationManager.js +70 -3
- package/dist/server/src/manager/notificationManager.js.map +1 -1
- package/dist/server/src/mqtt/bridge.d.ts +7 -0
- package/dist/server/src/mqtt/bridge.js +92 -32
- package/dist/server/src/mqtt/bridge.js.map +1 -1
- package/dist/server/src/mqtt/ha-discovery.d.ts +1 -1
- package/dist/server/src/mqtt/ha-discovery.js +53 -8
- package/dist/server/src/mqtt/ha-discovery.js.map +1 -1
- package/dist/server/src/mqtt/manager.js +1 -1
- package/dist/server/src/mqtt/manager.js.map +1 -1
- package/dist/server/src/mqtt/topics.d.ts +3 -3
- package/dist/server/src/mqtt/topics.js +11 -10
- package/dist/server/src/mqtt/topics.js.map +1 -1
- package/dist/server/src/plugins/config-store.js +1 -1
- package/dist/server/src/plugins/config-store.js.map +1 -1
- package/dist/server/src/plugins/runtime/base.d.ts +1 -0
- package/dist/server/src/plugins/runtime/base.js +29 -6
- package/dist/server/src/plugins/runtime/base.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/child.js +5 -2
- package/dist/server/src/plugins/runtime/node/child.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/pluginApi.d.ts +2 -0
- package/dist/server/src/plugins/runtime/node/pluginApi.js +4 -1
- package/dist/server/src/plugins/runtime/node/pluginApi.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.d.ts +5 -13
- package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js +97 -179
- package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/proxy/deviceManager.d.ts +2 -1
- package/dist/server/src/plugins/runtime/node/proxy/deviceManager.js +26 -7
- package/dist/server/src/plugins/runtime/node/proxy/deviceManager.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/proxy/reconnect.d.ts +2 -0
- package/dist/server/src/plugins/runtime/node/proxy/reconnect.js +27 -0
- package/dist/server/src/plugins/runtime/node/proxy/reconnect.js.map +1 -0
- package/dist/server/src/plugins/runtime/node/proxy/sensor.d.ts +17 -3
- package/dist/server/src/plugins/runtime/node/proxy/sensor.js +61 -20
- package/dist/server/src/plugins/runtime/node/proxy/sensor.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/proxy/sensorManager.d.ts +18 -0
- package/dist/server/src/plugins/runtime/node/proxy/sensorManager.js +269 -0
- package/dist/server/src/plugins/runtime/node/proxy/sensorManager.js.map +1 -0
- package/dist/server/src/plugins/runtime/node/storage.d.ts +1 -1
- package/dist/server/src/plugins/runtime/node/storage.js +10 -7
- package/dist/server/src/plugins/runtime/node/storage.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/storageController.d.ts +5 -7
- package/dist/server/src/plugins/runtime/node/storageController.js +18 -43
- package/dist/server/src/plugins/runtime/node/storageController.js.map +1 -1
- package/dist/server/src/plugins/runtime/python/child.py +13 -7
- package/dist/server/src/plugins/runtime/python/namespaces.py +13 -19
- package/dist/server/src/plugins/runtime/python/plugin_api.py +10 -1
- package/dist/server/src/plugins/runtime/python/proxy/camera_device.py +130 -280
- package/dist/server/src/plugins/runtime/python/proxy/device_manager.py +26 -5
- package/dist/server/src/plugins/runtime/python/proxy/sensor.py +88 -21
- package/dist/server/src/plugins/runtime/python/proxy/sensor_manager.py +386 -0
- package/dist/server/src/plugins/runtime/python/storage.py +12 -9
- package/dist/server/src/plugins/runtime/python/storage_controller.py +18 -80
- package/dist/server/src/plugins/runtime/python/store.py +19 -95
- package/dist/server/src/plugins/runtime/python/typings.py +32 -9
- package/dist/server/src/plugins/store/layout.d.ts +1 -2
- package/dist/server/src/plugins/store/layout.js +9 -56
- package/dist/server/src/plugins/store/layout.js.map +1 -1
- package/dist/server/src/plugins/store/location.d.ts +2 -3
- package/dist/server/src/plugins/store/location.js +5 -13
- package/dist/server/src/plugins/store/location.js.map +1 -1
- package/dist/server/src/plugins/store/pluginStoreFile.d.ts +1 -2
- package/dist/server/src/plugins/store/pluginStoreFile.js +8 -15
- package/dist/server/src/plugins/store/pluginStoreFile.js.map +1 -1
- package/dist/server/src/plugins/worker.d.ts +2 -0
- package/dist/server/src/plugins/worker.js +26 -7
- package/dist/server/src/plugins/worker.js.map +1 -1
- package/dist/server/src/rpc/index.d.ts +2 -0
- package/dist/server/src/rpc/index.js +5 -0
- package/dist/server/src/rpc/index.js.map +1 -1
- package/dist/server/src/rpc/interfaces/sensor.d.ts +33 -16
- package/dist/server/src/rpc/namespaces.d.ts +17 -8
- package/dist/server/src/rpc/namespaces.js +20 -12
- package/dist/server/src/rpc/namespaces.js.map +1 -1
- package/dist/server/src/rpc/server.js +1 -0
- package/dist/server/src/rpc/server.js.map +1 -1
- package/dist/server/src/sensors/registry.d.ts +96 -0
- package/dist/server/src/sensors/registry.js +814 -0
- package/dist/server/src/sensors/registry.js.map +1 -0
- package/dist/server/src/{camera/sensors → sensors}/semantics.d.ts +1 -1
- package/dist/server/src/{camera/sensors → sensors}/semantics.js +4 -1
- package/dist/server/src/sensors/semantics.js.map +1 -0
- package/dist/server/src/sensors/sensor.d.ts +58 -0
- package/dist/server/src/{camera/sensors → sensors}/sensor.js +43 -32
- package/dist/server/src/sensors/sensor.js.map +1 -0
- package/dist/server/src/{camera/sensors → sensors}/types.d.ts +2 -0
- package/dist/server/src/{camera/sensors → sensors}/types.js +9 -0
- package/dist/server/src/sensors/types.js.map +1 -0
- package/dist/server/src/{camera/sensors → sensors}/virtual.d.ts +4 -6
- package/dist/server/src/{camera/sensors → sensors}/virtual.js +10 -56
- package/dist/server/src/sensors/virtual.js.map +1 -0
- package/dist/server/src/services/mdns/index.js +4 -0
- package/dist/server/src/services/mdns/index.js.map +1 -1
- package/package.json +11 -11
- package/dist/interface/assets/404-0d936klL.js +0 -1
- package/dist/interface/assets/About-BMwYrGrl.js +0 -1
- package/dist/interface/assets/Adminpanel-DBsOmAuo.js +0 -1
- package/dist/interface/assets/Automation-BLndVfqR.js +0 -3
- package/dist/interface/assets/AutomationImport-Ba33juY0.js +0 -2
- package/dist/interface/assets/AutomationStore-Bjf1x7go.js +0 -2
- package/dist/interface/assets/AutomationStoreDetail-Ko3n3U1U.js +0 -2
- package/dist/interface/assets/Automations-BfC8bvkT.js +0 -2
- package/dist/interface/assets/Camera-BYDPeH6d.js +0 -2
- package/dist/interface/assets/CameraConsole-pVCj1xXI.js +0 -7
- package/dist/interface/assets/Cameras-DdokAe_Q.js +0 -652
- package/dist/interface/assets/Camview-DmuGSzal.js +0 -1
- package/dist/interface/assets/Config-DvVqB0_Y.js +0 -2
- package/dist/interface/assets/ConfigActionDelay-B1JjI6bg.js +0 -1
- package/dist/interface/assets/ConfigActionHttp-BzGIbeVo.js +0 -1
- package/dist/interface/assets/ConfigActionImageInput-C6m2-s8z.js +0 -1
- package/dist/interface/assets/ConfigActionMqtt-ByZNQKsg.js +0 -1
- package/dist/interface/assets/ConfigActionNotification-YmdMddoN.js +0 -1
- package/dist/interface/assets/ConfigActionNotificationControl-2hWDRBpq.js +0 -1
- package/dist/interface/assets/ConfigActionOutput-D9k1-jfI.js +0 -1
- package/dist/interface/assets/ConfigActionPlugin-DjD_94EX.js +0 -1
- package/dist/interface/assets/ConfigActionSensor-fak8jYSC.js +0 -1
- package/dist/interface/assets/ConfigActionSnapshot-mwEHXqyk.js +0 -1
- package/dist/interface/assets/ConfigActionVariable-kBxNfyOV.js +0 -1
- package/dist/interface/assets/ConfigConditionIfElse-CkjmImTD.js +0 -1
- package/dist/interface/assets/ConfigConditionSensorState-FE3mFjRe.js +0 -1
- package/dist/interface/assets/ConfigConditionSwitch-msqWizIt.js +0 -1
- package/dist/interface/assets/ConfigConditionTime-ifPV135b.js +0 -1
- package/dist/interface/assets/ConfigSensorValueInput-Bg3SEbSh.js +0 -1
- package/dist/interface/assets/ConfigTriggerGeofence-CemaUwl5.js +0 -1
- package/dist/interface/assets/ConfigTriggerManual-DWuiq7PC.js +0 -1
- package/dist/interface/assets/ConfigTriggerMqtt-DxAoDh2Z.js +0 -1
- package/dist/interface/assets/ConfigTriggerSchedule-DDqgMGvp.js +0 -1
- package/dist/interface/assets/ConfigTriggerSensor-M6bXqz4k.js +0 -1
- package/dist/interface/assets/ConfigTriggerWebhook-CxOXgcJi.js +0 -1
- package/dist/interface/assets/Console-CMuW2_8s.js +0 -1
- package/dist/interface/assets/CuiAutomationRunsDialog-yh1qHzmS.js +0 -1
- package/dist/interface/assets/CuiBottomSheet-BshiVWqw.js +0 -1
- package/dist/interface/assets/CuiBottomSheet-DSNyVg5P.js +0 -1
- package/dist/interface/assets/CuiCameraPipCard-Cmk0jl6M.js +0 -1
- package/dist/interface/assets/CuiCameraRecordings-KU1wIai4.js +0 -1
- package/dist/interface/assets/CuiCameraShares-BoR3YQWj.js +0 -1
- package/dist/interface/assets/CuiCameraTable-BRPBqU8V.js +0 -2
- package/dist/interface/assets/CuiDataTable-BGY4VBtv.js +0 -1
- package/dist/interface/assets/CuiList-BSOMR296.js +0 -1
- package/dist/interface/assets/CuiMarkdownContent-DEMo42iT.js +0 -1
- package/dist/interface/assets/CuiMarkdownContent-Xn_VHwym.js +0 -1
- package/dist/interface/assets/CuiPluginCard-CgJb8B1W.js +0 -2
- package/dist/interface/assets/CuiPluginOAuthButton-XpEyqoRm.js +0 -2
- package/dist/interface/assets/CuiQRCode-QBkbmvRA.js +0 -1
- package/dist/interface/assets/CuiRecordingsGrid-CuEl_hhu.js +0 -1
- package/dist/interface/assets/CuiSchema-D_cg-H5i.js +0 -1
- package/dist/interface/assets/CuiTopNavbarItem-CXijnkK9.js +0 -1
- package/dist/interface/assets/Faces-C95mlWaW.js +0 -1
- package/dist/interface/assets/FirstSteps-Cpbg7fng.js +0 -1
- package/dist/interface/assets/Instances-BgJtM1Xl.js +0 -1
- package/dist/interface/assets/Logs-BWXYqm5T.js +0 -6
- package/dist/interface/assets/Menu-BO9Zjy1w.js +0 -1
- package/dist/interface/assets/OAuthDeviceFlow-NnwqdmBM.js +0 -1
- package/dist/interface/assets/Plugin-DQq3xjhe.js +0 -1
- package/dist/interface/assets/PluginConsole-BTsVAsKf.js +0 -7
- package/dist/interface/assets/PluginDetail-CTyzzZVU.js +0 -2
- package/dist/interface/assets/PluginSchema-Bn3pHjQA.js +0 -1
- package/dist/interface/assets/PluginSearch-DbXCyUF0.js +0 -1
- package/dist/interface/assets/PluginSearch-z0z8Z1gP.js +0 -2
- package/dist/interface/assets/Plugins-Cy7e-ty2.js +0 -1
- package/dist/interface/assets/Recordings-CWBpGEUf.js +0 -1
- package/dist/interface/assets/Settings-CUIORSmm.js +0 -1
- package/dist/interface/assets/SettingsAccount-CeJBKpzp.js +0 -1
- package/dist/interface/assets/SettingsAccount-CnwVrQx1.js +0 -1
- package/dist/interface/assets/SettingsAppearance-BraaC0WF.js +0 -1
- package/dist/interface/assets/SettingsAppearance-CZrOTBki.js +0 -1
- package/dist/interface/assets/SettingsBackup-y9mb8XZZ.js +0 -1
- package/dist/interface/assets/SettingsList-DsKncveQ.js +0 -1
- package/dist/interface/assets/SettingsMqtt-DTyyctmQ.js +0 -1
- package/dist/interface/assets/SettingsNotifications-SFMt4Yuj.js +0 -2
- package/dist/interface/assets/SettingsPermissions-CktJaQzL.js +0 -1
- package/dist/interface/assets/SettingsRecordings-Bqguyt6u.js +0 -1
- package/dist/interface/assets/SettingsRemote-CTv7bb4g.js +0 -1
- package/dist/interface/assets/SettingsSystem-CkCnB34r.js +0 -2
- package/dist/interface/assets/SettingsUsers-D8LAGd6F.js +0 -1
- package/dist/interface/assets/Terminal-DaR9Ur0_.js +0 -4
- package/dist/interface/assets/VariableInput-D0TP_Lmo.js +0 -1
- package/dist/interface/assets/VariableSuggestions--vq7928F.js +0 -1
- package/dist/interface/assets/VersionsHandler-D9GDdcXr.js +0 -7
- package/dist/interface/assets/Workers-CUyRzwJG.js +0 -2
- package/dist/interface/assets/ace-DYqf8ZN7.js +0 -1
- package/dist/interface/assets/alert-outline-BUvdNY2J.js +0 -1
- package/dist/interface/assets/api-DxrxNyIH.js +0 -2
- package/dist/interface/assets/api-VZ_wVUpU.css +0 -2
- package/dist/interface/assets/arrow-left-LdfKbcre.js +0 -1
- package/dist/interface/assets/arrow-right-outline-BbTEhBJq.js +0 -1
- package/dist/interface/assets/automationBlueprint-DMjszOs4.js +0 -1
- package/dist/interface/assets/automations-51-JMUWD.js +0 -1
- package/dist/interface/assets/check-circle-D-utE_P9.js +0 -1
- package/dist/interface/assets/chevron-down-OEjMpuec.js +0 -1
- package/dist/interface/assets/chevron-right-B3nxd9UE.js +0 -1
- package/dist/interface/assets/cloudHandoff-BktPB9rt.js +0 -1
- package/dist/interface/assets/copy-BvSzmsFs.js +0 -1
- package/dist/interface/assets/delete-B9BZTgya.js +0 -1
- package/dist/interface/assets/dist-qdWlJrr0.js +0 -1
- package/dist/interface/assets/download-Dp_ssGIE.js +0 -1
- package/dist/interface/assets/esm-9VMgxuPI.js +0 -1
- package/dist/interface/assets/esm-B69zS8aI.js +0 -1
- package/dist/interface/assets/esm-BF94InGP.js +0 -1
- package/dist/interface/assets/esm-BHdK6hkk.js +0 -1
- package/dist/interface/assets/esm-BYm8JT8N.js +0 -1
- package/dist/interface/assets/esm-BwCmHX2G.js +0 -1
- package/dist/interface/assets/esm-CL6t-XYT.js +0 -1
- package/dist/interface/assets/esm-CXstRMXa.js +0 -1
- package/dist/interface/assets/esm-Ckb9rjlL.js +0 -1
- package/dist/interface/assets/esm-D4insKbc.js +0 -1
- package/dist/interface/assets/esm-DiReJ8YS.js +0 -1
- package/dist/interface/assets/esm-Dt_Neag0.js +0 -1
- package/dist/interface/assets/esm-GspmWlKf.js +0 -1
- package/dist/interface/assets/esm-eezqpB2a.js +0 -1
- package/dist/interface/assets/flowSchema-Ckr7CEbZ.js +0 -1
- package/dist/interface/assets/home-DL94781-.js +0 -1
- package/dist/interface/assets/main-BxM81wMi.css +0 -1
- package/dist/interface/assets/main-DOjghmGX.js +0 -3
- package/dist/interface/assets/mqtt-COazyb4A.js +0 -1
- package/dist/interface/assets/native-WiRjRKUS.js +0 -1
- package/dist/interface/assets/native-hhip9y-E.js +0 -1
- package/dist/interface/assets/nodeDefinitions-CPyyuw1P.js +0 -1
- package/dist/interface/assets/plugin-DIVM640y.js +0 -1
- package/dist/interface/assets/plus-CTzaBaTz.js +0 -1
- package/dist/interface/assets/power-CvKGepBP.js +0 -1
- package/dist/interface/assets/rolldown-runtime-DAXXjFlN.js +0 -1
- package/dist/interface/assets/round-restart-alt-D3iswthu.js +0 -1
- package/dist/interface/assets/trash-can-outline-HvqPHpF7.js +0 -1
- package/dist/interface/assets/types-CDJiWcQ7.js +0 -1
- package/dist/interface/assets/upload-B6yqOWqz.js +0 -1
- package/dist/interface/assets/useBackupRestore-QuXkc5ZG.js +0 -1
- package/dist/interface/assets/useCameraOptions-D5-bI-e6.js +0 -1
- package/dist/interface/assets/useLogsSocket-BlAo-xcw.js +0 -5
- package/dist/interface/assets/useServerRestart-DctcFWWh.js +0 -1
- package/dist/interface/assets/useUserOptions-nuBRgAEk.js +0 -1
- package/dist/interface/assets/vendor-ace-CrklN-bc.js +0 -1085
- package/dist/interface/assets/vendor-cameraui-B_OCKNGw.js +0 -2040
- package/dist/interface/assets/vendor-capacitor-D6T-f6Q_.js +0 -2
- package/dist/interface/assets/vendor-chart-DpsXMlB-.js +0 -3
- package/dist/interface/assets/vendor-core-zLmLhSHM.js +0 -1
- package/dist/interface/assets/vendor-draggabilly-OrLwQbim.js +0 -1
- package/dist/interface/assets/vendor-gridstack-C6VKsm_r.js +0 -3
- package/dist/interface/assets/vendor-markdown-_OBaDsnU.js +0 -15
- package/dist/interface/assets/vendor-nfBMzqgY.js +0 -22
- package/dist/interface/assets/vendor-vueflow-B1MUSE71.js +0 -26
- package/dist/interface/assets/vendor-xterm-IIYDrBG1.js +0 -142
- package/dist/interface/assets/vendor-zod-BaT-dXMv.js +0 -127
- package/dist/interface/assets/web-B-SlpbxK.js +0 -1
- package/dist/interface/assets/web-B6leYIzJ.js +0 -1
- package/dist/interface/assets/web-BLDe3Kn0.js +0 -1
- package/dist/interface/assets/web-BT-51W2W.js +0 -1
- package/dist/interface/assets/web-BjKL51lK-DHLvmMLr.js +0 -1
- package/dist/interface/assets/web-BpRU7MbT.js +0 -1
- package/dist/interface/assets/web-CiaJvmq8.js +0 -1
- package/dist/interface/assets/web-Cnkt61og.js +0 -1
- package/dist/interface/assets/web-CzhM-YH1.js +0 -1
- package/dist/interface/assets/web-Da5rcZ2Q.js +0 -1
- package/dist/interface/assets/web-DdZjFuTb.js +0 -1
- package/dist/interface/assets/web-DnHj9sl9.js +0 -1
- package/dist/interface/assets/web-E4Ew4Xhj.js +0 -1
- package/dist/interface/assets/web-q63OEDhG.js +0 -1
- package/dist/interface/assets/workbox-window.prod.es5-BMiTt6Ad.js +0 -1
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/sensor_triggers.py +0 -4
- package/dist/server/src/api/controllers/virtualsensors.controller.d.ts +0 -11
- package/dist/server/src/api/controllers/virtualsensors.controller.js +0 -61
- package/dist/server/src/api/controllers/virtualsensors.controller.js.map +0 -1
- package/dist/server/src/api/routes/virtualsensors.routes.d.ts +0 -2
- package/dist/server/src/api/routes/virtualsensors.routes.js +0 -63
- package/dist/server/src/api/routes/virtualsensors.routes.js.map +0 -1
- package/dist/server/src/api/schemas/virtualsensors.schema.js +0 -14
- package/dist/server/src/api/schemas/virtualsensors.schema.js.map +0 -1
- package/dist/server/src/api/services/virtualsensors.service.d.ts +0 -20
- package/dist/server/src/api/services/virtualsensors.service.js +0 -151
- package/dist/server/src/api/services/virtualsensors.service.js.map +0 -1
- package/dist/server/src/camera/sensors/semantics.js.map +0 -1
- package/dist/server/src/camera/sensors/sensor.d.ts +0 -34
- package/dist/server/src/camera/sensors/sensor.js.map +0 -1
- package/dist/server/src/camera/sensors/stable-id.d.ts +0 -2
- package/dist/server/src/camera/sensors/stable-id.js +0 -17
- package/dist/server/src/camera/sensors/stable-id.js.map +0 -1
- package/dist/server/src/camera/sensors/types.js.map +0 -1
- package/dist/server/src/camera/sensors/virtual.js.map +0 -1
- package/dist/server/src/plugins/runtime/python/store_migrate.py +0 -59
- package/dist/server/src/plugins/store/migrate.d.ts +0 -1
- package/dist/server/src/plugins/store/migrate.js +0 -22
- package/dist/server/src/plugins/store/migrate.js.map +0 -1
|
@@ -14,23 +14,29 @@ from .spec import ModelSpec
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class FaceProperty(StrEnum):
|
|
17
|
-
"""Property names of a face
|
|
17
|
+
"""Property names of a face sensor."""
|
|
18
18
|
|
|
19
|
-
Detected = "detected"
|
|
20
|
-
|
|
19
|
+
Detected = "detected"
|
|
20
|
+
"""Whether any face is currently detected."""
|
|
21
|
+
Detections = "detections"
|
|
22
|
+
"""List of detected faces with optional identity, embedding, and thumbnail."""
|
|
21
23
|
|
|
22
24
|
|
|
23
25
|
class FaceDetection(Detection):
|
|
24
26
|
"""A face detection result, extending Detection with face-specific fields."""
|
|
25
27
|
|
|
26
|
-
attribute: Literal["face"] # type: ignore[misc]
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
attribute: Literal["face"] # type: ignore[misc]
|
|
29
|
+
"""Sub-detection attribute, fixed to "face"."""
|
|
30
|
+
identity: NotRequired[str]
|
|
31
|
+
"""Recognized identity name, if matched against known faces."""
|
|
32
|
+
embedding: NotRequired[list[float]]
|
|
33
|
+
"""Face embedding vector for recognition/comparison."""
|
|
34
|
+
thumbnail: NotRequired[bytes]
|
|
35
|
+
"""JPEG thumbnail crop of the detected face."""
|
|
30
36
|
|
|
31
37
|
|
|
32
38
|
class FaceSensorProperties(TypedDict):
|
|
33
|
-
"""Property
|
|
39
|
+
"""Property values of a face sensor."""
|
|
34
40
|
|
|
35
41
|
detected: bool
|
|
36
42
|
detections: list[FaceDetection]
|
|
@@ -39,8 +45,10 @@ class FaceSensorProperties(TypedDict):
|
|
|
39
45
|
class FacePropertyChangeData(TypedDict):
|
|
40
46
|
"""Property change payload emitted on FaceSensorLike.onPropertyChanged."""
|
|
41
47
|
|
|
42
|
-
property: str
|
|
48
|
+
property: str
|
|
49
|
+
"""Name of the changed property, a FaceProperty value."""
|
|
43
50
|
value: bool | list[FaceDetection]
|
|
51
|
+
"""New value of the property."""
|
|
44
52
|
|
|
45
53
|
|
|
46
54
|
TStorage = TypeVar("TStorage", bound=Mapping[str, Any], default=dict[str, Any])
|
|
@@ -54,6 +62,9 @@ class FaceSensorLike(SensorLike, Protocol):
|
|
|
54
62
|
def type(self) -> SensorType:
|
|
55
63
|
return SensorType.Face
|
|
56
64
|
|
|
65
|
+
@property
|
|
66
|
+
def onPropertyChanged(self) -> Observable[FacePropertyChangeData]: ...
|
|
67
|
+
|
|
57
68
|
@overload
|
|
58
69
|
def getValue(self, property: Literal[FaceProperty.Detected]) -> bool | None: ...
|
|
59
70
|
@overload
|
|
@@ -61,21 +72,18 @@ class FaceSensorLike(SensorLike, Protocol):
|
|
|
61
72
|
@overload
|
|
62
73
|
def getValue(self, property: str) -> object | None: ...
|
|
63
74
|
|
|
64
|
-
@property
|
|
65
|
-
def onPropertyChanged(self) -> Observable[FacePropertyChangeData]: ...
|
|
66
|
-
|
|
67
75
|
|
|
68
76
|
class FaceSensor(Sensor[FaceSensorProperties, TStorage, str], Generic[TStorage]):
|
|
69
77
|
"""Face sensor that reports detected faces and optional identity matches.
|
|
70
78
|
|
|
71
|
-
Plugin authors call
|
|
72
|
-
|
|
79
|
+
Plugin authors call ``reportDetections(list)`` to push detected faces.
|
|
80
|
+
``detected`` is auto-derived from the detection list.
|
|
73
81
|
"""
|
|
74
82
|
|
|
75
83
|
_requires_frames = False
|
|
76
84
|
|
|
77
|
-
def __init__(self, name: str = "Face Sensor") -> None:
|
|
78
|
-
super().__init__(name)
|
|
85
|
+
def __init__(self, name: str = "Face Sensor", *, native_id: str | None = None) -> None:
|
|
86
|
+
super().__init__(name, native_id=native_id)
|
|
79
87
|
self._write_state(
|
|
80
88
|
{
|
|
81
89
|
FaceProperty.Detected.value: False,
|
|
@@ -93,23 +101,21 @@ class FaceSensor(Sensor[FaceSensorProperties, TStorage, str], Generic[TStorage])
|
|
|
93
101
|
|
|
94
102
|
@property
|
|
95
103
|
def detected(self) -> bool:
|
|
96
|
-
"""Whether any face is currently detected."""
|
|
97
104
|
return bool(self.props.detected)
|
|
98
105
|
|
|
99
106
|
@property
|
|
100
107
|
def detections(self) -> list[FaceDetection]:
|
|
101
|
-
"""Current detection list."""
|
|
102
108
|
return self.props.detections or []
|
|
103
109
|
|
|
104
110
|
def reportDetections(self, detected: bool, detections: list[FaceDetection] | None = None) -> None:
|
|
105
111
|
"""Report detected faces.
|
|
106
112
|
|
|
107
|
-
- ``reportDetections(True)
|
|
113
|
+
- ``reportDetections(True)``: face detected without specifics (e.g. a
|
|
108
114
|
bare face-event from a discovery provider). The SDK synthesizes a
|
|
109
115
|
single full-frame face detection without identity.
|
|
110
|
-
- ``reportDetections(True, [...])
|
|
116
|
+
- ``reportDetections(True, [...])``: explicit face detections with
|
|
111
117
|
identity, embedding, and/or thumbnail.
|
|
112
|
-
- ``reportDetections(False)
|
|
118
|
+
- ``reportDetections(False)``: clear.
|
|
113
119
|
|
|
114
120
|
Args:
|
|
115
121
|
detected: Whether any face is currently detected.
|
|
@@ -151,30 +157,30 @@ class FaceSensor(Sensor[FaceSensorProperties, TStorage, str], Generic[TStorage])
|
|
|
151
157
|
|
|
152
158
|
async def updateValue(self, property: str, value: Any) -> None:
|
|
153
159
|
"""Read-only sensor: external writes are ignored."""
|
|
154
|
-
# No-op — face detection state is reported by the plugin, not set externally.
|
|
155
160
|
|
|
156
161
|
|
|
157
162
|
class FaceResult(TypedDict):
|
|
158
163
|
"""Return type for FaceDetectorSensor.detectFaces()."""
|
|
159
164
|
|
|
160
|
-
detected: bool
|
|
161
|
-
|
|
165
|
+
detected: bool
|
|
166
|
+
"""Whether any face is detected in this frame."""
|
|
167
|
+
detections: list[FaceDetection]
|
|
168
|
+
"""Detections emitted for this frame."""
|
|
162
169
|
|
|
163
170
|
|
|
164
171
|
class FaceDetectorSensor(FaceSensor[TStorage], Generic[TStorage]):
|
|
165
172
|
"""Face detector that receives video frames from the backend pipeline.
|
|
166
173
|
|
|
167
174
|
Extend this class and implement ``detectFaces`` for face detection and
|
|
168
|
-
recognition.
|
|
175
|
+
recognition. The backend scales frames to match ``modelSpec.input``
|
|
176
|
+
dimensions before each call.
|
|
169
177
|
"""
|
|
170
178
|
|
|
171
179
|
_requires_frames = True
|
|
172
180
|
|
|
173
181
|
@property
|
|
174
182
|
@abstractmethod
|
|
175
|
-
def modelSpec(self) -> ModelSpec:
|
|
176
|
-
"""Declares the expected input dimensions and trigger labels. The backend scales frames to match."""
|
|
177
|
-
...
|
|
183
|
+
def modelSpec(self) -> ModelSpec: ...
|
|
178
184
|
|
|
179
185
|
@abstractmethod
|
|
180
186
|
async def detectFaces(self, frames: list[VideoFrameData]) -> list[FaceResult]:
|
|
@@ -11,17 +11,22 @@ from .base import Sensor, SensorCategory, SensorLike, SensorType
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class GarageState(IntEnum):
|
|
14
|
-
"""Garage door states
|
|
14
|
+
"""Garage door states."""
|
|
15
15
|
|
|
16
16
|
Open = 0
|
|
17
|
+
"""Door is fully open."""
|
|
17
18
|
Closed = 1
|
|
19
|
+
"""Door is fully closed."""
|
|
18
20
|
Opening = 2
|
|
21
|
+
"""Door is moving towards open."""
|
|
19
22
|
Closing = 3
|
|
23
|
+
"""Door is moving towards closed."""
|
|
20
24
|
Stopped = 4
|
|
25
|
+
"""Door stopped part-way."""
|
|
21
26
|
|
|
22
27
|
|
|
23
28
|
class GarageProperty(StrEnum):
|
|
24
|
-
"""
|
|
29
|
+
"""Property names of a garage control."""
|
|
25
30
|
|
|
26
31
|
CurrentState = "currentState"
|
|
27
32
|
"""The actual current state of the garage door."""
|
|
@@ -32,7 +37,7 @@ class GarageProperty(StrEnum):
|
|
|
32
37
|
|
|
33
38
|
|
|
34
39
|
class GarageControlProperties(TypedDict):
|
|
35
|
-
"""Property
|
|
40
|
+
"""Property values of a garage control."""
|
|
36
41
|
|
|
37
42
|
currentState: int
|
|
38
43
|
targetState: int
|
|
@@ -40,10 +45,12 @@ class GarageControlProperties(TypedDict):
|
|
|
40
45
|
|
|
41
46
|
|
|
42
47
|
class GaragePropertyChangeData(TypedDict):
|
|
43
|
-
"""
|
|
48
|
+
"""Property change payload emitted on GarageControlLike.onPropertyChanged."""
|
|
44
49
|
|
|
45
|
-
property: str
|
|
50
|
+
property: str
|
|
51
|
+
"""Name of the changed property, a GarageProperty value."""
|
|
46
52
|
value: GarageState | bool
|
|
53
|
+
"""New value of the property."""
|
|
47
54
|
|
|
48
55
|
|
|
49
56
|
TStorage = TypeVar("TStorage", bound=Mapping[str, Any], default=dict[str, Any])
|
|
@@ -57,6 +64,9 @@ class GarageControlLike(SensorLike, Protocol):
|
|
|
57
64
|
def type(self) -> SensorType:
|
|
58
65
|
return SensorType.Garage
|
|
59
66
|
|
|
67
|
+
@property
|
|
68
|
+
def onPropertyChanged(self) -> Observable[GaragePropertyChangeData]: ...
|
|
69
|
+
|
|
60
70
|
@overload
|
|
61
71
|
def getValue(self, property: Literal[GarageProperty.CurrentState]) -> GarageState | None: ...
|
|
62
72
|
@overload
|
|
@@ -66,25 +76,22 @@ class GarageControlLike(SensorLike, Protocol):
|
|
|
66
76
|
@overload
|
|
67
77
|
def getValue(self, property: str) -> object | None: ...
|
|
68
78
|
|
|
69
|
-
@property
|
|
70
|
-
def onPropertyChanged(self) -> Observable[GaragePropertyChangeData]: ...
|
|
71
|
-
|
|
72
79
|
|
|
73
80
|
class GarageControl(Sensor[GarageControlProperties, TStorage, str], Generic[TStorage]):
|
|
74
81
|
"""Garage door control.
|
|
75
82
|
|
|
76
|
-
Override
|
|
77
|
-
|
|
78
|
-
implementation updates both
|
|
83
|
+
Override ``setTargetState()`` to drive hardware and call
|
|
84
|
+
``await super().setTargetState(value)`` once the hardware confirms: the base
|
|
85
|
+
implementation updates both ``targetState`` and ``currentState``.
|
|
79
86
|
|
|
80
87
|
For long-running transitions (Opening/Closing intermediate states) override
|
|
81
|
-
|
|
88
|
+
``setTargetState`` and write ``currentState`` separately as the door moves.
|
|
82
89
|
"""
|
|
83
90
|
|
|
84
91
|
_requires_frames = False
|
|
85
92
|
|
|
86
|
-
def __init__(self, name: str = "Garage") -> None:
|
|
87
|
-
super().__init__(name)
|
|
93
|
+
def __init__(self, name: str = "Garage", *, native_id: str | None = None) -> None:
|
|
94
|
+
super().__init__(name, native_id=native_id)
|
|
88
95
|
self._write_state(
|
|
89
96
|
{
|
|
90
97
|
GarageProperty.CurrentState.value: int(GarageState.Closed),
|
|
@@ -117,8 +124,8 @@ class GarageControl(Sensor[GarageControlProperties, TStorage, str], Generic[TSto
|
|
|
117
124
|
|
|
118
125
|
async def setTargetState(self, value: GarageState) -> None:
|
|
119
126
|
"""Set the target state. Override to drive hardware and call
|
|
120
|
-
|
|
121
|
-
syncs both
|
|
127
|
+
``await super().setTargetState(value)`` after success: the base implementation
|
|
128
|
+
syncs both ``targetState`` and ``currentState`` to the new value.
|
|
122
129
|
|
|
123
130
|
Args:
|
|
124
131
|
value: Desired target state from the ``GarageState`` enum.
|
|
@@ -139,7 +146,7 @@ class GarageControl(Sensor[GarageControlProperties, TStorage, str], Generic[TSto
|
|
|
139
146
|
|
|
140
147
|
def setCurrentState(self, value: GarageState) -> None:
|
|
141
148
|
"""Publish the actual door state. Use this to drive long-running
|
|
142
|
-
transitions (
|
|
149
|
+
transitions (Open, then Closing, then Closed) independently of the
|
|
143
150
|
user-requested target state. Read-only from cross-process consumers
|
|
144
151
|
(``updateValue`` ignores it).
|
|
145
152
|
|
|
@@ -157,7 +164,7 @@ class GarageControl(Sensor[GarageControlProperties, TStorage, str], Generic[TSto
|
|
|
157
164
|
|
|
158
165
|
def setObstructionDetected(self, value: bool) -> None:
|
|
159
166
|
"""Publish the obstruction-detected state. Read-only from the consumer
|
|
160
|
-
side (``updateValue`` ignores it)
|
|
167
|
+
side (``updateValue`` ignores it), plugin code calls this when its
|
|
161
168
|
hardware reports an obstruction sensor change.
|
|
162
169
|
|
|
163
170
|
Args:
|
|
@@ -171,7 +178,9 @@ class GarageControl(Sensor[GarageControlProperties, TStorage, str], Generic[TSto
|
|
|
171
178
|
self._write_state({GarageProperty.ObstructionDetected.value: value})
|
|
172
179
|
|
|
173
180
|
async def updateValue(self, property: str, value: Any) -> None:
|
|
174
|
-
"""Routes generic property writes to semantic
|
|
181
|
+
"""Routes generic property writes to the semantic setters.
|
|
182
|
+
|
|
183
|
+
Only targetState is externally writable.
|
|
184
|
+
"""
|
|
175
185
|
if property == GarageProperty.TargetState.value:
|
|
176
186
|
await self.setTargetState(GarageState(value))
|
|
177
|
-
# Unknown / non-writable property (incl. currentState, obstructionDetected) — ignored.
|
|
@@ -11,23 +11,25 @@ from .base import Sensor, SensorCategory, SensorLike, SensorType
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class HumidityProperty(StrEnum):
|
|
14
|
-
"""
|
|
14
|
+
"""Property names of a humidity sensor."""
|
|
15
15
|
|
|
16
16
|
Current = "current"
|
|
17
17
|
"""Current relative humidity (0-100%)."""
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class HumidityInfoProperties(TypedDict):
|
|
21
|
-
"""Property
|
|
21
|
+
"""Property values of a humidity sensor."""
|
|
22
22
|
|
|
23
23
|
current: float
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class HumidityPropertyChangeData(TypedDict):
|
|
27
|
-
"""
|
|
27
|
+
"""Property change payload emitted on HumidityInfoLike.onPropertyChanged."""
|
|
28
28
|
|
|
29
|
-
property: str
|
|
29
|
+
property: str
|
|
30
|
+
"""Name of the changed property, a HumidityProperty value."""
|
|
30
31
|
value: float
|
|
32
|
+
"""New value of the property."""
|
|
31
33
|
|
|
32
34
|
|
|
33
35
|
TStorage = TypeVar("TStorage", bound=Mapping[str, Any], default=dict[str, Any])
|
|
@@ -35,28 +37,28 @@ TStorage = TypeVar("TStorage", bound=Mapping[str, Any], default=dict[str, Any])
|
|
|
35
37
|
|
|
36
38
|
@runtime_checkable
|
|
37
39
|
class HumidityInfoLike(SensorLike, Protocol):
|
|
38
|
-
"""Read-only proxy interface for a humidity
|
|
40
|
+
"""Read-only proxy interface for a humidity sensor."""
|
|
39
41
|
|
|
40
42
|
@property
|
|
41
43
|
def type(self) -> SensorType:
|
|
42
44
|
return SensorType.Humidity
|
|
43
45
|
|
|
46
|
+
@property
|
|
47
|
+
def onPropertyChanged(self) -> Observable[HumidityPropertyChangeData]: ...
|
|
48
|
+
|
|
44
49
|
@overload
|
|
45
50
|
def getValue(self, property: Literal[HumidityProperty.Current]) -> float | None: ...
|
|
46
51
|
@overload
|
|
47
52
|
def getValue(self, property: str) -> object | None: ...
|
|
48
53
|
|
|
49
|
-
@property
|
|
50
|
-
def onPropertyChanged(self) -> Observable[HumidityPropertyChangeData]: ...
|
|
51
|
-
|
|
52
54
|
|
|
53
55
|
class HumidityInfo(Sensor[HumidityInfoProperties, TStorage, str], Generic[TStorage]):
|
|
54
56
|
"""Humidity info sensor. Reports current relative humidity in %."""
|
|
55
57
|
|
|
56
58
|
_requires_frames = False
|
|
57
59
|
|
|
58
|
-
def __init__(self, name: str = "Humidity") -> None:
|
|
59
|
-
super().__init__(name)
|
|
60
|
+
def __init__(self, name: str = "Humidity", *, native_id: str | None = None) -> None:
|
|
61
|
+
super().__init__(name, native_id=native_id)
|
|
60
62
|
self._write_state({HumidityProperty.Current.value: 50.0})
|
|
61
63
|
|
|
62
64
|
@property
|
|
@@ -72,9 +74,17 @@ class HumidityInfo(Sensor[HumidityInfoProperties, TStorage, str], Generic[TStora
|
|
|
72
74
|
return float(self.props.current or 0.0)
|
|
73
75
|
|
|
74
76
|
def setCurrent(self, value: float) -> None:
|
|
75
|
-
"""Report a new humidity reading. Clamped to [0, 100] %.
|
|
77
|
+
"""Report a new humidity reading. Clamped to [0, 100] %.
|
|
78
|
+
|
|
79
|
+
Args:
|
|
80
|
+
value: Relative humidity percentage in the range 0-100.
|
|
81
|
+
|
|
82
|
+
Example:
|
|
83
|
+
```python
|
|
84
|
+
humidity.setCurrent(63)
|
|
85
|
+
```
|
|
86
|
+
"""
|
|
76
87
|
self._write_state({HumidityProperty.Current.value: max(0.0, min(100.0, value))})
|
|
77
88
|
|
|
78
89
|
async def updateValue(self, property: str, value: Any) -> None:
|
|
79
90
|
"""Read-only sensor: external writes are ignored."""
|
|
80
|
-
# No-op — humidity is reported by the plugin, not set externally.
|
|
@@ -11,23 +11,25 @@ from .base import Sensor, SensorCategory, SensorLike, SensorType
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class LeakProperty(StrEnum):
|
|
14
|
-
"""
|
|
14
|
+
"""Property names of a leak sensor."""
|
|
15
15
|
|
|
16
16
|
Detected = "detected"
|
|
17
17
|
"""Whether a leak is detected."""
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class LeakSensorProperties(TypedDict):
|
|
21
|
-
"""Property
|
|
21
|
+
"""Property values of a leak sensor."""
|
|
22
22
|
|
|
23
23
|
detected: bool
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class LeakPropertyChangeData(TypedDict):
|
|
27
|
-
"""
|
|
27
|
+
"""Property change payload emitted on LeakSensorLike.onPropertyChanged."""
|
|
28
28
|
|
|
29
|
-
property: str
|
|
29
|
+
property: str
|
|
30
|
+
"""Name of the changed property, a LeakProperty value."""
|
|
30
31
|
value: bool
|
|
32
|
+
"""New value of the property."""
|
|
31
33
|
|
|
32
34
|
|
|
33
35
|
TStorage = TypeVar("TStorage", bound=Mapping[str, Any], default=dict[str, Any])
|
|
@@ -41,22 +43,22 @@ class LeakSensorLike(SensorLike, Protocol):
|
|
|
41
43
|
def type(self) -> SensorType:
|
|
42
44
|
return SensorType.Leak
|
|
43
45
|
|
|
46
|
+
@property
|
|
47
|
+
def onPropertyChanged(self) -> Observable[LeakPropertyChangeData]: ...
|
|
48
|
+
|
|
44
49
|
@overload
|
|
45
50
|
def getValue(self, property: Literal[LeakProperty.Detected]) -> bool | None: ...
|
|
46
51
|
@overload
|
|
47
52
|
def getValue(self, property: str) -> object | None: ...
|
|
48
53
|
|
|
49
|
-
@property
|
|
50
|
-
def onPropertyChanged(self) -> Observable[LeakPropertyChangeData]: ...
|
|
51
|
-
|
|
52
54
|
|
|
53
55
|
class LeakSensor(Sensor[LeakSensorProperties, TStorage, str], Generic[TStorage]):
|
|
54
|
-
"""
|
|
56
|
+
"""Water leak detector sensor."""
|
|
55
57
|
|
|
56
58
|
_requires_frames = False
|
|
57
59
|
|
|
58
|
-
def __init__(self, name: str = "Leak Sensor") -> None:
|
|
59
|
-
super().__init__(name)
|
|
60
|
+
def __init__(self, name: str = "Leak Sensor", *, native_id: str | None = None) -> None:
|
|
61
|
+
super().__init__(name, native_id=native_id)
|
|
60
62
|
self._write_state({LeakProperty.Detected.value: False})
|
|
61
63
|
|
|
62
64
|
@property
|
|
@@ -86,4 +88,3 @@ class LeakSensor(Sensor[LeakSensorProperties, TStorage, str], Generic[TStorage])
|
|
|
86
88
|
|
|
87
89
|
async def updateValue(self, property: str, value: Any) -> None:
|
|
88
90
|
"""Read-only sensor: external writes are ignored."""
|
|
89
|
-
# No-op — leak state is reported by the plugin, not set externally.
|
|
@@ -14,24 +14,27 @@ from .spec import ModelSpec
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class LicensePlateProperty(StrEnum):
|
|
17
|
-
"""Property names of a license plate
|
|
17
|
+
"""Property names of a license plate sensor."""
|
|
18
18
|
|
|
19
|
-
Detected = "detected"
|
|
20
|
-
|
|
19
|
+
Detected = "detected"
|
|
20
|
+
"""Whether any license plate is currently detected."""
|
|
21
|
+
Detections = "detections"
|
|
22
|
+
"""List of detected plates with OCR text."""
|
|
21
23
|
|
|
22
24
|
|
|
23
25
|
class LicensePlateDetection(Detection):
|
|
24
26
|
"""A license plate detection result, extending Detection with OCR fields."""
|
|
25
27
|
|
|
26
|
-
attribute: Literal["license_plate"] # type: ignore[misc]
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
]
|
|
28
|
+
attribute: Literal["license_plate"] # type: ignore[misc]
|
|
29
|
+
"""Sub-detection attribute, fixed to ``"license_plate"``."""
|
|
30
|
+
plateText: str
|
|
31
|
+
"""Recognized plate text (e.g. ``"ABC 1234"``)."""
|
|
32
|
+
ocrConfidence: NotRequired[float]
|
|
33
|
+
"""Average text recognition confidence (0-1), separate from the box confidence."""
|
|
31
34
|
|
|
32
35
|
|
|
33
36
|
class LicensePlateSensorProperties(TypedDict):
|
|
34
|
-
"""Property
|
|
37
|
+
"""Property values of a license plate sensor."""
|
|
35
38
|
|
|
36
39
|
detected: bool
|
|
37
40
|
detections: list[LicensePlateDetection]
|
|
@@ -40,8 +43,10 @@ class LicensePlateSensorProperties(TypedDict):
|
|
|
40
43
|
class LicensePlatePropertyChangeData(TypedDict):
|
|
41
44
|
"""Property change payload emitted on LicensePlateSensorLike.onPropertyChanged."""
|
|
42
45
|
|
|
43
|
-
property: str
|
|
46
|
+
property: str
|
|
47
|
+
"""Name of the changed property, a LicensePlateProperty value."""
|
|
44
48
|
value: bool | list[LicensePlateDetection]
|
|
49
|
+
"""New value of the property."""
|
|
45
50
|
|
|
46
51
|
|
|
47
52
|
TStorage = TypeVar("TStorage", bound=Mapping[str, Any], default=dict[str, Any])
|
|
@@ -55,6 +60,9 @@ class LicensePlateSensorLike(SensorLike, Protocol):
|
|
|
55
60
|
def type(self) -> SensorType:
|
|
56
61
|
return SensorType.LicensePlate
|
|
57
62
|
|
|
63
|
+
@property
|
|
64
|
+
def onPropertyChanged(self) -> Observable[LicensePlatePropertyChangeData]: ...
|
|
65
|
+
|
|
58
66
|
@overload
|
|
59
67
|
def getValue(self, property: Literal[LicensePlateProperty.Detected]) -> bool | None: ...
|
|
60
68
|
@overload
|
|
@@ -64,9 +72,6 @@ class LicensePlateSensorLike(SensorLike, Protocol):
|
|
|
64
72
|
@overload
|
|
65
73
|
def getValue(self, property: str) -> object | None: ...
|
|
66
74
|
|
|
67
|
-
@property
|
|
68
|
-
def onPropertyChanged(self) -> Observable[LicensePlatePropertyChangeData]: ...
|
|
69
|
-
|
|
70
75
|
|
|
71
76
|
class LicensePlateSensor(Sensor[LicensePlateSensorProperties, TStorage, str], Generic[TStorage]):
|
|
72
77
|
"""License plate sensor that reports detected plates with OCR text.
|
|
@@ -77,8 +82,8 @@ class LicensePlateSensor(Sensor[LicensePlateSensorProperties, TStorage, str], Ge
|
|
|
77
82
|
|
|
78
83
|
_requires_frames = False
|
|
79
84
|
|
|
80
|
-
def __init__(self, name: str = "License Plate Sensor") -> None:
|
|
81
|
-
super().__init__(name)
|
|
85
|
+
def __init__(self, name: str = "License Plate Sensor", *, native_id: str | None = None) -> None:
|
|
86
|
+
super().__init__(name, native_id=native_id)
|
|
82
87
|
self._write_state(
|
|
83
88
|
{
|
|
84
89
|
LicensePlateProperty.Detected.value: False,
|
|
@@ -96,12 +101,10 @@ class LicensePlateSensor(Sensor[LicensePlateSensorProperties, TStorage, str], Ge
|
|
|
96
101
|
|
|
97
102
|
@property
|
|
98
103
|
def detected(self) -> bool:
|
|
99
|
-
"""Whether any license plate is currently detected."""
|
|
100
104
|
return bool(self.props.detected)
|
|
101
105
|
|
|
102
106
|
@property
|
|
103
107
|
def detections(self) -> list[LicensePlateDetection]:
|
|
104
|
-
"""Current detection list."""
|
|
105
108
|
return self.props.detections or []
|
|
106
109
|
|
|
107
110
|
def reportDetections(
|
|
@@ -111,10 +114,10 @@ class LicensePlateSensor(Sensor[LicensePlateSensorProperties, TStorage, str], Ge
|
|
|
111
114
|
) -> None:
|
|
112
115
|
"""Report detected license plates.
|
|
113
116
|
|
|
114
|
-
- ``reportDetections(True)
|
|
117
|
+
- ``reportDetections(True)``: plate detected without specifics. The SDK
|
|
115
118
|
synthesizes a single full-frame detection with empty plateText.
|
|
116
|
-
- ``reportDetections(True, [...])
|
|
117
|
-
- ``reportDetections(False)
|
|
119
|
+
- ``reportDetections(True, [...])``: explicit plate detections with OCR text.
|
|
120
|
+
- ``reportDetections(False)``: clear.
|
|
118
121
|
|
|
119
122
|
Args:
|
|
120
123
|
detected: Whether any license plate is currently detected.
|
|
@@ -155,36 +158,37 @@ class LicensePlateSensor(Sensor[LicensePlateSensorProperties, TStorage, str], Ge
|
|
|
155
158
|
self.reportDetections(False)
|
|
156
159
|
|
|
157
160
|
async def updateValue(self, property: str, value: Any) -> None:
|
|
158
|
-
"""Read-only sensor: external writes are ignored.
|
|
159
|
-
# No-op — license plate state is reported by the plugin, not set externally.
|
|
161
|
+
"""Read-only sensor: external writes are ignored."""
|
|
160
162
|
|
|
161
163
|
|
|
162
164
|
class LicensePlateResult(TypedDict):
|
|
163
165
|
"""Return type for LicensePlateDetectorSensor.detectLicensePlates()."""
|
|
164
166
|
|
|
165
|
-
detected: bool
|
|
166
|
-
|
|
167
|
+
detected: bool
|
|
168
|
+
"""Whether any license plate is detected in this frame."""
|
|
169
|
+
detections: list[LicensePlateDetection]
|
|
170
|
+
"""Detections emitted for this frame."""
|
|
167
171
|
|
|
168
172
|
|
|
169
173
|
class LicensePlateDetectorSensor(LicensePlateSensor[TStorage], Generic[TStorage]):
|
|
170
174
|
"""License plate detector that receives video frames from the backend pipeline.
|
|
171
175
|
|
|
172
176
|
Extend this class and implement ``detectLicensePlates`` for plate detection
|
|
173
|
-
and OCR.
|
|
177
|
+
and OCR. The backend scales frames to match ``modelSpec.input`` dimensions
|
|
178
|
+
before each call.
|
|
174
179
|
"""
|
|
175
180
|
|
|
176
181
|
_requires_frames = True
|
|
177
182
|
|
|
178
183
|
@property
|
|
179
184
|
@abstractmethod
|
|
180
|
-
def modelSpec(self) -> ModelSpec:
|
|
181
|
-
"""Declares the expected input dimensions and trigger labels. The backend scales frames to match."""
|
|
182
|
-
...
|
|
185
|
+
def modelSpec(self) -> ModelSpec: ...
|
|
183
186
|
|
|
184
187
|
@abstractmethod
|
|
185
188
|
async def detectLicensePlates(self, frames: list[VideoFrameData]) -> list[LicensePlateResult]:
|
|
186
189
|
"""Detect license plates in batch. Each frame is pre-scaled to ``modelSpec['input']``:
|
|
187
|
-
normally a vehicle region cropped by the upstream object detector, but the whole
|
|
188
|
-
when no decoded frame is available. Must return exactly one
|
|
189
|
-
|
|
190
|
+
normally a vehicle region cropped by the upstream object detector, but the whole
|
|
191
|
+
scene when no decoded frame is available. Must return exactly one result per input
|
|
192
|
+
frame, in the same order.
|
|
193
|
+
"""
|
|
190
194
|
...
|