File size: 2,138 Bytes
09340cb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5bedd69
09340cb
 
 
 
 
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
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()