Files
geutebruck/geutebruck-api/docs/architecture-text.md
Administrator 14893e62a5 feat: Geutebruck GeViScope/GeViSoft Action Mapping System - MVP
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>
2025-12-31 18:10:54 +01:00

22 KiB
Raw Permalink Blame History

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