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>
6.2 KiB
SDK Architecture Issue - Root Cause Analysis
Date: 2025-12-10 Status: 🔴 BLOCKING ISSUE IDENTIFIED
Problem Summary
The SDK Bridge cannot connect to servers, returning connectRemoteUnknownUser error. After extensive testing, this is NOT a credential problem - it's an SDK architecture problem.
Root Cause Discovered
The SDK Bridge is using the WRONG SDK!
Current Implementation (INCORRECT):
using GEUTEBRUECK.GeViSoftSDKNET.ActionsWrapper; // GeViSoft SDK
using GEUTEBRUECK.GeViSoftSDKNET.ActionsWrapper.ActionDispatcher;
The SDK Bridge is trying to use the GeViSoft SDK to connect to BOTH servers:
- GSCServer (GeViScope) - ❌ WRONG SDK
- GeViServer (GeViSoft) - ✅ Correct SDK
###There are TWO Separate SDKs
GeViScope SDK (for GSCServer - video operations):
GscActionsNET_4_0.dllGscDBINET_4_0.dllGscExceptionsNET_4_0.dllGscMediaPlayerNET_4_0.dll
GeViSoft SDK (for GeViServer - configuration/management):
GeViProcAPINET_4_0.dll(what we're currently using)G-ActionsNET_4.0.dllGngActionsNET_SDK.dllGngDBINET_SDK.dll
Evidence
1. Successful Connection Log
C:\GEVISOFT\GeViSoftConfigReader.log shows:
2025-12-08 15:46:42: Server: localhost, User: sysadmin
2025-12-08 15:46:42: Connect() returned: connectOk
2025-12-08 15:46:42: Connected successfully!
This connected to GeViServer (GeViSoft), NOT GSCServer (GeViScope)!
2. SDK Documentation
From GeViSoft_SDK_Documentation.md:
the user name to sysadmin. Check Save password and set the password to masterkey.
Credentials are correct: sysadmin / masterkey
3. Automated Credential Testing
Tested 48 username/password combinations:
- 6 usernames: sysadmin, admin, administrator, root, geviscope, gevisoft
- 8 passwords: "", masterkey, admin, password, geviscope, gevisoft, 123456, geutebruck
NONE worked for GSCServer - because we're using the wrong SDK.
File System Evidence
C:\GEVISOFT contains separate DLL sets:
Gsc*.dll → GeViScope SDK (for GSCServer)
Gng*.dll → GeViSoft Next-Gen SDK
GeViProc*.dll → GeViSoft Process API (what we're using)
C:\Program Files (x86)\GeViScopeSDK exists separately from GeViSoft installation.
The Architecture Should Be
SDK Bridge
├── GeViScope Connection (GSCServer - video ops)
│ └── Uses: GscDBINET_4_0.dll
│ └── Class: GeViScopeDatabase (or similar)
│
└── GeViSoft Connection (GeViServer - config)
└── Uses: GeViProcAPINET_4_0.dll (current)
└── Class: GeViDatabase ✅ (already implemented)
Current vs. Correct Implementation
Current (Broken)
// Program.cs lines 45-50
var geviScopeWrapper = new GeViDatabaseWrapper( // ❌ Using GeViSoft SDK
geviScopeHost,
geviScopeUsername,
geviScopePassword,
Log.Logger);
What It Should Be
// Need TWO different wrapper classes:
// For GeViScope (GSCServer)
var geviScopeWrapper = new GscDatabaseWrapper( // New class needed
geviScopeHost,
geviScopeUsername,
geviScopePassword,
Log.Logger);
// For GeViSoft (GeViServer)
var geviSoftWrapper = new GeViDatabaseWrapper( // Current class - OK
geviSoftHost,
geviSoftUsername,
geviSoftPassword,
Log.Logger);
What Needs to Be Fixed
1. Add GeViScope SDK References
GeViScopeBridge.csproj needs:
<ItemGroup>
<!-- Existing GeViSoft SDK -->
<Reference Include="GeViProcAPINET_4_0">
<HintPath>C:\GEVISOFT\GeViProcAPINET_4_0.dll</HintPath>
</Reference>
<!-- NEW: Add GeViScope SDK -->
<Reference Include="GscDBINET_4_0">
<HintPath>C:\GEVISOFT\GscDBINET_4_0.dll</HintPath>
</Reference>
<Reference Include="GscActionsNET_4_0">
<HintPath>C:\GEVISOFT\GscActionsNET_4_0.dll</HintPath>
</Reference>
<Reference Include="GscExceptionsNET_4_0">
<HintPath>C:\GEVISOFT\GscExceptionsNET_4_0.dll</HintPath>
</Reference>
</ItemGroup>
2. Create GscDatabaseWrapper.cs
New file: SDK/GscDatabaseWrapper.cs
- Similar to
GeViDatabaseWrapper.cs - Uses GeViScope SDK classes instead
- Connects to GSCServer for video operations
3. Update Program.cs
Use correct SDK wrapper for each server:
- GSCServer →
GscDatabaseWrapper - GeViServer →
GeViDatabaseWrapper(unchanged)
4. Update Service Implementations
Services using GeViScope (video ops) should use GscDatabaseWrapper:
CrossSwitchService.csMonitorService.csCameraService.cs
Services using GeViSoft (config) stay unchanged:
ActionMappingService.cs✅
Testing After Fix
Once fixed, test connection with known-good credentials:
{
"GeViScope": {
"Host": "localhost",
"Username": "sysadmin",
"Password": "masterkey"
},
"GeViSoft": {
"Host": "localhost",
"Username": "sysadmin",
"Password": "masterkey"
}
}
Expected Result:
[INF] Connecting to GeViScope (GSCServer)...
[INF] Successfully connected to GeViScope ← Should work now
[INF] Connecting to GeViSoft (GeViServer)...
[INF] Successfully connected to GeViSoft ← Already works
[INF] gRPC server starting on port 50051
Why This Wasn't Obvious
- Both SDKs use similar patterns - Create(), Connect(), Dispose()
- Naming confusion - "GeViDatabase" is from GeViSoft SDK, but sounds generic
- Error message misleading - "connectRemoteUnknownUser" suggests auth problem, not SDK mismatch
- Documentation gap - Wasn't clear that two separate SDKs exist
Next Steps
- Research GeViScope SDK documentation in
C:\Program Files (x86)\GeViScopeSDK\Documentation - Examine example code in
C:\Program Files (x86)\GeViScopeSDK\Examples - Implement GscDatabaseWrapper using GeViScope SDK
- Update all services to use correct SDK
- Test connection - should succeed immediately with sysadmin/masterkey
Summary
- ✅ Credentials are correct:
sysadmin/masterkey - ❌ SDK is wrong: Using GeViSoft SDK for GeViScope server
- 🔧 Fix required: Add GeViScope SDK support via GscDBINET_4_0.dll
- ⏱️ Estimated fix time: 2-3 hours of implementation
Once the correct SDK is used, connection should work immediately with the credentials we already have.