Files
geutebruck/phase1_completion_summary.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

6.3 KiB

Phase 1 Completion Summary - Backend Enhancements

Completed Tasks

1. Action Categories Endpoint

Endpoint: GET /api/v1/configuration/action-categories

Response Format:

{
  "categories": {
    "Camera Control": ["PanLeft", "PanRight", "PanStop", ...],
    "Video Switching": ["CrossSwitch C -> M", "CrossSwitch OpCon -> Matrix"],
    "System": ["SystemWarning", "SystemError", ...],
    ...
  },
  "total_categories": 10,
  "total_actions": 45
}

Categories Available:

  • Camera Control (22 actions) - Pan, Tilt, Zoom, Focus, Iris, Presets, Movement
  • System (7 actions) - Warnings, Errors, Info, Video sync/contrast notifications
  • Viewer (3 actions) - Live connections, disconnections
  • Events (3 actions) - Start, Stop, Kill
  • Digital I/O (2 actions) - Contact activation/deactivation
  • Recording (2 actions) - Start/Stop recording
  • Video Switching (2 actions) - CrossSwitch operations
  • Custom (2 actions) - GSC and GNG custom actions
  • Alarms (1 action) - Alarm recording
  • Input (1 action) - Input contact triggers

2. Enhanced Action Templates

All action templates now include:

  • description - Detailed description of what the action does
  • category - Category for organization
  • required_caption - Whether a caption field is required
  • supports_delay - Whether delay execution is supported
  • parameter_types (optional) - Data types for parameters

Example Enhanced Template:

{
  "action_name": "PanStop",
  "parameters": ["GCoreServer", "PTZ head"],
  "description": "Stop pan movement. The panning of the camera will be stopped.",
  "category": "Camera Control",
  "required_caption": true,
  "supports_delay": true
}

3. Expanded Action Library

Increased from 30 to 45 actions covering:

Camera Control:

  • Basic: Pan, Tilt, Zoom, Focus, Iris operations
  • Advanced: Move to absolute/relative position, Move by speed, Auto pan
  • Presets: Save and recall preset positions

System Actions:

  • SystemWarning, SystemError, SystemInfo
  • VideoSyncFailure, VideoSyncOk
  • VideoContrastAlarm, VideoContrastOk

Video Actions:

  • ViewerConnectLive (with parameters)
  • CrossSwitch operations

Custom Actions:

  • GscCustomAction - for custom GSC commands
  • GNGCustomAction - for custom GNG commands

Input Actions:

  • InputContact - for digital input triggers

API Endpoints Summary

Endpoint Method Description
/api/v1/configuration/action-types GET Get all action templates
/api/v1/configuration/action-types/{name} GET Get specific action template
/api/v1/configuration/action-categories GET Get actions grouped by category

Testing Results

All endpoints tested and working:

  • Categories endpoint returns 10 categories with 45 actions
  • Action templates include enhanced metadata
  • Descriptions match native GeViSet app
  • Parameter types defined for form generation

Usage for Flutter App

1. On App Startup - Load Categories

final response = await http.get(
  Uri.parse('$apiUrl/action-categories'),
  headers: {'Authorization': 'Bearer $token'},
);

final categories = jsonDecode(response.body)['categories'];
// categories = {
//   "Camera Control": ["PanLeft", "PanRight", ...],
//   "Video Switching": [...],
//   ...
// }

2. Build Category Dropdown

DropdownButton<String>(
  value: selectedCategory,
  items: categories.keys.map((category) =>
    DropdownMenuItem(value: category, child: Text(category))
  ).toList(),
  onChanged: (category) {
    setState(() {
      selectedCategory = category;
      // Load actions for this category
    });
  },
)

3. Display Actions in Category

ListView.builder(
  itemCount: categories[selectedCategory].length,
  itemBuilder: (context, index) {
    final actionName = categories[selectedCategory][index];
    return ListTile(
      title: Text(actionName),
      onTap: () => _selectAction(actionName),
    );
  },
)

4. Show Action Details

// Fetch full action template
final response = await http.get(
  Uri.parse('$apiUrl/action-types/$actionName'),
  headers: {'Authorization': 'Bearer $token'},
);

final template = jsonDecode(response.body);

// Show description
Text(template['description']);

// Generate parameter fields
for (var param in template['parameters']) {
  TextField(
    decoration: InputDecoration(labelText: param),
  );
}

// Show caption field if required
if (template['required_caption'] == true) {
  TextField(
    decoration: InputDecoration(labelText: 'Caption (required)'),
  );
}

// Show delay field if supported
if (template['supports_delay'] == true) {
  TextField(
    decoration: InputDecoration(
      labelText: 'Delay execution',
      suffixText: 'ms',
    ),
  );
}

Files Modified

  1. C:\DEV\COPILOT\geutebruck-api\src\api\routers\configuration.py
    • Added 15 new action templates
    • Enhanced existing templates with metadata
    • Added /action-categories endpoint
    • Total action count: 30 → 45

Next Steps (Phase 2 & 3)

Phase 2: Flutter UI Components

  1. Create ActionPickerDialog with two-pane layout
  2. Implement category dropdown + action list
  3. Build dynamic parameter fields based on templates
  4. Add description display at bottom
  5. Add caption and delay execution fields

Phase 3: DataTable Main View

  1. Replace card-based list with DataTable
  2. Show multiple output actions as columns
  3. Add row selection
  4. Implement Add/Edit/Remove buttons

Phase 4: Full Integration

  1. Wire up ActionPickerDialog to mapping editor
  2. Implement output action reordering
  3. Add validation for required fields
  4. Test full workflow: List → Edit → Pick Action → Set Parameters → Save

Performance Notes

  • All action templates loaded in-memory (45 templates = ~10KB)
  • Categories computed on-demand (fast, <1ms)
  • Action names sorted alphabetically within categories
  • No database queries - all static data

Backward Compatibility

All existing endpoints remain unchanged:

  • /action-mappings - Still works, now includes output_action_names
  • /action-types - Still works, now includes enhanced metadata
  • New /action-categories endpoint is additive

Ready for Flutter Development

The backend is now ready for Flutter app Phase 2 development. All necessary data is available through clean REST APIs with proper authentication and authorization.