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-29 01:17:42 +02:00
get_cvag_station_info( )
{
local -n _STATION_STOPS = $2
local -n _STATION_NOW = $3
local -n _STATION_DESTINATIONS = $4
local -n _STATION_LINES = $5
local -n _STATION_ACTUAL_DEPARTURE = $6
local -n _REALSTATION_NOW = $7
local -n _THISDATE = $8
STATION_SCHEDULE = " $( curl --connect-timeout 5 -s http://cvag.de/eza/mis/stops/station/CAG-${ STATION_ID [ $1 ] } ) "
_STATION_STOPS = $( echo " $STATION_SCHEDULE " | jq -r ".stops | .[]" )
_STATION_NOW = $( echo " $STATION_SCHEDULE " | jq -r ".now" )
_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" ) )
[ ${# _STATION_NOW } -lt 1 ] && _STATION_NOW = "0"
REALSTATION_NOWMS = $(( " $_STATION_NOW " % 1000 ))
[ ${# REALSTATION_NOWMS } -lt 3 ] && REALSTATION_NOWMS = " 0 $REALSTATION_NOWMS "
_REALSTATION_NOW = $(( " $_STATION_NOW " / 1000 ))
_THISDATE = $( date --date= " @ $_REALSTATION_NOW " +"%d.%m.%Y %T" ) " , $REALSTATION_NOWMS "
}
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 13:53:14 +02:00
_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-29 13:53:14 +02:00
MYOUTPUT = ( )
MYOUTPUT[ 0] = "\\n "
2020-03-15 00:28:00 +01:00
2020-08-29 13:53:14 +02:00
for ( ( j = 0; j<= " ${# STATION_ID [*] } " ; j++) ) ; do
if [ ! " $j " -eq " $LOGO_LINES_POSITION " ] ; then
[ " $j " -gt " $LOGO_LINES_POSITION " ] && THIS_STATION_ID = $(( $j - 1 )) || THIS_STATION_ID = $j
get_cvag_station_info $THIS_STATION_ID STATION_STOPS STATION_NOW STATION_DESTINATIONS STATION_LINES STATION_ACTUAL_DEPARTURE REALSTATION_NOW THISDATE
2020-08-29 01:17:42 +02:00
2020-08-29 13:53:14 +02:00
MYOUTPUT[ $j ] = " ${ MYOUTPUT [ $j ] } \n\n\
2020-08-29 00:46:32 +02:00
\t \t ┌────────────────────────────────┬─────────────────────────┐ \n \
2020-08-29 13:53:14 +02:00
\t \t │ ${ STATION_NAME [ $THIS_STATION_ID ] } $( printf " %- $(( 31 - ${# STATION_NAME [ $THIS_STATION_ID ] } )) s " "" ) │ $THISDATE │\n \
2020-08-29 00:46:32 +02:00
\t \t ├────────────────────┬─────┬─────┴─────────────────────────┤\n "
2020-08-29 13:53:14 +02:00
for ( ( i = 0; i<" ${# STATION_LINES [*] } " ; i++) ) ; do
MILLIS = $(( ${ STATION_ACTUAL_DEPARTURE [ $i ] } - STATION_NOW)) ; [ " $MILLIS " -lt 0 ] && MILLIS = 0
SEKS = $(( MILLIS / 1000 )) ; MILLIS = $(( MILLIS % 1000 )) ; MINS = $(( SEKS / 60 )) ; SEKS = $(( SEKS % 60 ))
MYOUTPUT[ $j ] = " ${ MYOUTPUT [ $j ] } \
2020-08-29 12:51:48 +02:00
\t \t │$( printf " %- $(( 3 - ${# MINS } )) s " "" ) $MINS min $( printf " %- $(( 2 - ${# SEKS } )) s " "" ) $SEKS ,$( printf "%03d" $MILLIS ) s │ $( printf " %- $(( 3 - ${# STATION_LINES [ $i ] } )) s " "" ) ${ STATION_LINES [ $i ] } │ ${ STATION_DESTINATIONS [ $i ] } $( printf " %- $(( 29 - ${# STATION_DESTINATIONS [ $i ] } )) s " "" ) │\\ n"
2020-08-29 13:53:14 +02:00
done
MYOUTPUT[ $j ] = " ${ MYOUTPUT [ $j ] } \
2020-08-29 00:46:32 +02:00
\t \t └────────────────────┴─────┴───────────────────────────────┘"
2020-08-29 13:53:14 +02:00
fi
2020-03-15 00:28:00 +01:00
done
2020-08-29 13:53:14 +02:00
draw_logo_time LOGO_AND_TIME $REALSTATION_NOW
MYOUTPUT[ $LOGO_LINES_POSITION ] = " $LOGO_AND_TIME "
2020-08-28 23:58:45 +02:00
LOGO_LINES_POSITION = $(( ( LOGO_LINES_POSITION + 1 ) % ( ${# STATION_ID [*] } + 1 )) )
2020-08-29 13:53:14 +02:00
2020-08-18 02:32:32 +02:00
clear
2020-08-29 13:53:14 +02:00
for ( ( j = 0; j<= " ${# STATION_ID [*] } " ; j++) ) ; do
echo -e " ${ MYOUTPUT [ $j ] } "
done
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