From c1279ee2adf090c1ee3994e961ca05cc0ff9d602 Mon Sep 17 00:00:00 2001 From: chrissy Date: Sat, 8 Nov 2025 01:06:05 +0100 Subject: [PATCH] built in travelynx request --- .gitignore | 1 + travelInfo.py | 110 +++++++++++++++++++++++++++++++++++++------------- 2 files changed, 84 insertions(+), 27 deletions(-) diff --git a/.gitignore b/.gitignore index 5d381cc..fa942d2 100644 --- a/.gitignore +++ b/.gitignore @@ -160,3 +160,4 @@ cython_debug/ # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ +travelInfo_lct.py diff --git a/travelInfo.py b/travelInfo.py index 298c9ee..658189f 100755 --- a/travelInfo.py +++ b/travelInfo.py @@ -2,24 +2,36 @@ # -*- coding: utf-8 -*- from subprocess import check_output -from requests import get +import requests import json import sys -from datetime import datetime +from datetime import datetime +import time import pytz timezone = pytz.timezone('Europe/Berlin') statusData = None #initialize variables... tripData = None -# Request the raw data from ICE-Portal +# Request the raw data from ICE-Portal and raise an exception, when it is not avialable. def get_api_db(): global statusData global tripData - statusData_response = get("https://iceportal.de/api1/rs/status", timeout=5) - statusData = statusData_response.json() - tripData_response = get("https://iceportal.de/api1/rs/tripInfo/trip", timeout=5) - tripData = tripData_response.json() + try: + statusData_response = requests.get("https://iceportal.de/api1/rs/status", timeout=5) + statusData = statusData_response.json() + tripData_response = requests.get("https://iceportal.de/api1/rs/tripInfo/trip", timeout=5) + tripData = tripData_response.json() + return 1 + except requests.exceptions.RequestException: + return 0 + +# Request data from travelynx +def get_api_tl(): + global tripDataTl + tripDataTl_response = requests.get("https://travelynx.de/api/v1/status/[YOUR_API_KEY_GOES_HERE", timeout=5) + tripDataTl = tripDataTl_response.json() + # Look for the current SSID. Replace wlp2s0 with the real name of your wifi interface and check, that the path to iwlist is correct (just type 'which iwlist' in the terminal) def get_ssid(): @@ -34,36 +46,80 @@ def get_ssid(): # Get Speed from ICE-Portal def get_speed_db(): - speed= str(statusData["speed"]) - return speed + if statusData["speed"]==None: + return "No Speed" + else: + speed= str(statusData["speed"]) + return speed # Figure out, whats the next station and filter the output for this. def get_next_db(): - next_stop=tripData["trip"]["stopInfo"]["actualNext"] - for i in tripData['trip']['stops']: - if i['station']['evaNr'] == next_stop: - nextStationName = i['station']['name'] - arrivalDelay = i['timetable']['arrivalDelay'] - utime=i['timetable']['actualArrivalTime']/1000 - arrivalTime = datetime.fromtimestamp(utime, tz=timezone).strftime('%H:%M') - nextStationTrack = str(i['track']['actual']) - break - tripinfo = nextStationName+" "+ arrivalTime+" ("+ arrivalDelay+") "+ nextStationTrack + if tripData["trip"]["stopInfo"] == None : + return "No TripInfo" + else: + next_stop=tripData["trip"]["stopInfo"]["actualNext"] + for i in tripData['trip']['stops']: + if i['station']['evaNr'] == next_stop: + nextStationName = i['station']['name'] + arrivalDelay = i['timetable']['arrivalDelay'] + utime=i['timetable']['actualArrivalTime']/1000 + arrivalTime = datetime.fromtimestamp(utime, tz=timezone).strftime('%H:%M') + nextStationTrack = str(i['track']['actual']) + break + tripinfo = nextStationName+" "+ arrivalTime+" ("+ arrivalDelay+") @ "+ nextStationTrack return tripinfo +def get_next_tl(): + for i in tripDataTl['intermediateStops']: + if i['realArrival'] >= time.time(): + nextStationName = i['name'] + uScheduledTime=i['scheduledArrival'] + uActualTime=i['realArrival'] + arrivalDelay="{:+.0f}".format(((uActualTime-uScheduledTime)/60)) + arrivalTime = datetime.fromtimestamp(uActualTime, tz=timezone).strftime('%H:%M') + break + tripinfo = nextStationName+" "+arrivalTime+" ("+arrivalDelay+")" + #tripinfo = nextStationName+" "+ arrivalTime+" ("+ arrivalDelay+") @ "+ nextStationTrack + return tripinfo + + # Get the Trainnumber and final station of your current train def get_trainInfo_db(): - trainType = tripData["trip"]["trainType"] - trainNumber = tripData["trip"]["vzn"] - finalStationName = tripData["trip"]["stopInfo"]["finalStationName"] - return trainType+" "+trainNumber+" "+ finalStationName + if tripData['trip']["trainType"]==None: + return "No TrainInfo" + else: + trainType = tripData["trip"]["trainType"] + trainNumber = tripData["trip"]["vzn"] + finalStationName = tripData["trip"]["stopInfo"]["finalStationName"] + return trainType+" "+trainNumber+" "+ finalStationName + +# Get the Trainnumber and final station of your current travelynx trip +def get_trainInfo_tl(): + trainType = tripDataTl["train"]["type"] + trainNumber = tripDataTl["train"]["no"] + fromStationName = tripDataTl["fromStation"]["name"] + toStationName = tripDataTl["toStation"]["name"] + toStationTrack = tripDataTl["toStation"]["platform"] + uScheduledTime=tripDataTl['toStation']['scheduledTime'] + uActualTime=tripDataTl['toStation']['realTime'] + arrivalDelay="{:+.0f}".format(((uActualTime-uScheduledTime)/60)) + arrivalTime = datetime.fromtimestamp(uActualTime, tz=timezone).strftime('%H:%M') + return trainType+" "+trainNumber+" | "+fromStationName+" → "+ toStationName+" "+arrivalTime+" ("+arrivalDelay+") @ "+ toStationTrack + def main(): - # Look for WIFIonICE otherwise do nothing... + # Look for WIFIonICE or WIFI@DB otherwise do nothing... if get_ssid() == "WIFIonICE": - get_api_db() - print(get_trainInfo_db()+" | "+"SPEED: "+get_speed_db()+" km/h | "+"NEXT: "+get_next_db()) - return 0 + if get_api_db() == 1: + print(get_trainInfo_db()+" | "+"SPEED: "+get_speed_db()+" km/h | "+"NEXT: "+get_next_db()) + else: + get_api_tl() + print(get_trainInfo_tl()) + + if get_ssid() == "WIFI@DB": + get_api_tl() + print(get_trainInfo_tl()+" | NEXT: "+get_next_tl()) + if __name__ == '__main__': sys.exit(main())