@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.
Files changed (713) hide show
  1. package/dist/interface/assets/404-junY0N5P.js +1 -0
  2. package/dist/interface/assets/About-Dwc0TTLa.js +1 -0
  3. package/dist/interface/assets/Adminpanel-wZGtsPD-.js +1 -0
  4. package/dist/interface/assets/Automation-Dj6xmGae.js +3 -0
  5. package/dist/interface/assets/AutomationImport-Ccnxyslc.js +2 -0
  6. package/dist/interface/assets/AutomationStore-DmbxA0ml.js +2 -0
  7. package/dist/interface/assets/AutomationStoreDetail-DcbvD8g5.js +2 -0
  8. package/dist/interface/assets/Automations-C9JJO6dy.js +2 -0
  9. package/dist/interface/assets/Camera-D_j0J3kB.js +2 -0
  10. package/dist/interface/assets/CameraConsole--hGg9Ye6.js +7 -0
  11. package/dist/interface/assets/Cameras-B2Tizr4Q.js +652 -0
  12. package/dist/interface/assets/Camview-Bh2UCnGC.js +1 -0
  13. package/dist/interface/assets/{Camview-CaEbdeQZ.css → Camview-Cj10uxGy.css} +1 -1
  14. package/dist/interface/assets/Config-Dn_s2M7r.js +2 -0
  15. package/dist/interface/assets/{ConfigActionCameraControl-DFdb4xzq.js → ConfigActionCameraControl-DQEYHVN5.js} +1 -1
  16. package/dist/interface/assets/ConfigActionDelay-C0mbjCCj.js +1 -0
  17. package/dist/interface/assets/ConfigActionHttp-Bf58WHcw.js +1 -0
  18. package/dist/interface/assets/ConfigActionImageInput-CDXVFrOz.js +1 -0
  19. package/dist/interface/assets/ConfigActionMqtt-lH7MQqWr.js +1 -0
  20. package/dist/interface/assets/ConfigActionNotification-CAkr6NJX.js +1 -0
  21. package/dist/interface/assets/ConfigActionNotificationControl-CiL-4Ytw.js +1 -0
  22. package/dist/interface/assets/ConfigActionOutput-ILAxBT-r.js +1 -0
  23. package/dist/interface/assets/ConfigActionPlugin-B2d4mZiK.js +1 -0
  24. package/dist/interface/assets/ConfigActionSensor-BxMdsmRa.js +1 -0
  25. package/dist/interface/assets/ConfigActionSnapshot-CXVQBSzv.js +1 -0
  26. package/dist/interface/assets/ConfigActionVariable-CABnlnMv.js +1 -0
  27. package/dist/interface/assets/ConfigConditionIfElse-Cxu7TSdJ.js +1 -0
  28. package/dist/interface/assets/ConfigConditionSensorState-rB7I04Gb.js +1 -0
  29. package/dist/interface/assets/ConfigConditionSwitch-CU0hLo1h.js +1 -0
  30. package/dist/interface/assets/ConfigConditionTime-DfeEvxIU.js +1 -0
  31. package/dist/interface/assets/ConfigSensorValueInput-wXiyU3Sc.js +1 -0
  32. package/dist/interface/assets/{ConfigTriggerDetection-Cjes6g7x.js → ConfigTriggerDetection-DFJpuWrs.js} +1 -1
  33. package/dist/interface/assets/ConfigTriggerGeofence-CZwesOD8.js +1 -0
  34. package/dist/interface/assets/ConfigTriggerManual-aibwYUtf.js +1 -0
  35. package/dist/interface/assets/ConfigTriggerMqtt-CUNgifGb.js +1 -0
  36. package/dist/interface/assets/ConfigTriggerSchedule-8Y_OBcB1.js +1 -0
  37. package/dist/interface/assets/ConfigTriggerSensor-Bu-YtGnX.js +1 -0
  38. package/dist/interface/assets/{ConfigTriggerSystem-NaaBopYq.js → ConfigTriggerSystem-CXNvmC4S.js} +1 -1
  39. package/dist/interface/assets/ConfigTriggerWebhook-CkZ-_ABi.js +1 -0
  40. package/dist/interface/assets/Console-CG8eRDA4.js +1 -0
  41. package/dist/interface/assets/CuiAutomationRunsDialog-Ux0g-E3w.js +1 -0
  42. package/dist/interface/assets/CuiBottomSheet-C-ZN_uXE.js +1 -0
  43. package/dist/interface/assets/CuiBottomSheet-RUyuBxJZ.js +1 -0
  44. package/dist/interface/assets/CuiCameraPipCard-B-B6Ppsd.js +1 -0
  45. package/dist/interface/assets/CuiCameraRecordings-DqVdR9uS.js +1 -0
  46. package/dist/interface/assets/CuiCameraShares-DstoVjf9.js +1 -0
  47. package/dist/interface/assets/CuiCameraTable-BHaCRB65.js +2 -0
  48. package/dist/interface/assets/CuiDataTable-CTT9IFeR.js +1 -0
  49. package/dist/interface/assets/CuiLightControl-B_JIzm9t.js +1 -0
  50. package/dist/interface/assets/CuiLightControl-DFrZm_sv.css +1 -0
  51. package/dist/interface/assets/CuiList-CDed3qXV.js +1 -0
  52. package/dist/interface/assets/CuiMarkdownContent-Bjs3wRnq.js +1 -0
  53. package/dist/interface/assets/CuiMarkdownContent-Do8-vIl7.js +1 -0
  54. package/dist/interface/assets/CuiPluginCard-7aXQznrX.js +2 -0
  55. package/dist/interface/assets/{CuiPluginCategoryChip-D9Vi1SEP.js → CuiPluginCategoryChip-C2Y8x73q.js} +1 -1
  56. package/dist/interface/assets/CuiPluginOAuthButton-CCzRlZP6.js +2 -0
  57. package/dist/interface/assets/{CuiPluginTrustBadge-D0rUX2i6.js → CuiPluginTrustBadge-C8qBdLCg.js} +1 -1
  58. package/dist/interface/assets/CuiQRCode-D52Fcu61.js +1 -0
  59. package/dist/interface/assets/CuiRecordingsGrid-CfuihmlY.js +1 -0
  60. package/dist/interface/assets/CuiSchema-DTIuxROi.js +1 -0
  61. package/dist/interface/assets/CuiTopNavbarItem-CoTQmfY7.js +1 -0
  62. package/dist/interface/assets/Faces-EtBPS1Ve.js +1 -0
  63. package/dist/interface/assets/FirstSteps-CC0BPH40.js +1 -0
  64. package/dist/interface/assets/Instances-dSYERqIc.js +1 -0
  65. package/dist/interface/assets/Logs-B8d6dEt7.js +6 -0
  66. package/dist/interface/assets/Menu-CejIVz_7.js +1 -0
  67. package/dist/interface/assets/OAuthDeviceFlow-YhwV_FSL.js +1 -0
  68. package/dist/interface/assets/Plugin-Brb6wfq-.js +1 -0
  69. package/dist/interface/assets/PluginConsole-CfyZQVq5.js +7 -0
  70. package/dist/interface/assets/PluginDetail-DVRnnauk.js +2 -0
  71. package/dist/interface/assets/PluginSchema-i6UJfMnh.js +1 -0
  72. package/dist/interface/assets/PluginSearch-C1YL9q00.js +1 -0
  73. package/dist/interface/assets/PluginSearch-PDx47aUx.js +2 -0
  74. package/dist/interface/assets/Plugins-CukJohcb.js +1 -0
  75. package/dist/interface/assets/Recordings-m6jxYvRI.js +1 -0
  76. package/dist/interface/assets/SensorEdit-BJAijbmc.js +1 -0
  77. package/dist/interface/assets/SensorHistory-DW00ZuHR.js +1 -0
  78. package/dist/interface/assets/Sensors-BA9P_Ray.css +1 -0
  79. package/dist/interface/assets/Sensors-Lfafn19i.js +2 -0
  80. package/dist/interface/assets/Settings-DHT8KXi2.js +1 -0
  81. package/dist/interface/assets/SettingsAccount-DOd4JeGd.js +1 -0
  82. package/dist/interface/assets/{SettingsAccount-CyNJQSuV.css → SettingsAccount-si-6gWl5.css} +1 -1
  83. package/dist/interface/assets/SettingsAccount-vrwV9rtP.js +1 -0
  84. package/dist/interface/assets/SettingsAppearance-11UFhRDY.js +1 -0
  85. package/dist/interface/assets/SettingsAppearance-BaDwC_h_.js +1 -0
  86. package/dist/interface/assets/SettingsBackup-CBBZV_nU.js +1 -0
  87. package/dist/interface/assets/SettingsList-Dx9DHGq9.js +1 -0
  88. package/dist/interface/assets/SettingsMqtt-BglQ_GeN.js +1 -0
  89. package/dist/interface/assets/SettingsNotifications-96czeGDD.js +2 -0
  90. package/dist/interface/assets/SettingsPermissions-CU4OVllA.js +1 -0
  91. package/dist/interface/assets/SettingsRecordings-BrnU9hrb.js +1 -0
  92. package/dist/interface/assets/SettingsRemote-CwJw_9HX.js +1 -0
  93. package/dist/interface/assets/SettingsSystem-B3nne5fS.js +2 -0
  94. package/dist/interface/assets/SettingsUsers-CoYyAxxn.js +1 -0
  95. package/dist/interface/assets/Terminal-DMAHgufw.js +4 -0
  96. package/dist/interface/assets/VariableInput-BzWLKBgd.js +1 -0
  97. package/dist/interface/assets/VariableSuggestions-BdxcP_dn.js +1 -0
  98. package/dist/interface/assets/VersionsHandler-Dvy5Lv-E.js +7 -0
  99. package/dist/interface/assets/VirtualSensorCreate-BXz0lWNm.js +1 -0
  100. package/dist/interface/assets/Workers-DqeKkdpa.js +2 -0
  101. package/dist/interface/assets/{account-sFoKqEOV.js → account-C5mHt2Ep.js} +1 -1
  102. package/dist/interface/assets/ace-BqKKexH4.js +1 -0
  103. package/dist/interface/assets/{ace.config-C_wgqTLD.js → ace.config-BNjBs7Fe.js} +1 -1
  104. package/dist/interface/assets/alarm-light-outline-jCTfmz5t.js +1 -0
  105. package/dist/interface/assets/{alert-circle-BQZQ417w.js → alert-circle-Cu_kjPlA.js} +1 -1
  106. package/dist/interface/assets/alert-outline-DXHNnhoP.js +1 -0
  107. package/dist/interface/assets/api-3va2gyB0.css +2 -0
  108. package/dist/interface/assets/{api-DEaXK1Kq.js → api-DmxTF6VE.js} +1 -1
  109. package/dist/interface/assets/api-milc5VEE.js +2 -0
  110. package/dist/interface/assets/arrow-left-DPtWmM6S.js +1 -0
  111. package/dist/interface/assets/arrow-right-outline-BY1ggGA1.js +1 -0
  112. package/dist/interface/assets/{auth-XA5zkqwW.js → auth-DwSrX8QL.js} +1 -1
  113. package/dist/interface/assets/automationBlueprint-D0F9AHk9.js +1 -0
  114. package/dist/interface/assets/automations-yVPQAmFo.js +1 -0
  115. package/dist/interface/assets/{back-filled-BdHG6uUx.js → back-filled-r7bN5ObT.js} +1 -1
  116. package/dist/interface/assets/{bell-ring-Dua4zXf_.js → bell-ring-C470qCAb.js} +1 -1
  117. package/dist/interface/assets/{cameras.schema-1a2URPGd.js → cameras.schema-JAiaenSf.js} +1 -1
  118. package/dist/interface/assets/{cctv-DEiPL3U8.js → cctv-BKVOVZCR.js} +1 -1
  119. package/dist/interface/assets/check-circle-Ce_sbfPZ.js +1 -0
  120. package/dist/interface/assets/chevron-down-CjSTp091.js +1 -0
  121. package/dist/interface/assets/chevron-right-B4vB0gm4.js +1 -0
  122. package/dist/interface/assets/{clock-outline-C_f3Ed8x.js → clock-outline-BgcDXoyp.js} +1 -1
  123. package/dist/interface/assets/{close-DNgGJYHi.js → close-CQoGQHOF.js} +1 -1
  124. package/dist/interface/assets/{close-circle-L5juejMg.js → close-circle-DYhkXsRj.js} +1 -1
  125. package/dist/interface/assets/{cloud-check-DD7oRzmo.js → cloud-check-CVx221dJ.js} +1 -1
  126. package/dist/interface/assets/cloudHandoff-QtPEpiS4.js +1 -0
  127. package/dist/interface/assets/{config-C2hgXHyj.js → config-BE0DnCXx.js} +1 -1
  128. package/dist/interface/assets/copy-yhHCVVOa.js +1 -0
  129. package/dist/interface/assets/cube-scan-Ccxismvr.js +1 -0
  130. package/dist/interface/assets/delete-xWUQUP2x.js +1 -0
  131. package/dist/interface/assets/dist-DVb-CALh.js +1 -0
  132. package/dist/interface/assets/download-PLxvyB7s.js +1 -0
  133. package/dist/interface/assets/esm-B4MXP42m.js +1 -0
  134. package/dist/interface/assets/esm-BW9m3dy4.js +1 -0
  135. package/dist/interface/assets/esm-BZ3gh7Fj.js +1 -0
  136. package/dist/interface/assets/esm-Blvz9SsB.js +1 -0
  137. package/dist/interface/assets/esm-CJXU9jaA.js +1 -0
  138. package/dist/interface/assets/esm-Cqqu_mer.js +1 -0
  139. package/dist/interface/assets/esm-CtKbLoV_.js +1 -0
  140. package/dist/interface/assets/esm-CwzNi2iW.js +1 -0
  141. package/dist/interface/assets/esm-KnO8wJyB.js +1 -0
  142. package/dist/interface/assets/esm-Lt6R0RFn.js +1 -0
  143. package/dist/interface/assets/esm-MvRctfDP.js +1 -0
  144. package/dist/interface/assets/esm-W4LX4Rpq.js +1 -0
  145. package/dist/interface/assets/esm-l57LNUWu.js +1 -0
  146. package/dist/interface/assets/esm-xofhyA8r.js +1 -0
  147. package/dist/interface/assets/eye-off-C8kzsdYU.js +1 -0
  148. package/dist/interface/assets/flowSchema-BQp77LdP.js +1 -0
  149. package/dist/interface/assets/{history-iAZcYg3f.js → history-QBEPNc4X.js} +1 -1
  150. package/dist/interface/assets/home-af3W_y8U.js +1 -0
  151. package/dist/interface/assets/{information-outline-CVsB1bl-.js → information-outline-BPCsozSU.js} +1 -1
  152. package/dist/interface/assets/{lightbulb-outline-nNLyXAIp.js → lightbulb-outline-ccTlGyvW.js} +1 -1
  153. package/dist/interface/assets/main-CqhwDjRG.js +3 -0
  154. package/dist/interface/assets/main-aZt-Pooz.css +1 -0
  155. package/dist/interface/assets/{microphone-CU0mFDMh.js → microphone-5exHwwyq.js} +1 -1
  156. package/dist/interface/assets/mqtt-D_shY0Ks.js +1 -0
  157. package/dist/interface/assets/native-Cpj7zrLp.js +1 -0
  158. package/dist/interface/assets/native-D--k2WN1.js +1 -0
  159. package/dist/interface/assets/nodeDefinitions-CRrkU6zR.js +1 -0
  160. package/dist/interface/assets/{notifications-BHQN6WD4.js → notifications-BuSNpaOJ.js} +1 -1
  161. package/dist/interface/assets/{pencil-outline-BQxLTlZx.js → pencil-outline-M9I4mCJO.js} +1 -1
  162. package/dist/interface/assets/plugin-D3FpjfF8.js +1 -0
  163. package/dist/interface/assets/{plugins-C0RtyBHQ.js → plugins-7pWXkYgo.js} +1 -1
  164. package/dist/interface/assets/plus-CGIx-WV8.js +1 -0
  165. package/dist/interface/assets/{plus-Ct6WQfM1.js → plus-CrfQUUEC.js} +1 -1
  166. package/dist/interface/assets/power-VnZM2-0c.js +1 -0
  167. package/dist/interface/assets/{ring-resize-CZBThoQC.js → ring-resize-CodGa6wQ.js} +1 -1
  168. package/dist/interface/assets/rolldown-runtime-C0FnF6B9.js +1 -0
  169. package/dist/interface/assets/{round-alt-arrow-left-bold-BlpNMBxm.js → round-alt-arrow-left-bold-DTrlW4yx.js} +1 -1
  170. package/dist/interface/assets/round-restart-alt-DKWwojYm.js +1 -0
  171. package/dist/interface/assets/{search-M4Rt52Co.js → search-miJXZGQz.js} +1 -1
  172. package/dist/interface/assets/sensors-CLQG1mQt.js +1 -0
  173. package/dist/interface/assets/{server-CVSOthzT.js → server-Bv5NVJ0G.js} +1 -1
  174. package/dist/interface/assets/{settings-CgToKrFd.js → settings-DY0TJSAM.js} +1 -1
  175. package/dist/interface/assets/{source-branch-CoHKTGxb.js → source-branch-nw9fwXin.js} +1 -1
  176. package/dist/interface/assets/{theme-BZi7VV10.js → theme-DsxRUmCC.js} +1 -1
  177. package/dist/interface/assets/{trash-2-BKWfq15D.js → trash-2-B-di2M48.js} +1 -1
  178. package/dist/interface/assets/trash-can-outline-BbZkHoW7.js +1 -0
  179. package/dist/interface/assets/{trash-fill-yNQsFs0Y.js → trash-fill-Bgen5QTD.js} +1 -1
  180. package/dist/interface/assets/{trash2-DjTG9rG-.js → trash2-BP__fHgN.js} +1 -1
  181. package/dist/interface/assets/{types-Bw8H-UB4.js → types-BazOcNe_.js} +1 -1
  182. package/dist/interface/assets/types-CoXm85So.js +1 -0
  183. package/dist/interface/assets/upload-CNYrnwuV.js +1 -0
  184. package/dist/interface/assets/{useAppVersion-CDTrwxkp.js → useAppVersion-oPpW7jcN.js} +1 -1
  185. package/dist/interface/assets/useBackupRestore-b0Niqql7.js +1 -0
  186. package/dist/interface/assets/useCameraOptions-uf9Kog6z.js +1 -0
  187. package/dist/interface/assets/{useCardSelection-CgZ7QTaA.js → useCardSelection-B3B2qPHO.js} +1 -1
  188. package/dist/interface/assets/{useElectron-CgLWOhcS.js → useElectron-Dg8tFzam.js} +1 -1
  189. package/dist/interface/assets/useLogsSocket-9jJ-oJIm.js +5 -0
  190. package/dist/interface/assets/{usePermissions-tzi2t12h.js → usePermissions-xL0VlbyD.js} +1 -1
  191. package/dist/interface/assets/useServerRestart-3AZOTz7i.js +1 -0
  192. package/dist/interface/assets/{useStreamStatus-BV_L7pxB.js → useStreamStatus-Dg-Djura.js} +1 -1
  193. package/dist/interface/assets/useUserOptions-BQnM3gdi.js +1 -0
  194. package/dist/interface/assets/{variable-Y3IAPnsB.js → variable-CbNySf4s.js} +1 -1
  195. package/dist/interface/assets/vendor-CSg6_Jfu.js +22 -0
  196. package/dist/interface/assets/vendor-ace-DIEVbs6L.js +1085 -0
  197. package/dist/interface/assets/vendor-cameraui-BqkrW4Bb.js +2040 -0
  198. package/dist/interface/assets/vendor-capacitor-C-8IYzpJ.js +2 -0
  199. package/dist/interface/assets/vendor-chart-CoQ9HTE3.js +3 -0
  200. package/dist/interface/assets/vendor-core-BQegq2Q6.js +1 -0
  201. package/dist/interface/assets/{vendor-dnd-hwiZJHjo.js → vendor-dnd-DQF7Aoap.js} +2 -2
  202. package/dist/interface/assets/vendor-draggabilly-Cghb3aIb.js +1 -0
  203. package/dist/interface/assets/vendor-gridstack-qw2ro2uB.js +3 -0
  204. package/dist/interface/assets/{vendor-leaflet-BMMJO5Nd.js → vendor-leaflet-Bcgd-fkG.js} +1 -1
  205. package/dist/interface/assets/vendor-markdown-DWwrEE67.js +14 -0
  206. package/dist/interface/assets/{vendor-primevue-C6wcTjtT.js → vendor-primevue-DYzLjOFZ.js} +85 -85
  207. package/dist/interface/assets/vendor-vueflow-crUU2mAI.js +26 -0
  208. package/dist/interface/assets/vendor-xterm-BafMBqaV.js +91 -0
  209. package/dist/interface/assets/vendor-zod-Dbq0fBXY.js +127 -0
  210. package/dist/interface/assets/web-BX3axHeB.js +1 -0
  211. package/dist/interface/assets/web-BcHmbPny.js +1 -0
  212. package/dist/interface/assets/web-BjKL51lK-BQjyRtns.js +1 -0
  213. package/dist/interface/assets/web-C8w-z-xR.js +1 -0
  214. package/dist/interface/assets/web-CHdniv8I.js +1 -0
  215. package/dist/interface/assets/web-CWBhY0Av.js +1 -0
  216. package/dist/interface/assets/web-Cf1yYy4u.js +1 -0
  217. package/dist/interface/assets/web-Ct6Vkr6F.js +1 -0
  218. package/dist/interface/assets/web-DARDw7d8.js +1 -0
  219. package/dist/interface/assets/web-DKBMdBSA.js +1 -0
  220. package/dist/interface/assets/web-Ddzvp-fv.js +1 -0
  221. package/dist/interface/assets/web-Dymr_MpD.js +1 -0
  222. package/dist/interface/assets/web-XIuTPdFc.js +1 -0
  223. package/dist/interface/assets/web-lrnXIJTz.js +1 -0
  224. package/dist/interface/assets/{webhook-yCryYojY.js → webhook-B7YgiSrF.js} +1 -1
  225. package/dist/interface/assets/workbox-window.prod.es5-BkFwsIPp.js +1 -0
  226. package/dist/interface/assets/{zoom-in-Da5uRiQq.js → zoom-in-D7BJNotF.js} +1 -1
  227. package/dist/interface/index.html +44 -40
  228. package/dist/interface/sw.js +1 -1
  229. package/dist/server/package.json +11 -11
  230. package/dist/server/requirements.txt +4 -6
  231. package/dist/server/src/_camera_ui_tools/camera_ui_rpc/client.py +3 -0
  232. package/dist/server/src/_camera_ui_tools/camera_ui_rpc/types.py +4 -0
  233. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/__init__.py +9 -14
  234. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/__init__.py +0 -4
  235. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/config.py +5 -12
  236. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/detection.py +6 -23
  237. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/device.py +60 -100
  238. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/events.py +3 -2
  239. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/frames.py +2 -0
  240. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/__init__.py +2 -20
  241. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/camera_config_internal.py +1 -1
  242. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/camera_enums.py +3 -3
  243. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/event_emitter.py +13 -26
  244. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/manager_rpc.py +2 -5
  245. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/sensor_rpc.py +21 -6
  246. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/shared_utils.py +7 -18
  247. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/manager/__init__.py +91 -29
  248. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/observable/__init__.py +145 -37
  249. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/__init__.py +10 -1
  250. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/api.py +21 -68
  251. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/contract.py +31 -58
  252. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/helper.py +3 -12
  253. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/interfaces.py +137 -99
  254. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/notifier.py +34 -52
  255. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/oauth.py +4 -4
  256. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/__init__.py +3 -4
  257. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/audio.py +45 -39
  258. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/base.py +329 -256
  259. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/battery.py +17 -16
  260. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/classifier.py +31 -27
  261. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/clip.py +14 -12
  262. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/contact.py +11 -10
  263. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/detection.py +34 -22
  264. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/doorbell.py +19 -19
  265. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/face.py +34 -28
  266. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/garage.py +29 -20
  267. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/humidity.py +22 -12
  268. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/leak.py +12 -11
  269. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/license_plate.py +35 -31
  270. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/light.py +22 -18
  271. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/lock.py +26 -19
  272. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/motion.py +28 -27
  273. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/object.py +37 -33
  274. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/occupancy.py +11 -10
  275. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/ptz.py +20 -24
  276. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/security_system.py +22 -22
  277. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/siren.py +17 -16
  278. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/smoke.py +11 -10
  279. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/spec.py +26 -22
  280. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/switch.py +13 -12
  281. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/temperature.py +22 -12
  282. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/storage/__init__.py +56 -38
  283. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/types.py +15 -18
  284. package/dist/server/src/api/controllers/auth.controller.js +2 -1
  285. package/dist/server/src/api/controllers/auth.controller.js.map +1 -1
  286. package/dist/server/src/api/controllers/cameras.controller.d.ts +6 -0
  287. package/dist/server/src/api/controllers/cameras.controller.js +21 -11
  288. package/dist/server/src/api/controllers/cameras.controller.js.map +1 -1
  289. package/dist/server/src/api/controllers/cast.controller.d.ts +11 -0
  290. package/dist/server/src/api/controllers/cast.controller.js +29 -0
  291. package/dist/server/src/api/controllers/cast.controller.js.map +1 -0
  292. package/dist/server/src/api/controllers/notifications.controller.d.ts +12 -0
  293. package/dist/server/src/api/controllers/notifications.controller.js +41 -0
  294. package/dist/server/src/api/controllers/notifications.controller.js.map +1 -1
  295. package/dist/server/src/api/controllers/nvr.controller.d.ts +14 -0
  296. package/dist/server/src/api/controllers/nvr.controller.js +61 -0
  297. package/dist/server/src/api/controllers/nvr.controller.js.map +1 -0
  298. package/dist/server/src/api/controllers/sensors.controller.d.ts +13 -0
  299. package/dist/server/src/api/controllers/sensors.controller.js +94 -0
  300. package/dist/server/src/api/controllers/sensors.controller.js.map +1 -0
  301. package/dist/server/src/api/controllers/server.controller.d.ts +1 -0
  302. package/dist/server/src/api/controllers/server.controller.js +11 -0
  303. package/dist/server/src/api/controllers/server.controller.js.map +1 -1
  304. package/dist/server/src/api/controllers/tunnel.controller.d.ts +0 -3
  305. package/dist/server/src/api/controllers/tunnel.controller.js +1 -21
  306. package/dist/server/src/api/controllers/tunnel.controller.js.map +1 -1
  307. package/dist/server/src/api/database/constants.d.ts +2 -0
  308. package/dist/server/src/api/database/constants.js +2 -0
  309. package/dist/server/src/api/database/constants.js.map +1 -1
  310. package/dist/server/src/api/database/index.d.ts +5 -2
  311. package/dist/server/src/api/database/index.js +7 -4
  312. package/dist/server/src/api/database/index.js.map +1 -1
  313. package/dist/server/src/api/database/migrations/v2-1-0.d.ts +3 -0
  314. package/dist/server/src/api/database/migrations/v2-1-0.js +72 -0
  315. package/dist/server/src/api/database/migrations/v2-1-0.js.map +1 -0
  316. package/dist/server/src/api/database/record-schemas.d.ts +2 -3
  317. package/dist/server/src/api/database/record-schemas.js +3 -3
  318. package/dist/server/src/api/database/record-schemas.js.map +1 -1
  319. package/dist/server/src/api/database/types.d.ts +27 -3
  320. package/dist/server/src/api/index.js +3 -0
  321. package/dist/server/src/api/index.js.map +1 -1
  322. package/dist/server/src/api/plugins/natsSubFirewall.d.ts +1 -1
  323. package/dist/server/src/api/plugins/natsSubFirewall.js +5 -2
  324. package/dist/server/src/api/plugins/natsSubFirewall.js.map +1 -1
  325. package/dist/server/src/api/plugins/proxy.plugin.js +5 -3
  326. package/dist/server/src/api/plugins/proxy.plugin.js.map +1 -1
  327. package/dist/server/src/api/routes/cameras.routes.js +14 -7
  328. package/dist/server/src/api/routes/cameras.routes.js.map +1 -1
  329. package/dist/server/src/api/routes/cast.routes.d.ts +2 -0
  330. package/dist/server/src/api/routes/cast.routes.js +29 -0
  331. package/dist/server/src/api/routes/cast.routes.js.map +1 -0
  332. package/dist/server/src/api/routes/index.js +6 -2
  333. package/dist/server/src/api/routes/index.js.map +1 -1
  334. package/dist/server/src/api/routes/notifications.routes.js +32 -0
  335. package/dist/server/src/api/routes/notifications.routes.js.map +1 -1
  336. package/dist/server/src/api/routes/nvr.routes.d.ts +2 -0
  337. package/dist/server/src/api/routes/nvr.routes.js +19 -0
  338. package/dist/server/src/api/routes/nvr.routes.js.map +1 -0
  339. package/dist/server/src/api/routes/sensors.routes.d.ts +2 -0
  340. package/dist/server/src/api/routes/sensors.routes.js +89 -0
  341. package/dist/server/src/api/routes/sensors.routes.js.map +1 -0
  342. package/dist/server/src/api/routes/server.routes.js +10 -0
  343. package/dist/server/src/api/routes/server.routes.js.map +1 -1
  344. package/dist/server/src/api/schemas/cameras.schema.d.ts +103 -45
  345. package/dist/server/src/api/schemas/cameras.schema.js +7 -10
  346. package/dist/server/src/api/schemas/cameras.schema.js.map +1 -1
  347. package/dist/server/src/api/schemas/cast.schema.d.ts +7 -0
  348. package/dist/server/src/api/schemas/cast.schema.js +7 -0
  349. package/dist/server/src/api/schemas/cast.schema.js.map +1 -0
  350. package/dist/server/src/api/schemas/nvr.schema.d.ts +10 -0
  351. package/dist/server/src/api/schemas/nvr.schema.js +13 -0
  352. package/dist/server/src/api/schemas/nvr.schema.js.map +1 -0
  353. package/dist/server/src/api/schemas/{virtualsensors.schema.d.ts → sensors.schema.d.ts} +15 -8
  354. package/dist/server/src/api/schemas/sensors.schema.js +25 -0
  355. package/dist/server/src/api/schemas/sensors.schema.js.map +1 -0
  356. package/dist/server/src/api/schemas/users.schema.d.ts +7 -18
  357. package/dist/server/src/api/schemas/users.schema.js +3 -7
  358. package/dist/server/src/api/schemas/users.schema.js.map +1 -1
  359. package/dist/server/src/api/services/cameras.service.js +1 -1
  360. package/dist/server/src/api/services/cameras.service.js.map +1 -1
  361. package/dist/server/src/api/services/cast.service.d.ts +7 -0
  362. package/dist/server/src/api/services/cast.service.js +14 -0
  363. package/dist/server/src/api/services/cast.service.js.map +1 -0
  364. package/dist/server/src/api/services/instances.service.js +1 -1
  365. package/dist/server/src/api/services/notifications.service.d.ts +3 -0
  366. package/dist/server/src/api/services/notifications.service.js +9 -0
  367. package/dist/server/src/api/services/notifications.service.js.map +1 -1
  368. package/dist/server/src/api/services/plugins.service.js +18 -3
  369. package/dist/server/src/api/services/plugins.service.js.map +1 -1
  370. package/dist/server/src/api/services/sensors.service.d.ts +41 -0
  371. package/dist/server/src/api/services/sensors.service.js +106 -0
  372. package/dist/server/src/api/services/sensors.service.js.map +1 -0
  373. package/dist/server/src/api/services/server.service.d.ts +4 -0
  374. package/dist/server/src/api/services/server.service.js +14 -0
  375. package/dist/server/src/api/services/server.service.js.map +1 -1
  376. package/dist/server/src/api/services/users.service.js +6 -9
  377. package/dist/server/src/api/services/users.service.js.map +1 -1
  378. package/dist/server/src/api/types/index.d.ts +19 -6
  379. package/dist/server/src/api/websocket/nsp/events.js +38 -15
  380. package/dist/server/src/api/websocket/nsp/events.js.map +1 -1
  381. package/dist/server/src/api.d.ts +0 -2
  382. package/dist/server/src/api.js +0 -12
  383. package/dist/server/src/api.js.map +1 -1
  384. package/dist/server/src/automations/actions/sensor.js +4 -7
  385. package/dist/server/src/automations/actions/sensor.js.map +1 -1
  386. package/dist/server/src/automations/conditions/sensorState.js +4 -4
  387. package/dist/server/src/automations/conditions/sensorState.js.map +1 -1
  388. package/dist/server/src/automations/context.d.ts +2 -1
  389. package/dist/server/src/automations/context.js +2 -1
  390. package/dist/server/src/automations/context.js.map +1 -1
  391. package/dist/server/src/automations/pluginMethodRegistry.d.ts +2 -0
  392. package/dist/server/src/automations/pluginMethodRegistry.js +14 -0
  393. package/dist/server/src/automations/pluginMethodRegistry.js.map +1 -1
  394. package/dist/server/src/automations/triggers/sensor.js +12 -23
  395. package/dist/server/src/automations/triggers/sensor.js.map +1 -1
  396. package/dist/server/src/camera/controller.d.ts +0 -1
  397. package/dist/server/src/camera/controller.js +9 -46
  398. package/dist/server/src/camera/controller.js.map +1 -1
  399. package/dist/server/src/camera/decoder/detection-coordinator.js +13 -11
  400. package/dist/server/src/camera/decoder/detection-coordinator.js.map +1 -1
  401. package/dist/server/src/camera/decoder/plugin-registry.d.ts +1 -0
  402. package/dist/server/src/camera/decoder/plugin-registry.js +13 -1
  403. package/dist/server/src/camera/decoder/plugin-registry.js.map +1 -1
  404. package/dist/server/src/camera/decoder/ptz/autotracker.js +2 -2
  405. package/dist/server/src/camera/decoder/ptz/autotracker.js.map +1 -1
  406. package/dist/server/src/camera/decoder/secondary-stage.js +6 -6
  407. package/dist/server/src/camera/decoder/secondary-stage.js.map +1 -1
  408. package/dist/server/src/camera/decoder/types.d.ts +7 -1
  409. package/dist/server/src/camera/decoder/types.js +4 -0
  410. package/dist/server/src/camera/decoder/types.js.map +1 -1
  411. package/dist/server/src/camera/decoder/worker.d.ts +2 -0
  412. package/dist/server/src/camera/decoder/worker.js +14 -3
  413. package/dist/server/src/camera/decoder/worker.js.map +1 -1
  414. package/dist/server/src/camera/index.d.ts +2 -14
  415. package/dist/server/src/camera/index.js +1 -32
  416. package/dist/server/src/camera/index.js.map +1 -1
  417. package/dist/server/src/camera/sensors/controller.d.ts +17 -77
  418. package/dist/server/src/camera/sensors/controller.js +60 -445
  419. package/dist/server/src/camera/sensors/controller.js.map +1 -1
  420. package/dist/server/src/internal-bus.d.ts +7 -13
  421. package/dist/server/src/internal-bus.js.map +1 -1
  422. package/dist/server/src/main.d.ts +1 -0
  423. package/dist/server/src/main.js +7 -0
  424. package/dist/server/src/main.js.map +1 -1
  425. package/dist/server/src/manager/castManager.d.ts +24 -0
  426. package/dist/server/src/manager/castManager.js +79 -0
  427. package/dist/server/src/manager/castManager.js.map +1 -0
  428. package/dist/server/src/manager/downloadManager.d.ts +1 -0
  429. package/dist/server/src/manager/downloadManager.js +6 -0
  430. package/dist/server/src/manager/downloadManager.js.map +1 -1
  431. package/dist/server/src/manager/notificationManager.d.ts +6 -0
  432. package/dist/server/src/manager/notificationManager.js +70 -3
  433. package/dist/server/src/manager/notificationManager.js.map +1 -1
  434. package/dist/server/src/mqtt/bridge.d.ts +7 -0
  435. package/dist/server/src/mqtt/bridge.js +92 -32
  436. package/dist/server/src/mqtt/bridge.js.map +1 -1
  437. package/dist/server/src/mqtt/ha-discovery.d.ts +1 -1
  438. package/dist/server/src/mqtt/ha-discovery.js +53 -8
  439. package/dist/server/src/mqtt/ha-discovery.js.map +1 -1
  440. package/dist/server/src/mqtt/manager.js +1 -1
  441. package/dist/server/src/mqtt/manager.js.map +1 -1
  442. package/dist/server/src/mqtt/topics.d.ts +3 -3
  443. package/dist/server/src/mqtt/topics.js +11 -10
  444. package/dist/server/src/mqtt/topics.js.map +1 -1
  445. package/dist/server/src/plugins/config-store.js +1 -1
  446. package/dist/server/src/plugins/config-store.js.map +1 -1
  447. package/dist/server/src/plugins/runtime/base.d.ts +1 -0
  448. package/dist/server/src/plugins/runtime/base.js +29 -6
  449. package/dist/server/src/plugins/runtime/base.js.map +1 -1
  450. package/dist/server/src/plugins/runtime/node/child.js +5 -2
  451. package/dist/server/src/plugins/runtime/node/child.js.map +1 -1
  452. package/dist/server/src/plugins/runtime/node/pluginApi.d.ts +2 -0
  453. package/dist/server/src/plugins/runtime/node/pluginApi.js +4 -1
  454. package/dist/server/src/plugins/runtime/node/pluginApi.js.map +1 -1
  455. package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.d.ts +5 -13
  456. package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js +97 -179
  457. package/dist/server/src/plugins/runtime/node/proxy/cameraDevice.js.map +1 -1
  458. package/dist/server/src/plugins/runtime/node/proxy/deviceManager.d.ts +2 -1
  459. package/dist/server/src/plugins/runtime/node/proxy/deviceManager.js +19 -2
  460. package/dist/server/src/plugins/runtime/node/proxy/deviceManager.js.map +1 -1
  461. package/dist/server/src/plugins/runtime/node/proxy/reconnect.d.ts +2 -0
  462. package/dist/server/src/plugins/runtime/node/proxy/reconnect.js +27 -0
  463. package/dist/server/src/plugins/runtime/node/proxy/reconnect.js.map +1 -0
  464. package/dist/server/src/plugins/runtime/node/proxy/sensor.d.ts +17 -3
  465. package/dist/server/src/plugins/runtime/node/proxy/sensor.js +61 -20
  466. package/dist/server/src/plugins/runtime/node/proxy/sensor.js.map +1 -1
  467. package/dist/server/src/plugins/runtime/node/proxy/sensorManager.d.ts +18 -0
  468. package/dist/server/src/plugins/runtime/node/proxy/sensorManager.js +269 -0
  469. package/dist/server/src/plugins/runtime/node/proxy/sensorManager.js.map +1 -0
  470. package/dist/server/src/plugins/runtime/node/storage.d.ts +1 -1
  471. package/dist/server/src/plugins/runtime/node/storage.js +2 -2
  472. package/dist/server/src/plugins/runtime/node/storage.js.map +1 -1
  473. package/dist/server/src/plugins/runtime/node/storageController.d.ts +5 -5
  474. package/dist/server/src/plugins/runtime/node/storageController.js +20 -28
  475. package/dist/server/src/plugins/runtime/node/storageController.js.map +1 -1
  476. package/dist/server/src/plugins/runtime/python/child.py +13 -7
  477. package/dist/server/src/plugins/runtime/python/namespaces.py +13 -19
  478. package/dist/server/src/plugins/runtime/python/plugin_api.py +10 -1
  479. package/dist/server/src/plugins/runtime/python/proxy/camera_device.py +130 -280
  480. package/dist/server/src/plugins/runtime/python/proxy/device_manager.py +18 -0
  481. package/dist/server/src/plugins/runtime/python/proxy/sensor.py +88 -21
  482. package/dist/server/src/plugins/runtime/python/proxy/sensor_manager.py +386 -0
  483. package/dist/server/src/plugins/runtime/python/storage.py +1 -3
  484. package/dist/server/src/plugins/runtime/python/storage_controller.py +19 -50
  485. package/dist/server/src/plugins/runtime/python/store.py +19 -95
  486. package/dist/server/src/plugins/runtime/python/typings.py +32 -9
  487. package/dist/server/src/plugins/store/layout.d.ts +1 -2
  488. package/dist/server/src/plugins/store/layout.js +9 -56
  489. package/dist/server/src/plugins/store/layout.js.map +1 -1
  490. package/dist/server/src/plugins/store/location.d.ts +2 -3
  491. package/dist/server/src/plugins/store/location.js +5 -13
  492. package/dist/server/src/plugins/store/location.js.map +1 -1
  493. package/dist/server/src/plugins/store/pluginStoreFile.d.ts +1 -2
  494. package/dist/server/src/plugins/store/pluginStoreFile.js +8 -15
  495. package/dist/server/src/plugins/store/pluginStoreFile.js.map +1 -1
  496. package/dist/server/src/plugins/worker.d.ts +2 -0
  497. package/dist/server/src/plugins/worker.js +26 -7
  498. package/dist/server/src/plugins/worker.js.map +1 -1
  499. package/dist/server/src/rpc/index.d.ts +2 -0
  500. package/dist/server/src/rpc/index.js +5 -0
  501. package/dist/server/src/rpc/index.js.map +1 -1
  502. package/dist/server/src/rpc/interfaces/sensor.d.ts +33 -16
  503. package/dist/server/src/rpc/namespaces.d.ts +17 -8
  504. package/dist/server/src/rpc/namespaces.js +20 -12
  505. package/dist/server/src/rpc/namespaces.js.map +1 -1
  506. package/dist/server/src/rpc/server.js +1 -0
  507. package/dist/server/src/rpc/server.js.map +1 -1
  508. package/dist/server/src/sensors/registry.d.ts +96 -0
  509. package/dist/server/src/sensors/registry.js +808 -0
  510. package/dist/server/src/sensors/registry.js.map +1 -0
  511. package/dist/server/src/{camera/sensors → sensors}/semantics.d.ts +1 -1
  512. package/dist/server/src/{camera/sensors → sensors}/semantics.js +4 -1
  513. package/dist/server/src/sensors/semantics.js.map +1 -0
  514. package/dist/server/src/sensors/sensor.d.ts +58 -0
  515. package/dist/server/src/{camera/sensors → sensors}/sensor.js +43 -32
  516. package/dist/server/src/sensors/sensor.js.map +1 -0
  517. package/dist/server/src/{camera/sensors → sensors}/types.d.ts +2 -0
  518. package/dist/server/src/{camera/sensors → sensors}/types.js +9 -0
  519. package/dist/server/src/sensors/types.js.map +1 -0
  520. package/dist/server/src/{camera/sensors → sensors}/virtual.d.ts +4 -6
  521. package/dist/server/src/{camera/sensors → sensors}/virtual.js +10 -56
  522. package/dist/server/src/sensors/virtual.js.map +1 -0
  523. package/dist/server/src/services/mdns/index.js +4 -0
  524. package/dist/server/src/services/mdns/index.js.map +1 -1
  525. package/package.json +11 -11
  526. package/dist/interface/assets/404-0d936klL.js +0 -1
  527. package/dist/interface/assets/About-BMwYrGrl.js +0 -1
  528. package/dist/interface/assets/Adminpanel-DBsOmAuo.js +0 -1
  529. package/dist/interface/assets/Automation-BLndVfqR.js +0 -3
  530. package/dist/interface/assets/AutomationImport-Ba33juY0.js +0 -2
  531. package/dist/interface/assets/AutomationStore-Bjf1x7go.js +0 -2
  532. package/dist/interface/assets/AutomationStoreDetail-Ko3n3U1U.js +0 -2
  533. package/dist/interface/assets/Automations-BfC8bvkT.js +0 -2
  534. package/dist/interface/assets/Camera-BYDPeH6d.js +0 -2
  535. package/dist/interface/assets/CameraConsole-pVCj1xXI.js +0 -7
  536. package/dist/interface/assets/Cameras-DdokAe_Q.js +0 -652
  537. package/dist/interface/assets/Camview-DmuGSzal.js +0 -1
  538. package/dist/interface/assets/Config-DvVqB0_Y.js +0 -2
  539. package/dist/interface/assets/ConfigActionDelay-B1JjI6bg.js +0 -1
  540. package/dist/interface/assets/ConfigActionHttp-BzGIbeVo.js +0 -1
  541. package/dist/interface/assets/ConfigActionImageInput-C6m2-s8z.js +0 -1
  542. package/dist/interface/assets/ConfigActionMqtt-ByZNQKsg.js +0 -1
  543. package/dist/interface/assets/ConfigActionNotification-YmdMddoN.js +0 -1
  544. package/dist/interface/assets/ConfigActionNotificationControl-2hWDRBpq.js +0 -1
  545. package/dist/interface/assets/ConfigActionOutput-D9k1-jfI.js +0 -1
  546. package/dist/interface/assets/ConfigActionPlugin-DjD_94EX.js +0 -1
  547. package/dist/interface/assets/ConfigActionSensor-fak8jYSC.js +0 -1
  548. package/dist/interface/assets/ConfigActionSnapshot-mwEHXqyk.js +0 -1
  549. package/dist/interface/assets/ConfigActionVariable-kBxNfyOV.js +0 -1
  550. package/dist/interface/assets/ConfigConditionIfElse-CkjmImTD.js +0 -1
  551. package/dist/interface/assets/ConfigConditionSensorState-FE3mFjRe.js +0 -1
  552. package/dist/interface/assets/ConfigConditionSwitch-msqWizIt.js +0 -1
  553. package/dist/interface/assets/ConfigConditionTime-ifPV135b.js +0 -1
  554. package/dist/interface/assets/ConfigSensorValueInput-Bg3SEbSh.js +0 -1
  555. package/dist/interface/assets/ConfigTriggerGeofence-CemaUwl5.js +0 -1
  556. package/dist/interface/assets/ConfigTriggerManual-DWuiq7PC.js +0 -1
  557. package/dist/interface/assets/ConfigTriggerMqtt-DxAoDh2Z.js +0 -1
  558. package/dist/interface/assets/ConfigTriggerSchedule-DDqgMGvp.js +0 -1
  559. package/dist/interface/assets/ConfigTriggerSensor-M6bXqz4k.js +0 -1
  560. package/dist/interface/assets/ConfigTriggerWebhook-CxOXgcJi.js +0 -1
  561. package/dist/interface/assets/Console-CMuW2_8s.js +0 -1
  562. package/dist/interface/assets/CuiAutomationRunsDialog-yh1qHzmS.js +0 -1
  563. package/dist/interface/assets/CuiBottomSheet-BshiVWqw.js +0 -1
  564. package/dist/interface/assets/CuiBottomSheet-DSNyVg5P.js +0 -1
  565. package/dist/interface/assets/CuiCameraPipCard-Cmk0jl6M.js +0 -1
  566. package/dist/interface/assets/CuiCameraRecordings-KU1wIai4.js +0 -1
  567. package/dist/interface/assets/CuiCameraShares-BoR3YQWj.js +0 -1
  568. package/dist/interface/assets/CuiCameraTable-BRPBqU8V.js +0 -2
  569. package/dist/interface/assets/CuiDataTable-BGY4VBtv.js +0 -1
  570. package/dist/interface/assets/CuiList-BSOMR296.js +0 -1
  571. package/dist/interface/assets/CuiMarkdownContent-DEMo42iT.js +0 -1
  572. package/dist/interface/assets/CuiMarkdownContent-Xn_VHwym.js +0 -1
  573. package/dist/interface/assets/CuiPluginCard-CgJb8B1W.js +0 -2
  574. package/dist/interface/assets/CuiPluginOAuthButton-XpEyqoRm.js +0 -2
  575. package/dist/interface/assets/CuiQRCode-QBkbmvRA.js +0 -1
  576. package/dist/interface/assets/CuiRecordingsGrid-CuEl_hhu.js +0 -1
  577. package/dist/interface/assets/CuiSchema-D_cg-H5i.js +0 -1
  578. package/dist/interface/assets/CuiTopNavbarItem-CXijnkK9.js +0 -1
  579. package/dist/interface/assets/Faces-C95mlWaW.js +0 -1
  580. package/dist/interface/assets/FirstSteps-Cpbg7fng.js +0 -1
  581. package/dist/interface/assets/Instances-BgJtM1Xl.js +0 -1
  582. package/dist/interface/assets/Logs-BWXYqm5T.js +0 -6
  583. package/dist/interface/assets/Menu-BO9Zjy1w.js +0 -1
  584. package/dist/interface/assets/OAuthDeviceFlow-NnwqdmBM.js +0 -1
  585. package/dist/interface/assets/Plugin-DQq3xjhe.js +0 -1
  586. package/dist/interface/assets/PluginConsole-BTsVAsKf.js +0 -7
  587. package/dist/interface/assets/PluginDetail-CTyzzZVU.js +0 -2
  588. package/dist/interface/assets/PluginSchema-Bn3pHjQA.js +0 -1
  589. package/dist/interface/assets/PluginSearch-DbXCyUF0.js +0 -1
  590. package/dist/interface/assets/PluginSearch-z0z8Z1gP.js +0 -2
  591. package/dist/interface/assets/Plugins-Cy7e-ty2.js +0 -1
  592. package/dist/interface/assets/Recordings-CWBpGEUf.js +0 -1
  593. package/dist/interface/assets/Settings-CUIORSmm.js +0 -1
  594. package/dist/interface/assets/SettingsAccount-CeJBKpzp.js +0 -1
  595. package/dist/interface/assets/SettingsAccount-CnwVrQx1.js +0 -1
  596. package/dist/interface/assets/SettingsAppearance-BraaC0WF.js +0 -1
  597. package/dist/interface/assets/SettingsAppearance-CZrOTBki.js +0 -1
  598. package/dist/interface/assets/SettingsBackup-y9mb8XZZ.js +0 -1
  599. package/dist/interface/assets/SettingsList-DsKncveQ.js +0 -1
  600. package/dist/interface/assets/SettingsMqtt-DTyyctmQ.js +0 -1
  601. package/dist/interface/assets/SettingsNotifications-SFMt4Yuj.js +0 -2
  602. package/dist/interface/assets/SettingsPermissions-CktJaQzL.js +0 -1
  603. package/dist/interface/assets/SettingsRecordings-Bqguyt6u.js +0 -1
  604. package/dist/interface/assets/SettingsRemote-CTv7bb4g.js +0 -1
  605. package/dist/interface/assets/SettingsSystem-CkCnB34r.js +0 -2
  606. package/dist/interface/assets/SettingsUsers-D8LAGd6F.js +0 -1
  607. package/dist/interface/assets/Terminal-DaR9Ur0_.js +0 -4
  608. package/dist/interface/assets/VariableInput-D0TP_Lmo.js +0 -1
  609. package/dist/interface/assets/VariableSuggestions--vq7928F.js +0 -1
  610. package/dist/interface/assets/VersionsHandler-D9GDdcXr.js +0 -7
  611. package/dist/interface/assets/Workers-CUyRzwJG.js +0 -2
  612. package/dist/interface/assets/ace-DYqf8ZN7.js +0 -1
  613. package/dist/interface/assets/alert-outline-BUvdNY2J.js +0 -1
  614. package/dist/interface/assets/api-DxrxNyIH.js +0 -2
  615. package/dist/interface/assets/api-VZ_wVUpU.css +0 -2
  616. package/dist/interface/assets/arrow-left-LdfKbcre.js +0 -1
  617. package/dist/interface/assets/arrow-right-outline-BbTEhBJq.js +0 -1
  618. package/dist/interface/assets/automationBlueprint-DMjszOs4.js +0 -1
  619. package/dist/interface/assets/automations-51-JMUWD.js +0 -1
  620. package/dist/interface/assets/check-circle-D-utE_P9.js +0 -1
  621. package/dist/interface/assets/chevron-down-OEjMpuec.js +0 -1
  622. package/dist/interface/assets/chevron-right-B3nxd9UE.js +0 -1
  623. package/dist/interface/assets/cloudHandoff-BktPB9rt.js +0 -1
  624. package/dist/interface/assets/copy-BvSzmsFs.js +0 -1
  625. package/dist/interface/assets/delete-B9BZTgya.js +0 -1
  626. package/dist/interface/assets/dist-qdWlJrr0.js +0 -1
  627. package/dist/interface/assets/download-Dp_ssGIE.js +0 -1
  628. package/dist/interface/assets/esm-9VMgxuPI.js +0 -1
  629. package/dist/interface/assets/esm-B69zS8aI.js +0 -1
  630. package/dist/interface/assets/esm-BF94InGP.js +0 -1
  631. package/dist/interface/assets/esm-BHdK6hkk.js +0 -1
  632. package/dist/interface/assets/esm-BYm8JT8N.js +0 -1
  633. package/dist/interface/assets/esm-BwCmHX2G.js +0 -1
  634. package/dist/interface/assets/esm-CL6t-XYT.js +0 -1
  635. package/dist/interface/assets/esm-CXstRMXa.js +0 -1
  636. package/dist/interface/assets/esm-Ckb9rjlL.js +0 -1
  637. package/dist/interface/assets/esm-D4insKbc.js +0 -1
  638. package/dist/interface/assets/esm-DiReJ8YS.js +0 -1
  639. package/dist/interface/assets/esm-Dt_Neag0.js +0 -1
  640. package/dist/interface/assets/esm-GspmWlKf.js +0 -1
  641. package/dist/interface/assets/esm-eezqpB2a.js +0 -1
  642. package/dist/interface/assets/flowSchema-Ckr7CEbZ.js +0 -1
  643. package/dist/interface/assets/home-DL94781-.js +0 -1
  644. package/dist/interface/assets/main-BxM81wMi.css +0 -1
  645. package/dist/interface/assets/main-DOjghmGX.js +0 -3
  646. package/dist/interface/assets/mqtt-COazyb4A.js +0 -1
  647. package/dist/interface/assets/native-WiRjRKUS.js +0 -1
  648. package/dist/interface/assets/native-hhip9y-E.js +0 -1
  649. package/dist/interface/assets/nodeDefinitions-CPyyuw1P.js +0 -1
  650. package/dist/interface/assets/plugin-DIVM640y.js +0 -1
  651. package/dist/interface/assets/plus-CTzaBaTz.js +0 -1
  652. package/dist/interface/assets/power-CvKGepBP.js +0 -1
  653. package/dist/interface/assets/rolldown-runtime-DAXXjFlN.js +0 -1
  654. package/dist/interface/assets/round-restart-alt-D3iswthu.js +0 -1
  655. package/dist/interface/assets/trash-can-outline-HvqPHpF7.js +0 -1
  656. package/dist/interface/assets/types-CDJiWcQ7.js +0 -1
  657. package/dist/interface/assets/upload-B6yqOWqz.js +0 -1
  658. package/dist/interface/assets/useBackupRestore-QuXkc5ZG.js +0 -1
  659. package/dist/interface/assets/useCameraOptions-D5-bI-e6.js +0 -1
  660. package/dist/interface/assets/useLogsSocket-BlAo-xcw.js +0 -5
  661. package/dist/interface/assets/useServerRestart-DctcFWWh.js +0 -1
  662. package/dist/interface/assets/useUserOptions-nuBRgAEk.js +0 -1
  663. package/dist/interface/assets/vendor-ace-CrklN-bc.js +0 -1085
  664. package/dist/interface/assets/vendor-cameraui-B_OCKNGw.js +0 -2040
  665. package/dist/interface/assets/vendor-capacitor-D6T-f6Q_.js +0 -2
  666. package/dist/interface/assets/vendor-chart-DpsXMlB-.js +0 -3
  667. package/dist/interface/assets/vendor-core-zLmLhSHM.js +0 -1
  668. package/dist/interface/assets/vendor-draggabilly-OrLwQbim.js +0 -1
  669. package/dist/interface/assets/vendor-gridstack-C6VKsm_r.js +0 -3
  670. package/dist/interface/assets/vendor-markdown-_OBaDsnU.js +0 -15
  671. package/dist/interface/assets/vendor-nfBMzqgY.js +0 -22
  672. package/dist/interface/assets/vendor-vueflow-B1MUSE71.js +0 -26
  673. package/dist/interface/assets/vendor-xterm-IIYDrBG1.js +0 -142
  674. package/dist/interface/assets/vendor-zod-BaT-dXMv.js +0 -127
  675. package/dist/interface/assets/web-B-SlpbxK.js +0 -1
  676. package/dist/interface/assets/web-B6leYIzJ.js +0 -1
  677. package/dist/interface/assets/web-BLDe3Kn0.js +0 -1
  678. package/dist/interface/assets/web-BT-51W2W.js +0 -1
  679. package/dist/interface/assets/web-BjKL51lK-DHLvmMLr.js +0 -1
  680. package/dist/interface/assets/web-BpRU7MbT.js +0 -1
  681. package/dist/interface/assets/web-CiaJvmq8.js +0 -1
  682. package/dist/interface/assets/web-Cnkt61og.js +0 -1
  683. package/dist/interface/assets/web-CzhM-YH1.js +0 -1
  684. package/dist/interface/assets/web-Da5rcZ2Q.js +0 -1
  685. package/dist/interface/assets/web-DdZjFuTb.js +0 -1
  686. package/dist/interface/assets/web-DnHj9sl9.js +0 -1
  687. package/dist/interface/assets/web-E4Ew4Xhj.js +0 -1
  688. package/dist/interface/assets/web-q63OEDhG.js +0 -1
  689. package/dist/interface/assets/workbox-window.prod.es5-BMiTt6Ad.js +0 -1
  690. package/dist/server/src/_camera_ui_tools/camera_ui_sdk/internal/sensor_triggers.py +0 -4
  691. package/dist/server/src/api/controllers/virtualsensors.controller.d.ts +0 -11
  692. package/dist/server/src/api/controllers/virtualsensors.controller.js +0 -61
  693. package/dist/server/src/api/controllers/virtualsensors.controller.js.map +0 -1
  694. package/dist/server/src/api/routes/virtualsensors.routes.d.ts +0 -2
  695. package/dist/server/src/api/routes/virtualsensors.routes.js +0 -63
  696. package/dist/server/src/api/routes/virtualsensors.routes.js.map +0 -1
  697. package/dist/server/src/api/schemas/virtualsensors.schema.js +0 -14
  698. package/dist/server/src/api/schemas/virtualsensors.schema.js.map +0 -1
  699. package/dist/server/src/api/services/virtualsensors.service.d.ts +0 -20
  700. package/dist/server/src/api/services/virtualsensors.service.js +0 -151
  701. package/dist/server/src/api/services/virtualsensors.service.js.map +0 -1
  702. package/dist/server/src/camera/sensors/semantics.js.map +0 -1
  703. package/dist/server/src/camera/sensors/sensor.d.ts +0 -34
  704. package/dist/server/src/camera/sensors/sensor.js.map +0 -1
  705. package/dist/server/src/camera/sensors/stable-id.d.ts +0 -2
  706. package/dist/server/src/camera/sensors/stable-id.js +0 -17
  707. package/dist/server/src/camera/sensors/stable-id.js.map +0 -1
  708. package/dist/server/src/camera/sensors/types.js.map +0 -1
  709. package/dist/server/src/camera/sensors/virtual.js.map +0 -1
  710. package/dist/server/src/plugins/runtime/python/store_migrate.py +0 -59
  711. package/dist/server/src/plugins/store/migrate.d.ts +0 -1
  712. package/dist/server/src/plugins/store/migrate.js +0 -22
  713. package/dist/server/src/plugins/store/migrate.js.map +0 -1
@@ -11,7 +11,7 @@ from .base import Sensor, SensorCategory, SensorLike, SensorType
11
11
 
12
12
 
13
13
  class BatteryCapability(StrEnum):
14
- """Optional capabilities for battery info sensors."""
14
+ """Optional capabilities of a battery info sensor."""
15
15
 
16
16
  LowBattery = "lowBattery"
17
17
  """Sensor reports low-battery alerts."""
@@ -20,14 +20,14 @@ class BatteryCapability(StrEnum):
20
20
 
21
21
 
22
22
  class BatteryProperty(StrEnum):
23
- """Properties for battery info sensors."""
23
+ """Property names of a battery info sensor."""
24
24
 
25
25
  Level = "level"
26
26
  """Battery level percentage (0-100)."""
27
27
  Charging = "charging"
28
28
  """Current charging state."""
29
29
  Low = "low"
30
- """Whether battery is critically low."""
30
+ """Whether the battery is critically low."""
31
31
 
32
32
 
33
33
  class ChargingState(StrEnum):
@@ -44,7 +44,7 @@ class ChargingState(StrEnum):
44
44
 
45
45
 
46
46
  class BatteryInfoProperties(TypedDict):
47
- """Property value map for battery info sensors."""
47
+ """Property values of a battery info sensor."""
48
48
 
49
49
  level: int
50
50
  charging: ChargingState
@@ -52,10 +52,12 @@ class BatteryInfoProperties(TypedDict):
52
52
 
53
53
 
54
54
  class BatteryPropertyChangeData(TypedDict):
55
- """Emitted on BatteryInfoLike.onPropertyChanged."""
55
+ """Property change payload emitted on BatteryInfoLike.onPropertyChanged."""
56
56
 
57
- property: str # BatteryProperty value
57
+ property: str
58
+ """Name of the changed property, a BatteryProperty value."""
58
59
  value: int | ChargingState | bool
60
+ """New value of the property."""
59
61
 
60
62
 
61
63
  TStorage = TypeVar("TStorage", bound=Mapping[str, Any], default=dict[str, Any])
@@ -69,6 +71,12 @@ class BatteryInfoLike(SensorLike, Protocol):
69
71
  def type(self) -> SensorType:
70
72
  return SensorType.Battery
71
73
 
74
+ @property
75
+ def onPropertyChanged(self) -> Observable[BatteryPropertyChangeData]: ...
76
+
77
+ @property
78
+ def onCapabilitiesChanged(self) -> Observable[list[BatteryCapability]]: ...
79
+
72
80
  @overload
73
81
  def getValue(self, property: Literal[BatteryProperty.Level]) -> int | None: ...
74
82
  @overload
@@ -78,24 +86,18 @@ class BatteryInfoLike(SensorLike, Protocol):
78
86
  @overload
79
87
  def getValue(self, property: str) -> object | None: ...
80
88
 
81
- @property
82
- def onPropertyChanged(self) -> Observable[BatteryPropertyChangeData]: ...
83
-
84
- @property
85
- def onCapabilitiesChanged(self) -> Observable[list[BatteryCapability]]: ...
86
-
87
89
 
88
90
  class BatteryInfo(Sensor[BatteryInfoProperties, TStorage, BatteryCapability], Generic[TStorage]):
89
91
  """Battery info sensor. Reports battery level, charging state, and low-battery alerts.
90
92
 
91
- Plugin authors call `setLevel(value)`, `setCharging(state)`, and `setLow(value)`
93
+ Plugin authors call ``setLevel(value)``, ``setCharging(state)``, and ``setLow(value)``
92
94
  to push updates from the device.
93
95
  """
94
96
 
95
97
  _requires_frames = False
96
98
 
97
- def __init__(self, name: str = "Battery") -> None:
98
- super().__init__(name)
99
+ def __init__(self, name: str = "Battery", *, native_id: str | None = None) -> None:
100
+ super().__init__(name, native_id=native_id)
99
101
  self._write_state(
100
102
  {
101
103
  BatteryProperty.Level.value: 100,
@@ -167,4 +169,3 @@ class BatteryInfo(Sensor[BatteryInfoProperties, TStorage, BatteryCapability], Ge
167
169
 
168
170
  async def updateValue(self, property: str, value: Any) -> None:
169
171
  """Read-only sensor: external writes are ignored."""
170
- # No-op — battery state is reported by the plugin, not set externally.
@@ -16,20 +16,25 @@ from .spec import ModelSpec
16
16
  class ClassifierProperty(StrEnum):
17
17
  """Property names of a classifier sensor."""
18
18
 
19
- Detected = "detected" # Whether any classification result is active
20
- Detections = "detections" # List of classification results with labels and confidence
21
- Labels = "labels" # Unique labels of the current detections (auto-derived when reporting detections)
19
+ Detected = "detected"
20
+ """Whether any classification result is active."""
21
+ Detections = "detections"
22
+ """List of classification results with labels and confidence."""
23
+ Labels = "labels"
24
+ """Unique labels of the current detections (auto-derived when reporting detections)."""
22
25
 
23
26
 
24
27
  class ClassifierDetection(Detection):
25
28
  """A classifier detection result with an open attribute for classifier categories."""
26
29
 
27
- attribute: str # type: ignore[misc] # Classifier category (e.g. "bird", "delivery") — open string for any classifier
28
- subAttribute: str # Classifier sub-category (e.g. "woodpecker", "amazon")
30
+ attribute: str # type: ignore[misc]
31
+ """Classifier category (e.g. "bird", "delivery"). Open string for any classifier."""
32
+ subAttribute: str
33
+ """Classifier sub-category (e.g. "woodpecker", "amazon")."""
29
34
 
30
35
 
31
36
  class ClassifierSensorProperties(TypedDict):
32
- """Property shape carried by a ClassifierSensor."""
37
+ """Property values of a classifier sensor."""
33
38
 
34
39
  detected: bool
35
40
  detections: list[ClassifierDetection]
@@ -39,8 +44,10 @@ class ClassifierSensorProperties(TypedDict):
39
44
  class ClassifierPropertyChangeData(TypedDict):
40
45
  """Property change payload emitted on ClassifierSensorLike.onPropertyChanged."""
41
46
 
42
- property: str # ClassifierProperty value
47
+ property: str
48
+ """Name of the changed property, a ClassifierProperty value."""
43
49
  value: bool | list[ClassifierDetection] | list[str]
50
+ """New value of the property."""
44
51
 
45
52
 
46
53
  TStorage = TypeVar("TStorage", bound=Mapping[str, Any], default=dict[str, Any])
@@ -54,6 +61,9 @@ class ClassifierSensorLike(SensorLike, Protocol):
54
61
  def type(self) -> SensorType:
55
62
  return SensorType.Classifier
56
63
 
64
+ @property
65
+ def onPropertyChanged(self) -> Observable[ClassifierPropertyChangeData]: ...
66
+
57
67
  @overload
58
68
  def getValue(self, property: Literal[ClassifierProperty.Detected]) -> bool | None: ...
59
69
  @overload
@@ -65,21 +75,18 @@ class ClassifierSensorLike(SensorLike, Protocol):
65
75
  @overload
66
76
  def getValue(self, property: str) -> object | None: ...
67
77
 
68
- @property
69
- def onPropertyChanged(self) -> Observable[ClassifierPropertyChangeData]: ...
70
-
71
78
 
72
79
  class ClassifierSensor(Sensor[ClassifierSensorProperties, TStorage, str], Generic[TStorage]):
73
80
  """General-purpose image classifier sensor.
74
81
 
75
- Plugin authors call `reportDetections(list)` to push classification results.
76
- `detected` and `labels` are auto-derived from the detection list.
82
+ Plugin authors call ``reportDetections(list)`` to push classification results.
83
+ ``detected`` and ``labels`` are auto-derived from the detection list.
77
84
  """
78
85
 
79
86
  _requires_frames = False
80
87
 
81
- def __init__(self, name: str = "Classifier") -> None:
82
- super().__init__(name)
88
+ def __init__(self, name: str = "Classifier", *, native_id: str | None = None) -> None:
89
+ super().__init__(name, native_id=native_id)
83
90
  self._write_state(
84
91
  {
85
92
  ClassifierProperty.Detected.value: False,
@@ -98,28 +105,25 @@ class ClassifierSensor(Sensor[ClassifierSensorProperties, TStorage, str], Generi
98
105
 
99
106
  @property
100
107
  def detected(self) -> bool:
101
- """Whether any classification result is active."""
102
108
  return bool(self.props.detected)
103
109
 
104
110
  @property
105
111
  def detections(self) -> list[ClassifierDetection]:
106
- """Current detection list."""
107
112
  return self.props.detections or []
108
113
 
109
114
  @property
110
115
  def labels(self) -> list[str]:
111
- """Unique labels of the current detections."""
112
116
  return self.props.labels or []
113
117
 
114
118
  def reportDetections(self, detected: bool, detections: list[ClassifierDetection] | None = None) -> None:
115
119
  """Report classification results. Auto-derives ``detected`` and
116
120
  ``labels`` from the list.
117
121
 
118
- - ``reportDetections(True)`` generic classification trigger. The SDK
122
+ - ``reportDetections(True)``: generic classification trigger. The SDK
119
123
  synthesizes a single full-frame detection with empty attribute and
120
124
  sub-attribute.
121
- - ``reportDetections(True, [...])`` explicit classifier detections.
122
- - ``reportDetections(False)`` clear.
125
+ - ``reportDetections(True, [...])``: explicit classifier detections.
126
+ - ``reportDetections(False)``: clear.
123
127
 
124
128
  Args:
125
129
  detected: Whether any classification result is active.
@@ -163,30 +167,30 @@ class ClassifierSensor(Sensor[ClassifierSensorProperties, TStorage, str], Generi
163
167
 
164
168
  async def updateValue(self, property: str, value: Any) -> None:
165
169
  """Read-only sensor: external writes are ignored."""
166
- # No-op — classifier state is reported by the plugin, not set externally.
167
170
 
168
171
 
169
172
  class ClassifierResult(TypedDict):
170
173
  """Return type for ClassifierDetectorSensor.detectClassifications()."""
171
174
 
172
- detected: bool # Whether any classification result is emitted for this frame
173
- detections: list[ClassifierDetection] # Detections emitted for this frame
175
+ detected: bool
176
+ """Whether any classification result is emitted for this frame."""
177
+ detections: list[ClassifierDetection]
178
+ """Detections emitted for this frame."""
174
179
 
175
180
 
176
181
  class ClassifierDetectorSensor(ClassifierSensor[TStorage], Generic[TStorage]):
177
182
  """Classifier detector that receives video frames from the backend pipeline.
178
183
 
179
184
  Extend this class and implement ``detectClassifications`` to run image
180
- classification models against trigger regions.
185
+ classification models against trigger regions. The backend scales frames
186
+ to match ``modelSpec.input`` dimensions before each call.
181
187
  """
182
188
 
183
189
  _requires_frames = True
184
190
 
185
191
  @property
186
192
  @abstractmethod
187
- def modelSpec(self) -> ModelSpec:
188
- """Declares the expected input dimensions and trigger labels. The backend scales frames to match."""
189
- ...
193
+ def modelSpec(self) -> ModelSpec: ...
190
194
 
191
195
  @abstractmethod
192
196
  async def detectClassifications(self, frames: list[VideoFrameData]) -> list[ClassifierResult]:
@@ -14,16 +14,21 @@ from .spec import ModelSpec
14
14
  class ClipEmbedding(TypedDict):
15
15
  """A CLIP embedding result for a detected region."""
16
16
 
17
- label: str # Detection label this embedding was computed for (e.g. "person", "vehicle")
18
- box: BoundingBox # Bounding box of the detected region in normalized coordinates
19
- embedding: list[float] # CLIP embedding vector
17
+ label: str
18
+ """Detection label this embedding was computed for (e.g. "person", "vehicle")."""
19
+ box: BoundingBox
20
+ """Bounding box of the detected region in normalized coordinates."""
21
+ embedding: list[float]
22
+ """CLIP embedding vector."""
20
23
 
21
24
 
22
25
  class ClipResult(TypedDict):
23
26
  """Return type for ClipDetectorSensor.detectEmbeddings()."""
24
27
 
25
- embeddings: list[ClipEmbedding] # Embeddings emitted for this frame
26
- embeddingModel: str # Identifier of the embedding model used to produce the vectors
28
+ embeddings: list[ClipEmbedding]
29
+ """Embeddings emitted for this frame."""
30
+ embeddingModel: str
31
+ """Identifier of the embedding model used to produce the vectors."""
27
32
 
28
33
 
29
34
  TStorage = TypeVar("TStorage", bound=Mapping[str, Any], default=dict[str, Any])
@@ -38,8 +43,8 @@ class ClipDetectorSensor(Sensor[dict[str, Any], TStorage, str], Generic[TStorage
38
43
 
39
44
  _requires_frames = True
40
45
 
41
- def __init__(self, name: str = "CLIP Sensor") -> None:
42
- super().__init__(name)
46
+ def __init__(self, name: str = "CLIP Sensor", *, native_id: str | None = None) -> None:
47
+ super().__init__(name, native_id=native_id)
43
48
 
44
49
  @property
45
50
  def type(self) -> SensorType:
@@ -51,9 +56,7 @@ class ClipDetectorSensor(Sensor[dict[str, Any], TStorage, str], Generic[TStorage
51
56
 
52
57
  @property
53
58
  @abstractmethod
54
- def modelSpec(self) -> ModelSpec:
55
- """Declares the expected input dimensions and trigger labels."""
56
- ...
59
+ def modelSpec(self) -> ModelSpec: ...
57
60
 
58
61
  @abstractmethod
59
62
  async def detectEmbeddings(self, frames: list[VideoFrameData]) -> list[ClipResult]:
@@ -64,5 +67,4 @@ class ClipDetectorSensor(Sensor[dict[str, Any], TStorage, str], Generic[TStorage
64
67
  ...
65
68
 
66
69
  async def updateValue(self, property: str, value: Any) -> None:
67
- """Frame-only sensor: no externally writable properties."""
68
- # No-op — clip detector has no state.
70
+ """Read-only sensor: external writes are ignored."""
@@ -11,23 +11,25 @@ from .base import Sensor, SensorCategory, SensorLike, SensorType
11
11
 
12
12
 
13
13
  class ContactProperty(StrEnum):
14
- """Properties for contact sensors."""
14
+ """Property names of a contact sensor."""
15
15
 
16
16
  Detected = "detected"
17
17
  """Whether the contact is open (true = open, false = closed)."""
18
18
 
19
19
 
20
20
  class ContactSensorProperties(TypedDict):
21
- """Property value map for contact sensors."""
21
+ """Property values of a contact sensor."""
22
22
 
23
23
  detected: bool
24
24
 
25
25
 
26
26
  class ContactPropertyChangeData(TypedDict):
27
- """Emitted on ContactSensorLike.onPropertyChanged."""
27
+ """Property change payload emitted on ContactSensorLike.onPropertyChanged."""
28
28
 
29
- property: str # ContactProperty value
29
+ property: str
30
+ """Name of the changed property, a ContactProperty 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 ContactSensorLike(SensorLike, Protocol):
41
43
  def type(self) -> SensorType:
42
44
  return SensorType.Contact
43
45
 
46
+ @property
47
+ def onPropertyChanged(self) -> Observable[ContactPropertyChangeData]: ...
48
+
44
49
  @overload
45
50
  def getValue(self, property: Literal[ContactProperty.Detected]) -> bool | None: ...
46
51
  @overload
47
52
  def getValue(self, property: str) -> object | None: ...
48
53
 
49
- @property
50
- def onPropertyChanged(self) -> Observable[ContactPropertyChangeData]: ...
51
-
52
54
 
53
55
  class ContactSensor(Sensor[ContactSensorProperties, TStorage, str], Generic[TStorage]):
54
56
  """Contact sensor for door/window open-close state."""
55
57
 
56
58
  _requires_frames = False
57
59
 
58
- def __init__(self, name: str = "Contact Sensor") -> None:
59
- super().__init__(name)
60
+ def __init__(self, name: str = "Contact Sensor", *, native_id: str | None = None) -> None:
61
+ super().__init__(name, native_id=native_id)
60
62
  self._write_state({ContactProperty.Detected.value: False})
61
63
 
62
64
  @property
@@ -86,4 +88,3 @@ class ContactSensor(Sensor[ContactSensorProperties, TStorage, str], Generic[TSto
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 — contact state is reported by the plugin, not set externally.
@@ -30,37 +30,49 @@ class BoundingBox(TypedDict):
30
30
  so they are independent of resolution.
31
31
  """
32
32
 
33
- x: float # X coordinate of the top-left corner (0-1)
34
- y: float # Y coordinate of the top-left corner (0-1)
35
- width: float # Width as a fraction of frame width (0-1)
36
- height: float # Height as a fraction of frame height (0-1)
33
+ x: float
34
+ """X coordinate of the top-left corner (0-1)."""
35
+ y: float
36
+ """Y coordinate of the top-left corner (0-1)."""
37
+ width: float
38
+ """Width as a fraction of frame width (0-1)."""
39
+ height: float
40
+ """Height as a fraction of frame height (0-1)."""
37
41
 
38
42
 
39
43
  class Detection(TypedDict):
40
44
  """A single detection result emitted by any detection sensor."""
41
45
 
42
- label: DetectionLabel # Detection label (e.g. "person", "vehicle")
43
- confidence: float # Confidence score in the range 0-1
44
- box: BoundingBox # Bounding box in normalized coordinates
45
- attribute: NotRequired[
46
- str
47
- ] # Optional sub-detection attribute (DetectionAttribute or classifier-specific)
46
+ label: DetectionLabel
47
+ """Detection label (e.g. "person", "vehicle")."""
48
+ confidence: float
49
+ """Confidence score in the range 0-1."""
50
+ box: BoundingBox
51
+ """Bounding box in normalized coordinates."""
52
+ attribute: NotRequired[str]
53
+ """Optional sub-detection attribute (DetectionAttribute or classifier-specific)."""
48
54
 
49
55
 
50
56
  class VideoFrameData(TypedDict):
51
57
  """Video frame data delivered to detector sensors by the backend pipeline.
52
58
 
53
- The backend handles capture, decoding, and scaling detectors only need
54
- to process the pixel payload.
59
+ The backend handles capture, decoding and scaling. Detectors only process
60
+ the pixel payload.
55
61
  """
56
62
 
57
- id: str # Unique frame or crop identifier used to map batch results back to inputs
58
- cameraId: NotRequired[str] # Camera the frame originated from
59
- data: bytes # Raw pixel buffer
60
- width: int # Frame width in pixels
61
- height: int # Frame height in pixels
62
- format: Literal[
63
- "nv12", "rgb", "rgba", "gray"
64
- ] # Pixel format: rgb=3 bytes/pixel, rgba=4 bytes/pixel, gray=1 byte/pixel, nv12=YUV semi-planar
65
- timestamp: NotRequired[int] # Capture timestamp in milliseconds since epoch
66
- label: NotRequired[str] # Trigger label propagated by the coordinator for secondary detectors
63
+ id: str
64
+ """Unique frame or crop identifier used to map batch results back to inputs."""
65
+ cameraId: NotRequired[str]
66
+ """Camera the frame originated from."""
67
+ data: bytes
68
+ """Raw pixel buffer."""
69
+ width: int
70
+ """Frame width in pixels."""
71
+ height: int
72
+ """Frame height in pixels."""
73
+ format: Literal["nv12", "rgb", "rgba", "gray"]
74
+ """Pixel format: rgb=3 bytes/pixel, rgba=4 bytes/pixel, gray=1 byte/pixel, nv12=YUV semi-planar."""
75
+ timestamp: NotRequired[int]
76
+ """Capture timestamp in milliseconds since epoch."""
77
+ label: NotRequired[str]
78
+ """Trigger label propagated by the coordinator for secondary detectors."""
@@ -12,23 +12,25 @@ from .base import Sensor, SensorCategory, SensorLike, SensorType
12
12
 
13
13
 
14
14
  class DoorbellProperty(StrEnum):
15
- """Properties for doorbell triggers."""
15
+ """Property names of a doorbell trigger."""
16
16
 
17
17
  Ring = "ring"
18
18
  """Whether the doorbell is currently ringing."""
19
19
 
20
20
 
21
21
  class DoorbellTriggerProperties(TypedDict):
22
- """Property value map for doorbell triggers."""
22
+ """Property values of a doorbell trigger."""
23
23
 
24
24
  ring: bool
25
25
 
26
26
 
27
27
  class DoorbellPropertyChangeData(TypedDict):
28
- """Emitted on DoorbellTriggerLike.onPropertyChanged."""
28
+ """Property change payload emitted on DoorbellTriggerLike.onPropertyChanged."""
29
29
 
30
- property: str # DoorbellProperty value
30
+ property: str
31
+ """Name of the changed property, a DoorbellProperty value."""
31
32
  value: bool
33
+ """New value of the property."""
32
34
 
33
35
 
34
36
  TStorage = TypeVar("TStorage", bound=Mapping[str, Any], default=dict[str, Any])
@@ -42,32 +44,32 @@ class DoorbellTriggerLike(SensorLike, Protocol):
42
44
  def type(self) -> SensorType:
43
45
  return SensorType.Doorbell
44
46
 
47
+ @property
48
+ def onPropertyChanged(self) -> Observable[DoorbellPropertyChangeData]: ...
49
+
45
50
  @overload
46
51
  def getValue(self, property: Literal[DoorbellProperty.Ring]) -> bool | None: ...
47
52
  @overload
48
53
  def getValue(self, property: str) -> object | None: ...
49
54
 
50
- @property
51
- def onPropertyChanged(self) -> Observable[DoorbellPropertyChangeData]: ...
52
-
53
55
 
54
- #: Auto-reset duration after `trigger()` is called (ms).
56
+ #: Auto-reset duration after ``trigger()`` is called (ms).
55
57
  RING_AUTO_RESET_MS = 2000
56
58
 
57
59
 
58
60
  class DoorbellTrigger(Sensor[DoorbellTriggerProperties, TStorage, str], Generic[TStorage]):
59
61
  """Doorbell trigger sensor.
60
62
 
61
- Plugin authors call `trigger()` to fire a doorbell event. The `ring` property
62
- is set to True and automatically reset to False after a short delay
63
- (``RING_AUTO_RESET_MS``). Calling `trigger()` again while still ringing
64
- resets the timer (extends the ring phase).
63
+ Plugin authors call ``trigger()`` to fire a doorbell event. The ``ring``
64
+ property is set to True and automatically reset to False after a short
65
+ delay (``RING_AUTO_RESET_MS``). Calling ``trigger()`` again while still
66
+ ringing resets the timer (extends the ring phase).
65
67
  """
66
68
 
67
69
  _requires_frames = False
68
70
 
69
- def __init__(self, name: str = "Doorbell") -> None:
70
- super().__init__(name)
71
+ def __init__(self, name: str = "Doorbell", *, native_id: str | None = None) -> None:
72
+ super().__init__(name, native_id=native_id)
71
73
  self._ring_reset_timer: threading.Timer | None = None
72
74
  self._write_state({DoorbellProperty.Ring.value: False})
73
75
 
@@ -107,11 +109,9 @@ class DoorbellTrigger(Sensor[DoorbellTriggerProperties, TStorage, str], Generic[
107
109
  self._ring_reset_timer.start()
108
110
 
109
111
  async def updateValue(self, property: str, value: Any) -> None:
110
- """Cross-process consumer entry point. Writing ``ring=true`` (any
111
- truthy value) dispatches to ``trigger()`` so a UI test button or
112
- external automation can fire the doorbell using the same flow as a
113
- real hardware ring (auto-reset included). Writing ``ring=false`` is
114
- ignored — the auto-reset timer owns the off transition.
112
+ """Routes generic property writes to the semantic setters.
113
+
114
+ Writing ring=false is ignored, the auto-reset timer owns the off transition.
115
115
  """
116
116
  if property == DoorbellProperty.Ring.value and value:
117
117
  self.trigger()