import axios from "axios"; import React, { useState, useEffect } from "react"; export type SiteName = 'Site A' | 'Site B' | 'Site C'; interface SiteStatusProps { selectedSite: SiteName; location: string; inverterProvider: string; emergencyContact: string; lastSyncTimestamp: string; } const SiteStatus = ({ selectedSite, location, inverterProvider, emergencyContact, lastSyncTimestamp, }: SiteStatusProps) => { useEffect(() => { const ws = new WebSocket("ws://localhost:8000/ws"); ws.onmessage = (event) => { const data = event.data; alert(`MQTT: ${data}`); }; ws.onopen = () => console.log("WebSocket connected"); ws.onclose = () => console.log("WebSocket disconnected"); return () => ws.close(); }, []); const [showModal, setShowModal] = useState(false); const [deviceId, setDeviceId] = useState(""); const [functionType, setFunctionType] = useState("Grid"); // Map site names to site IDs const siteIdMap: Record = { "Site A": "site_01", "Site B": "site_02", "Site C": "site_03", }; // Track devices connected per site const [loggedDevices, setLoggedDevices] = useState>({ site_01: [], site_02: [], site_03: [], }); const siteId = siteIdMap[selectedSite]; const devicesAtSite = loggedDevices[siteId] || []; const handleStartLogging = () => { setShowModal(true); }; const handleConfirm = async () => { const siteId = siteIdMap[selectedSite]; const topic = `ADW300/${siteId}/${deviceId}/${functionType.toLowerCase()}`; try { const response = await axios.post("http://localhost:8000/start-logging", { topics: [topic], }); console.log("Started logging:", response.data); // Add device to list setLoggedDevices((prev) => ({ ...prev, [siteId]: [...(prev[siteId] || []), deviceId], })); setShowModal(false); } catch (error) { console.error("Failed to start logging:", error); } }; const handleStopLogging = async () => { try { await axios.post("http://localhost:8000/stop-logging"); // Clear all devices for the site (or modify to remove only specific one) setLoggedDevices((prev) => ({ ...prev, [siteId]: [], })); console.log("Stopped logging for", siteId); } catch (error) { console.error("Failed to stop logging:", error); } }; const statusMap: Record = { 'Site A': 'Active', 'Site B': 'Inactive', 'Site C': 'Faulty', }; return (

Site Details

{/* Status */}

Status:

{statusMap[selectedSite]}

{/* Site ID */}

Site ID:

{siteId}

{/* Location */}

Location:

{location}

{/* Inverter Provider */}

Inverter Provider:

{inverterProvider}

{/* Emergency Contact */}

Emergency Contact:

{emergencyContact}

{/* Last Sync */}

Last Sync:

{lastSyncTimestamp}

{/* Start Logging Button */}
{devicesAtSite.length > 0 ? ( ) : ( )}
{/* Modal */} {showModal && (

Enter Device Info

setDeviceId(e.target.value)} />
)}
); }; export default SiteStatus;