Omid7's picture
in setting app 6 paramters
a9143a5 verified
// Shared functionality for ESP32 dashboard
// Theme switcher functionality
document.addEventListener('DOMContentLoaded', () => {
// Check for saved theme preference or use system preference
if (localStorage.getItem('color-theme') === 'dark' || (!('color-theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark');
} else {
document.documentElement.classList.remove('dark');
}
});
// API Endpoints
const API_BASE_URL = 'https://api.thingspeak.com/channels/1234567/feeds.json'; // Replace with your actual API
const DEVICE_API_URL = 'http://esp32.local/api/status'; // Example local ESP32 API
// Fetch device status from API
async function fetchDeviceStatus() {
try {
const response = await fetch(API_BASE_URL);
const data = await response.json();
updateDashboard(data);
} catch (error) {
console.error('Error fetching API data:', error);
// Fallback to local API
try {
const localResponse = await fetch(DEVICE_API_URL);
const localData = await localResponse.json();
updateDashboard(localData);
} catch (localError) {
console.error('Error fetching local device data:', localError);
}
}
}
// Update dashboard with API data
function updateDashboard(data) {
// Update status cards
document.querySelector('[data-status="wifi"]').textContent =
data.wifi_status === 1 ? 'Connected' : 'Disconnected';
document.querySelector('[data-status="cpu"]').textContent =
`${data.cpu_usage}%`;
document.querySelector('[data-status="memory"]').textContent =
`${data.memory_usage}%`;
document.querySelector('[data-status="temperature"]').textContent =
`${data.temperature}°C`;
// Update chart
const chart = Chart.getChart('sensorChart');
chart.data.labels = data.timestamps;
chart.data.datasets[0].data = data.temperature_readings;
chart.data.datasets[1].data = data.humidity_readings;
chart.update();
}
// Initialize real-time updates
document.addEventListener('DOMContentLoaded', () => {
fetchDeviceStatus();
setInterval(fetchDeviceStatus, 5000); // Update every 5 seconds
// Mock data for development
const mockData = {
wifi_status: 1,
cpu_usage: Math.floor(Math.random() * 20) + 30,
memory_usage: Math.floor(Math.random() * 20) + 60,
temperature: Math.floor(Math.random() * 5) + 30,
timestamps: ['00:00', '03:00', '06:00', '09:00', '12:00', '15:00', '18:00', '21:00', '00:00'],
temperature_readings: [22, 21, 20, 22, 25, 26, 24, 23, 22],
humidity_readings: [45, 46, 48, 42, 40, 38, 42, 44, 45]
};
updateDashboard(mockData);
});
// Toggle switches functionality
document.addEventListener('DOMContentLoaded', () => {
document.querySelectorAll('input[type="checkbox"]').forEach(checkbox => {
checkbox.addEventListener('change', (e) => {
const device = e.target.closest('div').querySelector('h3')?.textContent || '';
console.log(`${device} turned ${e.target.checked ? 'on' : 'off'}`);
});
});
document.querySelectorAll('input[type="range"]').forEach(range => {
range.addEventListener('input', (e) => {
const control = e.target.closest('div').querySelector('h3')?.textContent || '';
console.log(`${control} adjusted to ${e.target.value}%`);
});
});
// Settings form handling
const settingsForm = document.querySelector('form');
if (settingsForm) {
settingsForm.addEventListener('submit', (e) => {
e.preventDefault();
const formData = new FormData(settingsForm);
const settings = {
deviceName: formData.get('deviceName'),
timezone: formData.get('timezone'),
maxTemp: parseFloat(formData.get('maxTemp')),
minHumidity: parseFloat(formData.get('minHumidity')),
reportInterval: parseInt(formData.get('reportInterval')),
otaEnabled: formData.get('ota') === 'on'
};
console.log('Saving settings:', settings);
// Here you would typically send to API
alert('Settings saved successfully!');
});
}
});