#!/bin/bash # See <https://github.com/thisjade/TravelynxPolybar/blob/main/README.md> # for configuration details # Interval for refreshing Data and giving it to Polybar INTERVAL=1 # Delay Notification Variables notificationDelaySent="false" notificationLastDelay=0 notificationNextStopSent="true" notificationNextStopTime="" # Place your API Key here API_KEY= NOTIFICATIONS_NEXT_STOP="true" NOTIFICATIONS_DELAY="true" LANGUAGE="DE" SYMBOL="" while true; do # curl'ing of all needed Data from https://travelynx.de isCheckedIn=$(curl -s https://travelynx.de/api/v1/status/$API_KEY | jq .checkedIn | sed 's/"//' | sed 's/"//') echo "$isCheckedIn" > /dev/null; trainType=$(curl -s https://travelynx.de/api/v1/status/$API_KEY | jq .train.type | sed 's/"//' | sed 's/"//') echo "$trainType" > /dev/null; trainNo=$(curl -s https://travelynx.de/api/v1/status/$API_KEY | jq .train.no | sed 's/"//' | sed 's/"//') echo "$trainNo" > /dev/null; trainLine=$(curl -s https://travelynx.de/api/v1/status/$API_KEY | jq .train.line | sed 's/"//' | sed 's/"//') echo "$trainLine" > /dev/null; toStation=$(curl -s https://travelynx.de/api/v1/status/$API_KEY | jq .toStation.name | sed 's/"//' | sed 's/"//') echo "$toStation" > /dev/null; arrivalTime=$(curl -s https://travelynx.de/api/v1/status/$API_KEY | jq .toStation.scheduledTime) echo "$arrivalTime" > /dev/null; actualArrivalTime=$(curl -s https://travelynx.de/api/v1/status/$API_KEY | jq .toStation.realTime) echo "$actualArrivalTime" > /dev/null; arrivalTimeDate=$(date +%H:%M -d @$arrivalTime) actualArrivalTimeDate=$(date +%H:%M -d @$actualArrivalTime) nextStationTime=$(curl -s https://travelynx.de/api/v1/status/$API_KEY | jq .intermediateStops[].realArrival) nextStationName=$(curl -s https://travelynx.de/api/v1/status/$API_KEY | jq .intermediateStops[].name | sed 's/"//' | sed 's/"//') SAVEIFS=$IFS IFS=$'\n' nextStationTime=($nextStationTime) nextStationName=($nextStationName) IFS=$SAVEIFS if [ "$(date +%H:%M)" != "$notificationNextStopTime" ] then for (( i=0; i<${#nextStationTime[@]}; i++ )) do if [ "$(date +%H:%M)" == "$(date +%H:%M -d @${nextStationTime[$i]})" ] && [ "$NOTIFICATIONS_NEXT_STOP" == "true" ] && [ "$LANGUAGE" == "DE" ] then notify-send "Nächster Halt:" "${nextStationName[$i]} um $(date +%H:%M -d @${nextStationTime[$i]})" notificationNextStopTime=$(date +%H:%M -d @${nextStationTime[$i]}) fi if [ "$(date +%H:%M)" == "$(date +%H:%M -d @${nextStationTime[$i]})" ] && [ "$NOTIFICATIONS_NEXT_STOP" == "true" ] && [ "$LANGUAGE" == "EN" ] then notify-send "Next Stop:" "${nextStationName[$i]} at $(date +%H:%M -d @${nextStationTime[$i]})" notificationNextStopTime=$(date +%H:%M -d @${nextStationTime[$i]}) fi done fi # Checking if Arrival Time changed to send a new Notification if [ "$actualArrivalTime" -gt "$notificationLastDelay" ] then notificationDelaySent="false" fi # Checking if Arrival Time changed to send a new Notification if [ "$actualArrivalTime" != "$notificationLastDelay" ] && [ "$actualArrivalTime" != "$arrivalTime" ] then notificationDelaySent="false" fi # Sending a Notification if an ICE Train is delayed if [ $isCheckedIn = "true" ] && [ "$actualArrivalTime" -gt "$arrivalTime" ] && [ $notificationDelaySent == "false" ] && [ $trainType == "ICE" ] && [ $NOTIFICATIONS_DELAY == "true" ] && [ $LANGUAGE == "DE" ] then notificationDelaySent="true" notify-send "Zugverspätung:" "Information zu $trainType $trainNo nach $toStation Ankuft heute $actualArrivalTimeDate anstatt $arrivalTimeDate" fi # Sending a Notification if an ICE Train is delayed if [ $isCheckedIn = "true" ] && [ "$actualArrivalTime" -gt "$arrivalTime" ] && [ $notificationDelaySent == "false" ] && [ $trainType == "ICE" ] && [ $NOTIFICATIONS_DELAY == "true" ] && [ $LANGUAGE == "EN" ] then notificationDelaySent="true" notify-send "Delay:" "Information on $trainType $trainNo to $toStation arrival today $actualArrivalTimeDate instead of $arrivalTimeDate" fi # Sending a Notification if an IC Train is delayed if [ $isCheckedIn = "true" ] && [ "$actualArrivalTime" -gt "$arrivalTime" ] && [ $notificationDelaySent == "false" ] && [ $trainType == "IC" ] && [ $NOTIFICATIONS_DELAY == "true" ] && [ $LANGUAGE == "DE" ] then notificationDelaySent="true" notify-send "Zugverspätung:" "Information zu $trainType $trainNo nach $toStation Ankuft heute $actualArrivalTimeDate anstatt $arrivalTimeDate" fi # Sending a Notification if an IC Train is delayed if [ $isCheckedIn = "true" ] && [ "$actualArrivalTime" -gt "$arrivalTime" ] && [ $notificationDelaySent == "false" ] && [ $trainType == "IC" ] && [ $NOTIFICATIONS_DELAY == "true" ] && [ $LANGUAGE == "EN" ] then notificationDelaySent="true" notify-send "Delay:" "Information on $trainType $trainNo to $toStation arrival today $actualArrivalTimeDate instead of $arrivalTimeDate" fi # Sending a Notification if other (not ICE/IC) Train is delayed if [ $isCheckedIn = "true" ] && [ "$actualArrivalTime" -gt "$arrivalTime" ] && [ $notificationDelaySent == "false" ] && [ $trainType != "ICE" ] && [ $trainType != "IC" ] && [ $NOTIFICATIONS_DELAY == "true" ] && [ $LANGUAGE == "DE" ] then notificationDelaySent="true" notify-send "Zugverspätung:" "Information zu $trainType $trainLine nach $toStation Ankuft heute $actualArrivalTimeDate anstatt $arrivalTimeDate" fi # Sending a Notification if other (not ICE/IC) Train is delayed if [ $isCheckedIn = "true" ] && [ "$actualArrivalTime" -gt "$arrivalTime" ] && [ $notificationDelaySent == "false" ] && [ $trainType != "ICE" ] && [ $trainType != "IC" ] && [ $NOTIFICATIONS_DELAY == "true" ] && [ $LANGUAGE == "EN" ] then notificationDelaySent="true" notify-send "Delay:" "Information on $trainType $trainLine to $toStation arrival today $actualArrivalTimeDate instead of $arrivalTimeDate" fi # Sending a Notification if the ICE Train is on time again if [ "$actualArrivalTime" -eq "$arrivalTime" ] && [ $notificationDelaySent == "true" ] && [ $isCheckedIn == "true" ] && [ $trainType == "ICE" ] && [ $NOTIFICATION_DELAY == "true" ] && [ $LANGUAGE == "DE" ] then notify-send "Information:" "Information zu $trainType $trainNo nach $toStation ist wieder pünktlich" fi # Sending a Notification if the ICE Train is on time again if [ "$actualArrivalTime" -eq "$arrivalTime" ] && [ $notificationDelaySent == "true" ] && [ $isCheckedIn == "true" ] && [ $trainType == "ICE" ] && [ $NOTIFICATION_DELAY == "true" ] && [ $LANGUAGE == "EN" ] then notify-send "Information:" "Information on $trainType $trainNo to $toStation is on time again" fi # Sending a Notification if the IC Train is on time again if [ "$actualArrivalTime" -eq "$arrivalTime" ] && [ $notificationDelaySent == "true" ] && [ $isCheckedIn == "true" ] && [ $trainType == "IC" ] && [ $NOTIFICATION_DELAY == "true" ] && [ $LANGUAGE == "DE" ] then notify-send "Information:" "Information zu $trainType $trainNo nach $toStation ist wieder pünktlich" fi # Sending a Notification if the IC Train is on time again if [ "$actualArrivalTime" -eq "$arrivalTime" ] && [ $notificationDelaySent == "true" ] && [ $isCheckedIn == "true" ] && [ $trainType == "IC" ] && [ $NOTIFICATION_DELAY == "true" ] && [ $LANGUAGE == "EN" ] then notify-send "Information:" "Information on $trainType $trainNo to $toStation is on time again" fi # Sending a Notification if a other (not ICE/IC) Train is on time again if [ "$actualArrivalTime" -eq "$arrivalTime" ] && [ $notificationDelaySent == "true" ] && [ $isCheckedIn == "true" ] && [ $trainType != "ICE" ] && [ $trainType != "IC" ] && [ $NOTIFICATION_DELAY = "true" ] && [ $LANGUAGE == "DE" ] then notify-send "Information:" "Information zu $trainType $trainLine nach $toStation ist wieder pünktlich" fi # Sending a Notification if a other (not ICE/IC) Train is on time again if [ "$actualArrivalTime" -eq "$arrivalTime" ] && [ $notificationDelaySent == "true" ] && [ $isCheckedIn == "true" ] && [ $trainType != "ICE" ] && [ $trainType != "IC" ] && [ $NOTIFICATION_DELAY = "true" ] && [ $LANGUAGE == "EN" ] then notify-send "Information:" "Information on $trainType $trainLine ti $toStation is on time again" fi # Saving the Delay from the latest Notification notificationLastDelay=$actualArrivalTime # Showing the Label for Polybar if [ $isCheckedIn == "true" ] && [ $trainType != "ICE" ] && [ $trainType != "IC" ] && [ $LANGUAGE == "DE" ] then echo "$SYMBOL" $trainType $trainLine "nach" $toStation elif [ $isCheckedIn == "true" ] && [ $trainType != "ICE" ] && [ $trainType != "IC" ] && [ $LANGUAGE == "EN" ] then echo "$SYMBOL" $trainType $trainLine "to" $toStation elif [ $isCheckedIn == "true" ] && [ $trainType == "IC" ] && [ $LANGUAGE == "DE" ] then echo "$SYMBOL" $trainType $trainNo "nach" $toStation elif [ $isCheckedIn == "true" ] && [ $trainType == "IC" ] && [ $LANGUAGE == "EN" ] then echo "$SYMBOL" $trainType $trainNo "to" $toStation elif [ $isCheckedIn == "true" ] && [ $trainType == "ICE" ] && [ $LANGUAGE == "DE" ] then echo "$SYMBOL" $trainType $trainNo "nach" $toStation elif [ $isCheckedIn == "true" ] && [ $trainType == "ICE" ] && [ $LANGUAGE == "EN" ] then echo "$SYMBOL" $trainType $trainNo "to" $toStation elif [ $isCheckedIn == "false" ] && [ $LANGUAGE == "EN" ] then echo "$SYMBOL"" not checked in" notificationDelaySent="false" notificationLastDelay=0 notificationNextStopSent="true" else echo "$SYMBOL"" nicht eingecheckt" notificationDelaySent="false" notificationLastDelay=0 notificationNextStopSent="true" notificationNextStopTime="" fi sleep $INTERVAL done