let currentDbPath = '/home/zjk/project/H100/H100PowerManger/data/power_data.db'; // 数据库下载功能 document.getElementById('download-db').addEventListener('click', function() { fetch('/api/download-db') .then(response => { if (!response.ok) { throw new Error('下载失败:' + response.statusText); } return response.blob(); }) .then(blob => { const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = 'power_data.db'; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); }) .catch(error => { console.error('下载数据库失败:', error); alert('下载数据库失败:' + error.message); }); }); // WebSocket连接 let ws = null; let reconnectAttempts = 0; const maxReconnectAttempts = 5; const reconnectDelay = 5000; // 初始化WebSocket连接 function initWebSocket() { ws = new WebSocket('ws://' + window.location.host + '/ws/state'); ws.onopen = () => { console.log('WebSocket连接已建立'); reconnectAttempts = 0; }; ws.onmessage = (event) => { const data = JSON.parse(event.data); updateUI(data); }; ws.onclose = () => { console.log('WebSocket连接已关闭'); if (reconnectAttempts < maxReconnectAttempts) { setTimeout(() => { reconnectAttempts++; console.log(`尝试重新连接 (${reconnectAttempts}/${maxReconnectAttempts})`); initWebSocket(); }, reconnectDelay); } }; ws.onerror = (error) => { console.error('WebSocket错误:', error); ws.close(); }; } // 更新UI function updateUI(data) { // 更新数据库状态 if (data.db_status) { const dbStatus = document.getElementById('db-status'); if (dbStatus) { dbStatus.className = data.db_status.connected ? 'db-status connected' : 'db-status disconnected'; dbStatus.innerHTML = `已连接到数据库:${data.db_status.database}`; } } // 更新MOOS数据库状态 if (data.moos_db_status) { const moosDbStatus = document.getElementById('moos-db-status'); if (data.moos_db_status.connected) { moosDbStatus.className = 'db-status connected'; moosDbStatus.innerHTML = `已连接到MOOS数据库:${data.moos_db_status.host}:${data.moos_db_status.port}`; } else { moosDbStatus.className = 'db-status disconnected'; moosDbStatus.innerHTML = `MOOS数据库连接失败`; } } // 更新状态机面板 const stateInfo = ` 更新时间 ${data.state.time} 状态ID ${data.state.state_id} 状态名称 ${data.state.state_name} 事件 ${data.state.event} 事件ID ${data.state.event_id} 故障代码 ${data.state.fault_code} 备注 ${data.state.note} `; document.getElementById('state-machine-state').innerHTML = stateInfo; // 更新DIS系统状态 document.getElementById('dis-sys-state').textContent = JSON.stringify(data.status.disSys, null, 2); // 更新CCU状态 document.getElementById('ccu-state').textContent = JSON.stringify(data.status.ccuState, null, 2); // 更新运行日志 document.getElementById('log-data').textContent = data.status.logs.join('\n'); } // MOOS通知功能 function sendMoosNotify() { const varValue = document.getElementById('moos-var').value.trim(); const keyValue = document.getElementById('moos-key').value.trim(); if (!varValue || !keyValue) { alert('请填写Var和Key值'); return; } const payload = { var: varValue, key: keyValue }; fetch('/api/moos-notify', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(payload) }) .then(response => response.json()) .then(data => { if (data.success) { alert('发送成功'); } else { alert('发送失败: ' + data.message); } }) .catch(error => { console.error('Error:', error); alert('发送请求失败'); }); } document.getElementById('moos-send-btn').addEventListener('click', sendMoosNotify); // 初始化WebSocket连接 initWebSocket(); // 删除旧的定时检查,现在通过WebSocket实时更新