Squelette d'application web pour ESP32 avec implémentations de fonctions basiques telles que : -Authentification -Responsive design -Mise à jour OTA -Paramétrage
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

75 lines
2.5 KiB

// Application principale pour l'application web ESP32
// Formater le temps de fonctionnement
function formatUptime(seconds) {
const days = Math.floor(seconds / 86400);
const hours = Math.floor((seconds % 86400) / 3600);
const minutes = Math.floor((seconds % 3600) / 60);
const secs = seconds % 60;
let result = '';
if (days > 0) result += `${days}j `;
if (hours > 0) result += `${hours}h `;
if (minutes > 0) result += `${minutes}m `;
result += `${secs}s`;
return result;
}
// Formater la mémoire
function formatMemory(bytes) {
if (bytes < 1024) return bytes + ' B';
if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB';
return (bytes / (1024 * 1024)).toFixed(1) + ' MB';
}
// Formater le signal WiFi
function formatRSSI(rssi) {
if (rssi >= -50) return `${rssi} dBm (Excellent)`;
if (rssi >= -60) return `${rssi} dBm (Bon)`;
if (rssi >= -70) return `${rssi} dBm (Moyen)`;
if (rssi >= -80) return `${rssi} dBm (Faible)`;
return `${rssi} dBm (Très faible)`;
}
// Rafraîchir les statistiques
async function refreshStats() {
try {
const stats = await api.getStats();
// Mettre à jour l'affichage
document.getElementById('uptime').textContent = formatUptime(stats.uptime);
document.getElementById('memory').textContent = formatMemory(stats.heap_free) + ' / ' + formatMemory(stats.heap_total);
document.getElementById('rssi').textContent = formatRSSI(stats.wifi_rssi);
document.getElementById('ip').textContent = stats.ip;
} catch (error) {
console.error('Erreur de récupération des statistiques:', error);
showMessage('Erreur de récupération des statistiques', 'error');
}
}
// Afficher un message
function showMessage(text, type = 'info') {
const messageDiv = document.getElementById('message');
if (messageDiv) {
messageDiv.className = `message ${type}`;
messageDiv.textContent = text;
setTimeout(() => {
messageDiv.className = 'message';
messageDiv.textContent = '';
}, 5000);
}
}
// Initialisation au chargement de la page
document.addEventListener('DOMContentLoaded', () => {
// Rafraîchir les stats si on est sur la page d'accueil
if (window.location.pathname.includes('index.html') || window.location.pathname === '/') {
refreshStats();
// Rafraîchir automatiquement toutes les 5 secondes
setInterval(refreshStats, 5000);
}
});