← Назад к Wiki
Архітектура

Архітектура SelenaCore

Архітектура SelenaCore

🇬🇧 English version

Огляд

SelenaCore складається з двох незалежних процесів: Docker (ядро) та systemd (агент).

Модель виконання модулів

SelenaCore використовує дворівневу модель виконання для економії RAM (~580 МБ на Raspberry Pi):

ТипВиконанняПортЗв'язокКонтейнер
SYSTEMIn-process через importlibНемаєПрямі Python-викликиsmarthome-core
КористувацькіDocker sandbox8100–8200HTTP API + webhooksmarthome-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-wordopenWakeWord
STTWhisper.cpp
TTSPiper TTS
Speaker IDresemblyzer
Аудіо I/OALSA + 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). Користувацькі модулі НЕ можуть спілкуватися між собою. Системні модулі не мають мережевих портів.

Архітектура SelenaCore | Wiki · Selena Home AI