departure/departure.sh

247 lines
9.0 KiB
Bash
Raw Normal View History

2019-04-06 05:59:05 +02:00
#!/bin/bash
2020-08-23 17:17:50 +02:00
###### configuration #####
# stations to display
STATIONS[0]="18"
STATIONS[1]="202"
##########################
2019-04-06 05:59:05 +02:00
2020-08-18 02:32:32 +02:00
if [ -z "$(which jq)" ]; then
2020-03-15 00:28:00 +01:00
printf "\\n\\n\\n\\tPackage \"jq\" required!"
2019-04-06 05:59:05 +02:00
exit 1
fi
2020-08-20 00:38:37 +02:00
trap do_exit INT
do_exit() {
tput cvvis # unhide cursor
exit 0
}
tput civis # hide cursor
2020-08-23 17:17:50 +02:00
CHCHLOGO_L[ 0]="\\t\\t████████████████████████████████████████████████\\n"
CHCHLOGO_L[ 1]="\\t\\t██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██\\n"
CHCHLOGO_L[ 2]="\\t\\t██▒▒████████████████████████████████████████▒▒██\\n"
CHCHLOGO_L[ 3]="\\t\\t██▒▒██████████▒▒██▒▒████████████▒▒██▒▒██████▒▒██\\n"
CHCHLOGO_L[ 4]="\\t\\t██▒▒████▒▒▒▒▒▒████▒▒██████▒▒▒▒▒▒████▒▒██████▒▒██\\n"
CHCHLOGO_L[ 5]="\\t\\t██▒▒████▒▒████████████▒▒██▒▒████████████▒▒██▒▒██\\n"
CHCHLOGO_L[ 6]="\\t\\t██▒▒████▒▒████████▒▒██▒▒██▒▒████████▒▒██▒▒██▒▒██\\n"
CHCHLOGO_L[ 7]="\\t\\t██▒▒██████████▒▒██▒▒██▒▒████████▒▒██▒▒██▒▒██▒▒██\\n"
CHCHLOGO_L[ 8]="\\t\\t██▒▒██▒▒▒▒▒▒▒▒██▒▒██▒▒██▒▒▒▒▒▒▒▒██▒▒██▒▒████▒▒██\\n"
CHCHLOGO_L[ 9]="\\t\\t██▒▒████████████████████████████████████████▒▒██\\n"
CHCHLOGO_L[10]="\\t\\t██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██\\n"
CHCHLOGO_L[11]="\\t\\t████████████████████████████████████████████████\\n"
CHCHLOGO_L[12]="\\t\\t C H A O S C H E M N I T Z . D E \\n"
2020-08-23 00:21:57 +02:00
CHCHLOGO_S[0]="\\t\\t█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ "
CHCHLOGO_S[1]="\\t\\t█ █████▀█▀██████▀█▀███ █ "
CHCHLOGO_S[2]="\\t\\t█ ██ ▄▄██▄█▀█ ▄▄██▄█▀█ █ "
CHCHLOGO_S[3]="\\t\\t█ ██▄██▀█ █ █▄██▀█ █ █ █ "
CHCHLOGO_S[4]="\\t\\t█ █▄▄▄▄█▄█▄█▄▄▄▄█▄█▄██ █ "
CHCHLOGO_S[5]="\\t\\t█▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█ "
2020-08-23 01:28:08 +02:00
append_five_line_symbol()
{
local -n LINES=$1
case $2 in
"0")
2020-08-23 01:31:29 +02:00
LINES[0]+=" █████"
LINES[1]+=" █ █"
LINES[2]+=" █ █"
LINES[3]+=" █ █"
LINES[4]+=" █ █"
LINES[5]+=" █████"
2020-08-23 01:28:08 +02:00
;;
"1")
2020-08-23 01:31:29 +02:00
LINES[0]+=" █"
LINES[1]+=" █"
LINES[2]+=" █"
LINES[3]+=" █"
LINES[4]+=" █"
LINES[5]+=" █"
2020-08-23 01:28:08 +02:00
;;
"2")
2020-08-23 01:31:29 +02:00
LINES[0]+=" █████"
LINES[1]+=" █"
LINES[2]+=" ▄▄▄▄█"
LINES[3]+=" █▀▀▀▀"
LINES[4]+=" █ "
LINES[5]+=" █████"
2020-08-23 01:28:08 +02:00
;;
"3")
2020-08-23 01:31:29 +02:00
LINES[0]+=" █████"
LINES[1]+=" █"
LINES[2]+=" ▄▄▄▄█"
LINES[3]+=" ▀▀▀▀█"
LINES[4]+=" █"
LINES[5]+=" █████"
2020-08-23 01:28:08 +02:00
;;
"4")
2020-08-23 01:31:29 +02:00
LINES[0]+=" █ █"
LINES[1]+=" █ █"
LINES[2]+=" █▄▄▄█"
LINES[3]+=" ▀▀▀▀█"
LINES[4]+=" █"
LINES[5]+=" █"
2020-08-23 01:28:08 +02:00
;;
"5")
2020-08-23 01:31:29 +02:00
LINES[0]+=" █████"
LINES[1]+=" █ "
LINES[2]+=" █▄▄▄▄"
LINES[3]+=" ▀▀▀▀█"
LINES[4]+=" █"
LINES[5]+=" █████"
2020-08-23 01:28:08 +02:00
;;
"6")
2020-08-23 01:31:29 +02:00
LINES[0]+=" █████"
LINES[1]+=" █ "
LINES[2]+=" █▄▄▄▄"
LINES[3]+=" █▀▀▀█"
LINES[4]+=" █ █"
LINES[5]+=" █████"
2020-08-23 01:28:08 +02:00
;;
"7")
2020-08-23 01:31:29 +02:00
LINES[0]+=" █████"
LINES[1]+=" █"
LINES[2]+=" █"
LINES[3]+=" █"
LINES[4]+=" █"
LINES[5]+=" █"
2020-08-23 01:28:08 +02:00
;;
"8")
2020-08-23 01:31:29 +02:00
LINES[0]+=" █████"
LINES[1]+=" █ █"
LINES[2]+=" █▄▄▄█"
LINES[3]+=" █▀▀▀█"
LINES[4]+=" █ █"
LINES[5]+=" █████"
2020-08-23 01:28:08 +02:00
;;
"9")
2020-08-23 01:31:29 +02:00
LINES[0]+=" █████"
LINES[1]+=" █ █"
LINES[2]+=" █▄▄▄█"
LINES[3]+=" ▀▀▀▀█"
LINES[4]+=" █"
LINES[5]+=" █████"
2020-08-23 01:28:08 +02:00
;;
":")
2020-08-23 01:31:29 +02:00
LINES[0]+=" "
LINES[1]+=" ███ "
LINES[2]+=" ▀▀▀ "
LINES[3]+=" ▄▄▄ "
LINES[4]+=" ███ "
LINES[5]+=" "
2020-08-23 01:28:08 +02:00
;;
*)
esac
}
2020-08-23 00:21:57 +02:00
2020-08-23 02:38:22 +02:00
get_cvag_station_name()
{
local -n _STANAME=$1
local -n _STATIONS=$2
2020-08-23 17:17:50 +02:00
COMPLETE_STATION_LIST="$(curl --connect-timeout 5 -s "http://www.cvag.de/eza/mis/stations?minLat=0&maxLat=100&minLon=0&maxLon=100")"
2020-08-23 02:38:22 +02:00
for ((i=0; i<${#_STATIONS[*]}; i++)); do
case ${_STATIONS[$i]} in
''|*[!0-9]*)
2020-08-23 03:05:08 +02:00
_STANAME[$i]=$(echo -n "$COMPLETE_STATION_LIST" | jq -r '.stations | .[] | select(.displayName | contains("'"${_STATIONS[$i]}"'")) | .number')
2020-08-23 02:38:22 +02:00
;;
*)
2020-08-23 03:05:08 +02:00
_STANAME[$i]=$(echo -n "$COMPLETE_STATION_LIST" | jq -r '.stations | .[] | select(.number | contains('"${_STATIONS[$i]}"')) | .displayName')
2020-08-23 02:38:22 +02:00
;;
esac
done
}
2020-08-23 16:49:09 +02:00
draw_logo_time()
{
local -n _MYOUTPUT=$1
local TIME=$2
LOGO_TIME=("${CHCHLOGO_S[@]}")
for((k=1; k<6; k++)); do
append_five_line_symbol LOGO_TIME $(echo "$(date --date="@$TIME" +"%H:%M")" | cut -b"$k")
done
_MYOUTPUT="$_MYOUTPUT""\\n\\n""${LOGO_TIME[0]}""\\n""${LOGO_TIME[1]}""\\n""${LOGO_TIME[2]}""\\n""${LOGO_TIME[3]}""\\n""${LOGO_TIME[4]}""\\n""${LOGO_TIME[5]}"
}
2020-08-23 17:17:50 +02:00
LOGO_LINES_POSITION=0
STANAME=()
NUMOFSTA=${#STATIONS[*]}
2020-03-15 00:28:00 +01:00
while true; do
2020-08-18 02:32:32 +02:00
if ! ping -q -c1 chch.it>/dev/null; then
echo -e "\\n\\n\\n\\tNo internet connection!"
sleep 10
clear
else
2020-08-23 03:05:08 +02:00
[ ${#STANAME[@]} -eq 0 ] && get_cvag_station_name STANAME STATIONS
2020-08-23 17:17:50 +02:00
MYOUTPUT="\\n "
2020-03-15 00:28:00 +01:00
2020-08-23 17:17:50 +02:00
LOGO_LINES_POSITION=$(((LOGO_LINES_POSITION + 1) % (NUMOFSTA + 1)))
2020-08-18 02:32:32 +02:00
for ((j=0; j<"$NUMOFSTA"; j++)); do
2020-08-23 17:17:50 +02:00
STATION_SCHEDULE="$(curl --connect-timeout 5 -s http://cvag.de/eza/mis/stops/station/CAG-${STATIONS[$j]})"
2019-04-06 05:59:05 +02:00
2020-08-23 03:05:08 +02:00
STATION_STOPS=$(echo "$STATION_SCHEDULE" | jq -r ".stops | .[]")
STATION_NOW=$(echo "$STATION_SCHEDULE" | jq -r ".now")
2019-04-06 05:59:05 +02:00
2020-08-23 16:56:18 +02:00
[ ${#STATION_NOW} -lt 1 ] && STATION_NOW="0"
2020-08-23 03:05:08 +02:00
REALSTATION_NOWMS=$(( "$STATION_NOW" % 1000 ))
2020-08-23 16:56:18 +02:00
[ ${#REALSTATION_NOWMS} -lt 3 ] && REALSTATION_NOWMS="0""$REALSTATION_NOWMS"
2020-08-23 03:05:08 +02:00
REALSTATION_NOW=$(( "$STATION_NOW" / 1000))
THISDATE=$(date --date="@$REALSTATION_NOW" +"%d.%m.%Y %T")",$REALSTATION_NOWMS"
2020-08-23 01:31:29 +02:00
# Wenn Logo gezeichnet werden soll, baue Urzeit ran und zeichne
2020-08-23 17:17:50 +02:00
[ "$j" -eq "$LOGO_LINES_POSITION" ] && draw_logo_time MYOUTPUT $REALSTATION_NOW
2020-08-18 02:32:32 +02:00
# ohne dieses IFS trennt BASH an Space und erstellt damit zu viele Array-Felder
IFS='
2019-04-06 05:59:05 +02:00
'
2020-08-23 03:05:08 +02:00
DESTINATIONS=($(echo -n "$STATION_STOPS" | jq -r '.destination'))
LINES=($(echo -n "$STATION_STOPS" | jq -r '.line'))
ACDEPS=($(echo -n "$STATION_STOPS" | jq -r '.actualDeparture'))
2020-08-18 02:32:32 +02:00
LINECOUNT=${#LINES[*]}
for((i=${#STANAME[$j]}; i<31; i++)); do
STANAME[$j]="${STANAME[$j]}"" "
done
MYOUTPUT="$MYOUTPUT"'\n\n\t\t┌────────────────────────────────┬─────────────────────────┐ \n\t\t│ '"${STANAME[$j]}"'│ '"$THISDATE"' │\n\t\t├────────────────────┬─────┬─────┴─────────────────────────┤\n'
for ((i=0; i<"$LINECOUNT"; i++)); do
for((k=${#LINES[$i]}; k<3 ; k++)); do
LINES[$i]=" ""${LINES[$i]}"
done
for((k=${#DESTINATIONS[$i]}; k<29 ; k++)); do
DESTINATIONS[$i]="${DESTINATIONS[$i]}"" "
done
2020-08-23 03:05:08 +02:00
MILLIS=$((${ACDEPS[$i]} - STATION_NOW))
2020-08-23 16:56:18 +02:00
[ "$MILLIS" -lt 0 ] && MILLIS=0
2020-08-18 02:32:32 +02:00
SEKS=$((MILLIS / 1000))
MILLIS=$((MILLIS % 1000))
MINS=$((SEKS / 60))
SEKS=$((SEKS % 60))
MINSSPACE=""
SEKSSPACE=""
MILLISSPACE=""
2020-08-23 16:56:18 +02:00
[ "$MINS" -lt 100 ] && MINSSPACE=" "
[ "$MINS" -lt 10 ] && MINSSPACE=" "
[ "$SEKS" -lt 10 ] && SEKSSPACE=" "
[ "$MILLIS" -lt 100 ] && MILLISSPACE="0"
[ "$MILLIS" -lt 10 ] && MILLISSPACE="00"
2020-08-18 02:32:32 +02:00
MYOUTPUT="$MYOUTPUT""\\t\\t│${MINSSPACE}${MINS} min ${SEKSSPACE}${SEKS},${MILLISSPACE}${MILLIS} s │ ${LINES[$i]}${DESTINATIONS[$i]} │\\n"
done
MYOUTPUT="$MYOUTPUT"'\t\t└────────────────────┴─────┴───────────────────────────────┘'
2020-03-15 00:28:00 +01:00
done
2020-08-23 17:17:50 +02:00
[ "$LOGO_LINES_POSITION" -eq "$NUMOFSTA" ] && draw_logo_time MYOUTPUT $REALSTATION_NOW
2020-08-18 02:32:32 +02:00
clear
#reset
echo -e "$MYOUTPUT"
2020-03-15 00:28:00 +01:00
fi
2020-08-18 02:32:32 +02:00
sleep 10
2019-04-06 05:59:05 +02:00
done
2020-08-20 00:38:37 +02:00
exit 1