dotfiles/.config/i3pystatus/ice-status.py

66 lines
2 KiB
Python
Executable file

#!/usr/bin/env python3
from datetime import datetime
from requests import get
from subprocess import check_output
from sys import exit
# bundlewrap.utils.text.format_duration, but trimmed down
def format_time(seconds):
components = []
if seconds >= 60:
minutes = int(seconds / 60)
seconds -= minutes * 60
components.append('{}m'.format(minutes))
if seconds > 0 or not components:
components.append('{}s'.format(seconds))
return " ".join(components)
try:
wifi_ssid = check_output("iw dev wlp4s0 link | awk '/SSID/ {print $2}'", shell=True).decode().strip().lower()
if wifi_ssid not in (
'wifi@db',
'wifionice'
):
exit(0)
trip_info_req = get('https://portal.imice.de/api1/rs/tripInfo/trip')
trip_info_req.raise_for_status()
trip_info = trip_info_req.json()['trip']
ice_status_req = get('https://portal.imice.de/api1/rs/status')
ice_status_req.raise_for_status()
ice_status = ice_status_req.json()
next_stop_id = trip_info['stopInfo']['actualNext']
for stop in trip_info['stops']:
if stop['station']['evaNr'] == next_stop_id:
if stop['timetable']['departureDelay']:
delay = ' ({})'.format(stop['timetable']['departureDelay'])
else:
delay = ''
next_stop = '{} [{}] {}{}'.format(
stop['station']['name'],
stop['track']['actual'],
datetime.fromtimestamp(stop['timetable']['actualArrivalTime']/1000).strftime('%H:%M'),
delay
)
break
else:
next_stop = 'Endstation, bitte Aussteigen'
print('{}km/h > {} (Net: {} > [{}] {})'.format(
ice_status['speed'],
next_stop,
ice_status['connectivity']['currentState'],
format_time(ice_status['connectivity']['remainingTimeSeconds']),
ice_status['connectivity']['nextState'],
))
except Exception as e:
print(repr(e))
exit(0)