Current Leveraged Projects

Air Quality Monitoring body { margin: 0; font-family: 'Poppins', sans-serif; background: #f5f7fa; color: #333333; } .navbar { background-color: #333333; display: flex; justify-content: space-between; padding: 15px 30px; align-items: center; position: sticky; top: 0; z-index: 10; } .logo { font-size: 22px; font-weight: 600; color: #00ffc8; } .menu a { margin-left: 20px; color: #333333; text-decoration: none; font-weight: 500; } .menu a:hover { color: #00ffc8; } .container { padding: 40px 20px; max-width: 1200px; margin: auto; text-align: center; } .card-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px; margin-top: 30px; } .card { background: #333333; border-radius: 12px; padding: 20px; box-shadow: 0 4px 10px rgba(0, 0, 0, 0.4); transition: 0.3s ease; } .card:hover { transform: translateY(-5px); } .card h2 { margin: 0 0 10px; font-size: 20px; color: #00ffc8; } .card p { font-size: 16px; color: #333333; } .last-update { margin-top: 40px; color: #555555; } footer { background-color: #333333; text-align: center; padding: 15px 0; color: #777777; margin-top: 50px; } /* Animation */ .card { transition: transform 0.3s ease, box-shadow 0.3s ease; animation: fadeIn 0.6s ease-in-out; } .card:hover { transform: scale(1.03); box-shadow: 0 6px 15px rgba(0, 0, 0, 0.1); } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } button { transition: background-color 0.3s ease, transform 0.2s ease; } button:hover { background-color: #00ddb0; transform: scale(1.05); } .card:nth-child(3n+1) { background-color: #e3fcef; } .card:nth-child(3n+2) { background-color: #fff4e5; } .card:nth-child(3n) { background-color: #e6f0ff; } /* Force 2-column layout */ .card-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; margin-top: 30px; } @media (max-width: 768px) { .card-grid { grid-template-columns: 1fr; } } .container h1 { text-align: left; color: #1c1e26; margin-bottom: 20px; } footer { background-color: #ffffff; text-align: left; padding: 15px 30px; color: #777777; font-size: 14px; }

Live Air Quality Readings

Last Updated: Fetching...

Download Historical Gas Data


All Gases (CSV) eCO₂ (ppm) TVOC (ppb) H₂S (ppm) PM2.5 (µg/m³) PM10 (µg/m³) CO (ppm) NH3 (ppm)







© 2025 IoT Poultry Farm Monitoring | Powered by ThingSpeak
const channelId = "2840003"; const apiKey = "MGNZSLNC7UYHDF8V"; async function fetchData() { try { const url = `https://api.thingspeak.com/channels/${channelId}/feeds.json?api_key=${apiKey}&results=1`; const response = await fetch(url); const data = await response.json(); const latest = data.feeds[0]; const sensors = { "eCO₂ (ppm)": latest.field1, "TVOC (ppb)": latest.field2, "H₂S (ppm)": latest.field3, "PM2.5 (µg/m³)": latest.field4, "PM10 (µg/m³)": latest.field5, "CO (ppm)": latest.field6, "NH3 (ppm)": latest.field7, "CH4 (ppm)": latest.field8, }; const gaugesContainer = document.getElementById("gauges"); gaugesContainer.innerHTML = ""; for (let [label, value] of Object.entries(sensors)) { gaugesContainer.innerHTML += `

${label}

${value ?? "N/A"}

`; } document.getElementById("last-updated").innerText = "Last Updated: " + new Date(latest.created_at).toLocaleString(); } catch (err) { console.error("Fetch error:", err); } } fetchData(); setInterval(fetchData, 10000); document.getElementById('downloadForm').addEventListener('submit', async (e) => { e.preventDefault(); const gasField = document.getElementById('gasField').value; const startDate = document.getElementById('startDate').value; const endDate = document.getElementById('endDate').value; const start = new Date(startDate).toISOString(); const end = new Date(endDate).toISOString(); const url = `https://api.thingspeak.com/channels/${channelId}/feeds.json?api_key=${apiKey}&start=${start}&end=${end}`; try { const response = await fetch(url); const data = await response.json(); const feeds = data.feeds; if (feeds.length === 0) { alert("No data available for selected dates."); return; } let csvContent = ""; if (gasField === "all") { csvContent += "Timestamp,eCO2,TVOC,H2S,PM2.5,PM10,CO,NH3\n"; for (const feed of feeds) { csvContent += `${feed.created_at},${feed.field1 ?? "N/A"},${feed.field2 ?? "N/A"},${feed.field3 ?? "N/A"},${feed.field4 ?? "N/A"},${feed.field5 ?? "N/A"},${feed.field6 ?? "N/A"},${feed.field7 ?? "N/A"}\n`; } } else { csvContent += "Timestamp,Value\n"; for (const feed of feeds) { csvContent += `${feed.created_at},${feed[gasField] ?? "N/A"}\n`; } } const blob = new Blob([csvContent], { type: "text/csv;charset=utf-8;" }); const link = document.createElement("a"); link.setAttribute("href", URL.createObjectURL(blob)); link.setAttribute("download", `${gasField}_data.csv`); document.body.appendChild(link); link.click(); document.body.removeChild(link); } catch (error) { console.error('Download error:', error); alert('Something went wrong while downloading data.'); } });