59 lines
2.3 KiB
Bash
59 lines
2.3 KiB
Bash
#!/bin/sh
|
|
|
|
icon="#"
|
|
|
|
current_wifi=$(iwgetid -r)
|
|
if [ "$current_wifi" = "NormandieTrainConnecte" ]; then
|
|
# Obtain route info. Bail out if it cannot be obtained or if the response
|
|
# is not valid JSON (based on jq's exit code).
|
|
if ! { circulation=$(curl --silent --fail https://wifi.normandie.fr/router/api/train/circulation); } then
|
|
echo "$icon In-train portal unreachable"
|
|
exit 0
|
|
fi
|
|
if ! { echo "$circulation" | jq --exit-status > /dev/null 2>&1; } then
|
|
echo "$icon In-train portal unreachable"
|
|
exit 0
|
|
fi
|
|
|
|
# In the list of stops on the current route, future stops are those which
|
|
# have an "arrival" key (the first station only has "departure"), and which
|
|
# either have a "progress" key showing 0% progress or which lack the
|
|
# "progress" key entirely. Stops are ordered according to the itinerary, so
|
|
# pick the first matching one to obtain the immediate next station.
|
|
station=$(echo "$circulation" | jq '[.stopList.stops[] |
|
|
select(
|
|
.arrival and (has("progress") | not) or .progress.progressPercentage == 0
|
|
)][0]')
|
|
|
|
# get name and track (as soon as it's available)
|
|
station_name=$(echo "$station" | jq -r '.location.name')
|
|
station_track=$(echo "$station" | jq -r '.track.number?')
|
|
if [ "$station_track" != "null" ]; then
|
|
station_name="$station_name, V. $station_track"
|
|
fi
|
|
|
|
# compute current delay in minutes based on "date" and "realDate"
|
|
scheduled_arrival=$(echo "$station" | jq -r '.arrival.date')
|
|
actual_arrival=$(echo "$station" | jq -r '.arrival.realDate')
|
|
delay_minutes="($(date +%s -d "$actual_arrival")-$(date +%s -d "$scheduled_arrival"))/60"
|
|
delay_minutes=$(echo "$delay_minutes" | bc)
|
|
|
|
# pretty-print arrival and delay
|
|
scheduled_arrival_pretty=$(date --date="$scheduled_arrival" +%H:%M)
|
|
delay_pretty=""
|
|
if [ "$delay_minutes" -ne 0 ]; then
|
|
delay_pretty=" %{F#d60606}(+$delay_minutes)%{F-}"
|
|
fi
|
|
|
|
gps=$(curl --silent --fail https://wifi.normandie.fr/router/api/train/gps)
|
|
|
|
# convert train speed from m/s to km/h
|
|
speed_mps=$(echo "$gps" | jq .speed)
|
|
speed_kph=$(echo "scale=0; $speed_mps * 3.6" | bc)
|
|
speed_kph_pretty="${speed_kph%.*} kph"
|
|
|
|
echo "$icon $scheduled_arrival_pretty$delay_pretty - $station_name - $speed_kph_pretty"
|
|
else
|
|
echo ""
|
|
fi
|