37 lines
1.1 KiB
Bash
37 lines
1.1 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# hotspot-keepalive.sh — Auto-reconnect to Alfred hotspot
|
||
|
|
# Checks every 30s, reconnects if dropped.
|
||
|
|
|
||
|
|
SSID="Alfred"
|
||
|
|
IFACE="en0"
|
||
|
|
LOG="$HOME/.hermes/logs/hotspot.log"
|
||
|
|
CHECK_INTERVAL=30
|
||
|
|
|
||
|
|
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] HOTSPOT: $*" >> "$LOG"; }
|
||
|
|
|
||
|
|
log "=== Keepalive started for SSID: $SSID ==="
|
||
|
|
|
||
|
|
while true; do
|
||
|
|
current=$(networksetup -getairportnetwork "$IFACE" 2>/dev/null | sed 's/.*: //')
|
||
|
|
|
||
|
|
if [ "$current" = "$SSID" ]; then
|
||
|
|
# Connected — check we actually have internet
|
||
|
|
if ! ping -c 1 -W 3 8.8.8.8 >/dev/null 2>&1; then
|
||
|
|
log "Connected to $SSID but no internet — forcing reconnect"
|
||
|
|
networksetup -setairportnetwork "$IFACE" "$SSID" 2>/dev/null
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
log "Not on $SSID (current: ${current:-none}) — reconnecting..."
|
||
|
|
networksetup -setairportnetwork "$IFACE" "$SSID" 2>/dev/null
|
||
|
|
sleep 5
|
||
|
|
new=$(networksetup -getairportnetwork "$IFACE" 2>/dev/null | sed 's/.*: //')
|
||
|
|
if [ "$new" = "$SSID" ]; then
|
||
|
|
log "Reconnected to $SSID"
|
||
|
|
else
|
||
|
|
log "FAILED to reconnect (got: ${new:-none}) — retrying in ${CHECK_INTERVAL}s"
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
sleep "$CHECK_INTERVAL"
|
||
|
|
done
|