Produkcja vs development#
vCLU można uruchamiać zarówno na docelowym urządzeniu (Raspberry Pi), jak i lokalnie na komputerze deweloperskim (macOS, Linux x86). Różnice dotyczą głównie GPIO, trybu MCP i parametrów kompilacji.
MCP — warstwy dostępu#
Tryb developerski to przede wszystkim koncept MCP (Model Context Protocol). Serwer MCP udostępnia agentowi AI narzędzia w dwóch warstwach:
| Warstwa | Nazwa | Narzędzia | Wymaganie |
|---|---|---|---|
| Layer 1 | Production | Lista urządzeń, odczyt stanu, sterowanie, sceny, dashboard | Domyślnie włączona |
| Layer 2 | Dev Mode | Odczyt plików źródłowych, zapis draftów, sandbox, promote, grep | Wymaga DevMode |
| Layer 2+ | Exec Mode | Wykonywanie Lua na żywym runtime (vclu_exec) | Wymaga DevMode + ExecMode |
Każdy bot MCP ma indywidualne ustawienia — możesz mieć bota produkcyjnego (Layer 1) i bota deweloperskiego (Layer 2) jednocześnie.
Layer 1 — kontrola urządzeń#
Bot widzi urządzenia, odczytuje ich stan, steruje nimi i uruchamia sceny. Nie ma dostępu do kodu źródłowego ani możliwości modyfikacji systemu. Odpowiedni dla asystentów domowych i codziennej automatyzacji.
Layer 2 — tryb deweloperski#
Bot dodatkowo może czytać pliki Lua, pisać drafty (izolowana kopia robocza), testować je w sandboxie i promować do produkcji. Zmiany przechodzą przez pipeline: draft → validate → test → promote.
Exec Mode — wykonywanie na żywo#
Bot może wykonywać dowolne snippety Lua na działającym runtime. Przydatne do debugowania i inspekcji stanu, ale wymaga zaufania — kod wykonuje się bezpośrednio na produkcji.
Exec Mode daje botowi pełny dostęp do runtime Lua. Włączaj go tylko dla zaufanych botów deweloperskich, nigdy dla botów sterujących urządzeniami w produkcji.
GPIO — automatyczna detekcja#
vCLU automatycznie wykrywa platformę i wybiera odpowiedni kontroler GPIO:
| Platforma | Kontroler | Zachowanie |
|---|---|---|
| Linux ARM64 (Raspberry Pi) | RPiController | Prawdziwe GPIO przez /dev/gpiomem |
| macOS / Linux x86 | MockController | Symulacja w pamięci |
Sprawdzenie aktywnej platformy:
local stats = gpio.stats()
print(stats.platform) -- "rpi" lub "mock"Mock controller zachowuje się identycznie jak prawdziwy — piny można ustawiać i odczytywać, obiekty GPIO_DOUT i GPIO_DIN działają normalnie. Jedyna różnica to brak fizycznych efektów.
Kompilacja#
| Tryb | Komenda | Rozmiar | Wersja |
|---|---|---|---|
| Dev | go build -o vclu ./cmd/vclu | ~18 MB | dev |
| Production | go build -ldflags="-s -w" -o vclu ./cmd/vclu | ~13 MB | dev (bez tagu) |
| Release | goreleaser | ~13 MB | Semver z tagu git (np. 1.2.3) |
Flagi -s -w usuwają tablicę symboli i informacje debugowania — zmniejszają binary o ~30%. goreleaser automatycznie wstrzykuje wersję z tagu git.
Praca lokalna na macOS#
Wszystkie funkcje vCLU działają na macOS — możesz rozwijać i testować bez Raspberry Pi:
# Kompilacja i uruchomienie
go build -o vclu ./cmd/vclu
./vclu --auto --data-dir ./dataCo działa identycznie:
- Panel webowy i REST API
- Broker MQTT (wbudowany)
- Dashboard i metryki
- HomeKit Bridge
- Serwer MCP i boty AI
- Edytor kodu i moduły Lua
- Pluginy
Co jest symulowane:
- GPIO —
MockControllerzamiast prawdziwego sprzętu - Discovery Grenton — działa, ale w sieci nie ma prawdziwych CLU
Użyj flagi --data-dir ./data, aby trzymać dane deweloperskie oddzielnie od ewentualnej instalacji produkcyjnej.
Porównanie środowisk#
| Cecha | Produkcja (RPi) | Development (macOS/x86) |
|---|---|---|
| GPIO | Prawdziwe piny (RPiController) | Symulacja (MockController) |
| Instalacja | /opt/vclu/, systemd | Dowolna lokalizacja, ręcznie |
| Dane | /opt/vclu/data/ | --data-dir ./data |
| Binary | Stripped, goreleaser, semver | go build, wersja dev |
| MQTT | Produkcyjny broker | Identyczny broker |
| HomeKit | mDNS w sieci | mDNS w sieci lokalnej |
| MCP boty | Layer 1 (zalecane) | Layer 2 + Exec Mode |
| Backup | Automatyczny (24h) | Opcjonalny |
| Restart | systemctl restart vclu | Ctrl+C, ponowne uruchomienie |
Typowy workflow: rozwijaj i testuj na macOS z
--data-dir ./data, a gotowy kod promuj na Raspberry Pi przez MCP lub ręczne skopiowanie katalogumodules/.