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>
134 lines
3.2 KiB
Plaintext
134 lines
3.2 KiB
Plaintext
@startuml Geutebruck API Architecture Overview
|
|
!theme plain
|
|
skinparam backgroundColor #FEFEFE
|
|
skinparam componentStyle rectangle
|
|
|
|
title Geutebruck API System Architecture - Overview
|
|
|
|
' Client Layer
|
|
package "Client Layer" {
|
|
[Web Browser] as web
|
|
[GeViSet UI] as geviset
|
|
[Mobile App] as mobile
|
|
[Postman/Testing] as postman
|
|
}
|
|
|
|
' Python API Layer
|
|
package "Python API Layer\n(FastAPI - Port 8000)" {
|
|
[REST API Endpoints] as rest
|
|
[Authentication] as auth
|
|
[Service Layer] as services
|
|
|
|
package "Configuration Management ✅" {
|
|
[ConfigurationService] as configsvc
|
|
[Server CRUD] as servercrud
|
|
[ActionMapping CRUD] as mappingcrud
|
|
}
|
|
}
|
|
|
|
' C# SDK Bridge Layer
|
|
package "C# SDK Bridge\n(gRPC Service - Port 50051)" {
|
|
[gRPC Services] as grpc
|
|
|
|
package "SDK Wrappers" {
|
|
[GeViDatabase Wrapper] as dbwrapper
|
|
[StateQuery Handler] as statequery
|
|
[Action Dispatcher] as dispatcher
|
|
}
|
|
|
|
package "Configuration Components ✅" {
|
|
[SetupClient] as setupclient
|
|
[FolderTreeParser] as parser
|
|
[FolderTreeWriter] as writer
|
|
}
|
|
}
|
|
|
|
' GeViServer Layer
|
|
package "GeViServer\n(GeViSoft Server - Ports 7700-7703)" {
|
|
[Camera Manager] as cammgr
|
|
[Monitor Manager] as monmgr
|
|
[Action Engine] as actioneng
|
|
[Configuration Storage] as config
|
|
|
|
database "TestMKS.set\n(Binary Config)" as setfile {
|
|
[GeViGCoreServer\n13 servers] as servers
|
|
[ActionMapping\n64 mappings] as mappings
|
|
}
|
|
}
|
|
|
|
' External Systems
|
|
cloud "Hardware Layer" {
|
|
[IP Cameras] as cameras
|
|
[Video Monitors] as monitors
|
|
[I/O Devices] as io
|
|
}
|
|
|
|
' Connections - Client to API
|
|
web -down-> rest : HTTP/REST
|
|
mobile -down-> rest : HTTP/REST
|
|
postman -down-> rest : HTTP/REST
|
|
geviset -down-> config : SetupClient\n(blocked when\nAPI runs)
|
|
|
|
' API Internal
|
|
rest -down-> auth
|
|
rest -down-> services
|
|
rest -down-> configsvc
|
|
configsvc -down-> servercrud
|
|
configsvc -down-> mappingcrud
|
|
|
|
' API to SDK Bridge
|
|
services -down-> grpc : gRPC\nPort 50051
|
|
configsvc -down-> grpc : gRPC\nPort 50051
|
|
|
|
' SDK Bridge Internal
|
|
grpc -down-> dbwrapper
|
|
grpc -down-> statequery
|
|
grpc -down-> dispatcher
|
|
grpc -down-> setupclient
|
|
|
|
setupclient -down-> parser
|
|
setupclient -down-> writer
|
|
|
|
' SDK Bridge to GeViServer
|
|
dbwrapper -down-> cammgr : GeViScope SDK\nPorts 7700-7703
|
|
statequery -down-> monmgr : GeViScope SDK
|
|
dispatcher -down-> actioneng : GeViScope SDK
|
|
setupclient -down-> config : SetupClient\nProtocol
|
|
|
|
' GeViServer Internal
|
|
config -down-> setfile
|
|
cammgr -down-> servers
|
|
actioneng -down-> mappings
|
|
|
|
' GeViServer to Hardware
|
|
cammgr -down-> cameras : Video\nStreams
|
|
monmgr -down-> monitors : Video\nOutput
|
|
actioneng -down-> io : Control\nSignals
|
|
|
|
note right of configsvc
|
|
**Implemented Features:**
|
|
• Server CRUD (C, R, D working)
|
|
• ActionMapping CRUD (all ops)
|
|
• Cascade deletion prevention
|
|
• Auto-increment server IDs
|
|
• Bool type handling
|
|
end note
|
|
|
|
note right of setupclient
|
|
**Configuration Flow:**
|
|
1. Download .set file
|
|
2. Parse binary format
|
|
3. Modify configuration
|
|
4. Write back to tree
|
|
5. Upload to GeViServer
|
|
end note
|
|
|
|
note bottom of setfile
|
|
**Current State:**
|
|
• 13 G-Core Servers
|
|
• 64 Action Mappings
|
|
• Managed via REST API
|
|
end note
|
|
|
|
@enduml
|