Архітектура SelenaCore
Архітектура SelenaCore
Огляд
SelenaCore складається з двох незалежних процесів: Docker (ядро) та systemd (агент).
Модель виконання модулів
SelenaCore використовує дворівневу модель виконання для економії RAM (~580 МБ на Raspberry Pi):
| Тип | Виконання | Порт | Зв'язок | Контейнер |
|---|---|---|---|---|
| SYSTEM | In-process через importlib | Немає | Прямі Python-виклики | smarthome-core |
| Користувацькі | Docker sandbox | 8100–8200 | HTTP API + webhook | smarthome-modules |
1. Core API
REST-сервер на FastAPI, порт 7070. Точка входу для всіх модулів.
X-Request-Idгенерується для кожного запиту- CORS — дозволено лише
localhost - Rate limiting — 100 req/sec на токен
Authorization: Bearer <module_token>обов'язковий для всіх endpoints крім/health
2. Device Registry
SQLite-сховище пристроїв через SQLAlchemy 2.0 async.
Таблиці:
devices— пристрої (id, name, type, protocol, state JSON, capabilities, last_seen, module_id, meta)state_history— останні 1000 станів на пристрійaudit_log— всі дії користувачів (10 000 записів, ротація)
При PATCH /devices/{id}/state автоматично публікується device.state_changed в Event Bus.
3. Event Bus
# Публікація
await bus.publish(event) # asyncio.Queue
# Підписка (користувацькі модулі — webhook)
await bus.subscribe("device.*", webhook_url) # wildcard
# Підписка (системні модулі — in-process)
bus.subscribe_direct(sub_id, module_id, ["device.*"], callback)
Захист: core.* події не можна публікувати з модуля → 403 Forbidden. HMAC-SHA256 підпис на кожну webhook-доставку.
4. Module Loader
Життєвий цикл модуля:
UPLOADED → VALIDATING → READY → RUNNING → STOPPED → REMOVED
↓
ERROR
Модулі з type: SYSTEM не можна зупинити через API → 403 Forbidden.
5. Integrity Agent
Незалежний процес (systemd), не імпортує ядро.
Кожні 30 сек:
1. Читає /secure/master.hash
2. Обчислює SHA256 файлу /secure/core.manifest
3. Порівнює → якщо розбіжність: MANIFEST TAMPERED
4. Для кожного файлу ядра: SHA256 з manifest vs SHA256 на диску
5. Якщо знайдено зміни:
а) Лог → б) Стоп модулів → в) Повідомлення → г) Відкат → ґ) SAFE MODE
6. Cloud Sync
Background task: heartbeat кожні 60 сек + long-poll команд. HMAC-SHA256. Retry: експоненціальний backoff 2^n сек, max 300 сек.
7. Voice Core
| Компонент | Технологія |
|---|---|
| Wake-word | openWakeWord |
| STT | Whisper.cpp |
| TTS | Piper TTS |
| Speaker ID | resemblyzer |
| Аудіо I/O | ALSA + PipeWire |
8. LLM Engine
- Рівень 1: Fast Matcher — YAML keyword/regex, ~50 мс, без GPU
- Рівень 2: Ollama (fallback) — phi-3-mini (2.3 GB) або gemma:2b (1.5 GB). Автовимкнення при RAM < 5 GB.
9. Secrets Vault
Кожен секрет: nonce(12 байт) + ciphertext (AES-256-GCM). OAuth Device Flow (RFC 8628): токен ніколи не покидає ядро.
Мережева ізоляція
Docker network: selena-net (bridge, internal). Користувацькі модулі НЕ можуть спілкуватися між собою. Системні модулі не мають мережевих портів.