2019-04-06 05:59:05 +02:00
#!/bin/bash
2020-08-23 17:17:50 +02:00
###### configuration #####
# stations to display
2020-08-28 23:58:45 +02:00
STATION_ID[ 0] = "18"
STATION_ID[ 1] = "202"
2020-08-23 17:17:50 +02:00
2020-08-23 17:43:15 +02:00
LOGO_L[ 0] = "\\t\\t████████████████████████████████████████████████\\n"
LOGO_L[ 1] = "\\t\\t██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██\\n"
LOGO_L[ 2] = "\\t\\t██▒▒████████████████████████████████████████▒▒██\\n"
LOGO_L[ 3] = "\\t\\t██▒▒██████████▒▒██▒▒████████████▒▒██▒▒██████▒▒██\\n"
LOGO_L[ 4] = "\\t\\t██▒▒████▒▒▒▒▒▒████▒▒██████▒▒▒▒▒▒████▒▒██████▒▒██\\n"
LOGO_L[ 5] = "\\t\\t██▒▒████▒▒████████████▒▒██▒▒████████████▒▒██▒▒██\\n"
LOGO_L[ 6] = "\\t\\t██▒▒████▒▒████████▒▒██▒▒██▒▒████████▒▒██▒▒██▒▒██\\n"
LOGO_L[ 7] = "\\t\\t██▒▒██████████▒▒██▒▒██▒▒████████▒▒██▒▒██▒▒██▒▒██\\n"
LOGO_L[ 8] = "\\t\\t██▒▒██▒▒▒▒▒▒▒▒██▒▒██▒▒██▒▒▒▒▒▒▒▒██▒▒██▒▒████▒▒██\\n"
LOGO_L[ 9] = "\\t\\t██▒▒████████████████████████████████████████▒▒██\\n"
LOGO_L[ 10] = "\\t\\t██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██\\n"
LOGO_L[ 11] = "\\t\\t████████████████████████████████████████████████\\n"
LOGO_L[ 12] = "\\t\\t C H A O S C H E M N I T Z . D E \\n"
LOGO_S[ 0] = "\\t\\t█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ "
LOGO_S[ 1] = "\\t\\t█ █████▀█▀██████▀█▀███ █ "
LOGO_S[ 2] = "\\t\\t█ ██ ▄▄██▄█▀█ ▄▄██▄█▀█ █ "
LOGO_S[ 3] = "\\t\\t█ ██▄██▀█ █ █▄██▀█ █ █ █ "
LOGO_S[ 4] = "\\t\\t█ █▄▄▄▄█▄█▄█▄▄▄▄█▄█▄██ █ "
LOGO_S[ 5] = "\\t\\t█▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄█ "
2020-08-23 17:17:50 +02:00
##########################
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
}
2020-08-23 17:43:15 +02:00
# hide cursor
tput civis
# ohne dieses IFS trennt BASH an Space und erstellt damit zu viele Array-Felder
2020-08-29 00:10:15 +02:00
IFS = "
"
2020-08-23 00:21:57 +02:00
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( )
{
2020-08-28 23:58:45 +02:00
local -n _STATION_NAME = $1
local -n _STATION_ID = $2
2020-08-23 02:38:22 +02:00
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-28 23:58:45 +02:00
for ( ( i = 0; i<${# _STATION_ID [*] } ; i++) ) ; do
case ${ _STATION_ID [ $i ] } in
2020-08-29 00:10:15 +02:00
"" | *[ !0-9] *)
_STATION_NAME[ $i ] = $( echo -n " $COMPLETE_STATION_LIST " | jq -r " .stations | .[] | select(.displayName | contains( ${ _STATION_ID [ $i ] } )) | .number " )
2020-08-23 02:38:22 +02:00
; ;
*)
2020-08-29 00:10:15 +02:00
_STATION_NAME[ $i ] = $( echo -n " $COMPLETE_STATION_LIST " | jq -r " .stations | .[] | select(.number | contains( ${ _STATION_ID [ $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
2020-08-23 17:43:15 +02:00
LOGO_TIME = ( " ${ LOGO_S [@] } " )
2020-08-23 16:49:09 +02:00
for ( ( k = 1; k<6; k++) ) ; do
2020-08-23 17:57:46 +02:00
append_five_line_symbol LOGO_TIME " $( date --date= " @ $TIME " +"%H:%M" | cut -b" $k " ) "
2020-08-23 16:49:09 +02:00
done
2020-08-29 00:10:15 +02:00
_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 16:49:09 +02:00
}
2020-08-23 17:17:50 +02:00
LOGO_LINES_POSITION = 0
2020-08-28 23:58:45 +02:00
STATION_NAME = ( )
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-28 23:58:45 +02:00
[ ${# STATION_NAME [@] } -eq 0 ] && get_cvag_station_name STATION_NAME STATION_ID
2020-08-23 17:17:50 +02:00
MYOUTPUT = "\\n "
2020-03-15 00:28:00 +01:00
2020-08-28 23:58:45 +02:00
for ( ( j = 0; j<" ${# STATION_ID [*] } " ; j++) ) ; do
STATION_SCHEDULE = " $( curl --connect-timeout 5 -s http://cvag.de/eza/mis/stops/station/CAG-${ STATION_ID [ $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" )
2020-08-29 00:10:15 +02:00
STATION_DESTINATIONS = ( $( echo -n " $STATION_STOPS " | jq -r ".destination" ) )
STATION_LINES = ( $( echo -n " $STATION_STOPS " | jq -r ".line" ) )
STATION_ACTUAL_DEPARTURE = ( $( echo -n " $STATION_STOPS " | jq -r ".actualDeparture" ) )
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-29 00:10:15 +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
2020-08-29 00:46:32 +02:00
MYOUTPUT = " $MYOUTPUT \n\n\
\t \t ┌────────────────────────────────┬─────────────────────────┐ \n \
\t \t │ ${ STATION_NAME [ $j ] } $( printf " %- $(( 31 - ${# STATION_NAME [ $j ] } )) s " "" ) │ $THISDATE │\n \
\t \t ├────────────────────┬─────┬─────┴─────────────────────────┤\n "
2020-08-28 23:58:45 +02:00
LINECOUNT = ${# STATION_LINES [*] }
2020-08-18 02:32:32 +02:00
for ( ( i = 0; i<" $LINECOUNT " ; i++) ) ; do
2020-08-28 23:58:45 +02:00
MILLIS = $(( ${ STATION_ACTUAL_DEPARTURE [ $i ] } - STATION_NOW))
2020-08-23 16:56:18 +02:00
[ " $MILLIS " -lt 0 ] && MILLIS = 0
2020-08-23 17:57:46 +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-29 00:46:32 +02:00
MYOUTPUT = " $MYOUTPUT \
\t \t │${ MINSSPACE } ${ MINS } min ${ SEKSSPACE } ${ SEKS } ,${ MILLISSPACE } ${ MILLIS } s │ $( printf " %- $(( 3 - ${# STATION_LINES [ $i ] } )) s " "" ) ${ STATION_LINES [ $i ] } │ ${ STATION_DESTINATIONS [ $i ] } $( printf " %- $(( 29 - ${# STATION_DESTINATIONS [ $i ] } )) s " "" ) │\\ n"
2020-08-18 02:32:32 +02:00
done
2020-08-29 00:46:32 +02:00
MYOUTPUT = " $MYOUTPUT \
\t \t └────────────────────┴─────┴───────────────────────────────┘"
2020-03-15 00:28:00 +01:00
done
2020-08-28 23:58:45 +02:00
[ " $LOGO_LINES_POSITION " -eq " ${# STATION_ID [*] } " ] && draw_logo_time MYOUTPUT $REALSTATION_NOW
LOGO_LINES_POSITION = $(( ( LOGO_LINES_POSITION + 1 ) % ( ${# STATION_ID [*] } + 1 )) )
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