{ "$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 } }