homesec 0.1.0__py3-none-any.whl → 1.0.0__py3-none-any.whl
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.
- homesec/__init__.py +1 -1
- homesec/app.py +34 -36
- homesec/cli.py +14 -11
- homesec/config/loader.py +11 -11
- homesec/config/validation.py +2 -5
- homesec/errors.py +2 -4
- homesec/health/server.py +29 -27
- homesec/interfaces.py +11 -6
- homesec/logging_setup.py +9 -5
- homesec/maintenance/cleanup_clips.py +2 -3
- homesec/models/__init__.py +1 -1
- homesec/models/alert.py +2 -0
- homesec/models/clip.py +8 -1
- homesec/models/config.py +9 -13
- homesec/models/events.py +14 -0
- homesec/models/filter.py +1 -3
- homesec/models/vlm.py +1 -2
- homesec/pipeline/core.py +15 -32
- homesec/plugins/alert_policies/__init__.py +3 -4
- homesec/plugins/alert_policies/default.py +3 -2
- homesec/plugins/alert_policies/noop.py +1 -2
- homesec/plugins/analyzers/__init__.py +3 -4
- homesec/plugins/analyzers/openai.py +34 -43
- homesec/plugins/filters/__init__.py +3 -4
- homesec/plugins/filters/yolo.py +27 -29
- homesec/plugins/notifiers/__init__.py +2 -1
- homesec/plugins/notifiers/mqtt.py +16 -17
- homesec/plugins/notifiers/multiplex.py +3 -2
- homesec/plugins/notifiers/sendgrid_email.py +6 -8
- homesec/plugins/storage/__init__.py +3 -4
- homesec/plugins/storage/dropbox.py +20 -17
- homesec/plugins/storage/local.py +3 -1
- homesec/plugins/utils.py +2 -1
- homesec/repository/clip_repository.py +5 -4
- homesec/sources/base.py +2 -2
- homesec/sources/local_folder.py +9 -7
- homesec/sources/rtsp.py +22 -10
- homesec/state/postgres.py +34 -35
- homesec/telemetry/db_log_handler.py +3 -2
- {homesec-0.1.0.dist-info → homesec-1.0.0.dist-info}/METADATA +66 -31
- homesec-1.0.0.dist-info/RECORD +62 -0
- homesec-0.1.0.dist-info/RECORD +0 -62
- {homesec-0.1.0.dist-info → homesec-1.0.0.dist-info}/WHEEL +0 -0
- {homesec-0.1.0.dist-info → homesec-1.0.0.dist-info}/entry_points.txt +0 -0
- {homesec-0.1.0.dist-info → homesec-1.0.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: homesec
|
|
3
|
-
Version:
|
|
3
|
+
Version: 1.0.0
|
|
4
4
|
Summary: Pluggable async home security camera pipeline with detection, VLM analysis, and alerts.
|
|
5
5
|
Project-URL: Homepage, https://github.com/lan17/homesec
|
|
6
6
|
Project-URL: Source, https://github.com/lan17/homesec
|
|
@@ -247,11 +247,9 @@ Description-Content-Type: text/markdown
|
|
|
247
247
|
[](https://www.python.org/)
|
|
248
248
|
[](https://peps.python.org/pep-0561/)
|
|
249
249
|
|
|
250
|
-
HomeSec is a
|
|
251
|
-
|
|
252
|
-
(VLM) for a structured summary, and sends alerts via MQTT or email. The design
|
|
253
|
-
leans toward reliability: clips land on disk first, state/event writes are
|
|
254
|
-
best-effort, and non-critical stages can fail without losing the alert.
|
|
250
|
+
HomeSec is a self-hosted, extensible network video recorder that puts you in control. Store clips wherever you want, analyze them with AI, and get smart notifications—all while keeping your footage private and off third-party clouds.
|
|
251
|
+
|
|
252
|
+
Under the hood, it's a pluggable async pipeline for home security cameras. It records short clips, runs object detection, optionally calls a vision-language model (VLM) for a structured summary, and sends alerts via MQTT or email. The design leans toward reliability: clips land on disk first, state/event writes are best-effort, and non-critical stages can fail without losing the alert.
|
|
255
253
|
|
|
256
254
|
## Highlights
|
|
257
255
|
|
|
@@ -261,6 +259,7 @@ best-effort, and non-critical stages can fail without losing the alert.
|
|
|
261
259
|
- Policy-driven alerts with per-camera overrides
|
|
262
260
|
- Fan-out notifiers (MQTT for Home Assistant, SendGrid email)
|
|
263
261
|
- Postgres-backed state + events with graceful degradation
|
|
262
|
+
- Built around small, stable interfaces so new plugins drop in cleanly
|
|
264
263
|
- Health endpoint plus optional Postgres telemetry logging
|
|
265
264
|
|
|
266
265
|
## Pipeline at a glance
|
|
@@ -277,32 +276,42 @@ ClipSource -> (Upload + Filter) -> VLM (optional) -> Alert Policy -> Notifier(s)
|
|
|
277
276
|
|
|
278
277
|
### Requirements
|
|
279
278
|
|
|
280
|
-
-
|
|
281
|
-
- ffmpeg in PATH (required for RTSP source)
|
|
282
|
-
- Postgres for state/events (`make db-up` starts a local instance). The pipeline
|
|
283
|
-
continues if the DB is down, but a DSN is still required.
|
|
279
|
+
- Docker and Docker Compose
|
|
284
280
|
- Optional: MQTT broker, Dropbox credentials, OpenAI-compatible API key
|
|
285
281
|
|
|
286
282
|
### Setup
|
|
287
283
|
|
|
288
|
-
1.
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
284
|
+
1. Create a config file:
|
|
285
|
+
```bash
|
|
286
|
+
cp config/example.yaml config/config.yaml
|
|
287
|
+
# Edit config/config.yaml with your settings
|
|
288
|
+
```
|
|
289
|
+
2. Set environment variables:
|
|
290
|
+
```bash
|
|
291
|
+
cp .env.example .env
|
|
292
|
+
# Edit .env with your credentials
|
|
293
|
+
```
|
|
294
|
+
3. Start HomeSec + Postgres:
|
|
295
|
+
```bash
|
|
296
|
+
make up
|
|
297
|
+
```
|
|
298
|
+
4. Stop:
|
|
299
|
+
```bash
|
|
300
|
+
make down
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### Running without Docker
|
|
304
|
+
|
|
305
|
+
If you prefer to run locally:
|
|
306
|
+
|
|
307
|
+
1. Install Python 3.10+ and ffmpeg
|
|
308
|
+
2. `uv sync`
|
|
309
|
+
3. `make db` (starts Postgres)
|
|
310
|
+
4. `make run`
|
|
302
311
|
|
|
303
312
|
## Configuration
|
|
304
313
|
|
|
305
|
-
Configs are YAML and validated with Pydantic.
|
|
314
|
+
Configs are YAML and validated with Pydantic. See `config/example.yaml` for all options.
|
|
306
315
|
|
|
307
316
|
Minimal example (RTSP + Dropbox + MQTT):
|
|
308
317
|
|
|
@@ -362,8 +371,8 @@ per_camera_alert:
|
|
|
362
371
|
A few things worth knowing:
|
|
363
372
|
- Secrets never go in YAML. Use env var names (`*_env`) and set values in your shell or `.env`.
|
|
364
373
|
- At least one notifier must be enabled (`mqtt` or `sendgrid_email`).
|
|
365
|
-
- Built-in YOLO classes: `person`, `
|
|
366
|
-
`
|
|
374
|
+
- Built-in YOLO classes: `person`, `car`, `truck`, `motorcycle`, `bicycle`,
|
|
375
|
+
`dog`, `cat`, `bird`, `backpack`, `handbag`, `suitcase`.
|
|
367
376
|
- Local storage for development:
|
|
368
377
|
|
|
369
378
|
```yaml
|
|
@@ -377,14 +386,35 @@ storage:
|
|
|
377
386
|
- For a quick local run, pair `local_folder` with `local` storage and drop a clip
|
|
378
387
|
into `recordings/`.
|
|
379
388
|
|
|
389
|
+
## Extensible by design
|
|
390
|
+
|
|
391
|
+
HomeSec is intentionally modular. Each major capability is an interface
|
|
392
|
+
(`ClipSource`, `StorageBackend`, `ObjectFilter`, `VLMAnalyzer`, `AlertPolicy`,
|
|
393
|
+
`Notifier`) defined in `src/homesec/interfaces.py`, and plugins are discovered at
|
|
394
|
+
runtime via entry points. This keeps the core pipeline small while making it
|
|
395
|
+
easy to add new backends without editing core code.
|
|
396
|
+
|
|
397
|
+
What this means in practice:
|
|
398
|
+
- Swap storage or notifications by changing config, not code.
|
|
399
|
+
- Add a new plugin type as a separate package and register it.
|
|
400
|
+
- Keep config validation strict by pairing each plugin with a Pydantic model.
|
|
401
|
+
|
|
402
|
+
Extension points (all pluggable):
|
|
403
|
+
- Sources: RTSP motion detection, FTP uploads, local folders
|
|
404
|
+
- Storage backends: Dropbox, local disk, or your own
|
|
405
|
+
- Filters: object detection (YOLO or custom models)
|
|
406
|
+
- VLM analyzers: OpenAI-compatible APIs or local models
|
|
407
|
+
- Alert policies: per-camera rules and thresholds
|
|
408
|
+
- Notifiers: MQTT, email, or anything else you can send from Python
|
|
409
|
+
|
|
380
410
|
## CLI
|
|
381
411
|
|
|
382
412
|
- Run the pipeline:
|
|
383
|
-
`uv run python -m homesec.cli run --config config/
|
|
413
|
+
`uv run python -m homesec.cli run --config config/config.yaml --log_level INFO`
|
|
384
414
|
- Validate config:
|
|
385
|
-
`uv run python -m homesec.cli validate --config config/
|
|
415
|
+
`uv run python -m homesec.cli validate --config config/config.yaml`
|
|
386
416
|
- Cleanup (reanalyze and optionally delete empty clips):
|
|
387
|
-
`uv run python -m homesec.cli cleanup --config config/
|
|
417
|
+
`uv run python -m homesec.cli cleanup --config config/config.yaml --older_than_days 7 --dry_run True`
|
|
388
418
|
|
|
389
419
|
## Built-in plugins
|
|
390
420
|
|
|
@@ -399,6 +429,11 @@ storage:
|
|
|
399
429
|
HomeSec discovers plugins via entry points in the `homesec.plugins` group. A plugin
|
|
400
430
|
module just needs to import and register itself.
|
|
401
431
|
|
|
432
|
+
Each plugin provides:
|
|
433
|
+
- A unique name (used in config)
|
|
434
|
+
- A Pydantic config model for validation
|
|
435
|
+
- A factory that builds the concrete implementation
|
|
436
|
+
|
|
402
437
|
```python
|
|
403
438
|
# my_package/filters/custom.py
|
|
404
439
|
from pydantic import BaseModel
|
|
@@ -430,7 +465,7 @@ my_filters = "my_package.filters.custom"
|
|
|
430
465
|
|
|
431
466
|
- Health endpoint: `GET /health` (configurable in `health.host`/`health.port`)
|
|
432
467
|
- Optional telemetry logs to Postgres when `DB_DSN` is set:
|
|
433
|
-
- Start local DB: `make db
|
|
468
|
+
- Start local DB: `make db`
|
|
434
469
|
- Run migrations: `make db-migrate`
|
|
435
470
|
|
|
436
471
|
## Development
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
homesec/__init__.py,sha256=tO_V5DJgS44qHCIySDUFIK5-Rbgjh3MpUBHa2HhZiB4,452
|
|
2
|
+
homesec/app.py,sha256=ma1_wClIHAFyVB-dOzSlKvoWAWUhHvAPjZVARtqHTK0,14124
|
|
3
|
+
homesec/cli.py,sha256=S7-K7aAIkus4mWvhjPqcGURabNhDlL4237iDeLvPxBI,5608
|
|
4
|
+
homesec/errors.py,sha256=fBW_OdnYgqtb6u6t0YZh4tHgsiv0Pb1DiF9G6b4Vcbk,2105
|
|
5
|
+
homesec/interfaces.py,sha256=z_bL6zrow5dxXBQLyeCK4ED7HzDrGBHe83Mm5W_4_pk,8388
|
|
6
|
+
homesec/logging_setup.py,sha256=Z12nzCPK04cqFHfIQgasioGfXb4TLvXJT9stzD8Dh4c,5546
|
|
7
|
+
homesec/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
+
homesec/storage_paths.py,sha256=MGQNT_7mJS6wuTWUHZNl0hvRmSVRvNksLu_imfZOEpo,1696
|
|
9
|
+
homesec/config/__init__.py,sha256=CjvulJwzj4Rdivrxz7tuDlyfw0c2IhqnSeUcHeu7ldk,421
|
|
10
|
+
homesec/config/loader.py,sha256=7BDw4plVQUCo8SHexdNiwAPd9mR8eVQEKnwzlvQthYQ,3030
|
|
11
|
+
homesec/config/validation.py,sha256=eDMM8upz_ATVWPDBtXkhNQOJEvh1gPU1LzY0UlH---M,2792
|
|
12
|
+
homesec/health/__init__.py,sha256=fbndfsLOR9aA7d_5I1mEZN0oM5IYMmcJNjOt0iaXKZc,107
|
|
13
|
+
homesec/health/server.py,sha256=VP-4XmZ0K3ooFyd000AFOZohZ5R7QcnZC4n7oj0RMqI,7014
|
|
14
|
+
homesec/maintenance/__init__.py,sha256=6a5W2x8oUgnoWaK374-Wq_nrOD5UDAUqUtSANaEck2M,60
|
|
15
|
+
homesec/maintenance/cleanup_clips.py,sha256=KmpadZjcYjsq3q0xjgN307w6X5dxdvqa1ukUMn_8llg,23455
|
|
16
|
+
homesec/models/__init__.py,sha256=zcSyQR0Mq_YlIrUFG304pQ72the1vtNbkWhjNJsso50,1889
|
|
17
|
+
homesec/models/alert.py,sha256=lBPP7qQK97JN2RI5Wlpqk6JSeGQxRiiwxzEloNfyKOc,968
|
|
18
|
+
homesec/models/clip.py,sha256=srqSLT1YXSG9CSZscOQssMSyg40SGaoEjABg9FzOxFQ,2254
|
|
19
|
+
homesec/models/config.py,sha256=BHHxfWQ_RtcTkAyHFVTBybiwZSCHgZJ9cmR5veOt3BA,12234
|
|
20
|
+
homesec/models/events.py,sha256=WdfkQrVPpEbjvPEhPsMnQQe9TgVglMfo9Ctz3xUJmFc,4605
|
|
21
|
+
homesec/models/filter.py,sha256=3f0hhXA1qPw1IOCxUIq5tGEQpeUTwJrrPL7DowQhMRg,1974
|
|
22
|
+
homesec/models/source.py,sha256=eHaJV8gk559kWNy0mt4KMr_zpdIccMvF7x4t3PkotGs,2204
|
|
23
|
+
homesec/models/storage.py,sha256=63wyHdDt3QrfdsP0SmhrxtOeWRllZ1O2GPrA4jI7XmU,235
|
|
24
|
+
homesec/models/vlm.py,sha256=Wd_hxWyIAETLtOth0FJoRt-sY9NdCS89T-BV-8ZDcP4,2883
|
|
25
|
+
homesec/pipeline/__init__.py,sha256=kiQLECc6JIPmeIdBJrVpTApPs0GBAgWoZ1kU4XZyJVY,214
|
|
26
|
+
homesec/pipeline/alert_policy.py,sha256=gFl5SJ96fgEfEUnhSL51YA6O2GPGXTXmxaDC-q3h1rs,152
|
|
27
|
+
homesec/pipeline/core.py,sha256=D552e-xpIpom5C-Y_TkWB9Ufbm8xClGmCdo_4tseXuU,23840
|
|
28
|
+
homesec/plugins/__init__.py,sha256=RhsQXLV1TJHoPVmk4Ql_X3IPQhFam5WXJMXjGUoXLuE,2117
|
|
29
|
+
homesec/plugins/utils.py,sha256=Cj9bnL4ldlD8ryvqCwAhc-HBgYby3eugN49Ltycemy4,1778
|
|
30
|
+
homesec/plugins/alert_policies/__init__.py,sha256=hPM7bK1DW6jown-IMNm4TkW471TBqkd56kMHpliJjg0,1978
|
|
31
|
+
homesec/plugins/alert_policies/default.py,sha256=uWoxGGFDE-t6ykddFbkOAX_2Tizg30alrUYJ9muuA_E,3895
|
|
32
|
+
homesec/plugins/alert_policies/noop.py,sha256=s-pJMpq6ekC6dVlg_lY7pizT_RYqCrOOHjJU7qAt5A0,1627
|
|
33
|
+
homesec/plugins/analyzers/__init__.py,sha256=K2LqO9Isa9xbL_duwi59TGvRTD9i5L-yYcg1pEBiJ_o,3138
|
|
34
|
+
homesec/plugins/analyzers/openai.py,sha256=18UfBiki0Qq7UcyGwxBY1lBz541mYYy-itxBamz6rqU,15392
|
|
35
|
+
homesec/plugins/filters/__init__.py,sha256=mpn7l51fCU7r3y5GkB5krVf6dX66gJIFftvUWg0Zf4I,3165
|
|
36
|
+
homesec/plugins/filters/yolo.py,sha256=bcE6S9QFBF7ZIbF2G_vhKQuAcXpPBJrmmxQPC3r4YYY,9781
|
|
37
|
+
homesec/plugins/notifiers/__init__.py,sha256=PaKnY6Yvzk_ovK8mmJ_iqUtK_B-DeUpgtN480rBbxH0,1911
|
|
38
|
+
homesec/plugins/notifiers/mqtt.py,sha256=p-Q4dTvQFqjazX141_FHKjGtIWsuvUQsfq_DnwBF-pM,6131
|
|
39
|
+
homesec/plugins/notifiers/multiplex.py,sha256=LlnwozjkMDQwz7__v7mT4AohZbiWZK39CZunamRp7FM,3676
|
|
40
|
+
homesec/plugins/notifiers/sendgrid_email.py,sha256=UZ_e-K31yHebUsXRUsAqdllytZUp1vv594RhdI0jwhE,8462
|
|
41
|
+
homesec/plugins/storage/__init__.py,sha256=UzYg0TeQwSBwm-5EAZ6lRn3-fI-BYOBQWqTu2cUHVks,3026
|
|
42
|
+
homesec/plugins/storage/dropbox.py,sha256=Rafi4NTTJBvm82BId5CYSFXkIbvV4IDDFAJiLbQUlL0,9793
|
|
43
|
+
homesec/plugins/storage/local.py,sha256=lXaVQRUpiZMqtSGDLKb2IZUIela_ysqc3QbRx3lPBBI,3703
|
|
44
|
+
homesec/repository/__init__.py,sha256=6cye2uQIA2v6jeLk5D2S9y3rlkfzJH5GceqdOroF3hU,160
|
|
45
|
+
homesec/repository/clip_repository.py,sha256=qSkfVk2MIx9wOKskUWUNnYwO-w0showR4WPsxUdCijs,16807
|
|
46
|
+
homesec/sources/__init__.py,sha256=wuCtiF44ceo7n3wJN51VHHcDavko3ubUDICtFbWmaRI,505
|
|
47
|
+
homesec/sources/base.py,sha256=HZkGJkyUjRRkELZnpEoslUuV0du7S-uWPvNQhToxDWU,6926
|
|
48
|
+
homesec/sources/ftp.py,sha256=ynIPbgcbIi1jub8yr4H1259Y1HbNM42RFDBBivXD4mg,7308
|
|
49
|
+
homesec/sources/local_folder.py,sha256=-6CbnuLNOhVZx7wDoQUtGc_t6JtegLkIKbusvtI85NQ,8955
|
|
50
|
+
homesec/sources/rtsp.py,sha256=3TOFDfIqadH3-DepB1xgv6mtOd0h-FYppZXBXSTBBi0,47304
|
|
51
|
+
homesec/state/__init__.py,sha256=Evt1jqTebmpJD1NUzNh3vwt5pbjDlLjQ0DgMCSAZOuM,255
|
|
52
|
+
homesec/state/postgres.py,sha256=Yis8ip2Y9dNYyTr2WEBcZ51m0ECoHuOe_XWT83cYQaI,16670
|
|
53
|
+
homesec/telemetry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
54
|
+
homesec/telemetry/db_log_handler.py,sha256=KM8g4kcOyPzFJbpGxpSzecx_hrEWY0YfpoIKygETy5k,7539
|
|
55
|
+
homesec/telemetry/postgres_settings.py,sha256=EVD2_oi_KReFJvQmXxW026aurl_YD-KexT7rkbGQPHc,1198
|
|
56
|
+
homesec/telemetry/db/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
57
|
+
homesec/telemetry/db/log_table.py,sha256=wcZLwRht7FMa0z2gf37f_RxdVTNIdDiK4i_N3c_ibwg,473
|
|
58
|
+
homesec-1.0.0.dist-info/METADATA,sha256=C5aghtGZcdyN8kav-x2zFsQ11-RqFTVVrnarJ-IxMTI,21605
|
|
59
|
+
homesec-1.0.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
60
|
+
homesec-1.0.0.dist-info/entry_points.txt,sha256=8ocCj_fP1qxIuL-DVDAUiaUbEdTMX_kg_BzVrJsbQYg,45
|
|
61
|
+
homesec-1.0.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
62
|
+
homesec-1.0.0.dist-info/RECORD,,
|
homesec-0.1.0.dist-info/RECORD
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
homesec/__init__.py,sha256=V-CRoux1Qo5d8Logyv0k0VDtVyLdExE8vSU1dpMtVBU,452
|
|
2
|
-
homesec/app.py,sha256=I1N5V22_ERREFXt4lcmKtUkwby6agKcO8gewHHN04iQ,14327
|
|
3
|
-
homesec/cli.py,sha256=4cOlJvdpz5iPuLtydSWNpWGvH978axk77AE3EvW7CYc,5637
|
|
4
|
-
homesec/errors.py,sha256=RfdPTP8uMfdO3GQPtgakOIKSSelM2CIhGO7tkgNEPps,2123
|
|
5
|
-
homesec/interfaces.py,sha256=zn2AB4Jf5mF1sVtRze5E2f2mN4FQyFhpORqkYo_4Xrs,8365
|
|
6
|
-
homesec/logging_setup.py,sha256=75rsrT9cEQfuaMOYZPgM0ZMwrpQPLhua-Uigd-ikM_w,5556
|
|
7
|
-
homesec/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
-
homesec/storage_paths.py,sha256=MGQNT_7mJS6wuTWUHZNl0hvRmSVRvNksLu_imfZOEpo,1696
|
|
9
|
-
homesec/config/__init__.py,sha256=CjvulJwzj4Rdivrxz7tuDlyfw0c2IhqnSeUcHeu7ldk,421
|
|
10
|
-
homesec/config/loader.py,sha256=kpFbpny-3YuQcfN1y1Euw5rQHR9pFrVjzLzCFHYQvY8,3102
|
|
11
|
-
homesec/config/validation.py,sha256=FtGVo8X6sIU-NHN-gIR0O8vmgP05PegDWQDsFq6LetQ,2837
|
|
12
|
-
homesec/health/__init__.py,sha256=fbndfsLOR9aA7d_5I1mEZN0oM5IYMmcJNjOt0iaXKZc,107
|
|
13
|
-
homesec/health/server.py,sha256=2_9G6sOYGOYtllPDiP9GROq1Vap5JIzcteCmfmYPFTs,7132
|
|
14
|
-
homesec/maintenance/__init__.py,sha256=6a5W2x8oUgnoWaK374-Wq_nrOD5UDAUqUtSANaEck2M,60
|
|
15
|
-
homesec/maintenance/cleanup_clips.py,sha256=B-IYNRcj_-hE3lQfcK6u3cHQwE1UsbC0gDpa1WqCZeQ,23475
|
|
16
|
-
homesec/models/__init__.py,sha256=ZFJ0R8B32cHT58_Wg0YdxbxDI45Ojp-JTIrT-AU2mCk,1889
|
|
17
|
-
homesec/models/alert.py,sha256=XzYauW_Kle73SCDKTMyS6CufgvPt4xzzxDbMksZHXac,966
|
|
18
|
-
homesec/models/clip.py,sha256=HGmoZ6nNOWHQWUwyZMQlyb97IL_cWxU-zbJAXdS7VG8,2009
|
|
19
|
-
homesec/models/config.py,sha256=xGQ7-jJxhS-h1zJ-K6T3TWqZGTjXFNu2q3FcKtKAWnY,12318
|
|
20
|
-
homesec/models/events.py,sha256=MymbKYnals8HqX8t8Bi9rZpHWS2wTaVwgV8Kl8TsVT8,4591
|
|
21
|
-
homesec/models/filter.py,sha256=zhBxFDLe7hYb_FiSIN2rnsKNZqZovw2qmfB1WEa3ImE,2019
|
|
22
|
-
homesec/models/source.py,sha256=eHaJV8gk559kWNy0mt4KMr_zpdIccMvF7x4t3PkotGs,2204
|
|
23
|
-
homesec/models/storage.py,sha256=63wyHdDt3QrfdsP0SmhrxtOeWRllZ1O2GPrA4jI7XmU,235
|
|
24
|
-
homesec/models/vlm.py,sha256=DEI-V2gSKtn82IG5PLRN98F0Wpwdvn3nkA-obRziSIw,2901
|
|
25
|
-
homesec/pipeline/__init__.py,sha256=kiQLECc6JIPmeIdBJrVpTApPs0GBAgWoZ1kU4XZyJVY,214
|
|
26
|
-
homesec/pipeline/alert_policy.py,sha256=gFl5SJ96fgEfEUnhSL51YA6O2GPGXTXmxaDC-q3h1rs,152
|
|
27
|
-
homesec/pipeline/core.py,sha256=E1EpaHE5A_2L7d9pD3a0dBVjUJRWCSA3o5a2JOIsenI,24141
|
|
28
|
-
homesec/plugins/__init__.py,sha256=RhsQXLV1TJHoPVmk4Ql_X3IPQhFam5WXJMXjGUoXLuE,2117
|
|
29
|
-
homesec/plugins/utils.py,sha256=vHJcd8WmWCAFkjTzuvhouLDk2IpIEkIFWTHhtm7hBUI,1751
|
|
30
|
-
homesec/plugins/alert_policies/__init__.py,sha256=f0ljzi5ODx7q_dkW4tpuur5I1QXAxIOWs-VuJ1Zm_4o,1957
|
|
31
|
-
homesec/plugins/alert_policies/default.py,sha256=SDmJr-u43fAnbipBI94FOI7Wy7zLNHfJBkOJXdWprqo,3916
|
|
32
|
-
homesec/plugins/alert_policies/noop.py,sha256=QliBKPbtwoEaTzwgvrmsW_20hhSdd3oXUkHJmZUV9xc,1658
|
|
33
|
-
homesec/plugins/analyzers/__init__.py,sha256=7JacZ5jH6oKq2KBfmNTqDJiguqhOVvKaph2LMLV6Tpg,3133
|
|
34
|
-
homesec/plugins/analyzers/openai.py,sha256=Vpk28MkqccJ6f97JNsbWfk45l-TH8GqwOpNBjOw6HZk,15799
|
|
35
|
-
homesec/plugins/filters/__init__.py,sha256=BhZvv7BFBt1CxJzYf0j86pRZ3M3lI6xMXL3t2zedTP4,3160
|
|
36
|
-
homesec/plugins/filters/yolo.py,sha256=O082XOvT6MTi421Z7cjZHxHF24M0bkzpIl3FYpiYT-A,9968
|
|
37
|
-
homesec/plugins/notifiers/__init__.py,sha256=S6-tC6orO9xDbXJtuCJlh7omXDdpnH9OzEiJF8MSZ1s,1884
|
|
38
|
-
homesec/plugins/notifiers/mqtt.py,sha256=8pTsZ5PofAEVXVtmCHi8U4u3EZDmGf6Nzs2UrGZ9BJ4,6247
|
|
39
|
-
homesec/plugins/notifiers/multiplex.py,sha256=dTknkgEVF47bCEmpxG4RcjjhJ8Wfpmv2hiNwHSWfX2A,3649
|
|
40
|
-
homesec/plugins/notifiers/sendgrid_email.py,sha256=YrbldoGdUzkgm7ISYZ9LF7nOpO7Ee_Hz1TiffduidC0,8528
|
|
41
|
-
homesec/plugins/storage/__init__.py,sha256=zLmPlWKD9kY6cl7OKqDfSysVlVXPqzkqBRVjxYbbOas,3021
|
|
42
|
-
homesec/plugins/storage/dropbox.py,sha256=0Xh5m8lape-39JT2zBA6p780u2QiBrdfK0MkxVmDc1I,9906
|
|
43
|
-
homesec/plugins/storage/local.py,sha256=5v8h9-JJYlJBJCLBXin89xzA30_0wrU2fx4LmuZvYVo,3701
|
|
44
|
-
homesec/repository/__init__.py,sha256=6cye2uQIA2v6jeLk5D2S9y3rlkfzJH5GceqdOroF3hU,160
|
|
45
|
-
homesec/repository/clip_repository.py,sha256=JGbb0BEF56QIWFM64S--D50QAat1PPgNPVHyT4oOqIs,16780
|
|
46
|
-
homesec/sources/__init__.py,sha256=wuCtiF44ceo7n3wJN51VHHcDavko3ubUDICtFbWmaRI,505
|
|
47
|
-
homesec/sources/base.py,sha256=pV4lwM2T5h3IaPk5CfhcTMc2AxCxmw19hXC85T0FC1w,6917
|
|
48
|
-
homesec/sources/ftp.py,sha256=ynIPbgcbIi1jub8yr4H1259Y1HbNM42RFDBBivXD4mg,7308
|
|
49
|
-
homesec/sources/local_folder.py,sha256=8DQTDYaZdS-tyow4xWukibIjPWIcWauEWe1YU0KnrLg,8940
|
|
50
|
-
homesec/sources/rtsp.py,sha256=Log4cZAoRhev8tXvf9sB8of2y2_RLkU-zxwco3FyT6A,47121
|
|
51
|
-
homesec/state/__init__.py,sha256=Evt1jqTebmpJD1NUzNh3vwt5pbjDlLjQ0DgMCSAZOuM,255
|
|
52
|
-
homesec/state/postgres.py,sha256=R_vSgcoqZQrCJWTHRsZJsDSYUMGcHeAfFNWqUbxAKqw,16817
|
|
53
|
-
homesec/telemetry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
54
|
-
homesec/telemetry/db_log_handler.py,sha256=7qjKB9q6YWuy8ySoNWcPA4ENmDcvq8yYV2ooEqLEo9E,7502
|
|
55
|
-
homesec/telemetry/postgres_settings.py,sha256=EVD2_oi_KReFJvQmXxW026aurl_YD-KexT7rkbGQPHc,1198
|
|
56
|
-
homesec/telemetry/db/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
57
|
-
homesec/telemetry/db/log_table.py,sha256=wcZLwRht7FMa0z2gf37f_RxdVTNIdDiK4i_N3c_ibwg,473
|
|
58
|
-
homesec-0.1.0.dist-info/METADATA,sha256=fQu17bHr7Yw3tVupfPYSAbnJvNDSTzvVEgmMXdrNvjk,20374
|
|
59
|
-
homesec-0.1.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
60
|
-
homesec-0.1.0.dist-info/entry_points.txt,sha256=8ocCj_fP1qxIuL-DVDAUiaUbEdTMX_kg_BzVrJsbQYg,45
|
|
61
|
-
homesec-0.1.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
62
|
-
homesec-0.1.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|