Danial7's picture
Update app.py
29d7742 verified
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
import random
import time
st.set_page_config(page_title="📶 WiFi Signal Analyzer", layout="centered")
st.title("📡 Real-Time WiFi Signal Strength (Bar View)")
st.markdown("Roam around and monitor your WiFi signal strength. Strong signals are shown in **green**, weak in **red**.")
# Session state for data and tracking
if "tracking" not in st.session_state:
st.session_state.tracking = False
if "data" not in st.session_state:
st.session_state.data = []
# Start / Stop buttons
col1, col2 = st.columns(2)
with col1:
if st.button("▶️ Start Tracking", disabled=st.session_state.tracking):
st.session_state.tracking = True
with col2:
if st.button("⏹ Stop Tracking", disabled=not st.session_state.tracking):
st.session_state.tracking = False
# Placeholders for real-time updates
bar_chart_placeholder = st.empty()
status_placeholder = st.empty()
best_placeholder = st.empty()
# Tracking loop
while st.session_state.tracking:
signal = random.randint(-90, -30) # Simulated dBm
position = len(st.session_state.data) + 1
st.session_state.data.append({"Position": position, "Signal": signal})
df = pd.DataFrame(st.session_state.data)
# Assign colors based on signal strength
def color_by_strength(s):
if s >= -60:
return 'green'
elif s >= -75:
return 'orange'
else:
return 'red'
bar_colors = df["Signal"].apply(color_by_strength)
# Draw bar chart
fig, ax = plt.subplots()
ax.bar(df["Position"], df["Signal"], color=bar_colors)
ax.set_xlabel("Position")
ax.set_ylabel("Signal Strength (dBm)")
ax.set_title("WiFi Signal Strength by Position")
ax.set_ylim(-100, -20) # Consistent y-axis scale
bar_chart_placeholder.pyplot(fig)
# Status text
status_placeholder.markdown(f"📍 **Current Signal: `{signal} dBm` at Position {position}**")
# Best signal detection
best = df[df["Signal"] == df["Signal"].max()].iloc[0]
best_placeholder.markdown(f"✅ **Best Signal so far: `{best['Signal']} dBm` at Position {best['Position']}**")
time.sleep(1)
# Show final plot if tracking stopped
if not st.session_state.tracking and st.session_state.data:
df = pd.DataFrame(st.session_state.data)
bar_colors = df["Signal"].apply(lambda s: 'green' if s >= -60 else 'orange' if s >= -75 else 'red')
fig, ax = plt.subplots()
ax.bar(df["Position"], df["Signal"], color=bar_colors)
ax.set_xlabel("Position")
ax.set_ylabel("Signal Strength (dBm)")
ax.set_title("Final WiFi Signal Chart")
ax.set_ylim(-100, -20)
st.pyplot(fig)