@homebridge-plugins/homebridge-eufy-security 4.7.2 → 5.0.0-beta.0

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 (471) hide show
  1. package/AUTHORS +4 -0
  2. package/CODE_OF_CONDUCT.md +30 -0
  3. package/CONTRIBUTING.md +77 -0
  4. package/README.md +152 -49
  5. package/SECURITY.md +30 -0
  6. package/config.schema.json +92 -3
  7. package/dist/account/ownership.js +290 -0
  8. package/dist/account/ownership.js.map +1 -0
  9. package/dist/account/persistence.js +274 -0
  10. package/dist/account/persistence.js.map +1 -0
  11. package/dist/account/temporary-authentication.js +348 -0
  12. package/dist/account/temporary-authentication.js.map +1 -0
  13. package/dist/configuration.js +167 -0
  14. package/dist/configuration.js.map +1 -0
  15. package/dist/device/member-evidence.js +66 -0
  16. package/dist/device/member-evidence.js.map +1 -0
  17. package/dist/device/member-trust.js +114 -0
  18. package/dist/device/member-trust.js.map +1 -0
  19. package/dist/device/snapshot.js +190 -0
  20. package/dist/device/snapshot.js.map +1 -0
  21. package/dist/diagnostics.js +2218 -0
  22. package/dist/diagnostics.js.map +1 -0
  23. package/dist/homekit/adapter.js +2 -0
  24. package/dist/homekit/adapter.js.map +1 -0
  25. package/dist/homekit/adapters/battery.js +208 -0
  26. package/dist/homekit/adapters/battery.js.map +1 -0
  27. package/dist/homekit/adapters/camera-controls.js +527 -0
  28. package/dist/homekit/adapters/camera-controls.js.map +1 -0
  29. package/dist/homekit/adapters/camera-streaming.js +1515 -0
  30. package/dist/homekit/adapters/camera-streaming.js.map +1 -0
  31. package/dist/homekit/adapters/contact.js +138 -0
  32. package/dist/homekit/adapters/contact.js.map +1 -0
  33. package/dist/homekit/adapters/doorbell.js +57 -0
  34. package/dist/homekit/adapters/doorbell.js.map +1 -0
  35. package/dist/homekit/adapters/information.js +55 -0
  36. package/dist/homekit/adapters/information.js.map +1 -0
  37. package/dist/homekit/adapters/lock.js +489 -0
  38. package/dist/homekit/adapters/lock.js.map +1 -0
  39. package/dist/homekit/adapters/motion.js +100 -0
  40. package/dist/homekit/adapters/motion.js.map +1 -0
  41. package/dist/homekit/adapters/registry.js +26 -0
  42. package/dist/homekit/adapters/registry.js.map +1 -0
  43. package/dist/homekit/adapters/security-system.js +425 -0
  44. package/dist/homekit/adapters/security-system.js.map +1 -0
  45. package/dist/homekit/adapters/siren.js +136 -0
  46. package/dist/homekit/adapters/siren.js.map +1 -0
  47. package/dist/homekit/adapters/smart-light.js +662 -0
  48. package/dist/homekit/adapters/smart-light.js.map +1 -0
  49. package/dist/homekit/coverage-matrix.js +119 -0
  50. package/dist/homekit/coverage-matrix.js.map +1 -0
  51. package/dist/homekit/device-control.js +175 -0
  52. package/dist/homekit/device-control.js.map +1 -0
  53. package/dist/homekit/reconciler.js +319 -0
  54. package/dist/homekit/reconciler.js.map +1 -0
  55. package/dist/homekit/representation.js +23 -0
  56. package/dist/homekit/representation.js.map +1 -0
  57. package/dist/index.js +4 -9
  58. package/dist/index.js.map +1 -1
  59. package/dist/media/contracts.js +2 -0
  60. package/dist/media/contracts.js.map +1 -0
  61. package/dist/media/last-successful-image.js +208 -0
  62. package/dist/media/last-successful-image.js.map +1 -0
  63. package/dist/media/live-stream.js +1003 -0
  64. package/dist/media/live-stream.js.map +1 -0
  65. package/dist/media/recording.js +560 -0
  66. package/dist/media/recording.js.map +1 -0
  67. package/dist/media/session-budget.js +39 -0
  68. package/dist/media/session-budget.js.map +1 -0
  69. package/dist/media/snapshot.js +406 -0
  70. package/dist/media/snapshot.js.map +1 -0
  71. package/dist/media/station-live-sessions.js +101 -0
  72. package/dist/media/station-live-sessions.js.map +1 -0
  73. package/dist/platform.js +97 -809
  74. package/dist/platform.js.map +1 -1
  75. package/dist/runtime/channel.js +375 -0
  76. package/dist/runtime/channel.js.map +1 -0
  77. package/dist/runtime/owner.js +682 -0
  78. package/dist/runtime/owner.js.map +1 -0
  79. package/dist/runtime/sdk-client.js +211 -0
  80. package/dist/runtime/sdk-client.js.map +1 -0
  81. package/dist/runtime/tracker.js +211 -0
  82. package/dist/runtime/tracker.js.map +1 -0
  83. package/dist/settings.js +1 -43
  84. package/dist/settings.js.map +1 -1
  85. package/dist/storage.js +59 -0
  86. package/dist/storage.js.map +1 -0
  87. package/dist/ui/dashboard.js +181 -0
  88. package/dist/ui/dashboard.js.map +1 -0
  89. package/dist/ui/device-image.js +22 -0
  90. package/dist/ui/device-image.js.map +1 -0
  91. package/dist/ui/runtime-channel-client.js +305 -0
  92. package/dist/ui/runtime-channel-client.js.map +1 -0
  93. package/dist/ui/server.js +259 -0
  94. package/dist/ui/server.js.map +1 -0
  95. package/homebridge-ui/public/app.css +1902 -0
  96. package/homebridge-ui/public/assets/devices/clean/clean-T1250.webp +0 -0
  97. package/homebridge-ui/public/assets/devices/clean/clean-T2070.webp +0 -0
  98. package/homebridge-ui/public/assets/devices/clean/clean-T2080.webp +0 -0
  99. package/homebridge-ui/public/assets/devices/clean/clean-T2081.webp +0 -0
  100. package/homebridge-ui/public/assets/devices/clean/clean-T2103.webp +0 -0
  101. package/homebridge-ui/public/assets/devices/clean/clean-T2117.webp +0 -0
  102. package/homebridge-ui/public/assets/devices/clean/clean-T2118.webp +0 -0
  103. package/homebridge-ui/public/assets/devices/clean/clean-T2119.webp +0 -0
  104. package/homebridge-ui/public/assets/devices/clean/clean-T211A.webp +0 -0
  105. package/homebridge-ui/public/assets/devices/clean/clean-T2120.webp +0 -0
  106. package/homebridge-ui/public/assets/devices/clean/clean-T2123.webp +0 -0
  107. package/homebridge-ui/public/assets/devices/clean/clean-T2128.webp +0 -0
  108. package/homebridge-ui/public/assets/devices/clean/clean-T2130.webp +0 -0
  109. package/homebridge-ui/public/assets/devices/clean/clean-T2132.webp +0 -0
  110. package/homebridge-ui/public/assets/devices/clean/clean-T2150.webp +0 -0
  111. package/homebridge-ui/public/assets/devices/clean/clean-T2181.webp +0 -0
  112. package/homebridge-ui/public/assets/devices/clean/clean-T2182.webp +0 -0
  113. package/homebridge-ui/public/assets/devices/clean/clean-T2190.webp +0 -0
  114. package/homebridge-ui/public/assets/devices/clean/clean-T2192.webp +0 -0
  115. package/homebridge-ui/public/assets/devices/clean/clean-T2193.webp +0 -0
  116. package/homebridge-ui/public/assets/devices/clean/clean-T2194.webp +0 -0
  117. package/homebridge-ui/public/assets/devices/clean/clean-T2210.webp +0 -0
  118. package/homebridge-ui/public/assets/devices/clean/clean-T2250.webp +0 -0
  119. package/homebridge-ui/public/assets/devices/clean/clean-T2251.webp +0 -0
  120. package/homebridge-ui/public/assets/devices/clean/clean-T2252.webp +0 -0
  121. package/homebridge-ui/public/assets/devices/clean/clean-T2253.webp +0 -0
  122. package/homebridge-ui/public/assets/devices/clean/clean-T2254.webp +0 -0
  123. package/homebridge-ui/public/assets/devices/clean/clean-T2255.webp +0 -0
  124. package/homebridge-ui/public/assets/devices/clean/clean-T2256.webp +0 -0
  125. package/homebridge-ui/public/assets/devices/clean/clean-T2257.webp +0 -0
  126. package/homebridge-ui/public/assets/devices/clean/clean-T2258.webp +0 -0
  127. package/homebridge-ui/public/assets/devices/clean/clean-T2259.webp +0 -0
  128. package/homebridge-ui/public/assets/devices/clean/clean-T2261.webp +0 -0
  129. package/homebridge-ui/public/assets/devices/clean/clean-T2262.webp +0 -0
  130. package/homebridge-ui/public/assets/devices/clean/clean-T2266.webp +0 -0
  131. package/homebridge-ui/public/assets/devices/clean/clean-T2267.webp +0 -0
  132. package/homebridge-ui/public/assets/devices/clean/clean-T2268.webp +0 -0
  133. package/homebridge-ui/public/assets/devices/clean/clean-T2270.webp +0 -0
  134. package/homebridge-ui/public/assets/devices/clean/clean-T2272.webp +0 -0
  135. package/homebridge-ui/public/assets/devices/clean/clean-T2273.webp +0 -0
  136. package/homebridge-ui/public/assets/devices/clean/clean-T2276.webp +0 -0
  137. package/homebridge-ui/public/assets/devices/clean/clean-T2277.webp +0 -0
  138. package/homebridge-ui/public/assets/devices/clean/clean-T2278.webp +0 -0
  139. package/homebridge-ui/public/assets/devices/clean/clean-T2280.webp +0 -0
  140. package/homebridge-ui/public/assets/devices/clean/clean-T2292.webp +0 -0
  141. package/homebridge-ui/public/assets/devices/clean/clean-T2320.webp +0 -0
  142. package/homebridge-ui/public/assets/devices/clean/clean-T2351.webp +0 -0
  143. package/homebridge-ui/public/assets/devices/clean/clean-T2352.webp +0 -0
  144. package/homebridge-ui/public/assets/devices/clean/clean-T2353.webp +0 -0
  145. package/homebridge-ui/public/assets/devices/life/life-T8L00.webp +0 -0
  146. package/homebridge-ui/public/assets/devices/life/life-T8L01.webp +0 -0
  147. package/homebridge-ui/public/assets/devices/life/life-T8L02.webp +0 -0
  148. package/homebridge-ui/public/assets/devices/life/life-T8L04.webp +0 -0
  149. package/homebridge-ui/public/assets/devices/life/life-T8L10.webp +0 -0
  150. package/homebridge-ui/public/assets/devices/life/life-T8L20.webp +0 -0
  151. package/homebridge-ui/public/assets/devices/life/life-T8L30.webp +0 -0
  152. package/homebridge-ui/public/assets/devices/life/life-T8L40.webp +0 -0
  153. package/homebridge-ui/public/assets/devices/mower/mower-T2801.webp +0 -0
  154. package/homebridge-ui/public/assets/devices/mower/mower-T280B.webp +0 -0
  155. package/homebridge-ui/public/assets/devices/mower/mower-T2880.webp +0 -0
  156. package/homebridge-ui/public/assets/devices/security/security-T7400.webp +0 -0
  157. package/homebridge-ui/public/assets/devices/security/security-T7401.webp +0 -0
  158. package/homebridge-ui/public/assets/devices/security/security-T8001.webp +0 -0
  159. package/homebridge-ui/public/assets/devices/security/security-T8002.webp +0 -0
  160. package/homebridge-ui/public/assets/devices/security/security-T8010.webp +0 -0
  161. package/homebridge-ui/public/assets/devices/security/security-T8021.webp +0 -0
  162. package/homebridge-ui/public/assets/devices/security/security-T8023.webp +0 -0
  163. package/homebridge-ui/public/assets/devices/security/security-T8025.webp +0 -0
  164. package/homebridge-ui/public/assets/devices/security/security-T8030.webp +0 -0
  165. package/homebridge-ui/public/assets/devices/security/security-T8110.webp +0 -0
  166. package/homebridge-ui/public/assets/devices/security/security-T8111.webp +0 -0
  167. package/homebridge-ui/public/assets/devices/security/security-T8112.webp +0 -0
  168. package/homebridge-ui/public/assets/devices/security/security-T8113.webp +0 -0
  169. package/homebridge-ui/public/assets/devices/security/security-T8114.webp +0 -0
  170. package/homebridge-ui/public/assets/devices/security/security-T8122.webp +0 -0
  171. package/homebridge-ui/public/assets/devices/security/security-T8123.webp +0 -0
  172. package/homebridge-ui/public/assets/devices/security/security-T8124.webp +0 -0
  173. package/homebridge-ui/public/assets/devices/security/security-T8130.webp +0 -0
  174. package/homebridge-ui/public/assets/devices/security/security-T8131.webp +0 -0
  175. package/homebridge-ui/public/assets/devices/security/security-T8134.webp +0 -0
  176. package/homebridge-ui/public/assets/devices/security/security-T8140.webp +0 -0
  177. package/homebridge-ui/public/assets/devices/security/security-T8141.webp +0 -0
  178. package/homebridge-ui/public/assets/devices/security/security-T8150.webp +0 -0
  179. package/homebridge-ui/public/assets/devices/security/security-T8151.webp +0 -0
  180. package/homebridge-ui/public/assets/devices/security/security-T8152.webp +0 -0
  181. package/homebridge-ui/public/assets/devices/security/security-T8153.webp +0 -0
  182. package/homebridge-ui/public/assets/devices/security/security-T8160.webp +0 -0
  183. package/homebridge-ui/public/assets/devices/security/security-T8161.webp +0 -0
  184. package/homebridge-ui/public/assets/devices/security/security-T8162.webp +0 -0
  185. package/homebridge-ui/public/assets/devices/security/security-T8170.webp +0 -0
  186. package/homebridge-ui/public/assets/devices/security/security-T8171.webp +0 -0
  187. package/homebridge-ui/public/assets/devices/security/security-T8172.webp +0 -0
  188. package/homebridge-ui/public/assets/devices/security/security-T8173.webp +0 -0
  189. package/homebridge-ui/public/assets/devices/security/security-T8200.webp +0 -0
  190. package/homebridge-ui/public/assets/devices/security/security-T8200X.webp +0 -0
  191. package/homebridge-ui/public/assets/devices/security/security-T8201.webp +0 -0
  192. package/homebridge-ui/public/assets/devices/security/security-T8203.webp +0 -0
  193. package/homebridge-ui/public/assets/devices/security/security-T8210.webp +0 -0
  194. package/homebridge-ui/public/assets/devices/security/security-T8213.webp +0 -0
  195. package/homebridge-ui/public/assets/devices/security/security-T8214.webp +0 -0
  196. package/homebridge-ui/public/assets/devices/security/security-T8222.webp +0 -0
  197. package/homebridge-ui/public/assets/devices/security/security-T8400.webp +0 -0
  198. package/homebridge-ui/public/assets/devices/security/security-T8401.webp +0 -0
  199. package/homebridge-ui/public/assets/devices/security/security-T8410.webp +0 -0
  200. package/homebridge-ui/public/assets/devices/security/security-T8411.webp +0 -0
  201. package/homebridge-ui/public/assets/devices/security/security-T8414.webp +0 -0
  202. package/homebridge-ui/public/assets/devices/security/security-T8416.webp +0 -0
  203. package/homebridge-ui/public/assets/devices/security/security-T8417.webp +0 -0
  204. package/homebridge-ui/public/assets/devices/security/security-T8419.webp +0 -0
  205. package/homebridge-ui/public/assets/devices/security/security-T8419N.webp +0 -0
  206. package/homebridge-ui/public/assets/devices/security/security-T8420.webp +0 -0
  207. package/homebridge-ui/public/assets/devices/security/security-T8420X.webp +0 -0
  208. package/homebridge-ui/public/assets/devices/security/security-T8422.webp +0 -0
  209. package/homebridge-ui/public/assets/devices/security/security-T8423.webp +0 -0
  210. package/homebridge-ui/public/assets/devices/security/security-T8424.webp +0 -0
  211. package/homebridge-ui/public/assets/devices/security/security-T8425.webp +0 -0
  212. package/homebridge-ui/public/assets/devices/security/security-T8441.webp +0 -0
  213. package/homebridge-ui/public/assets/devices/security/security-T8442.webp +0 -0
  214. package/homebridge-ui/public/assets/devices/security/security-T8452.webp +0 -0
  215. package/homebridge-ui/public/assets/devices/security/security-T84A0.webp +0 -0
  216. package/homebridge-ui/public/assets/devices/security/security-T84A1.webp +0 -0
  217. package/homebridge-ui/public/assets/devices/security/security-T8500.webp +0 -0
  218. package/homebridge-ui/public/assets/devices/security/security-T8502.webp +0 -0
  219. package/homebridge-ui/public/assets/devices/security/security-T8503.webp +0 -0
  220. package/homebridge-ui/public/assets/devices/security/security-T8504.webp +0 -0
  221. package/homebridge-ui/public/assets/devices/security/security-T8506.webp +0 -0
  222. package/homebridge-ui/public/assets/devices/security/security-T8510.webp +0 -0
  223. package/homebridge-ui/public/assets/devices/security/security-T8510P.webp +0 -0
  224. package/homebridge-ui/public/assets/devices/security/security-T8520.webp +0 -0
  225. package/homebridge-ui/public/assets/devices/security/security-T8520P.webp +0 -0
  226. package/homebridge-ui/public/assets/devices/security/security-T8530.webp +0 -0
  227. package/homebridge-ui/public/assets/devices/security/security-T8531.webp +0 -0
  228. package/homebridge-ui/public/assets/devices/security/security-T85D0.webp +0 -0
  229. package/homebridge-ui/public/assets/devices/security/security-T85L0.webp +0 -0
  230. package/homebridge-ui/public/assets/devices/security/security-T85P0.webp +0 -0
  231. package/homebridge-ui/public/assets/devices/security/security-T85V0.webp +0 -0
  232. package/homebridge-ui/public/assets/devices/security/security-T8600.webp +0 -0
  233. package/homebridge-ui/public/assets/devices/security/security-T86P2.webp +0 -0
  234. package/homebridge-ui/public/assets/devices/security/security-T8790.webp +0 -0
  235. package/homebridge-ui/public/assets/devices/security/security-T87B0.webp +0 -0
  236. package/homebridge-ui/public/assets/devices/security/security-T87B2.webp +0 -0
  237. package/homebridge-ui/public/assets/devices/security/security-T8900.webp +0 -0
  238. package/homebridge-ui/public/assets/devices/security/security-T8910.webp +0 -0
  239. package/homebridge-ui/public/assets/devices/security/security-T8920.webp +0 -0
  240. package/homebridge-ui/public/assets/devices/security/security-T8960.webp +0 -0
  241. package/homebridge-ui/public/assets/devices/security/security-T8B0.webp +0 -0
  242. package/homebridge-ui/public/assets/devices/security/security-T8E00.webp +0 -0
  243. package/homebridge-ui/public/assets/devices/security/security-T8N00.webp +0 -0
  244. package/homebridge-ui/public/assets/devices/security/security-T8W11C.webp +0 -0
  245. package/homebridge-ui/public/assets/devices/security/security-T90F0.webp +0 -0
  246. package/homebridge-ui/public/assets/devices/security/security-T90M0.webp +0 -0
  247. package/homebridge-ui/public/assets/devices/security/security-T90R0.webp +0 -0
  248. package/homebridge-ui/public/assets/devices/security/security-T90S0.webp +0 -0
  249. package/homebridge-ui/public/assets/icons/inventory.svg +1 -1
  250. package/homebridge-ui/public/assets/icons/troubleshoot.svg +1 -0
  251. package/homebridge-ui/public/assets/icons/warning.svg +1 -1
  252. package/homebridge-ui/public/assets/logo-dark.svg +10 -0
  253. package/homebridge-ui/public/assets/logo.svg +10 -0
  254. package/homebridge-ui/public/i18n/en.json +218 -0
  255. package/homebridge-ui/public/i18n/fr.json +218 -0
  256. package/homebridge-ui/public/index.html +377 -28
  257. package/homebridge-ui/public/js/app.js +1065 -0
  258. package/homebridge-ui/public/js/dashboard.js +385 -0
  259. package/homebridge-ui/public/js/legacy-settings.js +37 -0
  260. package/homebridge-ui/public/js/profile-wizard.js +68 -0
  261. package/homebridge-ui/server.js +2 -1393
  262. package/i18n/runtime/en.json +100 -0
  263. package/media/Snapshot-Unavailable.jpg +0 -0
  264. package/media/Snapshot-black.jpg +0 -0
  265. package/media/camera-disabled.jpg +0 -0
  266. package/media/camera-offline.jpg +0 -0
  267. package/package.json +29 -24
  268. package/.claude/CLAUDE.md +0 -175
  269. package/.claude/PRD.md +0 -241
  270. package/.claude/docs/debug-recording-lessons.md +0 -91
  271. package/.claude/docs/hksv-recording-fix.md +0 -160
  272. package/.claude/skills/architect/SKILL.md +0 -76
  273. package/.claude/skills/developer/SKILL.md +0 -59
  274. package/.claude/skills/new-device-support/SKILL.md +0 -212
  275. package/.claude/skills/new-device-support/check-device.mjs +0 -363
  276. package/.claude/skills/new-device-support/map-properties.mjs +0 -450
  277. package/.claude/skills/new-device-support/verify-device.mjs +0 -272
  278. package/.claude/skills/planner/SKILL.md +0 -100
  279. package/.claude/skills/qa/SKILL.md +0 -79
  280. package/.claude/skills/support/SKILL.md +0 -175
  281. package/.prettierignore +0 -7
  282. package/.prettierrc.json +0 -7
  283. package/FUNDING.yml +0 -1
  284. package/dist/accessories/AutoSyncStationAccessory.js +0 -157
  285. package/dist/accessories/AutoSyncStationAccessory.js.map +0 -1
  286. package/dist/accessories/BaseAccessory.js +0 -261
  287. package/dist/accessories/BaseAccessory.js.map +0 -1
  288. package/dist/accessories/CameraAccessory.js +0 -459
  289. package/dist/accessories/CameraAccessory.js.map +0 -1
  290. package/dist/accessories/Device.js +0 -65
  291. package/dist/accessories/Device.js.map +0 -1
  292. package/dist/accessories/EntrySensorAccessory.js +0 -48
  293. package/dist/accessories/EntrySensorAccessory.js.map +0 -1
  294. package/dist/accessories/GarageDoorAccessory.js +0 -160
  295. package/dist/accessories/GarageDoorAccessory.js.map +0 -1
  296. package/dist/accessories/LockAccessory.js +0 -142
  297. package/dist/accessories/LockAccessory.js.map +0 -1
  298. package/dist/accessories/MotionSensorAccessory.js +0 -48
  299. package/dist/accessories/MotionSensorAccessory.js.map +0 -1
  300. package/dist/accessories/SmartDropAccessory.js +0 -141
  301. package/dist/accessories/SmartDropAccessory.js.map +0 -1
  302. package/dist/accessories/StationAccessory.js +0 -373
  303. package/dist/accessories/StationAccessory.js.map +0 -1
  304. package/dist/config.js +0 -26
  305. package/dist/config.js.map +0 -1
  306. package/dist/controller/DebugRecordingManager.js +0 -402
  307. package/dist/controller/DebugRecordingManager.js.map +0 -1
  308. package/dist/controller/LocalLivestreamManager.js +0 -371
  309. package/dist/controller/LocalLivestreamManager.js.map +0 -1
  310. package/dist/controller/recordingDelegate.js +0 -252
  311. package/dist/controller/recordingDelegate.js.map +0 -1
  312. package/dist/controller/snapshotDelegate.js +0 -348
  313. package/dist/controller/snapshotDelegate.js.map +0 -1
  314. package/dist/controller/streamingDelegate.js +0 -389
  315. package/dist/controller/streamingDelegate.js.map +0 -1
  316. package/dist/interfaces.js +0 -2
  317. package/dist/interfaces.js.map +0 -1
  318. package/dist/media/Snapshot-Unavailable.png +0 -0
  319. package/dist/media/Snapshot-Unavailable.xcf +0 -0
  320. package/dist/media/Snapshot-black.png +0 -0
  321. package/dist/media/camera-disabled.png +0 -0
  322. package/dist/media/camera-offline.png +0 -0
  323. package/dist/media/media/Snapshot-Unavailable.png +0 -0
  324. package/dist/media/media/Snapshot-Unavailable.xcf +0 -0
  325. package/dist/media/media/Snapshot-black.png +0 -0
  326. package/dist/media/media/camera-disabled.png +0 -0
  327. package/dist/media/media/camera-offline.png +0 -0
  328. package/dist/utils/Talkback.js +0 -162
  329. package/dist/utils/Talkback.js.map +0 -1
  330. package/dist/utils/accessoriesStore.js +0 -210
  331. package/dist/utils/accessoriesStore.js.map +0 -1
  332. package/dist/utils/configTypes.js +0 -38
  333. package/dist/utils/configTypes.js.map +0 -1
  334. package/dist/utils/ffmpeg.js +0 -1111
  335. package/dist/utils/ffmpeg.js.map +0 -1
  336. package/dist/utils/interfaces.js +0 -8
  337. package/dist/utils/interfaces.js.map +0 -1
  338. package/dist/utils/utils.js +0 -224
  339. package/dist/utils/utils.js.map +0 -1
  340. package/dist/version.js +0 -2
  341. package/dist/version.js.map +0 -1
  342. package/homebridge-eufy-security.png +0 -0
  343. package/homebridge-ui/diagnosticsCrypto.js +0 -112
  344. package/homebridge-ui/public/app.js +0 -237
  345. package/homebridge-ui/public/assets/devices/4g_lte_cam_s330_large.png +0 -0
  346. package/homebridge-ui/public/assets/devices/4g_lte_starlight_large.jpg +0 -0
  347. package/homebridge-ui/public/assets/devices/BATTERY_DOORBELL_C30.png +0 -0
  348. package/homebridge-ui/public/assets/devices/BATTERY_DOORBELL_C31.png +0 -0
  349. package/homebridge-ui/public/assets/devices/batterydoorbell1080p_large.jpg +0 -0
  350. package/homebridge-ui/public/assets/devices/batterydoorbell2k_large.png +0 -0
  351. package/homebridge-ui/public/assets/devices/batterydoorbell2kdual_large.jpg +0 -0
  352. package/homebridge-ui/public/assets/devices/batterydoorbell_e340_large.png +0 -0
  353. package/homebridge-ui/public/assets/devices/eufy-security-client.png +0 -0
  354. package/homebridge-ui/public/assets/devices/eufyCamS4_large.png +0 -0
  355. package/homebridge-ui/public/assets/devices/eufycam2_large.png +0 -0
  356. package/homebridge-ui/public/assets/devices/eufycam2c_large.jpg +0 -0
  357. package/homebridge-ui/public/assets/devices/eufycam2cpro_large.jpg +0 -0
  358. package/homebridge-ui/public/assets/devices/eufycam2pro_large.jpg +0 -0
  359. package/homebridge-ui/public/assets/devices/eufycam3_large.jpg +0 -0
  360. package/homebridge-ui/public/assets/devices/eufycam3c_large.jpg +0 -0
  361. package/homebridge-ui/public/assets/devices/eufycam3pro_large.png +0 -0
  362. package/homebridge-ui/public/assets/devices/eufycam_large.jpg +0 -0
  363. package/homebridge-ui/public/assets/devices/eufycame330_large.jpg +0 -0
  364. package/homebridge-ui/public/assets/devices/flood_freeze_sensor_e20_t90F0_large.png +0 -0
  365. package/homebridge-ui/public/assets/devices/floodlight2_large.jpg +0 -0
  366. package/homebridge-ui/public/assets/devices/floodlight2pro_large.jpg +0 -0
  367. package/homebridge-ui/public/assets/devices/floodlight_large.jpg +0 -0
  368. package/homebridge-ui/public/assets/devices/floodlightcame340_large.jpg +0 -0
  369. package/homebridge-ui/public/assets/devices/garage_camera_t8452_large.png +0 -0
  370. package/homebridge-ui/public/assets/devices/homebase2_large.png +0 -0
  371. package/homebridge-ui/public/assets/devices/homebase3_large.png +0 -0
  372. package/homebridge-ui/public/assets/devices/homebase_large.jpg +0 -0
  373. package/homebridge-ui/public/assets/devices/homebasemini_large.png +0 -0
  374. package/homebridge-ui/public/assets/devices/indoorcamC210_large.png +0 -0
  375. package/homebridge-ui/public/assets/devices/indoorcamC220_large.png +0 -0
  376. package/homebridge-ui/public/assets/devices/indoorcamC220_t8419N_large.png +0 -0
  377. package/homebridge-ui/public/assets/devices/indoorcamE30_large.png +0 -0
  378. package/homebridge-ui/public/assets/devices/indoorcamc120_large.png +0 -0
  379. package/homebridge-ui/public/assets/devices/indoorcammini_large.jpg +0 -0
  380. package/homebridge-ui/public/assets/devices/indoorcamp24_large.png +0 -0
  381. package/homebridge-ui/public/assets/devices/indoorcams350_large.png +0 -0
  382. package/homebridge-ui/public/assets/devices/keypad_large.png +0 -0
  383. package/homebridge-ui/public/assets/devices/minibase_chime_T8023_large.jpg +0 -0
  384. package/homebridge-ui/public/assets/devices/motionsensor_large.png +0 -0
  385. package/homebridge-ui/public/assets/devices/nvr_s4_max_T8N00_large.png +0 -0
  386. package/homebridge-ui/public/assets/devices/pir_sensor_e20_large.png +0 -0
  387. package/homebridge-ui/public/assets/devices/poe_bullet_ptz_cam_s4_T8E00_large.png +0 -0
  388. package/homebridge-ui/public/assets/devices/sensor_large.png +0 -0
  389. package/homebridge-ui/public/assets/devices/siren_sensor_e20_large.png +0 -0
  390. package/homebridge-ui/public/assets/devices/smartdrop_t8790_large.png +0 -0
  391. package/homebridge-ui/public/assets/devices/smartlock_t8500_large.png +0 -0
  392. package/homebridge-ui/public/assets/devices/smartlock_t8500_wifibridge_large.jpg +0 -0
  393. package/homebridge-ui/public/assets/devices/smartlock_t8503_large.png +0 -0
  394. package/homebridge-ui/public/assets/devices/smartlock_t8504_large.jpg +0 -0
  395. package/homebridge-ui/public/assets/devices/smartlock_t8510P_t8520P_large.png +0 -0
  396. package/homebridge-ui/public/assets/devices/smartlock_t85D0_large.png +0 -0
  397. package/homebridge-ui/public/assets/devices/smartlock_t85L0_large.png +0 -0
  398. package/homebridge-ui/public/assets/devices/smartlock_t85P0_large.png +0 -0
  399. package/homebridge-ui/public/assets/devices/smartlock_t85V0_large.png +0 -0
  400. package/homebridge-ui/public/assets/devices/smartlock_touch_and_wifi_t8502_large.png +0 -0
  401. package/homebridge-ui/public/assets/devices/smartlock_touch_and_wifi_t8506_large.png +0 -0
  402. package/homebridge-ui/public/assets/devices/smartlock_touch_and_wifi_t8520_large.png +0 -0
  403. package/homebridge-ui/public/assets/devices/smartlock_touch_t8510_large.png +0 -0
  404. package/homebridge-ui/public/assets/devices/smartlock_touch_t8510_wifibridge_large.jpg +0 -0
  405. package/homebridge-ui/public/assets/devices/smartlock_video_t8530_large.png +0 -0
  406. package/homebridge-ui/public/assets/devices/smartlock_video_t8531_large.png +0 -0
  407. package/homebridge-ui/public/assets/devices/smartlockwifibridge_t8021_large.jpg +0 -0
  408. package/homebridge-ui/public/assets/devices/smartsafe_s10_t7400_large.png +0 -0
  409. package/homebridge-ui/public/assets/devices/smartsafe_s12_t7401_large.png +0 -0
  410. package/homebridge-ui/public/assets/devices/smarttrack_card_t87B2_large.png +0 -0
  411. package/homebridge-ui/public/assets/devices/smarttrack_link_t87B0_large.png +0 -0
  412. package/homebridge-ui/public/assets/devices/smoke_alarm_e10_t90S0_large.png +0 -0
  413. package/homebridge-ui/public/assets/devices/solocamc210_large.jpg +0 -0
  414. package/homebridge-ui/public/assets/devices/solocamc35_large.png +0 -0
  415. package/homebridge-ui/public/assets/devices/solocame20_large.jpg +0 -0
  416. package/homebridge-ui/public/assets/devices/solocame30_large.png +0 -0
  417. package/homebridge-ui/public/assets/devices/solocame40_large.jpg +0 -0
  418. package/homebridge-ui/public/assets/devices/solocame42_large.png +0 -0
  419. package/homebridge-ui/public/assets/devices/solocaml20_large.jpg +0 -0
  420. package/homebridge-ui/public/assets/devices/solocams220_large.jpg +0 -0
  421. package/homebridge-ui/public/assets/devices/solocams340_large.png +0 -0
  422. package/homebridge-ui/public/assets/devices/solocams40_large.jpg +0 -0
  423. package/homebridge-ui/public/assets/devices/soloindoorcamc24_large.jpg +0 -0
  424. package/homebridge-ui/public/assets/devices/solooutdoorcamc22_large.png +0 -0
  425. package/homebridge-ui/public/assets/devices/solooutdoorcamc24_large.jpg +0 -0
  426. package/homebridge-ui/public/assets/devices/unknown.png +0 -0
  427. package/homebridge-ui/public/assets/devices/walllight_s100_large.png +0 -0
  428. package/homebridge-ui/public/assets/devices/walllight_s120_large.png +0 -0
  429. package/homebridge-ui/public/assets/devices/water_freeze_sensor_t8920_large.png +0 -0
  430. package/homebridge-ui/public/assets/devices/wireddoorbell1080p_large.jpg +0 -0
  431. package/homebridge-ui/public/assets/devices/wireddoorbell2k_large.png +0 -0
  432. package/homebridge-ui/public/assets/devices/wireddoorbelldual_large.jpg +0 -0
  433. package/homebridge-ui/public/assets/icons/attach.svg +0 -1
  434. package/homebridge-ui/public/assets/icons/battery_0.svg +0 -1
  435. package/homebridge-ui/public/assets/icons/battery_1.svg +0 -1
  436. package/homebridge-ui/public/assets/icons/battery_2.svg +0 -1
  437. package/homebridge-ui/public/assets/icons/battery_3.svg +0 -1
  438. package/homebridge-ui/public/assets/icons/battery_4.svg +0 -1
  439. package/homebridge-ui/public/assets/icons/battery_5.svg +0 -1
  440. package/homebridge-ui/public/assets/icons/battery_6.svg +0 -1
  441. package/homebridge-ui/public/assets/icons/copy.svg +0 -1
  442. package/homebridge-ui/public/assets/icons/delete.svg +0 -1
  443. package/homebridge-ui/public/assets/icons/download.svg +0 -1
  444. package/homebridge-ui/public/assets/icons/info.svg +0 -1
  445. package/homebridge-ui/public/assets/icons/refresh.svg +0 -1
  446. package/homebridge-ui/public/assets/icons/satellite_alt.svg +0 -1
  447. package/homebridge-ui/public/assets/icons/solar_power.svg +0 -1
  448. package/homebridge-ui/public/components/device-card.js +0 -174
  449. package/homebridge-ui/public/components/guard-modes.js +0 -88
  450. package/homebridge-ui/public/components/number-input.js +0 -121
  451. package/homebridge-ui/public/components/select.js +0 -73
  452. package/homebridge-ui/public/components/toggle.js +0 -68
  453. package/homebridge-ui/public/services/api.js +0 -250
  454. package/homebridge-ui/public/services/config.js +0 -144
  455. package/homebridge-ui/public/style.css +0 -818
  456. package/homebridge-ui/public/utils/countries.js +0 -73
  457. package/homebridge-ui/public/utils/device-images.js +0 -102
  458. package/homebridge-ui/public/utils/helpers.js +0 -115
  459. package/homebridge-ui/public/views/dashboard.js +0 -226
  460. package/homebridge-ui/public/views/device-detail.js +0 -654
  461. package/homebridge-ui/public/views/diagnostics.js +0 -402
  462. package/homebridge-ui/public/views/login.js +0 -650
  463. package/homebridge-ui/public/views/recordings.js +0 -319
  464. package/homebridge-ui/public/views/settings.js +0 -197
  465. package/homebridge-ui/public/views/unsupported-detail.js +0 -296
  466. package/media/Snapshot-Unavailable.png +0 -0
  467. package/media/Snapshot-Unavailable.xcf +0 -0
  468. package/media/Snapshot-black.png +0 -0
  469. package/media/camera-disabled.png +0 -0
  470. package/media/camera-offline.png +0 -0
  471. package/scripts/decrypt-diagnostics.mjs +0 -257
@@ -1,160 +0,0 @@
1
- import { DeviceAccessory } from './Device.js';
2
- import { PropertyName, GarageDoorState } from 'eufy-security-client';
3
- import { CHAR, SERV } from '../utils/utils.js';
4
- /**
5
- * Garage Door Accessory — registered as a separate PlatformAccessory so it
6
- * gets its own tile and name in HomeKit, independent of the parent camera.
7
- */
8
- export class GarageDoorAccessory extends DeviceAccessory {
9
- doorId;
10
- doorState;
11
- currentChar;
12
- targetChar;
13
- constructor(platform, accessory, device, doorId) {
14
- super(platform, accessory, device);
15
- this.doorId = doorId;
16
- // Override AccessoryInformation name to match the accessory's display name
17
- // (BaseAccessory sets it to the device name, which is the camera's name)
18
- this.getService(SERV.AccessoryInformation).updateCharacteristic(CHAR.Name, accessory.displayName);
19
- this.log.debug(`Constructed GarageDoorAccessory: ${accessory.displayName} (door ${doorId})`);
20
- this.setupGarageDoor();
21
- this.setupDoorSensorBattery();
22
- this.setupStationEventListener();
23
- this.pruneUnusedServices();
24
- }
25
- setupGarageDoor() {
26
- this.registerCharacteristic({
27
- serviceType: SERV.GarageDoorOpener,
28
- characteristicType: CHAR.CurrentDoorState,
29
- getValue: () => this.getDoorCurrentState(),
30
- onValue: (_service, characteristic) => {
31
- this.currentChar = characteristic;
32
- },
33
- });
34
- this.registerCharacteristic({
35
- serviceType: SERV.GarageDoorOpener,
36
- characteristicType: CHAR.TargetDoorState,
37
- getValue: () => this.targetFromCurrent(this.getDoorCurrentState()),
38
- setValue: (value) => this.setDoorTargetState(value),
39
- onValue: (_service, characteristic) => {
40
- this.targetChar = characteristic;
41
- },
42
- });
43
- this.registerCharacteristic({
44
- serviceType: SERV.GarageDoorOpener,
45
- characteristicType: CHAR.ObstructionDetected,
46
- getValue: () => false,
47
- });
48
- }
49
- setupDoorSensorBattery() {
50
- const batteryLevelProp = this.doorId === 1 ? PropertyName.DeviceDoorSensor1BatteryLevel : PropertyName.DeviceDoorSensor2BatteryLevel;
51
- const lowBatteryProp = this.doorId === 1 ? PropertyName.DeviceDoorSensor1LowBattery : PropertyName.DeviceDoorSensor2LowBattery;
52
- if (!this.device.hasProperty(batteryLevelProp)) {
53
- this.log.debug(`Door ${this.doorId} sensor battery properties not available`);
54
- return;
55
- }
56
- this.registerCharacteristic({
57
- serviceType: SERV.Battery,
58
- characteristicType: CHAR.BatteryLevel,
59
- getValue: () => {
60
- // eufy reports battery on a 0-5 scale; HomeKit expects 0-100
61
- const raw = this.device.getPropertyValue(batteryLevelProp);
62
- return raw != null ? Math.round((raw / 5) * 100) : 100;
63
- },
64
- });
65
- if (this.device.hasProperty(lowBatteryProp)) {
66
- this.registerCharacteristic({
67
- serviceType: SERV.Battery,
68
- characteristicType: CHAR.StatusLowBattery,
69
- getValue: () => {
70
- const isLow = this.device.getPropertyValue(lowBatteryProp);
71
- return isLow ? CHAR.StatusLowBattery.BATTERY_LEVEL_LOW : CHAR.StatusLowBattery.BATTERY_LEVEL_NORMAL;
72
- },
73
- });
74
- }
75
- }
76
- async setupStationEventListener() {
77
- try {
78
- const station = await this.platform.eufyClient.getStation(this.device.getStationSerial());
79
- station.on('garage door status', (_station, _channel, doorId, status) => {
80
- if (doorId !== this.doorId)
81
- return;
82
- const hkState = this.mapGarageDoorState(status);
83
- this.doorState = hkState;
84
- this.log.debug(`Door ${this.doorId} status event: ${status} -> HomeKit state ${hkState}`);
85
- if (this.currentChar) {
86
- this.currentChar.updateValue(hkState);
87
- }
88
- if (this.targetChar) {
89
- this.targetChar.updateValue(this.targetFromCurrent(hkState));
90
- }
91
- });
92
- }
93
- catch (error) {
94
- this.log.warn(`Could not set up garage door station event listener: ${error}`);
95
- }
96
- }
97
- getDoorCurrentState() {
98
- // Use cached event state only for transitional states (OPENING/CLOSING)
99
- // that the boolean property can't represent. For resting states, always
100
- // read the property so that manual/physical door changes are reflected.
101
- if (this.doorState === 2 || this.doorState === 3) {
102
- return this.doorState;
103
- }
104
- const prop = this.doorId === 1 ? PropertyName.DeviceDoor1Open : PropertyName.DeviceDoor2Open;
105
- const doorOpen = this.device.getPropertyValue(prop);
106
- return doorOpen ? 0 : 1; // true=OPEN(0), false=CLOSED(1)
107
- }
108
- async setDoorTargetState(state) {
109
- try {
110
- const shouldOpen = state === 0;
111
- this.log.debug(`Setting door ${this.doorId} target state: ${shouldOpen ? 'Open' : 'Closed'}`);
112
- const station = await this.platform.eufyClient.getStation(this.device.getStationSerial());
113
- station.openDoor(this.device, shouldOpen, this.doorId);
114
- }
115
- catch (error) {
116
- this.log.error(`Door ${this.doorId} target state could not be set: ${error}`);
117
- }
118
- }
119
- mapGarageDoorState(status) {
120
- // Negative values are standalone transitional states
121
- if (status < 0) {
122
- switch (status) {
123
- case GarageDoorState.A_OPENING:
124
- case GarageDoorState.B_OPENING:
125
- return 2; // OPENING
126
- case GarageDoorState.A_CLOSING:
127
- case GarageDoorState.B_CLOSING:
128
- return 3; // CLOSING
129
- default: // NO_MOTOR
130
- return 4; // STOPPED
131
- }
132
- }
133
- // Positive values are bitmasks — extract bits for this door
134
- if (this.doorId === 1) {
135
- if (status & GarageDoorState.A_OPENED)
136
- return 0; // OPEN
137
- if (status & GarageDoorState.A_CLOSED)
138
- return 1; // CLOSED
139
- }
140
- else {
141
- if (status & GarageDoorState.B_OPENED)
142
- return 0; // OPEN
143
- if (status & GarageDoorState.B_CLOSED)
144
- return 1; // CLOSED
145
- }
146
- return 4; // UNKNOWN → STOPPED
147
- }
148
- targetFromCurrent(currentState) {
149
- switch (currentState) {
150
- case 0: // OPEN
151
- case 2: // OPENING
152
- return 0; // Target: OPEN
153
- case 1: // CLOSED
154
- case 3: // CLOSING
155
- default:
156
- return 1; // Target: CLOSED
157
- }
158
- }
159
- }
160
- //# sourceMappingURL=GarageDoorAccessory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GarageDoorAccessory.js","sourceRoot":"","sources":["../../src/accessories/GarageDoorAccessory.ts"],"names":[],"mappings":"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"}
@@ -1,142 +0,0 @@
1
- import { DeviceAccessory } from './Device.js';
2
- import { PropertyName } from 'eufy-security-client';
3
- import { CHAR, SERV } from '../utils/utils.js';
4
- /**
5
- * LockAccessory Class
6
- *
7
- * This class represents a lock accessory within a home automation system. It is designed to
8
- * integrate smart locks into the system, register appropriate HomeKit characteristics, and provide
9
- * functionality for controlling and monitoring the lock's status.
10
- *
11
- * @class LockAccessory
12
- * @extends DeviceAccessory
13
- */
14
- export class LockAccessory extends DeviceAccessory {
15
- /**
16
- * Constructor for LockAccessory.
17
- *
18
- * @param {EufySecurityPlatform} platform - The platform instance managing accessories.
19
- * @param {PlatformAccessory} accessory - The platform-specific accessory.
20
- * @param {Lock} device - The lock device being represented.
21
- */
22
- constructor(platform, accessory, device) {
23
- // Call the constructor of the parent class DeviceAccessory.
24
- super(platform, accessory, device);
25
- // Log that the LockAccessory is constructed.
26
- this.log.debug(`Constructed Lock`);
27
- // Check if the device has the 'locked' property.
28
- if (this.device.hasProperty('locked')) {
29
- // Initialize Lock Management Service characteristics.
30
- this.initLockManagementService();
31
- // Initialize Lock Mechanism Service characteristics.
32
- this.initLockMechanismService();
33
- }
34
- else {
35
- // Log an error if the device has no lock.
36
- this.log.error(`has no lock`);
37
- }
38
- // Prune any unused services.
39
- this.pruneUnusedServices();
40
- }
41
- /**
42
- * Initializes characteristics for the Lock Management Service.
43
- */
44
- initLockManagementService() {
45
- // Register Lock Management Service characteristics.
46
- // Version characteristic (always returns '1.0').
47
- this.registerCharacteristic({
48
- serviceType: SERV.LockManagement,
49
- characteristicType: CHAR.Version,
50
- getValue: () => '1.0',
51
- });
52
- // LockManagementAutoSecurityTimeout characteristic (always returns 3 seconds).
53
- this.registerCharacteristic({
54
- serviceType: SERV.LockManagement,
55
- characteristicType: CHAR.LockManagementAutoSecurityTimeout,
56
- getValue: () => 3,
57
- });
58
- // AdministratorOnlyAccess characteristic (always returns true).
59
- this.registerCharacteristic({
60
- serviceType: SERV.LockManagement,
61
- characteristicType: CHAR.AdministratorOnlyAccess,
62
- getValue: () => true,
63
- });
64
- // LockControlPoint characteristic (no initial value).
65
- this.registerCharacteristic({
66
- serviceType: SERV.LockManagement,
67
- characteristicType: CHAR.LockControlPoint,
68
- });
69
- }
70
- /**
71
- * Initializes characteristics for the Lock Mechanism Service.
72
- */
73
- initLockMechanismService() {
74
- // Register Lock Mechanism Service characteristics.
75
- // LockCurrentState and LockTargetState characteristics.
76
- this.registerCharacteristic({
77
- serviceType: SERV.LockMechanism,
78
- characteristicType: CHAR.LockCurrentState,
79
- getValue: () => this.getLockStatus(),
80
- onValue: (service, characteristic) => {
81
- this.device.on('locked', () => {
82
- characteristic.updateValue(this.getLockStatus());
83
- });
84
- this.device.on('jammed', () => {
85
- characteristic.updateValue(CHAR.LockCurrentState.JAMMED);
86
- });
87
- },
88
- });
89
- this.registerCharacteristic({
90
- serviceType: SERV.LockMechanism,
91
- characteristicType: CHAR.LockTargetState,
92
- getValue: () => this.getLockStatus(),
93
- setValue: async (value) => {
94
- try {
95
- await this.setLockTargetState(value);
96
- }
97
- catch (error) {
98
- this.log.error(`Lock target state could not be set: ${error}`);
99
- }
100
- },
101
- onValue: (service, characteristic) => {
102
- this.device.on('locked', () => {
103
- characteristic.updateValue(this.getLockStatus());
104
- });
105
- },
106
- });
107
- // Initialize the sensor service.
108
- this.initSensorService();
109
- }
110
- /**
111
- * Gets the lock status and maps it to HomeKit lock states.
112
- */
113
- getLockStatus() {
114
- const lockStatus = this.device.isLocked();
115
- this.log.debug(`getLockStatus: ${lockStatus}`);
116
- return this.convertLockStatusCode(lockStatus);
117
- }
118
- /**
119
- * Sets the lock target state asynchronously.
120
- */
121
- async setLockTargetState(state) {
122
- try {
123
- await this.setPropertyValue(PropertyName.DeviceLocked, !!state);
124
- this.log.info(`Lock target state set to: ${state}`);
125
- }
126
- catch (error) {
127
- this.log.error(`Error setting lock target state: ${error}`);
128
- }
129
- }
130
- /**
131
- * Converts lock status codes to corresponding HomeKit lock states.
132
- */
133
- convertLockStatusCode(lockStatus) {
134
- if (lockStatus) {
135
- return CHAR.LockCurrentState.SECURED;
136
- }
137
- else {
138
- return CHAR.LockCurrentState.UNSECURED;
139
- }
140
- }
141
- }
142
- //# sourceMappingURL=LockAccessory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LockAccessory.js","sourceRoot":"","sources":["../../src/accessories/LockAccessory.ts"],"names":[],"mappings":"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"}
@@ -1,48 +0,0 @@
1
- import { DeviceAccessory } from './Device.js';
2
- // @ts-ignore
3
- import { PropertyName } from 'eufy-security-client';
4
- import { CHAR, SERV } from '../utils/utils.js';
5
- /**
6
- * MotionSensorAccessory Class
7
- *
8
- * This class represents a motion sensor accessory within a home automation system. It is designed
9
- * to integrate motion sensors into the system, register appropriate characteristics, and provide
10
- * necessary functionality for motion detection.
11
- *
12
- * @class MotionSensorAccessory
13
- * @extends DeviceAccessory
14
- */
15
- export class MotionSensorAccessory extends DeviceAccessory {
16
- /**
17
- * Constructor for MotionSensorAccessory.
18
- *
19
- * @param {EufySecurityPlatform} platform - The platform instance managing accessories.
20
- * @param {PlatformAccessory} accessory - The platform-specific accessory.
21
- * @param {MotionSensor} device - The motion sensor device being represented.
22
- */
23
- constructor(platform, accessory, device) {
24
- // Call the constructor of the parent class DeviceAccessory.
25
- super(platform, accessory, device);
26
- // Log a debug message indicating the construction of the Motion Sensor.
27
- this.log.debug(`Constructed Motion Sensor`);
28
- // Check if the device has the 'motionDetected' property.
29
- if (this.device.hasProperty('motionDetected')) {
30
- // Register the Motion Detected characteristic.
31
- this.registerCharacteristic({
32
- serviceType: SERV.MotionSensor,
33
- characteristicType: CHAR.MotionDetected,
34
- getValue: () => this.device.getPropertyValue(PropertyName.DeviceMotionDetected),
35
- onSimpleValue: 'motion detected',
36
- });
37
- // Initialize the sensor service.
38
- this.initSensorService();
39
- }
40
- else {
41
- // Log an error if the 'motionDetected' property is not available for this device.
42
- this.log.error(`has no motionDetected`);
43
- }
44
- // Remove any unused services.
45
- this.pruneUnusedServices();
46
- }
47
- }
48
- //# sourceMappingURL=MotionSensorAccessory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MotionSensorAccessory.js","sourceRoot":"","sources":["../../src/accessories/MotionSensorAccessory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,aAAa;AACb,OAAO,EAAgB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;;;;;;;;GASG;AACH,MAAM,OAAO,qBAAsB,SAAQ,eAAe;IACxD;;;;;;OAMG;IACH,YAAY,QAA8B,EAAE,SAA4B,EAAE,MAAoB;QAC5F,4DAA4D;QAC5D,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAEnC,wEAAwE;QACxE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAE5C,yDAAyD;QACzD,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC9C,+CAA+C;YAC/C,IAAI,CAAC,sBAAsB,CAAC;gBAC1B,WAAW,EAAE,IAAI,CAAC,YAAY;gBAC9B,kBAAkB,EAAE,IAAI,CAAC,cAAc;gBACvC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,oBAAoB,CAAC;gBAC/E,aAAa,EAAE,iBAAiB;aACjC,CAAC,CAAC;YAEH,iCAAiC;YACjC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,kFAAkF;YAClF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC1C,CAAC;QAED,8BAA8B;QAC9B,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;CACF"}
@@ -1,141 +0,0 @@
1
- import { DeviceAccessory } from './Device.js';
2
- import { PropertyName } from 'eufy-security-client';
3
- import { CHAR, SERV } from '../utils/utils.js';
4
- /**
5
- * SmartDropAccessory Class
6
- *
7
- * This class represents a SmartDrop accessory within a home automation system.
8
- * The SmartDrop is a smart package delivery box that can be remotely opened.
9
- * It is exposed as a LockMechanism service in HomeKit, allowing users to
10
- * open the SmartDrop lid from the Home app or via automation.
11
- *
12
- * Since the SmartDrop is a one-way latch (open only, closing is physical),
13
- * the lock mechanism is used to trigger the open command, and the current
14
- * state reflects whether the lid is currently open or closed.
15
- *
16
- * @class SmartDropAccessory
17
- * @extends DeviceAccessory
18
- * @see https://github.com/homebridge-plugins/homebridge-eufy-security/issues/770
19
- */
20
- export class SmartDropAccessory extends DeviceAccessory {
21
- /**
22
- * Constructor for SmartDropAccessory.
23
- *
24
- * @param {EufySecurityPlatform} platform - The platform instance managing accessories.
25
- * @param {PlatformAccessory} accessory - The platform-specific accessory.
26
- * @param {SmartDrop} device - The SmartDrop device being represented.
27
- */
28
- constructor(platform, accessory, device) {
29
- super(platform, accessory, device);
30
- this.log.debug(`Constructed SmartDrop`);
31
- // Initialize the Lock Mechanism service for open/close control.
32
- this.initLockMechanismService();
33
- // Initialize the Contact Sensor service for package delivery detection.
34
- this.initContactSensorService();
35
- // Initialize the battery service.
36
- this.initSensorService();
37
- // Prune any unused services.
38
- this.pruneUnusedServices();
39
- }
40
- /**
41
- * Initializes the Lock Mechanism Service.
42
- *
43
- * The SmartDrop lid is modeled as a lock:
44
- * - SECURED = lid closed
45
- * - UNSECURED = lid open
46
- * Setting the target state to UNSECURED triggers the open command.
47
- */
48
- initLockMechanismService() {
49
- // LockCurrentState reflects the actual open/closed state of the lid.
50
- this.registerCharacteristic({
51
- serviceType: SERV.LockMechanism,
52
- characteristicType: CHAR.LockCurrentState,
53
- getValue: () => this.getLidStatus(),
54
- onValue: (service, characteristic) => {
55
- this.device.on('open', () => {
56
- characteristic.updateValue(this.getLidStatus());
57
- });
58
- },
59
- });
60
- // LockTargetState allows triggering the open command.
61
- this.registerCharacteristic({
62
- serviceType: SERV.LockMechanism,
63
- characteristicType: CHAR.LockTargetState,
64
- getValue: () => this.getLidStatus(),
65
- setValue: async (value) => {
66
- await this.setLidTargetState(value);
67
- },
68
- onValue: (service, characteristic) => {
69
- this.device.on('open', () => {
70
- characteristic.updateValue(this.getLidStatus());
71
- });
72
- },
73
- });
74
- }
75
- /**
76
- * Initializes the Contact Sensor Service.
77
- *
78
- * Exposes a contact sensor that indicates whether a package has been delivered.
79
- * - CONTACT_DETECTED = no package delivered (normal state)
80
- * - CONTACT_NOT_DETECTED = package delivered (alert state)
81
- */
82
- initContactSensorService() {
83
- if (!this.device.hasProperty('packageDelivered')) {
84
- return;
85
- }
86
- this.registerCharacteristic({
87
- serviceType: SERV.ContactSensor,
88
- characteristicType: CHAR.ContactSensorState,
89
- name: 'Package Delivered',
90
- getValue: () => this.getPackageDeliveredStatus(),
91
- onSimpleValue: 'package delivered',
92
- });
93
- }
94
- /**
95
- * Gets the lid status and maps it to HomeKit lock states.
96
- *
97
- * @returns {CharacteristicValue} UNSECURED if open, SECURED if closed.
98
- */
99
- getLidStatus() {
100
- if (this.device.hasProperty('open')) {
101
- const isOpen = this.device.getPropertyValue(PropertyName.DeviceOpen);
102
- this.log.debug(`getLidStatus: ${isOpen}`);
103
- return isOpen ? CHAR.LockCurrentState.UNSECURED : CHAR.LockCurrentState.SECURED;
104
- }
105
- return CHAR.LockCurrentState.SECURED;
106
- }
107
- /**
108
- * Sets the lid target state.
109
- * Only the UNSECURED (open) action is meaningful for SmartDrop.
110
- * When set to UNSECURED, it sends the open command to the station.
111
- * Setting to SECURED is ignored as closing is a physical action.
112
- *
113
- * @param {CharacteristicValue} state - The target lock state.
114
- */
115
- async setLidTargetState(state) {
116
- if (state === CHAR.LockTargetState.UNSECURED) {
117
- try {
118
- this.log.info(`Opening SmartDrop lid...`);
119
- const station = await this.platform.eufyClient.getStation(this.device.getStationSerial());
120
- station.open(this.device);
121
- }
122
- catch (error) {
123
- this.log.error(`SmartDrop lid could not be opened: ${error}`);
124
- }
125
- }
126
- else {
127
- this.log.debug(`SmartDrop lid closing is a physical action, ignoring SECURED command.`);
128
- }
129
- }
130
- /**
131
- * Gets the package delivered status for the contact sensor.
132
- *
133
- * @returns {CharacteristicValue} CONTACT_NOT_DETECTED if package delivered, CONTACT_DETECTED otherwise.
134
- */
135
- getPackageDeliveredStatus() {
136
- const delivered = this.device.getPropertyValue(PropertyName.DevicePackageDelivered);
137
- this.log.debug(`getPackageDeliveredStatus: ${delivered}`);
138
- return delivered ? CHAR.ContactSensorState.CONTACT_NOT_DETECTED : CHAR.ContactSensorState.CONTACT_DETECTED;
139
- }
140
- }
141
- //# sourceMappingURL=SmartDropAccessory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SmartDropAccessory.js","sourceRoot":"","sources":["../../src/accessories/SmartDropAccessory.ts"],"names":[],"mappings":"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"}