mirror of
https://github.com/OpenMANET/docs.git
synced 2026-02-05 05:34:06 -06:00
73 lines
2.4 KiB
Bash
73 lines
2.4 KiB
Bash
#!/bin/sh
|
|
|
|
# If this doesnt work, gps might be using the wrong device.
|
|
killall gpsd 2>/dev/null
|
|
# dmesg | grep tty
|
|
# this should should a device name like below.
|
|
gpsd /dev/ttyACM0 -F /var/run/gpsd.sock
|
|
|
|
# === Config ===
|
|
IFNAME="wlan0"
|
|
PING_IP="192.168.1.1"
|
|
OUTDIR="/root/distance"
|
|
TS_FILE=$(date +%Y%m%d-%H%M%S)
|
|
CSV="$OUTDIR/$TS_FILE.csv"
|
|
|
|
# === Ensure output dir exists ===
|
|
mkdir -p "$OUTDIR"
|
|
|
|
# === Add CSV header ===
|
|
echo "timestamp,time,lat,lon,signal_dbm,noise_dbm,snr_db,tx_mcs,rx_mcs,connected" > "$CSV"
|
|
|
|
while true; do
|
|
# === Get timestamp and time ===
|
|
TS=$(date -Iseconds 2>/dev/null || date +"%Y-%m-%dT%H:%M:%S%z")
|
|
TIME=$(date +%H:%M:%S)
|
|
|
|
# === Get GPS ===
|
|
GPS=$(gpspipe -w -n 30 | grep TPV | grep -m1 lat)
|
|
LAT=$(echo "$GPS" | grep -o '"lat":[^,]*' | cut -d':' -f2 | tr -d ' ')
|
|
LON=$(echo "$GPS" | grep -o '"lon":[^,]*' | cut -d':' -f2 | tr -d ' ')
|
|
|
|
# Skip if no GPS fix
|
|
if [ -z "$LAT" ] || [ -z "$LON" ]; then
|
|
echo "[$TIME] No GPS fix. Skipping..."
|
|
sleep 10
|
|
continue
|
|
fi
|
|
|
|
# === Get Signal and Noise ===
|
|
STATS=$(morse_cli -i "$IFNAME" stats)
|
|
|
|
# case-insensitive, robust to spacing; extract the numeric value after the colon
|
|
RSSI=$(printf "%s\n" "$STATS" | awk -F':' 'tolower($0) ~ /received[[:space:]]+power[[:space:]]*\(dbm\)/ {gsub(/^[ \t]+|[ \t]+$/,"",$2); print $2; exit}')
|
|
NOISE=$(printf "%s\n" "$STATS" | awk -F':' 'tolower($0) ~ /^[[:space:]]*noise[[:space:]]*\(dbm\)/ {gsub(/^[ \t]+|[ \t]+$/,"",$2); print $2; exit}')
|
|
|
|
if [ -n "$RSSI" ] && [ -n "$NOISE" ]; then
|
|
SNR=$(( RSSI - NOISE ))
|
|
else
|
|
SNR=""
|
|
fi
|
|
# === Get TX/RX MCS ===
|
|
TX_MCS=$(iw dev "$IFNAME" station dump 2>/dev/null | grep "tx bitrate" | grep -oE 'MCS [0-9]+' | head -n1 | cut -d' ' -f2)
|
|
RX_MCS=$(iw dev "$IFNAME" station dump 2>/dev/null | grep "rx bitrate" | grep -oE 'MCS [0-9]+' | head -n1 | cut -d' ' -f2)
|
|
|
|
TX_MCS=${TX_MCS:-NA}
|
|
RX_MCS=${RX_MCS:-NA}
|
|
|
|
# === Ping test for connectivity ===
|
|
if ping -c 1 -W 1 "$PING_IP" >/dev/null 2>&1; then
|
|
STATUS="yes"
|
|
echo "✅ Ping $PING_IP OK"
|
|
else
|
|
STATUS="no"
|
|
echo "❌ Ping $PING_IP failed"
|
|
fi
|
|
|
|
# === Output to console and CSV ===
|
|
echo "Logged at $TIME ($LAT, $LON) RSSI=$RSSI dBm, SNR=$SNR dB, TX_MCS=$TX_MCS, RX_MCS=$RX_MCS, Connected=$STATUS"
|
|
echo "$TS,$TIME,$LAT,$LON,$RSSI,$NOISE,$SNR,$TX_MCS,$RX_MCS,$STATUS" >> "$CSV"
|
|
|
|
sleep 10
|
|
done
|