This MVP release provides a complete full-stack solution for managing action mappings in Geutebruck's GeViScope and GeViSoft video surveillance systems. ## Features ### Flutter Web Application (Port 8081) - Modern, responsive UI for managing action mappings - Action picker dialog with full parameter configuration - Support for both GSC (GeViScope) and G-Core server actions - Consistent UI for input and output actions with edit/delete capabilities - Real-time action mapping creation, editing, and deletion - Server categorization (GSC: prefix for GeViScope, G-Core: prefix for G-Core servers) ### FastAPI REST Backend (Port 8000) - RESTful API for action mapping CRUD operations - Action template service with comprehensive action catalog (247 actions) - Server management (G-Core and GeViScope servers) - Configuration tree reading and writing - JWT authentication with role-based access control - PostgreSQL database integration ### C# SDK Bridge (gRPC, Port 50051) - Native integration with GeViSoft SDK (GeViProcAPINET_4_0.dll) - Action mapping creation with correct binary format - Support for GSC and G-Core action types - Proper Camera parameter inclusion in action strings (fixes CrossSwitch bug) - Action ID lookup table with server-specific action IDs - Configuration reading/writing via SetupClient ## Bug Fixes - **CrossSwitch Bug**: GSC and G-Core actions now correctly display camera/PTZ head parameters in GeViSet - Action strings now include Camera parameter: `@ PanLeft (Comment: "", Camera: 101028)` - Proper filter flags and VideoInput=0 for action mappings - Correct action ID assignment (4198 for GSC, 9294 for G-Core PanLeft) ## Technical Stack - **Frontend**: Flutter Web, Dart, Dio HTTP client - **Backend**: Python FastAPI, PostgreSQL, Redis - **SDK Bridge**: C# .NET 8.0, gRPC, GeViSoft SDK - **Authentication**: JWT tokens - **Configuration**: GeViSoft .set files (binary format) ## Credentials - GeViSoft/GeViScope: username=sysadmin, password=masterkey - Default admin: username=admin, password=admin123 ## Deployment All services run on localhost: - Flutter Web: http://localhost:8081 - FastAPI: http://localhost:8000 - SDK Bridge gRPC: localhost:50051 - GeViServer: localhost (default port) Generated with Claude Code (https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
22 KiB
22 KiB
Geutebruck API System Architecture (Text Diagram)
┌─────────────────────────────────────────────────────────────────────────────┐
│ GEUTEBRUCK API SYSTEM ARCHITECTURE │
│ (Current Implementation) │
└─────────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────────┐
│ CLIENT LAYER │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Web App │ │ GeViSet │ │ Postman │ │ Mobile App │ │
│ │ (Browser) │ │ (Config UI) │ │ (Testing) │ │ │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │ │
│ │ HTTP/REST │ SetupClient │ HTTP/REST │ HTTP/REST │
│ │ │ (Port blocked │ │ │
│ │ │ when API runs) │ │ │
└─────────┼─────────────────┼──────────────────┼──────────────────┼───────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ PYTHON API LAYER (FastAPI) Port 8000 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ REST API Endpoints │ │
│ │ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ │
│ │ │ /auth/* │ │ /cameras/* │ │ /monitors/* │ │ │
│ │ │ - login │ │ - list │ │ - list │ │ │
│ │ │ - logout │ │ - get details │ │ - get details │ │ │
│ │ └──────────────────┘ └──────────────────┘ └─────────────────┘ │ │
│ │ │ │
│ │ ┌──────────────────┐ ┌────────────────────────────────────────┐ │ │
│ │ │ /crossswitch/* │ │ /configuration/* ✅ IMPLEMENTED │ │ │
│ │ │ - execute │ │ ┌──────────────┐ ┌─────────────────┐ │ │ │
│ │ │ - clear │ │ │ /servers │ │ /action-mappings│ │ │ │
│ │ │ - get state │ │ │ - GET (list) │ │ - GET (list) │ │ │ │
│ │ └──────────────────┘ │ │ - POST │ │ - POST │ │ │ │
│ │ │ │ - PUT │ │ - PUT │ │ │ │
│ │ ┌──────────────────┐ │ │ - DELETE │ │ - DELETE │ │ │ │
│ │ │ /health │ │ └──────────────┘ └─────────────────┘ │ │ │
│ │ │ /docs (Swagger) │ └────────────────────────────────────────┘ │ │
│ │ └──────────────────┘ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ Services Layer │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌────────────────────────┐ │ │
│ │ │ AuthService │ │CameraService │ │ ConfigurationService ✅│ │ │
│ │ │ MonitorSvc │ │ CrossSwitch │ │ - Server CRUD │ │ │
│ │ └──────────────┘ └──────────────┘ │ - ActionMapping CRUD │ │ │
│ │ └────────────────────────┘ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ │ gRPC calls │
│ ▼ │
└─────────────────────────────────────────────────────────────────────────────┘
│
│ Port 50051 (gRPC)
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ C# SDK BRIDGE (gRPC Service) Port 50051 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ gRPC Services │ │
│ │ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ │
│ │ │ CameraService │ │ MonitorService │ │ CrossSwitch │ │ │
│ │ │ - ListCameras │ │ - ListMonitors │ │ - Execute │ │ │
│ │ │ - GetDetails │ │ - GetDetails │ │ - Clear │ │ │
│ │ └──────────────────┘ └──────────────────┘ └─────────────────┘ │ │
│ │ │ │
│ │ ┌────────────────────────────────────────────────────────┐ │ │
│ │ │ ConfigurationService ✅ IMPLEMENTED │ │ │
│ │ │ ┌───────────────────┐ ┌──────────────────────────┐ │ │ │
│ │ │ │ Server Methods │ │ ActionMapping Methods │ │ │ │
│ │ │ │ - CreateServer │ │ - CreateActionMapping │ │ │ │
│ │ │ │ - GetAllServers │ │ - GetAllActionMappings │ │ │ │
│ │ │ │ - GetServer │ │ - GetActionMapping │ │ │ │
│ │ │ │ - UpdateServer⚠️ │ │ - UpdateActionMapping │ │ │ │
│ │ │ │ - DeleteServer │ │ - DeleteActionMapping │ │ │ │
│ │ │ └───────────────────┘ └──────────────────────────┘ │ │ │
│ │ └────────────────────────────────────────────────────────┘ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ SDK Wrapper Components │ │
│ │ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ │
│ │ │ GeViDatabase │ │ StateQuery │ │ SetupClient ✅ │ │ │
│ │ │ Wrapper │ │ Handler │ │ - Download .set │ │ │
│ │ │ - Connect │ │ - GetFirst/Next │ │ - Upload .set │ │ │
│ │ │ - Callback Mgmt │ │ - Enumerate │ │ - Parse tree │ │ │
│ │ └──────────────────┘ └──────────────────┘ └─────────────────┘ │ │
│ │ │ │
│ │ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ │
│ │ │ FolderTree │ │ FolderTree │ │ Action │ │ │
│ │ │ Parser ✅ │ │ Writer ✅ │ │ Dispatcher │ │ │
│ │ │ - Parse .set │ │ - Build tree │ │ - Send actions │ │ │
│ │ │ - Navigate nodes │ │ - Write nodes │ │ │ │ │
│ │ └──────────────────┘ └──────────────────┘ └─────────────────┘ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ │ GeViScope SDK API │
│ │ (GeViProcAPINET_4_0.dll) │
│ ▼ │
└─────────────────────────────────────────────────────────────────────────────┘
│
│ Ports 7700-7703
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ GEVISERVER (GeViSoft Server) Ports 7700-7703 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ Core Services │ │
│ │ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ │
│ │ │ Camera Manager │ │ Monitor Manager │ │ Action Engine │ │ │
│ │ │ - Video inputs │ │ - Video outputs │ │ - Event system │ │ │
│ │ │ - PTZ control │ │ - CrossSwitch │ │ - Automation │ │ │
│ │ └──────────────────┘ └──────────────────┘ └─────────────────┘ │ │
│ │ │ │
│ │ ┌────────────────────────────────────────────────────────────┐ │ │
│ │ │ Configuration Storage │ │ │
│ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │
│ │ │ │ TestMKS.set (Binary Configuration File) ✅ │ │ │ │
│ │ │ │ ┌────────────────┐ ┌─────────────────────────┐ │ │ │ │
│ │ │ │ │ GeViGCoreServer│ │ ActionMapping │ │ │ │ │
│ │ │ │ │ - 13 servers │ │ - 64 mappings │ │ │ │ │
│ │ │ │ │ - Server_1 │ │ - Input → Output rules │ │ │ │ │
│ │ │ │ │ - Server_2 │ │ - VMD triggers │ │ │ │ │
│ │ │ │ │ - ... │ │ - CrossSwitch actions │ │ │ │ │
│ │ │ │ └────────────────┘ └─────────────────────────┘ │ │ │ │
│ │ │ └──────────────────────────────────────────────────────┘ │ │ │
│ │ └────────────────────────────────────────────────────────────┘ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
│ Started with: geviserver.exe console │
└─────────────────────────────────────────────────────────────────────────────┘
Service Management
PowerShell Scripts (Repository Root):
┌──────────────────────────────────────────────────────────────────────┐
│ start-services.ps1 │
│ ├─ 1. Start GeViServer (console mode) Wait for port 7700 │
│ ├─ 2. Start SDK Bridge Wait for port 50051 │
│ └─ 3. Start Python API (uvicorn) Wait for port 8000 │
└──────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────┐
│ stop-services.ps1 │
│ ├─ 1. Stop Python API (uvicorn) │
│ ├─ 2. Stop SDK Bridge │
│ └─ 3. Stop GeViServer │
└──────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────┐
│ status-services.ps1 │
│ ├─ Check GeViServer status (PID, ports 7700-7703) │
│ ├─ Check SDK Bridge status (PID, port 50051) │
│ ├─ Check Python API status (PID, port 8000) │
│ └─ Test API health endpoint (HTTP GET /health) │
└──────────────────────────────────────────────────────────────────────┘
Implemented Features ✅
- ✅ GeViServer Integration
- ✅ SDK Bridge (C# gRPC)
- ✅ Configuration Management (User Story 12)
- G-Core Server CRUD
- Action Mapping CRUD
- Cascade deletion prevention
- ✅ Python REST API
- ✅ Service Management Scripts
Known Issues ⚠️
- ⚠️ Server UPDATE operation has bug
- ⚠️ SetupClient port conflict with GeViSet
Ports & Communication
| Port | Service | Purpose |
|---|---|---|
| 7700-7703 | GeViServer | SDK connections, camera control |
| 50051 | SDK Bridge (gRPC) | Python API ↔ SDK Bridge |
| 8000 | Python API (HTTP) | REST API, Swagger UI |