@camera.ui/server 2.0.22 → 2.0.23
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-junY0N5P.js +1 -0
- package/dist/interface/assets/About-Dwc0TTLa.js +1 -0
- package/dist/interface/assets/Adminpanel-wZGtsPD-.js +1 -0
- package/dist/interface/assets/Automation-Dj6xmGae.js +3 -0
- package/dist/interface/assets/AutomationImport-Ccnxyslc.js +2 -0
- package/dist/interface/assets/AutomationStore-DmbxA0ml.js +2 -0
- package/dist/interface/assets/AutomationStoreDetail-DcbvD8g5.js +2 -0
- package/dist/interface/assets/Automations-C9JJO6dy.js +2 -0
- package/dist/interface/assets/Camera-D_j0J3kB.js +2 -0
- package/dist/interface/assets/CameraConsole--hGg9Ye6.js +7 -0
- package/dist/interface/assets/Cameras-B2Tizr4Q.js +652 -0
- package/dist/interface/assets/Camview-Bh2UCnGC.js +1 -0
- package/dist/interface/assets/{Camview-CaEbdeQZ.css → Camview-Cj10uxGy.css} +1 -1
- package/dist/interface/assets/Config-Dn_s2M7r.js +2 -0
- package/dist/interface/assets/{ConfigActionCameraControl-DFdb4xzq.js → ConfigActionCameraControl-DQEYHVN5.js} +1 -1
- package/dist/interface/assets/ConfigActionDelay-C0mbjCCj.js +1 -0
- package/dist/interface/assets/ConfigActionHttp-Bf58WHcw.js +1 -0
- package/dist/interface/assets/ConfigActionImageInput-CDXVFrOz.js +1 -0
- package/dist/interface/assets/ConfigActionMqtt-lH7MQqWr.js +1 -0
- package/dist/interface/assets/ConfigActionNotification-CAkr6NJX.js +1 -0
- package/dist/interface/assets/ConfigActionNotificationControl-CiL-4Ytw.js +1 -0
- package/dist/interface/assets/ConfigActionOutput-ILAxBT-r.js +1 -0
- package/dist/interface/assets/ConfigActionPlugin-B2d4mZiK.js +1 -0
- package/dist/interface/assets/ConfigActionSensor-BxMdsmRa.js +1 -0
- package/dist/interface/assets/ConfigActionSnapshot-CXVQBSzv.js +1 -0
- package/dist/interface/assets/ConfigActionVariable-CABnlnMv.js +1 -0
- package/dist/interface/assets/ConfigConditionIfElse-Cxu7TSdJ.js +1 -0
- package/dist/interface/assets/ConfigConditionSensorState-rB7I04Gb.js +1 -0
- package/dist/interface/assets/ConfigConditionSwitch-CU0hLo1h.js +1 -0
- package/dist/interface/assets/ConfigConditionTime-DfeEvxIU.js +1 -0
- package/dist/interface/assets/ConfigSensorValueInput-wXiyU3Sc.js +1 -0
- package/dist/interface/assets/{ConfigTriggerDetection-Cjes6g7x.js → ConfigTriggerDetection-DFJpuWrs.js} +1 -1
- package/dist/interface/assets/ConfigTriggerGeofence-CZwesOD8.js +1 -0
- package/dist/interface/assets/ConfigTriggerManual-aibwYUtf.js +1 -0
- package/dist/interface/assets/ConfigTriggerMqtt-CUNgifGb.js +1 -0
- package/dist/interface/assets/ConfigTriggerSchedule-8Y_OBcB1.js +1 -0
- package/dist/interface/assets/ConfigTriggerSensor-Bu-YtGnX.js +1 -0
- package/dist/interface/assets/{ConfigTriggerSystem-NaaBopYq.js → ConfigTriggerSystem-CXNvmC4S.js} +1 -1
- package/dist/interface/assets/ConfigTriggerWebhook-CkZ-_ABi.js +1 -0
- package/dist/interface/assets/Console-CG8eRDA4.js +1 -0
- package/dist/interface/assets/CuiAutomationRunsDialog-Ux0g-E3w.js +1 -0
- package/dist/interface/assets/CuiBottomSheet-C-ZN_uXE.js +1 -0
- package/dist/interface/assets/CuiBottomSheet-RUyuBxJZ.js +1 -0
- package/dist/interface/assets/CuiCameraPipCard-B-B6Ppsd.js +1 -0
- package/dist/interface/assets/CuiCameraRecordings-DqVdR9uS.js +1 -0
- package/dist/interface/assets/CuiCameraShares-DstoVjf9.js +1 -0
- package/dist/interface/assets/CuiCameraTable-BHaCRB65.js +2 -0
- package/dist/interface/assets/CuiDataTable-CTT9IFeR.js +1 -0
- package/dist/interface/assets/CuiLightControl-B_JIzm9t.js +1 -0
- package/dist/interface/assets/CuiLightControl-DFrZm_sv.css +1 -0
- package/dist/interface/assets/CuiList-CDed3qXV.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-7aXQznrX.js +2 -0
- package/dist/interface/assets/{CuiPluginCategoryChip-D9Vi1SEP.js → CuiPluginCategoryChip-C2Y8x73q.js} +1 -1
- package/dist/interface/assets/CuiPluginOAuthButton-CCzRlZP6.js +2 -0
- package/dist/interface/assets/{CuiPluginTrustBadge-D0rUX2i6.js → CuiPluginTrustBadge-C8qBdLCg.js} +1 -1
- package/dist/interface/assets/CuiQRCode-D52Fcu61.js +1 -0
- package/dist/interface/assets/CuiRecordingsGrid-CfuihmlY.js +1 -0
- package/dist/interface/assets/CuiSchema-DTIuxROi.js +1 -0
- package/dist/interface/assets/CuiTopNavbarItem-CoTQmfY7.js +1 -0
- package/dist/interface/assets/Faces-EtBPS1Ve.js +1 -0
- package/dist/interface/assets/FirstSteps-CC0BPH40.js +1 -0
- package/dist/interface/assets/Instances-dSYERqIc.js +1 -0
- package/dist/interface/assets/Logs-B8d6dEt7.js +6 -0
- package/dist/interface/assets/Menu-CejIVz_7.js +1 -0
- package/dist/interface/assets/OAuthDeviceFlow-YhwV_FSL.js +1 -0
- package/dist/interface/assets/Plugin-Brb6wfq-.js +1 -0
- package/dist/interface/assets/PluginConsole-CfyZQVq5.js +7 -0
- package/dist/interface/assets/PluginDetail-DVRnnauk.js +2 -0
- package/dist/interface/assets/PluginSchema-i6UJfMnh.js +1 -0
- package/dist/interface/assets/PluginSearch-C1YL9q00.js +1 -0
- package/dist/interface/assets/PluginSearch-PDx47aUx.js +2 -0
- package/dist/interface/assets/Plugins-CukJohcb.js +1 -0
- package/dist/interface/assets/Recordings-m6jxYvRI.js +1 -0
- package/dist/interface/assets/SensorEdit-BJAijbmc.js +1 -0
- package/dist/interface/assets/SensorHistory-DW00ZuHR.js +1 -0
- package/dist/interface/assets/Sensors-BA9P_Ray.css +1 -0
- package/dist/interface/assets/Sensors-Lfafn19i.js +2 -0
- package/dist/interface/assets/Settings-DHT8KXi2.js +1 -0
- package/dist/interface/assets/SettingsAccount-DOd4JeGd.js +1 -0
- package/dist/interface/assets/{SettingsAccount-CyNJQSuV.css → SettingsAccount-si-6gWl5.css} +1 -1
- package/dist/interface/assets/SettingsAccount-vrwV9rtP.js +1 -0
- package/dist/interface/assets/SettingsAppearance-11UFhRDY.js +1 -0
- package/dist/interface/assets/SettingsAppearance-BaDwC_h_.js +1 -0
- package/dist/interface/assets/SettingsBackup-CBBZV_nU.js +1 -0
- package/dist/interface/assets/SettingsList-Dx9DHGq9.js +1 -0
- package/dist/interface/assets/SettingsMqtt-BglQ_GeN.js +1 -0
- package/dist/interface/assets/SettingsNotifications-96czeGDD.js +2 -0
- package/dist/interface/assets/SettingsPermissions-CU4OVllA.js +1 -0
- package/dist/interface/assets/SettingsRecordings-BrnU9hrb.js +1 -0
- package/dist/interface/assets/SettingsRemote-CwJw_9HX.js +1 -0
- package/dist/interface/assets/SettingsSystem-B3nne5fS.js +2 -0
- package/dist/interface/assets/SettingsUsers-CoYyAxxn.js +1 -0
- package/dist/interface/assets/Terminal-DMAHgufw.js +4 -0
- package/dist/interface/assets/VariableInput-BzWLKBgd.js +1 -0
- package/dist/interface/assets/VariableSuggestions-BdxcP_dn.js +1 -0
- package/dist/interface/assets/VersionsHandler-Dvy5Lv-E.js +7 -0
- package/dist/interface/assets/VirtualSensorCreate-BXz0lWNm.js +1 -0
- package/dist/interface/assets/Workers-DqeKkdpa.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-DmxTF6VE.js} +1 -1
- package/dist/interface/assets/api-milc5VEE.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-DwSrX8QL.js} +1 -1
- package/dist/interface/assets/automationBlueprint-D0F9AHk9.js +1 -0
- package/dist/interface/assets/automations-yVPQAmFo.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-JAiaenSf.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-QtPEpiS4.js +1 -0
- package/dist/interface/assets/{config-C2hgXHyj.js → config-BE0DnCXx.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-BQp77LdP.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-CqhwDjRG.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-D_shY0Ks.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-BuSNpaOJ.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-7pWXkYgo.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-DKWwojYm.js +1 -0
- package/dist/interface/assets/{search-M4Rt52Co.js → search-miJXZGQz.js} +1 -1
- package/dist/interface/assets/sensors-CLQG1mQt.js +1 -0
- package/dist/interface/assets/{server-CVSOthzT.js → server-Bv5NVJ0G.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-DsxRUmCC.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-Bw8H-UB4.js → types-BazOcNe_.js} +1 -1
- package/dist/interface/assets/types-CoXm85So.js +1 -0
- package/dist/interface/assets/upload-CNYrnwuV.js +1 -0
- package/dist/interface/assets/{useAppVersion-CDTrwxkp.js → useAppVersion-oPpW7jcN.js} +1 -1
- package/dist/interface/assets/useBackupRestore-b0Niqql7.js +1 -0
- package/dist/interface/assets/useCameraOptions-uf9Kog6z.js +1 -0
- package/dist/interface/assets/{useCardSelection-CgZ7QTaA.js → useCardSelection-B3B2qPHO.js} +1 -1
- package/dist/interface/assets/{useElectron-CgLWOhcS.js → useElectron-Dg8tFzam.js} +1 -1
- package/dist/interface/assets/useLogsSocket-9jJ-oJIm.js +5 -0
- package/dist/interface/assets/{usePermissions-tzi2t12h.js → usePermissions-xL0VlbyD.js} +1 -1
- package/dist/interface/assets/useServerRestart-3AZOTz7i.js +1 -0
- package/dist/interface/assets/{useStreamStatus-BV_L7pxB.js → useStreamStatus-Dg-Djura.js} +1 -1
- package/dist/interface/assets/useUserOptions-BQnM3gdi.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-BqkrW4Bb.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-BQegq2Q6.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-DYzLjOFZ.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 +19 -2
- 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 +2 -2
- package/dist/server/src/plugins/runtime/node/storage.js.map +1 -1
- package/dist/server/src/plugins/runtime/node/storageController.d.ts +5 -5
- package/dist/server/src/plugins/runtime/node/storageController.js +20 -28
- 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 +18 -0
- 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 +1 -3
- package/dist/server/src/plugins/runtime/python/storage_controller.py +19 -50
- 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 +808 -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
|
@@ -11,14 +11,14 @@ from .base import Sensor, SensorCategory, SensorLike, SensorType
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class LightCapability(StrEnum):
|
|
14
|
-
"""Optional capabilities
|
|
14
|
+
"""Optional capabilities of a light control."""
|
|
15
15
|
|
|
16
16
|
Brightness = "brightness"
|
|
17
17
|
"""Light supports brightness adjustment (0-100)."""
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class LightProperty(StrEnum):
|
|
21
|
-
"""
|
|
21
|
+
"""Property names of a light control."""
|
|
22
22
|
|
|
23
23
|
On = "on"
|
|
24
24
|
"""Whether the light is on."""
|
|
@@ -27,17 +27,19 @@ class LightProperty(StrEnum):
|
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
class LightControlProperties(TypedDict):
|
|
30
|
-
"""Property
|
|
30
|
+
"""Property values of a light control."""
|
|
31
31
|
|
|
32
32
|
on: bool
|
|
33
33
|
brightness: int
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
class LightPropertyChangeData(TypedDict):
|
|
37
|
-
"""
|
|
37
|
+
"""Property change payload emitted on LightControlLike.onPropertyChanged."""
|
|
38
38
|
|
|
39
|
-
property: str
|
|
39
|
+
property: str
|
|
40
|
+
"""Name of the changed property, a LightProperty value."""
|
|
40
41
|
value: bool | int
|
|
42
|
+
"""New value of the property."""
|
|
41
43
|
|
|
42
44
|
|
|
43
45
|
TStorage = TypeVar("TStorage", bound=Mapping[str, Any], default=dict[str, Any])
|
|
@@ -51,6 +53,12 @@ class LightControlLike(SensorLike, Protocol):
|
|
|
51
53
|
def type(self) -> SensorType:
|
|
52
54
|
return SensorType.Light
|
|
53
55
|
|
|
56
|
+
@property
|
|
57
|
+
def onPropertyChanged(self) -> Observable[LightPropertyChangeData]: ...
|
|
58
|
+
|
|
59
|
+
@property
|
|
60
|
+
def onCapabilitiesChanged(self) -> Observable[list[LightCapability]]: ...
|
|
61
|
+
|
|
54
62
|
@overload
|
|
55
63
|
def getValue(self, property: Literal[LightProperty.On]) -> bool | None: ...
|
|
56
64
|
@overload
|
|
@@ -58,30 +66,24 @@ class LightControlLike(SensorLike, Protocol):
|
|
|
58
66
|
@overload
|
|
59
67
|
def getValue(self, property: str) -> object | None: ...
|
|
60
68
|
|
|
61
|
-
@property
|
|
62
|
-
def onPropertyChanged(self) -> Observable[LightPropertyChangeData]: ...
|
|
63
|
-
|
|
64
|
-
@property
|
|
65
|
-
def onCapabilitiesChanged(self) -> Observable[list[LightCapability]]: ...
|
|
66
|
-
|
|
67
69
|
|
|
68
70
|
class LightControl(Sensor[LightControlProperties, TStorage, LightCapability], Generic[TStorage]):
|
|
69
71
|
"""Light control sensor. Override ``setOn()``/``setOff()`` to drive your
|
|
70
72
|
hardware, then ``await super().setOn()`` / ``await super().setOff()`` to
|
|
71
73
|
sync the SDK state.
|
|
72
74
|
|
|
73
|
-
Plugins
|
|
74
|
-
|
|
75
|
+
Plugins with no hardware-action use case can leave the methods unoverridden,
|
|
76
|
+
the base implementation just updates the state.
|
|
75
77
|
|
|
76
78
|
For hardware-pushed updates (someone manually flipped the switch), call
|
|
77
|
-
``super().setOn()`` / ``super().setOff()`` from your event handler
|
|
79
|
+
``super().setOn()`` / ``super().setOff()`` from your event handler. That
|
|
78
80
|
bypasses any plugin override and only syncs state.
|
|
79
81
|
"""
|
|
80
82
|
|
|
81
83
|
_requires_frames = False
|
|
82
84
|
|
|
83
|
-
def __init__(self, name: str = "Light") -> None:
|
|
84
|
-
super().__init__(name)
|
|
85
|
+
def __init__(self, name: str = "Light", *, native_id: str | None = None) -> None:
|
|
86
|
+
super().__init__(name, native_id=native_id)
|
|
85
87
|
self._write_state(
|
|
86
88
|
{
|
|
87
89
|
LightProperty.On.value: False,
|
|
@@ -146,7 +148,10 @@ class LightControl(Sensor[LightControlProperties, TStorage, LightCapability], Ge
|
|
|
146
148
|
self._write_state({LightProperty.Brightness.value: max(0, min(100, value))})
|
|
147
149
|
|
|
148
150
|
async def updateValue(self, property: str, value: Any) -> None:
|
|
149
|
-
"""Routes generic property writes to semantic
|
|
151
|
+
"""Routes generic property writes to the semantic setters.
|
|
152
|
+
|
|
153
|
+
Only on and brightness are externally writable.
|
|
154
|
+
"""
|
|
150
155
|
if property == LightProperty.On.value:
|
|
151
156
|
if value:
|
|
152
157
|
await self.setOn()
|
|
@@ -156,4 +161,3 @@ class LightControl(Sensor[LightControlProperties, TStorage, LightCapability], Ge
|
|
|
156
161
|
if property == LightProperty.Brightness.value:
|
|
157
162
|
await self.setBrightness(int(value))
|
|
158
163
|
return
|
|
159
|
-
# Unknown / non-writable property — ignored.
|
|
@@ -11,15 +11,18 @@ from .base import Sensor, SensorCategory, SensorLike, SensorType
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class LockState(IntEnum):
|
|
14
|
-
"""Lock states
|
|
14
|
+
"""Lock states."""
|
|
15
15
|
|
|
16
16
|
Secured = 0
|
|
17
|
+
"""Locked."""
|
|
17
18
|
Unsecured = 1
|
|
19
|
+
"""Unlocked."""
|
|
18
20
|
Unknown = 2
|
|
21
|
+
"""State cannot be determined, e.g. while a motorized lock is moving."""
|
|
19
22
|
|
|
20
23
|
|
|
21
24
|
class LockProperty(StrEnum):
|
|
22
|
-
"""
|
|
25
|
+
"""Property names of a lock control."""
|
|
23
26
|
|
|
24
27
|
CurrentState = "currentState"
|
|
25
28
|
"""The actual current state of the lock."""
|
|
@@ -28,17 +31,19 @@ class LockProperty(StrEnum):
|
|
|
28
31
|
|
|
29
32
|
|
|
30
33
|
class LockControlProperties(TypedDict):
|
|
31
|
-
"""Property
|
|
34
|
+
"""Property values of a lock control."""
|
|
32
35
|
|
|
33
36
|
currentState: int
|
|
34
37
|
targetState: int
|
|
35
38
|
|
|
36
39
|
|
|
37
40
|
class LockPropertyChangeData(TypedDict):
|
|
38
|
-
"""
|
|
41
|
+
"""Property change payload emitted on LockControlLike.onPropertyChanged."""
|
|
39
42
|
|
|
40
|
-
property: str
|
|
43
|
+
property: str
|
|
44
|
+
"""Name of the changed property, a LockProperty value."""
|
|
41
45
|
value: LockState
|
|
46
|
+
"""New value of the property."""
|
|
42
47
|
|
|
43
48
|
|
|
44
49
|
TStorage = TypeVar("TStorage", bound=Mapping[str, Any], default=dict[str, Any])
|
|
@@ -52,6 +57,9 @@ class LockControlLike(SensorLike, Protocol):
|
|
|
52
57
|
def type(self) -> SensorType:
|
|
53
58
|
return SensorType.Lock
|
|
54
59
|
|
|
60
|
+
@property
|
|
61
|
+
def onPropertyChanged(self) -> Observable[LockPropertyChangeData]: ...
|
|
62
|
+
|
|
55
63
|
@overload
|
|
56
64
|
def getValue(self, property: Literal[LockProperty.CurrentState]) -> LockState | None: ...
|
|
57
65
|
@overload
|
|
@@ -59,15 +67,12 @@ class LockControlLike(SensorLike, Protocol):
|
|
|
59
67
|
@overload
|
|
60
68
|
def getValue(self, property: str) -> object | None: ...
|
|
61
69
|
|
|
62
|
-
@property
|
|
63
|
-
def onPropertyChanged(self) -> Observable[LockPropertyChangeData]: ...
|
|
64
|
-
|
|
65
70
|
|
|
66
71
|
class LockControl(Sensor[LockControlProperties, TStorage, str], Generic[TStorage]):
|
|
67
72
|
"""Lock control.
|
|
68
73
|
|
|
69
74
|
Override `setTargetState()` to drive hardware and call
|
|
70
|
-
`await super().setTargetState(value)` once the hardware confirms
|
|
75
|
+
`await super().setTargetState(value)` once the hardware confirms. The base
|
|
71
76
|
implementation updates both `targetState` and `currentState` to the new value.
|
|
72
77
|
|
|
73
78
|
For asymmetric flows (long-running unlock with intermediate state) override
|
|
@@ -76,8 +81,8 @@ class LockControl(Sensor[LockControlProperties, TStorage, str], Generic[TStorage
|
|
|
76
81
|
|
|
77
82
|
_requires_frames = False
|
|
78
83
|
|
|
79
|
-
def __init__(self, name: str = "Lock") -> None:
|
|
80
|
-
super().__init__(name)
|
|
84
|
+
def __init__(self, name: str = "Lock", *, native_id: str | None = None) -> None:
|
|
85
|
+
super().__init__(name, native_id=native_id)
|
|
81
86
|
self._write_state(
|
|
82
87
|
{
|
|
83
88
|
LockProperty.CurrentState.value: int(LockState.Secured),
|
|
@@ -105,7 +110,7 @@ class LockControl(Sensor[LockControlProperties, TStorage, str], Generic[TStorage
|
|
|
105
110
|
|
|
106
111
|
async def setTargetState(self, value: LockState) -> None:
|
|
107
112
|
"""Set the target state. Override to drive hardware and call
|
|
108
|
-
`await super().setTargetState(value)` after success
|
|
113
|
+
`await super().setTargetState(value)` after success. The base implementation
|
|
109
114
|
syncs both `targetState` and `currentState` to the new value.
|
|
110
115
|
|
|
111
116
|
Args:
|
|
@@ -126,11 +131,11 @@ class LockControl(Sensor[LockControlProperties, TStorage, str], Generic[TStorage
|
|
|
126
131
|
)
|
|
127
132
|
|
|
128
133
|
def setCurrentState(self, value: LockState) -> None:
|
|
129
|
-
"""Publish the actual lock state. Use
|
|
130
|
-
the
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
+
"""Publish the actual lock state. Use it when the physical state diverges
|
|
135
|
+
from the requested target: motorized locks that take time to rotate
|
|
136
|
+
(publish ``Unknown`` while moving), or hardware reporting an out-of-band
|
|
137
|
+
state change. Read-only from cross-process consumers (``updateValue``
|
|
138
|
+
ignores it).
|
|
134
139
|
|
|
135
140
|
Args:
|
|
136
141
|
value: Current physical lock state from the ``LockState`` enum.
|
|
@@ -145,7 +150,9 @@ class LockControl(Sensor[LockControlProperties, TStorage, str], Generic[TStorage
|
|
|
145
150
|
self._write_state({LockProperty.CurrentState.value: int(value)})
|
|
146
151
|
|
|
147
152
|
async def updateValue(self, property: str, value: Any) -> None:
|
|
148
|
-
"""Routes generic property writes to semantic
|
|
153
|
+
"""Routes generic property writes to the semantic setters.
|
|
154
|
+
|
|
155
|
+
Only targetState is externally writable, currentState is observed-only.
|
|
156
|
+
"""
|
|
149
157
|
if property == LockProperty.TargetState.value:
|
|
150
158
|
await self.setTargetState(LockState(value))
|
|
151
|
-
# Unknown / non-writable property (incl. currentState) — ignored.
|
|
@@ -19,7 +19,7 @@ from .detection import (
|
|
|
19
19
|
VideoFrameData,
|
|
20
20
|
)
|
|
21
21
|
|
|
22
|
-
#
|
|
22
|
+
# detection types are re-exported here, plugins import them from this module
|
|
23
23
|
__all__ = [
|
|
24
24
|
"BoundingBox",
|
|
25
25
|
"DETECTION_ATTRIBUTES",
|
|
@@ -41,16 +41,18 @@ __all__ = [
|
|
|
41
41
|
class MotionProperty(StrEnum):
|
|
42
42
|
"""Property names of a motion sensor."""
|
|
43
43
|
|
|
44
|
-
Detected = "detected"
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
)
|
|
44
|
+
Detected = "detected"
|
|
45
|
+
"""Whether motion is currently detected."""
|
|
46
|
+
Detections = "detections"
|
|
47
|
+
"""List of detection results with bounding boxes."""
|
|
48
|
+
Blocked = "blocked"
|
|
49
|
+
"""When true, detection updates are suppressed (set by the backend dwell logic)."""
|
|
50
|
+
LastTriggered = "lastTriggered"
|
|
51
|
+
"""Timestamp in milliseconds of the last detection trigger, set by the backend."""
|
|
50
52
|
|
|
51
53
|
|
|
52
54
|
class MotionSensorProperties(TypedDict):
|
|
53
|
-
"""Property
|
|
55
|
+
"""Property values of a motion sensor."""
|
|
54
56
|
|
|
55
57
|
detected: bool
|
|
56
58
|
detections: list[Detection]
|
|
@@ -60,8 +62,10 @@ class MotionSensorProperties(TypedDict):
|
|
|
60
62
|
class MotionPropertyChangeData(TypedDict):
|
|
61
63
|
"""Property change payload emitted on MotionSensorLike.onPropertyChanged."""
|
|
62
64
|
|
|
63
|
-
property: str
|
|
65
|
+
property: str
|
|
66
|
+
"""Name of the changed property, a MotionProperty value."""
|
|
64
67
|
value: bool | list[Detection]
|
|
68
|
+
"""New value of the property."""
|
|
65
69
|
|
|
66
70
|
|
|
67
71
|
TStorage = TypeVar("TStorage", bound=Mapping[str, Any], default=dict[str, Any])
|
|
@@ -75,6 +79,9 @@ class MotionSensorLike(SensorLike, Protocol):
|
|
|
75
79
|
def type(self) -> SensorType:
|
|
76
80
|
return SensorType.Motion
|
|
77
81
|
|
|
82
|
+
@property
|
|
83
|
+
def onPropertyChanged(self) -> Observable[MotionPropertyChangeData]: ...
|
|
84
|
+
|
|
78
85
|
@overload
|
|
79
86
|
def getValue(self, property: Literal[MotionProperty.Detected]) -> bool | None: ...
|
|
80
87
|
@overload
|
|
@@ -84,23 +91,19 @@ class MotionSensorLike(SensorLike, Protocol):
|
|
|
84
91
|
@overload
|
|
85
92
|
def getValue(self, property: str) -> object | None: ...
|
|
86
93
|
|
|
87
|
-
@property
|
|
88
|
-
def onPropertyChanged(self) -> Observable[MotionPropertyChangeData]: ...
|
|
89
|
-
|
|
90
94
|
|
|
91
95
|
class MotionSensor(Sensor[MotionSensorProperties, TStorage, str], Generic[TStorage]):
|
|
92
96
|
"""Motion sensor that reports motion state and detection results.
|
|
93
97
|
|
|
94
98
|
Plugin authors call `reportDetections(list)` to push detection results.
|
|
95
|
-
`detected` is auto-derived from the detection list. `blocked` is read-only
|
|
96
|
-
|
|
97
|
-
no-op while the sensor is blocked.
|
|
99
|
+
`detected` is auto-derived from the detection list. `blocked` is read-only and
|
|
100
|
+
set by the backend dwell logic, `reportDetections()` is a no-op while it is set.
|
|
98
101
|
"""
|
|
99
102
|
|
|
100
103
|
_requires_frames = False
|
|
101
104
|
|
|
102
|
-
def __init__(self, name: str = "Motion Sensor") -> None:
|
|
103
|
-
super().__init__(name)
|
|
105
|
+
def __init__(self, name: str = "Motion Sensor", *, native_id: str | None = None) -> None:
|
|
106
|
+
super().__init__(name, native_id=native_id)
|
|
104
107
|
self._write_state(
|
|
105
108
|
{
|
|
106
109
|
MotionProperty.Detected.value: False,
|
|
@@ -119,26 +122,23 @@ class MotionSensor(Sensor[MotionSensorProperties, TStorage, str], Generic[TStora
|
|
|
119
122
|
|
|
120
123
|
@property
|
|
121
124
|
def detected(self) -> bool:
|
|
122
|
-
"""Whether motion is currently detected."""
|
|
123
125
|
return bool(self.props.detected)
|
|
124
126
|
|
|
125
127
|
@property
|
|
126
128
|
def detections(self) -> list[Detection]:
|
|
127
|
-
"""Current detection list."""
|
|
128
129
|
return self.props.detections or []
|
|
129
130
|
|
|
130
131
|
@property
|
|
131
132
|
def blocked(self) -> bool:
|
|
132
|
-
"""Whether the sensor is currently blocked. Read-only — set by the backend dwell logic, not by plugin code."""
|
|
133
133
|
return bool(self.props.blocked)
|
|
134
134
|
|
|
135
135
|
def reportDetections(self, detected: bool, detections: list[Detection] | None = None) -> None:
|
|
136
136
|
"""Report a motion detection result.
|
|
137
137
|
|
|
138
|
-
- ``reportDetections(True)
|
|
138
|
+
- ``reportDetections(True)``: motion detected without bbox (e.g. Ring camera).
|
|
139
139
|
The SDK synthesizes a single full-frame ``'motion'`` detection.
|
|
140
|
-
- ``reportDetections(True, [...])
|
|
141
|
-
- ``reportDetections(False)
|
|
140
|
+
- ``reportDetections(True, [...])``: motion detected with explicit detections.
|
|
141
|
+
- ``reportDetections(False)``: no motion (clears detections).
|
|
142
142
|
|
|
143
143
|
No-op while the sensor is blocked by backend dwell logic.
|
|
144
144
|
|
|
@@ -176,15 +176,16 @@ class MotionSensor(Sensor[MotionSensorProperties, TStorage, str], Generic[TStora
|
|
|
176
176
|
self.reportDetections(False)
|
|
177
177
|
|
|
178
178
|
async def updateValue(self, property: str, value: Any) -> None:
|
|
179
|
-
"""Read-only sensor: external writes are ignored.
|
|
180
|
-
# No-op — motion state is reported by the plugin, not set externally.
|
|
179
|
+
"""Read-only sensor: external writes are ignored."""
|
|
181
180
|
|
|
182
181
|
|
|
183
182
|
class MotionResult(TypedDict):
|
|
184
183
|
"""Return type for MotionDetectorSensor.detectMotion()."""
|
|
185
184
|
|
|
186
|
-
detected: bool
|
|
187
|
-
|
|
185
|
+
detected: bool
|
|
186
|
+
"""Whether motion is detected in this frame. Ignored by the backend, which re-derives it from the detections."""
|
|
187
|
+
detections: list[Detection]
|
|
188
|
+
"""Detections emitted for this frame."""
|
|
188
189
|
|
|
189
190
|
|
|
190
191
|
class MotionDetectorSensor(MotionSensor[TStorage], Generic[TStorage]):
|
|
@@ -16,17 +16,18 @@ from .spec import ObjectModelSpec
|
|
|
16
16
|
class ObjectProperty(StrEnum):
|
|
17
17
|
"""Property names of an object detection sensor."""
|
|
18
18
|
|
|
19
|
-
Detected = "detected"
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
Detected = "detected"
|
|
20
|
+
"""Whether any object is currently detected."""
|
|
21
|
+
Detections = "detections"
|
|
22
|
+
"""List of detected objects with labels and bounding boxes."""
|
|
23
|
+
Labels = "labels"
|
|
24
|
+
"""Unique labels of the current detections (auto-derived when reporting detections)."""
|
|
22
25
|
|
|
23
26
|
|
|
24
27
|
class TrackVelocity(TypedDict):
|
|
25
|
-
"""Signed centroid velocity
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
motion prediction (PTZ autotrack, trajectory estimation) should use this
|
|
29
|
-
instead of deriving velocity from frame-to-frame position deltas.
|
|
28
|
+
"""Signed centroid velocity in normalized units per frame. Positive x = moving
|
|
29
|
+
right, positive y = moving down. Prefer this over deriving velocity from
|
|
30
|
+
position deltas.
|
|
30
31
|
"""
|
|
31
32
|
|
|
32
33
|
x: float
|
|
@@ -36,15 +37,20 @@ class TrackVelocity(TypedDict):
|
|
|
36
37
|
class TrackedDetection(Detection, total=False):
|
|
37
38
|
"""Detection enriched with tracking metadata (stable IDs, velocity)."""
|
|
38
39
|
|
|
39
|
-
trackId: int
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
trackId: int
|
|
41
|
+
"""Stable sequential ID for this object across frames."""
|
|
42
|
+
trackAge: int
|
|
43
|
+
"""Number of frames this object has been continuously tracked."""
|
|
44
|
+
trackSpeed: float
|
|
45
|
+
"""Velocity magnitude in normalized units per frame. 0 = stationary."""
|
|
46
|
+
trackVelocity: TrackVelocity
|
|
47
|
+
"""Signed centroid velocity in normalized units per frame."""
|
|
48
|
+
trackLost: bool
|
|
49
|
+
"""True if the object was not matched in the current frame."""
|
|
44
50
|
|
|
45
51
|
|
|
46
52
|
class ObjectSensorProperties(TypedDict):
|
|
47
|
-
"""Property
|
|
53
|
+
"""Property values of an object detection sensor."""
|
|
48
54
|
|
|
49
55
|
detected: bool
|
|
50
56
|
detections: list[TrackedDetection]
|
|
@@ -54,8 +60,10 @@ class ObjectSensorProperties(TypedDict):
|
|
|
54
60
|
class ObjectPropertyChangeData(TypedDict):
|
|
55
61
|
"""Property change payload emitted on ObjectSensorLike.onPropertyChanged."""
|
|
56
62
|
|
|
57
|
-
property: str
|
|
63
|
+
property: str
|
|
64
|
+
"""Name of the changed property, an ObjectProperty value."""
|
|
58
65
|
value: bool | list[Detection] | list[DetectionLabel]
|
|
66
|
+
"""New value of the property."""
|
|
59
67
|
|
|
60
68
|
|
|
61
69
|
TStorage = TypeVar("TStorage", bound=Mapping[str, Any], default=dict[str, Any])
|
|
@@ -69,6 +77,9 @@ class ObjectSensorLike(SensorLike, Protocol):
|
|
|
69
77
|
def type(self) -> SensorType:
|
|
70
78
|
return SensorType.Object
|
|
71
79
|
|
|
80
|
+
@property
|
|
81
|
+
def onPropertyChanged(self) -> Observable[ObjectPropertyChangeData]: ...
|
|
82
|
+
|
|
72
83
|
@overload
|
|
73
84
|
def getValue(self, property: Literal[ObjectProperty.Detected]) -> bool | None: ...
|
|
74
85
|
@overload
|
|
@@ -78,9 +89,6 @@ class ObjectSensorLike(SensorLike, Protocol):
|
|
|
78
89
|
@overload
|
|
79
90
|
def getValue(self, property: str) -> object | None: ...
|
|
80
91
|
|
|
81
|
-
@property
|
|
82
|
-
def onPropertyChanged(self) -> Observable[ObjectPropertyChangeData]: ...
|
|
83
|
-
|
|
84
92
|
|
|
85
93
|
class ObjectSensor(Sensor[ObjectSensorProperties, TStorage, str], Generic[TStorage]):
|
|
86
94
|
"""Object detection sensor that reports detected objects (person, vehicle, animal, etc.).
|
|
@@ -91,8 +99,8 @@ class ObjectSensor(Sensor[ObjectSensorProperties, TStorage, str], Generic[TStora
|
|
|
91
99
|
|
|
92
100
|
_requires_frames = False
|
|
93
101
|
|
|
94
|
-
def __init__(self, name: str = "Object Sensor") -> None:
|
|
95
|
-
super().__init__(name)
|
|
102
|
+
def __init__(self, name: str = "Object Sensor", *, native_id: str | None = None) -> None:
|
|
103
|
+
super().__init__(name, native_id=native_id)
|
|
96
104
|
self._write_state(
|
|
97
105
|
{
|
|
98
106
|
ObjectProperty.Detected.value: False,
|
|
@@ -111,17 +119,14 @@ class ObjectSensor(Sensor[ObjectSensorProperties, TStorage, str], Generic[TStora
|
|
|
111
119
|
|
|
112
120
|
@property
|
|
113
121
|
def detected(self) -> bool:
|
|
114
|
-
"""Whether any object is currently detected."""
|
|
115
122
|
return bool(self.props.detected)
|
|
116
123
|
|
|
117
124
|
@property
|
|
118
125
|
def detections(self) -> list[TrackedDetection]:
|
|
119
|
-
"""Current detection list."""
|
|
120
126
|
return self.props.detections or []
|
|
121
127
|
|
|
122
128
|
@property
|
|
123
129
|
def labels(self) -> list[DetectionLabel]:
|
|
124
|
-
"""Unique labels of the current detections."""
|
|
125
130
|
return self.props.labels or []
|
|
126
131
|
|
|
127
132
|
def reportDetections(
|
|
@@ -132,11 +137,11 @@ class ObjectSensor(Sensor[ObjectSensorProperties, TStorage, str], Generic[TStora
|
|
|
132
137
|
"""Report detected objects. Auto-derives ``detected`` and ``labels``
|
|
133
138
|
from the list.
|
|
134
139
|
|
|
135
|
-
- ``reportDetections(True)
|
|
140
|
+
- ``reportDetections(True)``: something detected without specific data.
|
|
136
141
|
The SDK synthesizes a single full-frame ``'motion'`` detection as a
|
|
137
142
|
generic fallback.
|
|
138
|
-
- ``reportDetections(True, [...])
|
|
139
|
-
- ``reportDetections(False)
|
|
143
|
+
- ``reportDetections(True, [...])``: explicit detections (typical case).
|
|
144
|
+
- ``reportDetections(False)``: clear.
|
|
140
145
|
|
|
141
146
|
Args:
|
|
142
147
|
detected: Whether any object is currently detected.
|
|
@@ -177,15 +182,16 @@ class ObjectSensor(Sensor[ObjectSensorProperties, TStorage, str], Generic[TStora
|
|
|
177
182
|
self.reportDetections(False)
|
|
178
183
|
|
|
179
184
|
async def updateValue(self, property: str, value: Any) -> None:
|
|
180
|
-
"""Read-only sensor: external writes are ignored.
|
|
181
|
-
# No-op — object detection state is reported by the plugin, not set externally.
|
|
185
|
+
"""Read-only sensor: external writes are ignored."""
|
|
182
186
|
|
|
183
187
|
|
|
184
188
|
class ObjectResult(TypedDict):
|
|
185
189
|
"""Return type for ObjectDetectorSensor.detectObjects()."""
|
|
186
190
|
|
|
187
|
-
detected: bool
|
|
188
|
-
|
|
191
|
+
detected: bool
|
|
192
|
+
"""Whether any object is detected in this frame."""
|
|
193
|
+
detections: list[TrackedDetection]
|
|
194
|
+
"""Detections emitted for this frame."""
|
|
189
195
|
|
|
190
196
|
|
|
191
197
|
class ObjectDetectorSensor(ObjectSensor[TStorage], Generic[TStorage]):
|
|
@@ -200,9 +206,7 @@ class ObjectDetectorSensor(ObjectSensor[TStorage], Generic[TStorage]):
|
|
|
200
206
|
|
|
201
207
|
@property
|
|
202
208
|
@abstractmethod
|
|
203
|
-
def modelSpec(self) -> ObjectModelSpec:
|
|
204
|
-
"""Declares the expected input dimensions. The backend scales frames to match."""
|
|
205
|
-
...
|
|
209
|
+
def modelSpec(self) -> ObjectModelSpec: ...
|
|
206
210
|
|
|
207
211
|
@abstractmethod
|
|
208
212
|
async def detectObjects(self, frame: VideoFrameData) -> ObjectResult:
|
|
@@ -11,23 +11,25 @@ from .base import Sensor, SensorCategory, SensorLike, SensorType
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class OccupancyProperty(StrEnum):
|
|
14
|
-
"""
|
|
14
|
+
"""Property names of an occupancy sensor."""
|
|
15
15
|
|
|
16
16
|
Detected = "detected"
|
|
17
17
|
"""Whether occupancy is detected (true = occupied)."""
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class OccupancySensorProperties(TypedDict):
|
|
21
|
-
"""Property
|
|
21
|
+
"""Property values of an occupancy sensor."""
|
|
22
22
|
|
|
23
23
|
detected: bool
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class OccupancyPropertyChangeData(TypedDict):
|
|
27
|
-
"""
|
|
27
|
+
"""Property change payload emitted on OccupancySensorLike.onPropertyChanged."""
|
|
28
28
|
|
|
29
|
-
property: str
|
|
29
|
+
property: str
|
|
30
|
+
"""Name of the changed property, an OccupancyProperty 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 OccupancySensorLike(SensorLike, Protocol):
|
|
|
41
43
|
def type(self) -> SensorType:
|
|
42
44
|
return SensorType.Occupancy
|
|
43
45
|
|
|
46
|
+
@property
|
|
47
|
+
def onPropertyChanged(self) -> Observable[OccupancyPropertyChangeData]: ...
|
|
48
|
+
|
|
44
49
|
@overload
|
|
45
50
|
def getValue(self, property: Literal[OccupancyProperty.Detected]) -> bool | None: ...
|
|
46
51
|
@overload
|
|
47
52
|
def getValue(self, property: str) -> object | None: ...
|
|
48
53
|
|
|
49
|
-
@property
|
|
50
|
-
def onPropertyChanged(self) -> Observable[OccupancyPropertyChangeData]: ...
|
|
51
|
-
|
|
52
54
|
|
|
53
55
|
class OccupancySensor(Sensor[OccupancySensorProperties, TStorage, str], Generic[TStorage]):
|
|
54
56
|
"""Occupancy sensor for detecting presence in a room or area."""
|
|
55
57
|
|
|
56
58
|
_requires_frames = False
|
|
57
59
|
|
|
58
|
-
def __init__(self, name: str = "Occupancy Sensor") -> None:
|
|
59
|
-
super().__init__(name)
|
|
60
|
+
def __init__(self, name: str = "Occupancy Sensor", *, native_id: str | None = None) -> None:
|
|
61
|
+
super().__init__(name, native_id=native_id)
|
|
60
62
|
self._write_state({OccupancyProperty.Detected.value: False})
|
|
61
63
|
|
|
62
64
|
@property
|
|
@@ -86,4 +88,3 @@ class OccupancySensor(Sensor[OccupancySensorProperties, TStorage, str], Generic[
|
|
|
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 — occupancy state is reported by the plugin, not set externally.
|