Spaces:
Sleeping
Sleeping
File size: 2,582 Bytes
6681f07 67688b4 bc4147c 6681f07 67688b4 6681f07 bc4147c 67688b4 af81e4c 67688b4 bc4147c 67688b4 bc4147c 67688b4 af81e4c 67688b4 af81e4c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
import pandas as pd
import numpy as np
import datetime
# Rough base coordinates for each site (example, can adjust for realism)
site_coords = {
"Hyderabad": (17.385, 78.4867),
"Gadwal": (16.2333, 77.8),
"Kurnool": (15.8281, 78.0373),
"Ballari": (15.1394, 76.9214)
}
def simulate_data(n=48, faults=True):
today = datetime.date.today()
sites = list(site_coords.keys())
data = []
poles_per_site = n // len(sites)
for site in sites:
base_lat, base_lon = site_coords[site]
for i in range(poles_per_site):
pole_num = len(data) + 1
pole_id = f"Pole_{pole_num:03}"
# Spread out poles in a grid (every 10 feet ≈ 0.00003 degrees)
row = i // 4
col = i % 4
lat = base_lat + row * 0.00003
lon = base_lon + col * 0.00003
solar = round(np.random.uniform(3.0, 7.5), 2)
wind = round(np.random.uniform(0.5, 2.0), 2)
required = round(np.random.uniform(1.0, 1.5), 2)
total = solar + wind
cam = np.random.choice(['Online', 'Offline'], p=[0.85, 0.15]) if faults else "Online"
tilt = round(np.random.uniform(0, 12), 1)
vib = round(np.random.uniform(0.1, 2.5), 2)
sufficient = "Yes" if total >= required else "No"
anomaly = []
if faults:
if solar < 4.0: anomaly.append("Low Solar Output")
if wind < 0.7: anomaly.append("Low Wind Output")
if tilt > 10: anomaly.append("Pole Tilt Risk")
if vib > 2.0: anomaly.append("Vibration Alert")
if cam == "Offline": anomaly.append("Camera Offline")
if sufficient == "No": anomaly.append("Power Insufficient")
alert = "Green"
if len(anomaly) == 1:
alert = "Yellow"
elif len(anomaly) > 1:
alert = "Red"
data.append({
"Pole ID": pole_id,
"Site": site,
"Date": today,
"Latitude": lat,
"Longitude": lon,
"Solar Gen (kWh)": solar,
"Wind Gen (kWh)": wind,
"Power Required (kWh)": required,
"Power Sufficient": sufficient,
"Camera Status": cam,
"Tilt (°)": tilt,
"Vibration (g)": vib,
"Anomalies": "; ".join(anomaly) if anomaly else "None",
"Alert Level": alert
})
return pd.DataFrame(data)
|