Flutter web app replacing legacy WPF CCTV surveillance keyboard controller. Includes wall overview, section view with monitor grid, camera input, PTZ control, alarm/lock/sequence BLoCs, and legacy-matching UI styling. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
105 lines
2.6 KiB
Plaintext
105 lines
2.6 KiB
Plaintext
{
|
|
"$schema": "./servers.schema.json",
|
|
"version": "1.0",
|
|
"description": "Server configuration for COPILOT keyboard system",
|
|
|
|
"servers": [
|
|
{
|
|
"id": "geviscope-01",
|
|
"name": "GeViScope Server 1",
|
|
"type": "geviscope",
|
|
"enabled": true,
|
|
"connection": {
|
|
"address": "192.168.1.10",
|
|
"port": 7700,
|
|
"username": "operator",
|
|
"password": "${GEVISCOPE_01_PASSWORD}"
|
|
},
|
|
"bridge": {
|
|
"url": "http://localhost:7720",
|
|
"websocket": "ws://localhost:7720/ws/events"
|
|
},
|
|
"resources": {
|
|
"cameraRange": { "start": 1, "end": 100 },
|
|
"monitorRange": { "start": 1, "end": 16 }
|
|
},
|
|
"features": {
|
|
"ptz": true,
|
|
"playback": true,
|
|
"alarms": true,
|
|
"digitalIO": true
|
|
}
|
|
},
|
|
{
|
|
"id": "gcore-01",
|
|
"name": "G-Core Server 1",
|
|
"type": "gcore",
|
|
"enabled": true,
|
|
"connection": {
|
|
"address": "192.168.1.20",
|
|
"port": 7700,
|
|
"username": "operator",
|
|
"password": "${GCORE_01_PASSWORD}"
|
|
},
|
|
"bridge": {
|
|
"url": "http://localhost:7721",
|
|
"websocket": "ws://localhost:7721/ws/events"
|
|
},
|
|
"resources": {
|
|
"cameraRange": { "start": 101, "end": 200 },
|
|
"monitorRange": { "start": 17, "end": 32 }
|
|
},
|
|
"features": {
|
|
"ptz": true,
|
|
"playback": true,
|
|
"alarms": true,
|
|
"digitalIO": true
|
|
}
|
|
},
|
|
{
|
|
"id": "geviserver-01",
|
|
"name": "GeViServer (PTZ Fallback)",
|
|
"type": "geviserver",
|
|
"enabled": false,
|
|
"connection": {
|
|
"address": "192.168.1.5",
|
|
"port": 7700,
|
|
"username": "operator",
|
|
"password": "${GEVISERVER_01_PASSWORD}"
|
|
},
|
|
"bridge": {
|
|
"url": "http://localhost:7710"
|
|
},
|
|
"resources": {
|
|
"cameraRange": { "start": 1, "end": 200 },
|
|
"monitorRange": { "start": 1, "end": 32 }
|
|
},
|
|
"features": {
|
|
"ptz": true,
|
|
"playback": false,
|
|
"alarms": false,
|
|
"digitalIO": false
|
|
}
|
|
}
|
|
],
|
|
|
|
"routing": {
|
|
"description": "Rules for routing commands to correct server based on camera/monitor ID",
|
|
"cameraToServer": [
|
|
{ "range": [1, 100], "serverId": "geviscope-01" },
|
|
{ "range": [101, 200], "serverId": "gcore-01" }
|
|
],
|
|
"monitorToServer": [
|
|
{ "range": [1, 16], "serverId": "geviscope-01" },
|
|
{ "range": [17, 32], "serverId": "gcore-01" }
|
|
]
|
|
},
|
|
|
|
"healthCheck": {
|
|
"enabled": true,
|
|
"intervalMs": 30000,
|
|
"timeoutMs": 5000,
|
|
"unhealthyThreshold": 3
|
|
}
|
|
}
|