Оптимизация и модернизация __init__.py
— aiohttp вместо requests: реальный async, единая ClientSession, connection pooling — async file I/O через executor (write_bytes, mkdir, cleanup) — asyncio.gather для параллельного опроса событий — asyncio.wait_for(timeout=5) на FFmpeg check — CameraTokenInfo dataclass вместо dict — yarl.URL для безопасной кодировки query-параметров — Общие _api_get/_api_post, уменьшение дублирования — CONF_ARCHIVE_DURATION вынесена в настройки — Удалена бессмысленная ветка в get_intercoms_info — _close_session() cleanup при unload — sensor.py: archive_url → archive_path — Обновлены переводы и config_flow для archive_duration
This commit is contained in:
+421
-370
File diff suppressed because it is too large
Load Diff
@@ -19,6 +19,7 @@ from . import (
|
|||||||
CONF_EVENT_SENSOR_ENABLED,
|
CONF_EVENT_SENSOR_ENABLED,
|
||||||
CONF_ARCHIVE_PATH,
|
CONF_ARCHIVE_PATH,
|
||||||
CONF_ARCHIVE_COPIES,
|
CONF_ARCHIVE_COPIES,
|
||||||
|
CONF_ARCHIVE_DURATION,
|
||||||
CONF_SCREENSHOT_COPIES,
|
CONF_SCREENSHOT_COPIES,
|
||||||
DATA_SCHEMA,
|
DATA_SCHEMA,
|
||||||
OPTIONS_SCHEMA,
|
OPTIONS_SCHEMA,
|
||||||
|
|||||||
@@ -100,9 +100,9 @@ class RTKeyEventSensor(SensorEntity):
|
|||||||
"Тип события": self._event_data.get("event_type", ""),
|
"Тип события": self._event_data.get("event_type", ""),
|
||||||
}
|
}
|
||||||
|
|
||||||
archive_url = self._event_data.get("archive_url")
|
archive_path = self._event_data.get("archive_path")
|
||||||
if archive_url:
|
if archive_path:
|
||||||
attrs["Архив видео"] = archive_url
|
attrs["Архив видео"] = archive_path
|
||||||
|
|
||||||
event = self._event_data.get("event", {})
|
event = self._event_data.get("event", {})
|
||||||
rfid = event.get("rfid")
|
rfid = event.get("rfid")
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
"event_sensor_enabled": "Create event sensor entity",
|
"event_sensor_enabled": "Create event sensor entity",
|
||||||
"archive_path": "Archive storage path",
|
"archive_path": "Archive storage path",
|
||||||
"archive_copies": "Number of video copies (0 = disabled)",
|
"archive_copies": "Number of video copies (0 = disabled)",
|
||||||
|
"archive_duration": "Archive video duration (sec)",
|
||||||
"screenshot_copies": "Number of screenshot copies (0 = disabled)"
|
"screenshot_copies": "Number of screenshot copies (0 = disabled)"
|
||||||
},
|
},
|
||||||
"data_description": {
|
"data_description": {
|
||||||
@@ -25,6 +26,7 @@
|
|||||||
"camera_image_refresh_interval": "0 — disable periodic screenshots",
|
"camera_image_refresh_interval": "0 — disable periodic screenshots",
|
||||||
"archive_path": "Relative to /media/ folder (e.g.: RTKey)",
|
"archive_path": "Relative to /media/ folder (e.g.: RTKey)",
|
||||||
"archive_copies": "Maximum number of saved videos per intercom",
|
"archive_copies": "Maximum number of saved videos per intercom",
|
||||||
|
"archive_duration": "Duration of archived video fragment per event",
|
||||||
"screenshot_copies": "Maximum number of saved screenshots per intercom"
|
"screenshot_copies": "Maximum number of saved screenshots per intercom"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -49,6 +51,7 @@
|
|||||||
"event_sensor_enabled": "Create event sensor entity",
|
"event_sensor_enabled": "Create event sensor entity",
|
||||||
"archive_path": "Archive storage path",
|
"archive_path": "Archive storage path",
|
||||||
"archive_copies": "Number of video copies (0 = disabled)",
|
"archive_copies": "Number of video copies (0 = disabled)",
|
||||||
|
"archive_duration": "Archive video duration (sec)",
|
||||||
"screenshot_copies": "Number of screenshot copies (0 = disabled)"
|
"screenshot_copies": "Number of screenshot copies (0 = disabled)"
|
||||||
},
|
},
|
||||||
"data_description": {
|
"data_description": {
|
||||||
@@ -56,6 +59,7 @@
|
|||||||
"camera_image_refresh_interval": "0 — disable periodic screenshots",
|
"camera_image_refresh_interval": "0 — disable periodic screenshots",
|
||||||
"archive_path": "Relative to /media/ folder (e.g.: RTKey)",
|
"archive_path": "Relative to /media/ folder (e.g.: RTKey)",
|
||||||
"archive_copies": "Maximum number of saved videos per intercom",
|
"archive_copies": "Maximum number of saved videos per intercom",
|
||||||
|
"archive_duration": "Duration of archived video fragment per event",
|
||||||
"screenshot_copies": "Maximum number of saved screenshots per intercom"
|
"screenshot_copies": "Maximum number of saved screenshots per intercom"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
"event_sensor_enabled": "Создавать сенсор последнего события",
|
"event_sensor_enabled": "Создавать сенсор последнего события",
|
||||||
"archive_path": "Путь для сохранения архивов",
|
"archive_path": "Путь для сохранения архивов",
|
||||||
"archive_copies": "Количество копий видео (0 = отключено)",
|
"archive_copies": "Количество копий видео (0 = отключено)",
|
||||||
|
"archive_duration": "Длительность видео архива (сек)",
|
||||||
"screenshot_copies": "Количество копий скриншотов (0 = отключено)"
|
"screenshot_copies": "Количество копий скриншотов (0 = отключено)"
|
||||||
},
|
},
|
||||||
"data_description": {
|
"data_description": {
|
||||||
@@ -25,6 +26,7 @@
|
|||||||
"camera_image_refresh_interval": "0 — отключить периодические скриншоты",
|
"camera_image_refresh_interval": "0 — отключить периодические скриншоты",
|
||||||
"archive_path": "Относительно папки /media/ (например: RTKey)",
|
"archive_path": "Относительно папки /media/ (например: RTKey)",
|
||||||
"archive_copies": "Максимальное количество сохранённых видео на домофон",
|
"archive_copies": "Максимальное количество сохранённых видео на домофон",
|
||||||
|
"archive_duration": "Длительность фрагмента видео архива на событие",
|
||||||
"screenshot_copies": "Максимальное количество сохранённых скриншотов на домофон"
|
"screenshot_copies": "Максимальное количество сохранённых скриншотов на домофон"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -49,6 +51,7 @@
|
|||||||
"event_sensor_enabled": "Создавать сенсор последнего события",
|
"event_sensor_enabled": "Создавать сенсор последнего события",
|
||||||
"archive_path": "Путь для сохранения архивов",
|
"archive_path": "Путь для сохранения архивов",
|
||||||
"archive_copies": "Количество копий видео (0 = отключено)",
|
"archive_copies": "Количество копий видео (0 = отключено)",
|
||||||
|
"archive_duration": "Длительность видео архива (сек)",
|
||||||
"screenshot_copies": "Количество копий скриншотов (0 = отключено)"
|
"screenshot_copies": "Количество копий скриншотов (0 = отключено)"
|
||||||
},
|
},
|
||||||
"data_description": {
|
"data_description": {
|
||||||
@@ -56,6 +59,7 @@
|
|||||||
"camera_image_refresh_interval": "0 — отключить периодические скриншоты",
|
"camera_image_refresh_interval": "0 — отключить периодические скриншоты",
|
||||||
"archive_path": "Относительно папки /media/ (например: RTKey)",
|
"archive_path": "Относительно папки /media/ (например: RTKey)",
|
||||||
"archive_copies": "Максимальное количество сохранённых видео на домофон",
|
"archive_copies": "Максимальное количество сохранённых видео на домофон",
|
||||||
|
"archive_duration": "Длительность фрагмента видео архива на событие",
|
||||||
"screenshot_copies": "Максимальное количество сохранённых скриншотов на домофон"
|
"screenshot_copies": "Максимальное количество сохранённых скриншотов на домофон"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user