diff options
Diffstat (limited to 'templates/client.html')
| -rw-r--r-- | templates/client.html | 98 |
1 files changed, 90 insertions, 8 deletions
diff --git a/templates/client.html b/templates/client.html index e03394a..5a52f43 100644 --- a/templates/client.html +++ b/templates/client.html @@ -12,19 +12,52 @@ <div class="streams-container"> {% for camera_id in camera_ids %} <div class="camera-stream"> - <h2>Camera {{ camera_id }}</h2> + <h2>Camera: {{ camera_id }}</h2> <img id="video-{{ camera_id }}" width="640" height="480" /> + <div> + <h3>Modify Camera Name</h3> + <input type="text" id="new-name-{{ camera_id }}" placeholder="New Name"> + <button onclick="sendConfig('{{ camera_id }}', 'modify_camera_name')">Send</button> + </div> + <div> + <h3>Modify Camera Threshold</h3> + <input type="number" id="threshold-value-{{ camera_id }}" placeholder="Threshold"> + <button onclick="sendConfig('{{ camera_id }}', 'modify_camera_threshold')">Send</button> + </div> + <div> + <h3>Modify Camera Grace Period</h3> + <input type="number" id="grace-value-{{ camera_id }}" placeholder="Grace Period"> + <button onclick="sendConfig('{{ camera_id }}', 'modify_camera_grace_pd')">Send</button> + </div> + <div> + <h3>Modify Camera Address</h3> + <input type="text" id="address-value-{{ camera_id }}" placeholder="New Address"> + <button onclick="sendConfig('{{ camera_id }}', 'modify_camera_address')">Send</button> + </div> </div> - {% endfor %} - </div> + {% endfor %} + <div> + <h3>Add Camera</h3> + <input type="text" id="add-name" placeholder="Camera Name"> + <input type="text" id="add-address" placeholder="Address"> + <button onclick="sendConfig('add_camera')">Send</button> + </div> + <div> + <h3>Remove Camera</h3> + <input type="text" id="remove-name" placeholder="Camera Name"> + <button onclick="sendConfig('remove_camera')">Send</button> + </div> + </div> <script> - // For each camera, open a WebSocket and update the corresponding <img> + const wsMap = {}; {% for camera_id in camera_ids %} + // For each camera, open a WebSocket and update the corresponding <img> (function() { - let ws = new WebSocket('ws://' + window.location.host + '/ws/{{ client_id }}/{{ camera_id }}'); - let image = document.getElementById('video-{{ camera_id }}'); + const cameraId = '{{ camera_id }}'; + const ws = new WebSocket('ws://' + window.location.host + '/ws/{{ client_id }}/' + cameraId); let currentUrl = null; ws.onmessage = function(event) { + let image = document.getElementById('video-' + cameraId); if (currentUrl) { URL.revokeObjectURL(currentUrl); } @@ -32,16 +65,65 @@ image.src = currentUrl; }; ws.onclose = function(event) { - console.log('WebSocket closed for camera {{ camera_id }}:', event); + console.log('WebSocket closed for camera ' + cameraId + ':', event); }; ws.onerror = function(event) { - console.log('WebSocket error for camera {{ camera_id }}:', event); + console.log('WebSocket error for camera ' + cameraId + ':', event); }; window.addEventListener('beforeunload', function() { ws.close(); }); + wsMap[cameraId] = ws; })(); {% endfor %} + + function sendConfig(cameraId, type) { + let msg = {}; + switch(type) { + case 'modify_camera_name': + msg[type] = [ + // cameraId, + document.getElementById('new-name-' + cameraId).value + ]; + break; + case 'modify_camera_threshold': + msg[type] = [ + // cameraId, + document.getElementById('threshold-value-' + cameraId).value + ]; + break; + case 'modify_camera_grace_pd': + msg[type] = [ + // cameraId, + parseInt(document.getElementById('grace-value-' + cameraId).value) + ]; + break; + case 'modify_camera_address': + msg[type] = [ + // cameraId, + document.getElementById('address-value-' + cameraId).value + ]; + break; + case 'add_camera': + msg[type] = [ + document.getElementById('add-name').value, + document.getElementById('add-address').value + ]; + break; + case 'remove_camera': + msg[type] = [ + document.getElementById('remove-name').value + ]; + break; + } + const ws = wsMap[cameraId] && wsMap[cameraId] ? wsMap[cameraId] : Object.values(wsMap)[0]; + if (ws && ws.readyState === WebSocket.OPEN) { + console.log("Sending message:", msg, "on ws:", ws); + ws.send(JSON.stringify(msg)); + } else { + alert('WebSocket is not open for camera ' + cameraId); + } + } </script> </body> </html> |
