#!/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: next_stop = '{} {}{}'.format( stop['station']['name'], datetime.fromtimestamp(stop['timetable']['actualArrivalTime']/1000).strftime('%H:%M'), stop['timetable']['departureDelay'] if stop['timetable']['departureDelay'] else '', ) 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)