bareethul's picture
Update app.py
5bedd69 verified
import gradio as gr
# Simple simulation model for EV trip energy use
def estimate_energy(distance_km, elevation_m, avg_speed, temp_c):
base_kwh_per_km = 0.18 # typical EV consumption
speed_penalty = 0.001 * (avg_speed - 70) # penalty per km/h above 70
temp_penalty = 0.002 * abs(temp_c - 20) # penalty per Β°C deviation
elevation_penalty = elevation_m * 0.00002 # kWh per meter of climb
kwh = distance_km * (base_kwh_per_km + speed_penalty + temp_penalty)
kwh += elevation_penalty
return round(max(kwh, 0.1), 2)
def range_safe(available_kWh, reserve_kWh, distance_km, elevation_m, avg_speed, temp_c):
needed_kWh = estimate_energy(distance_km, elevation_m, avg_speed, temp_c)
# safety check
margin = available_kWh - reserve_kWh - needed_kWh
if margin >= 5:
status = "SAFE TO PROCEED"
confidence = "High confidence"
bar = "🟩🟩🟩"
elif margin >= 0:
status = "MARGINALLY SAFE"
confidence = "Medium confidence"
bar = "🟨🟨⬜"
else:
status = "CHARGING REQUIRED"
confidence = "Low confidence"
bar = "πŸŸ₯⬜⬜"
explanation = (
f"Trip requires {needed_kWh} kWh. "
f"You have {available_kWh} kWh available with {reserve_kWh} kWh reserved.\n"
f"Energy margin: {round(margin,2)} kWh.\n"
f"Confidence level: {confidence} {bar}"
)
return f"{status}\n\n{explanation}"
demo = gr.Interface(
fn=range_safe,
inputs=[
gr.Number(label="Available Battery (kWh)", value=50),
gr.Number(label="Reserve to Keep (kWh)", value=10),
gr.Number(label="Distance (km)", value=120),
gr.Number(label="Elevation Gain (m)", value=300),
gr.Number(label="Average Speed (km/h)", value=80),
gr.Number(label="Temperature (Β°C)", value=15),
],
outputs=gr.Textbox(lines=8, label="Result", interactive=False),
title="Enhanced Range Safe Mode Prototype",
description="Multi-factor range safety calculator simulating realistic EV behavior.",
)
demo.launch()