diff --git a/examples/src/micropython/main.py b/examples/src/micropython/main.py index fc45b97..fc2bd3e 100644 --- a/examples/src/micropython/main.py +++ b/examples/src/micropython/main.py @@ -1,179 +1,243 @@ -import urequests -import time +import requests +from time import time, gmtime, mktime,sleep import network import local_secrets -import datetime +import machine +import ntptime -# Create network in station mode, activate it and connect -wlan = network.WLAN(network.STA_IF) +APIKEY = local_secrets.APIKEY +SSID = local_secrets.SSID +PASS = local_secrets.PASS -wlan.active(True) -wlan.connect(local_secrets.SSID, local_secrets.PASS) +def time_from_iso(datetime_str): + [yyyy, mm, dd] = [int(i) for i in datetime_str.split('T')[0].split('-')] + [h,m,s] = [int(i) for i in datetime_str.split('T')[1].split(':')] + time_u = mktime((yyyy, mm, dd, h, m, s, 0, 0)) + return time_u -# Wait for the connection (esp32 can take some time) -max_wait = 10 -while max_wait > 0: - if wlan.isconnected(): - break - max_wait -= 1 - print('Waiting for connection...') - time.sleep(1) +def connect_wifi(): + # Create network in station mode, activate it and connect + wlan = network.WLAN(network.STA_IF) + + wlan.active(True) + wlan.connect(SSID, PASS) + + # Wait for the connection (esp32 can take some time) + max_wait = 10 + while max_wait > 0: + if wlan.isconnected(): + break + max_wait -= 1 + print('Waiting for connection...') + sleep(1) + +def init_LEDs(): + # Sets up LEDs and their ports. + led = machine.Pin(15, machine.Pin.OUT) + led.off() + +# Connect Wifi +connect_wifi() + +# Synchronize time of RTC with NTP +try: + ntptime.settime() + print("Time synchronized successfully") +except Exception as e: + print("Error synchronizing time:", e) + +last_query = mktime([2000,1,1,0,0,0,0,0]) # Set last query default (will run on first run) +query_period = 120 # Query the API at most every 2 minutes # Build up list of stations -# Set ETA as long distance time -eta_def = datetime.datetime(2199,1,1,0,0,0) +eta_def = mktime([2062,1,1,0,0,0,0,0]) # Set ETA as long time in future # Stations dictionary contains name, the eta of the next train and the LED index stations = {} -# stations[41090] = { 'name':' Monroe (Red Line)', 'eta':eta_def, 'led_index':'1'} +stations[41090] = { 'name':' Monroe (Red Line)', 'eta':eta_def, 'led_index':'1'} stations[40820] = { 'name':' Rosemont (Blue Line)', 'eta':eta_def, 'led_index':'15'} -# stations[41010] = { 'name':' Rockwell (Brown Line)', 'eta':eta_def, 'led_index':'3'} -# stations[40470] = { 'name':' Racine (Blue Line)', 'eta':eta_def, 'led_index':'4'} -# stations[40190] = { 'name':' Sox-35th (Red Line)', 'eta':eta_def, 'led_index':'5'} -# stations[40020] = { 'name':' Harlem/Lake (Green Line)', 'eta':eta_def, 'led_index':'6'} -# stations[40900] = { 'name':' Howard (Red Purple & Yellow lines)', 'eta':eta_def, 'led_index':'7'} -# stations[41160] = { 'name':' Clinton (Green & Pink lines)', 'eta':eta_def, 'led_index':'8'} -# stations[40230] = { 'name':' Cumberland (Blue Line)', 'eta':eta_def, 'led_index':'9'} -# stations[40560] = { 'name':' Jackson (Red Line)', 'eta':eta_def, 'led_index':'10'} -# stations[41150] = { 'name':' Kedzie (Orange Line)', 'eta':eta_def, 'led_index':'11'} -# stations[40780] = { 'name':' Central Park (Pink Line)', 'eta':eta_def, 'led_index':'12'} -# stations[41080] = { 'name':' 47th (Green Line)', 'eta':eta_def, 'led_index':'13'} -# stations[40510] = { 'name':' Garfield (Green Line)', 'eta':eta_def, 'led_index':'14'} -# stations[41050] = { 'name':' Linden (Purple Line)', 'eta':eta_def, 'led_index':'15'} -# stations[40120] = { 'name':' 35th/Archer (Orange Line)', 'eta':eta_def, 'led_index':'16'} -# stations[40570] = { 'name':' California (Blue Line)', 'eta':eta_def, 'led_index':'17'} -# stations[40260] = { 'name':' State/Lake (Brown Green Orange Pink & Purple lines)', 'eta':eta_def, 'led_index':'18'} -# stations[40130] = { 'name':' 51st (Green Line)', 'eta':eta_def, 'led_index':'19'} -# stations[41700] = { 'name':' Washington/Wabash (Brown Green Orange Purple & Pink lines)', 'eta':eta_def, 'led_index':'20'} -# stations[41000] = { 'name':' Cermak-Chinatown (Red Line)', 'eta':eta_def, 'led_index':'21'} -# stations[40340] = { 'name':' Berwyn (Red Line)', 'eta':eta_def, 'led_index':'22'} -# stations[41690] = { 'name':' Cermak-McCormick Place (Green Line)', 'eta':eta_def, 'led_index':'23'} -# stations[40490] = { 'name':' Grand (Blue Line)', 'eta':eta_def, 'led_index':'24'} -# stations[41060] = { 'name':' Ashland (Orange Line)', 'eta':eta_def, 'led_index':'25'} -# stations[40090] = { 'name':' Damen (Brown Line)', 'eta':eta_def, 'led_index':'26'} -# stations[41280] = { 'name':' Jefferson Park (Blue Line)', 'eta':eta_def, 'led_index':'27'} -# stations[40520] = { 'name':' Foster (Purple Line)', 'eta':eta_def, 'led_index':'28'} -# stations[40330] = { 'name':' Grand (Red Line)', 'eta':eta_def, 'led_index':'29'} -# stations[40280] = { 'name':' Central (Green Line)', 'eta':eta_def, 'led_index':'30'} -# stations[40250] = { 'name':' Kedzie-Homan (Blue Line)', 'eta':eta_def, 'led_index':'31'} -# stations[40870] = { 'name':' Francisco (Brown Line)', 'eta':eta_def, 'led_index':'32'} -# stations[41240] = { 'name':' Addison (Blue Line)', 'eta':eta_def, 'led_index':'33'} -# stations[40740] = { 'name':' Western (Pink Line)', 'eta':eta_def, 'led_index':'34'} -# stations[41360] = { 'name':' California (Green Line)', 'eta':eta_def, 'led_index':'35'} -# stations[41400] = { 'name':' Roosevelt (Red Orange & Green lines)', 'eta':eta_def, 'led_index':'36'} -# stations[41410] = { 'name':' Chicago (Blue Line)', 'eta':eta_def, 'led_index':'37'} -# stations[40680] = { 'name':' Adams/Wabash (Brown Green Orange Pink & Purple lines)', 'eta':eta_def, 'led_index':'38'} -# stations[40920] = { 'name':' Pulaski (Blue Line)', 'eta':eta_def, 'led_index':'39'} -# stations[41210] = { 'name':' Wellington (Brown & Purple lines)', 'eta':eta_def, 'led_index':'40'} -# stations[41340] = { 'name':' LaSalle (Blue Line)', 'eta':eta_def, 'led_index':'41'} -# stations[41490] = { 'name':' Harrison (Red Line)', 'eta':eta_def, 'led_index':'42'} -# stations[41350] = { 'name':' Oak Park (Green Line)', 'eta':eta_def, 'led_index':'43'} -# stations[40040] = { 'name':' Quincy/Wells (Brown Orange Purple & Pink lines)', 'eta':eta_def, 'led_index':'44'} -# stations[40390] = { 'name':' Forest Park (Blue Line)', 'eta':eta_def, 'led_index':'45'} -# stations[41130] = { 'name':' Halsted (Orange Line)', 'eta':eta_def, 'led_index':'46'} -# stations[40960] = { 'name':' Pulaski (Orange Line)', 'eta':eta_def, 'led_index':'47'} -# stations[40830] = { 'name':' 18th (Pink Line)', 'eta':eta_def, 'led_index':'48'} -# stations[40140] = { 'name':' Dempster-Skokie  (Yellow Line)', 'eta':eta_def, 'led_index':'49'} -# stations[41320] = { 'name':' Belmont (Red Brown & Purple lines)', 'eta':eta_def, 'led_index':'50'} -# stations[41660] = { 'name':' Lake (Red Line)', 'eta':eta_def, 'led_index':'51'} -# stations[40910] = { 'name':' 63rd (Red Line)', 'eta':eta_def, 'led_index':'52'} -# stations[40690] = { 'name':' Dempster (Purple Line)', 'eta':eta_def, 'led_index':'53'} -# stations[40460] = { 'name':' Merchandise Mart (Brown & Purple lines)', 'eta':eta_def, 'led_index':'54'} -# stations[40710] = { 'name':' Chicago (Brown & Purple lines)', 'eta':eta_def, 'led_index':'55'} -# stations[40530] = { 'name':' Diversey (Brown & Purple lines)', 'eta':eta_def, 'led_index':'56'} -# stations[40850] = { 'name':' Harold Washington Library-State/Van Buren (Brown Orange Purple & Pink lines)', 'eta':eta_def, 'led_index':'57'} -# stations[41020] = { 'name':' Logan Square (Blue Line)', 'eta':eta_def, 'led_index':'58'} -# stations[41030] = { 'name':' Polk (Pink Line)', 'eta':eta_def, 'led_index':'59'} -# stations[41300] = { 'name':' Loyola (Red Line)', 'eta':eta_def, 'led_index':'60'} -# stations[40310] = { 'name':' Western (Orange Line)', 'eta':eta_def, 'led_index':'61'} -# stations[40430] = { 'name':' Clinton (Blue Line)', 'eta':eta_def, 'led_index':'62'} -# stations[40320] = { 'name':' Division (Blue Line)', 'eta':eta_def, 'led_index':'63'} -# stations[41510] = { 'name':' Morgan (Green & Pink lines)', 'eta':eta_def, 'led_index':'64'} -# stations[40270] = { 'name':' Main (Purple Line)', 'eta':eta_def, 'led_index':'65'} -# stations[41330] = { 'name':' Montrose (Blue Line)', 'eta':eta_def, 'led_index':'66'} -# stations[40350] = { 'name':' UIC-Halsted (Blue Line)', 'eta':eta_def, 'led_index':'67'} -# stations[40940] = { 'name':' Halsted (Green Line)', 'eta':eta_def, 'led_index':'68'} -# stations[41480] = { 'name':' Western (Brown Line)', 'eta':eta_def, 'led_index':'69'} -# stations[40030] = { 'name':' Pulaski (Green Line)', 'eta':eta_def, 'led_index':'70'} -# stations[41190] = { 'name':' Jarvis (Red Line)', 'eta':eta_def, 'led_index':'71'} -# stations[41170] = { 'name':' Garfield (Red Line)', 'eta':eta_def, 'led_index':'72'} -# stations[40050] = { 'name':' Davis (Purple Line)', 'eta':eta_def, 'led_index':'73'} -# stations[40750] = { 'name':' Harlem (Blue Line - OHare Branch)', 'eta':eta_def, 'led_index':'74'} -# stations[41200] = { 'name':' Argyle (Red Line)', 'eta':eta_def, 'led_index':'75'} -# stations[40440] = { 'name':' California (Pink Line)', 'eta':eta_def, 'led_index':'76'} -# stations[40360] = { 'name':' Southport (Brown Line)', 'eta':eta_def, 'led_index':'77'} -# stations[40760] = { 'name':' Granville (Red Line)', 'eta':eta_def, 'led_index':'78'} -# stations[40480] = { 'name':' Cicero (Green Line)', 'eta':eta_def, 'led_index':'79'} -# stations[40730] = { 'name':' Washington/Wells (Brown Orange Purple & Pink lines)', 'eta':eta_def, 'led_index':'80'} -# stations[40580] = { 'name':' 54th/Cermak (Pink Line)', 'eta':eta_def, 'led_index':'81'} -# stations[40650] = { 'name':' North/Clybourn (Red Line)', 'eta':eta_def, 'led_index':'82'} -# stations[40220] = { 'name':' Western (Blue Line - Forest Park Branch)', 'eta':eta_def, 'led_index':'83'} -# stations[40070] = { 'name':' Jackson (Blue Line)', 'eta':eta_def, 'led_index':'84'} -# stations[41440] = { 'name':' Addison (Brown Line)', 'eta':eta_def, 'led_index':'85'} -# stations[41670] = { 'name':' Conservatory (Green Line)', 'eta':eta_def, 'led_index':'86'} -# stations[40790] = { 'name':' Monroe (Blue Line)', 'eta':eta_def, 'led_index':'87'} -# stations[40180] = { 'name':' Oak Park (Blue Line)', 'eta':eta_def, 'led_index':'88'} -# stations[40400] = { 'name':' Noyes (Purple Line)', 'eta':eta_def, 'led_index':'89'} -# stations[41260] = { 'name':' Austin (Green Line)', 'eta':eta_def, 'led_index':'90'} -# stations[40600] = { 'name':' Kostner (Pink Line)', 'eta':eta_def, 'led_index':'91'} -# stations[40670] = { 'name':' Western (Blue Line - OHare Branch)', 'eta':eta_def, 'led_index':'92'} -# stations[40100] = { 'name':' Morse (Red Line)', 'eta':eta_def, 'led_index':'93'} -# stations[40770] = { 'name':' Lawrence (Red Line)', 'eta':eta_def, 'led_index':'94'} -# stations[40150] = { 'name':' Pulaski (Pink Line)', 'eta':eta_def, 'led_index':'95'} -# stations[40660] = { 'name':' Armitage (Brown & Purple lines)', 'eta':eta_def, 'led_index':'96'} -# stations[40540] = { 'name':' Wilson (Red & Purple lines)', 'eta':eta_def, 'led_index':'97'} -# stations[40380] = { 'name':' Clark/Lake (Blue Brown Green Orange Purple & Pink lines)', 'eta':eta_def, 'led_index':'98'} -# stations[40160] = { 'name':' LaSalle/Van Buren (Brown Orange Purple & Pink lines)', 'eta':eta_def, 'led_index':'99'} -# stations[40700] = { 'name':' Laramie (Green Line)', 'eta':eta_def, 'led_index':'100'} -# stations[40240] = { 'name':' 79th (Red Line)', 'eta':eta_def, 'led_index':'101'} -# stations[40290] = { 'name':' Ashland/63rd (Green Line)', 'eta':eta_def, 'led_index':'102'} -# stations[40450] = { 'name':' 95th/Dan Ryan (Red Line)', 'eta':eta_def, 'led_index':'103'} -# stations[40210] = { 'name':' Damen (Pink Line)', 'eta':eta_def, 'led_index':'104'} -# stations[41140] = { 'name':' King Drive (Green Line)', 'eta':eta_def, 'led_index':'105'} -# stations[41710] = { 'name':' Damen (Green Line)', 'eta':eta_def, 'led_index':'106'} -# stations[40980] = { 'name':' Harlem (Blue Line - Forest Park Branch)', 'eta':eta_def, 'led_index':'107'} -# stations[41270] = { 'name':' 43rd (Green Line)', 'eta':eta_def, 'led_index':'108'} -# stations[40080] = { 'name':' Sheridan (Red Line)', 'eta':eta_def, 'led_index':'109'} -# stations[40610] = { 'name':' Ridgeland (Green Line)', 'eta':eta_def, 'led_index':'110'} -# stations[41070] = { 'name':' Kedzie (Green Line)', 'eta':eta_def, 'led_index':'111'} -# stations[41430] = { 'name':' 87th (Red Line)', 'eta':eta_def, 'led_index':'112'} -# stations[41250] = { 'name':' Central (Purple Line)', 'eta':eta_def, 'led_index':'113'} -# stations[40880] = { 'name':' Thorndale (Red Line)', 'eta':eta_def, 'led_index':'114'} -# stations[41680] = { 'name':' Oakton-Skokie (Yellow Line)', 'eta':eta_def, 'led_index':'115'} -# stations[41120] = { 'name':' 35th-Bronzeville-IIT (Green Line)', 'eta':eta_def, 'led_index':'116'} -# stations[41460] = { 'name':' Irving Park (Brown Line)', 'eta':eta_def, 'led_index':'117'} -# stations[41220] = { 'name':' Fullerton (Red Brown & Purple lines)', 'eta':eta_def, 'led_index':'118'} -# stations[40990] = { 'name':' 69th (Red Line)', 'eta':eta_def, 'led_index':'119'} -# stations[41040] = { 'name':' Kedzie (Pink Line)', 'eta':eta_def, 'led_index':'120'} -# stations[40800] = { 'name':' Sedgwick (Brown & Purple lines)', 'eta':eta_def, 'led_index':'121'} -# stations[40060] = { 'name':' Belmont (Blue Line)', 'eta':eta_def, 'led_index':'122'} -# stations[40840] = { 'name':' South Boulevard (Purple Line)', 'eta':eta_def, 'led_index':'123'} -# stations[40170] = { 'name':' Ashland (Green & Pink lines)', 'eta':eta_def, 'led_index':'124'} -# stations[40810] = { 'name':' Illinois Medical District (Blue Line)', 'eta':eta_def, 'led_index':'125'} -# stations[41230] = { 'name':' 47th (Red Line)', 'eta':eta_def, 'led_index':'126'} -# stations[41500] = { 'name':' Montrose (Brown Line)', 'eta':eta_def, 'led_index':'127'} -# stations[40930] = { 'name':' Midway (Orange Line)', 'eta':eta_def, 'led_index':'128'} -# stations[40550] = { 'name':' Irving Park (Blue Line)', 'eta':eta_def, 'led_index':'129'} -# stations[40370] = { 'name':' Washington (Blue Line)', 'eta':eta_def, 'led_index':'130'} -# stations[40890] = { 'name':' OHare (Blue Line)', 'eta':eta_def, 'led_index':'131'} -# stations[40630] = { 'name':' Clark/Division (Red Line)', 'eta':eta_def, 'led_index':'132'} -# stations[41420] = { 'name':' Addison (Red Line)', 'eta':eta_def, 'led_index':'133'} -# stations[41290] = { 'name':' Kimball (Brown Line)', 'eta':eta_def, 'led_index':'134'} -# stations[40300] = { 'name':' Indiana (Green Line)', 'eta':eta_def, 'led_index':'135'} -# stations[40420] = { 'name':' Cicero (Pink Line)', 'eta':eta_def, 'led_index':'136'} -# stations[40720] = { 'name':' Cottage Grove (Green Line)', 'eta':eta_def, 'led_index':'137'} -# stations[41380] = { 'name':' Bryn Mawr (Red Line)', 'eta':eta_def, 'led_index':'138'} -# stations[41450] = { 'name':' Chicago (Red Line)', 'eta':eta_def, 'led_index':'139'} -# stations[40590] = { 'name':' Damen (Blue Line)', 'eta':eta_def, 'led_index':'140'} -# stations[41180] = { 'name':' Kedzie (Brown Line)', 'eta':eta_def, 'led_index':'141'} -# stations[40010] = { 'name':' Austin (Blue Line)', 'eta':eta_def, 'led_index':'142'} -# stations[41310] = { 'name':' Paulina (Brown Line)', 'eta':eta_def, 'led_index':'143'} -# stations[40970] = { 'name':' Cicero (Blue Line)', 'eta':eta_def, 'led_index':'144'} +stations[41010] = { 'name':' Rockwell (Brown Line)', 'eta':eta_def, 'led_index':'3'} +stations[40470] = { 'name':' Racine (Blue Line)', 'eta':eta_def, 'led_index':'4'} +stations[40190] = { 'name':' Sox-35th (Red Line)', 'eta':eta_def, 'led_index':'5'} +stations[40020] = { 'name':' Harlem/Lake (Green Line)', 'eta':eta_def, 'led_index':'6'} +stations[40900] = { 'name':' Howard (Red Purple & Yellow lines)', 'eta':eta_def, 'led_index':'7'} +stations[41160] = { 'name':' Clinton (Green & Pink lines)', 'eta':eta_def, 'led_index':'8'} +stations[40230] = { 'name':' Cumberland (Blue Line)', 'eta':eta_def, 'led_index':'9'} +stations[40560] = { 'name':' Jackson (Red Line)', 'eta':eta_def, 'led_index':'10'} +stations[41150] = { 'name':' Kedzie (Orange Line)', 'eta':eta_def, 'led_index':'11'} +stations[40780] = { 'name':' Central Park (Pink Line)', 'eta':eta_def, 'led_index':'12'} +stations[41080] = { 'name':' 47th (Green Line)', 'eta':eta_def, 'led_index':'13'} +stations[40510] = { 'name':' Garfield (Green Line)', 'eta':eta_def, 'led_index':'14'} +stations[41050] = { 'name':' Linden (Purple Line)', 'eta':eta_def, 'led_index':'2'} +stations[40120] = { 'name':' 35th/Archer (Orange Line)', 'eta':eta_def, 'led_index':'16'} +stations[40570] = { 'name':' California (Blue Line)', 'eta':eta_def, 'led_index':'17'} +stations[40260] = { 'name':' State/Lake (Brown Green Orange Pink & Purple lines)', 'eta':eta_def, 'led_index':'18'} +stations[40130] = { 'name':' 51st (Green Line)', 'eta':eta_def, 'led_index':'19'} +stations[41700] = { 'name':' Washington/Wabash (Brown Green Orange Purple & Pink lines)', 'eta':eta_def, 'led_index':'20'} +stations[41000] = { 'name':' Cermak-Chinatown (Red Line)', 'eta':eta_def, 'led_index':'21'} +stations[40340] = { 'name':' Berwyn (Red Line)', 'eta':eta_def, 'led_index':'22'} +stations[41690] = { 'name':' Cermak-McCormick Place (Green Line)', 'eta':eta_def, 'led_index':'23'} +stations[40490] = { 'name':' Grand (Blue Line)', 'eta':eta_def, 'led_index':'24'} +stations[41060] = { 'name':' Ashland (Orange Line)', 'eta':eta_def, 'led_index':'25'} +stations[40090] = { 'name':' Damen (Brown Line)', 'eta':eta_def, 'led_index':'26'} +stations[41280] = { 'name':' Jefferson Park (Blue Line)', 'eta':eta_def, 'led_index':'27'} +stations[40520] = { 'name':' Foster (Purple Line)', 'eta':eta_def, 'led_index':'28'} +stations[40330] = { 'name':' Grand (Red Line)', 'eta':eta_def, 'led_index':'29'} +stations[40280] = { 'name':' Central (Green Line)', 'eta':eta_def, 'led_index':'30'} +stations[40250] = { 'name':' Kedzie-Homan (Blue Line)', 'eta':eta_def, 'led_index':'31'} +stations[40870] = { 'name':' Francisco (Brown Line)', 'eta':eta_def, 'led_index':'32'} +stations[41240] = { 'name':' Addison (Blue Line)', 'eta':eta_def, 'led_index':'33'} +stations[40740] = { 'name':' Western (Pink Line)', 'eta':eta_def, 'led_index':'34'} +stations[41360] = { 'name':' California (Green Line)', 'eta':eta_def, 'led_index':'35'} +stations[41400] = { 'name':' Roosevelt (Red Orange & Green lines)', 'eta':eta_def, 'led_index':'36'} +stations[41410] = { 'name':' Chicago (Blue Line)', 'eta':eta_def, 'led_index':'37'} +stations[40680] = { 'name':' Adams/Wabash (Brown Green Orange Pink & Purple lines)', 'eta':eta_def, 'led_index':'38'} +stations[40920] = { 'name':' Pulaski (Blue Line)', 'eta':eta_def, 'led_index':'39'} +stations[41210] = { 'name':' Wellington (Brown & Purple lines)', 'eta':eta_def, 'led_index':'40'} +stations[41340] = { 'name':' LaSalle (Blue Line)', 'eta':eta_def, 'led_index':'41'} +stations[41490] = { 'name':' Harrison (Red Line)', 'eta':eta_def, 'led_index':'42'} +stations[41350] = { 'name':' Oak Park (Green Line)', 'eta':eta_def, 'led_index':'43'} +stations[40040] = { 'name':' Quincy/Wells (Brown Orange Purple & Pink lines)', 'eta':eta_def, 'led_index':'44'} +stations[40390] = { 'name':' Forest Park (Blue Line)', 'eta':eta_def, 'led_index':'45'} +stations[41130] = { 'name':' Halsted (Orange Line)', 'eta':eta_def, 'led_index':'46'} +stations[40960] = { 'name':' Pulaski (Orange Line)', 'eta':eta_def, 'led_index':'47'} +stations[40830] = { 'name':' 18th (Pink Line)', 'eta':eta_def, 'led_index':'48'} +stations[40140] = { 'name':' Dempster-Skokie  (Yellow Line)', 'eta':eta_def, 'led_index':'49'} +stations[41320] = { 'name':' Belmont (Red Brown & Purple lines)', 'eta':eta_def, 'led_index':'50'} +stations[41660] = { 'name':' Lake (Red Line)', 'eta':eta_def, 'led_index':'51'} +stations[40910] = { 'name':' 63rd (Red Line)', 'eta':eta_def, 'led_index':'52'} +stations[40690] = { 'name':' Dempster (Purple Line)', 'eta':eta_def, 'led_index':'53'} +stations[40460] = { 'name':' Merchandise Mart (Brown & Purple lines)', 'eta':eta_def, 'led_index':'54'} +stations[40710] = { 'name':' Chicago (Brown & Purple lines)', 'eta':eta_def, 'led_index':'55'} +stations[40530] = { 'name':' Diversey (Brown & Purple lines)', 'eta':eta_def, 'led_index':'56'} +stations[40850] = { 'name':' Harold Washington Library-State/Van Buren (Brown Orange Purple & Pink lines)', 'eta':eta_def, 'led_index':'57'} +stations[41020] = { 'name':' Logan Square (Blue Line)', 'eta':eta_def, 'led_index':'58'} +stations[41030] = { 'name':' Polk (Pink Line)', 'eta':eta_def, 'led_index':'59'} +stations[41300] = { 'name':' Loyola (Red Line)', 'eta':eta_def, 'led_index':'60'} +stations[40310] = { 'name':' Western (Orange Line)', 'eta':eta_def, 'led_index':'61'} +stations[40430] = { 'name':' Clinton (Blue Line)', 'eta':eta_def, 'led_index':'62'} +stations[40320] = { 'name':' Division (Blue Line)', 'eta':eta_def, 'led_index':'63'} +stations[41510] = { 'name':' Morgan (Green & Pink lines)', 'eta':eta_def, 'led_index':'64'} +stations[40270] = { 'name':' Main (Purple Line)', 'eta':eta_def, 'led_index':'65'} +stations[41330] = { 'name':' Montrose (Blue Line)', 'eta':eta_def, 'led_index':'66'} +stations[40350] = { 'name':' UIC-Halsted (Blue Line)', 'eta':eta_def, 'led_index':'67'} +stations[40940] = { 'name':' Halsted (Green Line)', 'eta':eta_def, 'led_index':'68'} +stations[41480] = { 'name':' Western (Brown Line)', 'eta':eta_def, 'led_index':'69'} +stations[40030] = { 'name':' Pulaski (Green Line)', 'eta':eta_def, 'led_index':'70'} +stations[41190] = { 'name':' Jarvis (Red Line)', 'eta':eta_def, 'led_index':'71'} +stations[41170] = { 'name':' Garfield (Red Line)', 'eta':eta_def, 'led_index':'72'} +stations[40050] = { 'name':' Davis (Purple Line)', 'eta':eta_def, 'led_index':'73'} +stations[40750] = { 'name':' Harlem (Blue Line - OHare Branch)', 'eta':eta_def, 'led_index':'74'} +stations[41200] = { 'name':' Argyle (Red Line)', 'eta':eta_def, 'led_index':'75'} +stations[40440] = { 'name':' California (Pink Line)', 'eta':eta_def, 'led_index':'76'} +stations[40360] = { 'name':' Southport (Brown Line)', 'eta':eta_def, 'led_index':'77'} +stations[40760] = { 'name':' Granville (Red Line)', 'eta':eta_def, 'led_index':'78'} +stations[40480] = { 'name':' Cicero (Green Line)', 'eta':eta_def, 'led_index':'79'} +stations[40730] = { 'name':' Washington/Wells (Brown Orange Purple & Pink lines)', 'eta':eta_def, 'led_index':'80'} +stations[40580] = { 'name':' 54th/Cermak (Pink Line)', 'eta':eta_def, 'led_index':'81'} +stations[40650] = { 'name':' North/Clybourn (Red Line)', 'eta':eta_def, 'led_index':'82'} +stations[40220] = { 'name':' Western (Blue Line - Forest Park Branch)', 'eta':eta_def, 'led_index':'83'} +stations[40070] = { 'name':' Jackson (Blue Line)', 'eta':eta_def, 'led_index':'84'} +stations[41440] = { 'name':' Addison (Brown Line)', 'eta':eta_def, 'led_index':'85'} +stations[41670] = { 'name':' Conservatory (Green Line)', 'eta':eta_def, 'led_index':'86'} +stations[40790] = { 'name':' Monroe (Blue Line)', 'eta':eta_def, 'led_index':'87'} +stations[40180] = { 'name':' Oak Park (Blue Line)', 'eta':eta_def, 'led_index':'88'} +stations[40400] = { 'name':' Noyes (Purple Line)', 'eta':eta_def, 'led_index':'89'} +stations[41260] = { 'name':' Austin (Green Line)', 'eta':eta_def, 'led_index':'90'} +stations[40600] = { 'name':' Kostner (Pink Line)', 'eta':eta_def, 'led_index':'91'} +stations[40670] = { 'name':' Western (Blue Line - OHare Branch)', 'eta':eta_def, 'led_index':'92'} +stations[40100] = { 'name':' Morse (Red Line)', 'eta':eta_def, 'led_index':'93'} +stations[40770] = { 'name':' Lawrence (Red Line)', 'eta':eta_def, 'led_index':'94'} +stations[40150] = { 'name':' Pulaski (Pink Line)', 'eta':eta_def, 'led_index':'95'} +stations[40660] = { 'name':' Armitage (Brown & Purple lines)', 'eta':eta_def, 'led_index':'96'} +stations[40540] = { 'name':' Wilson (Red & Purple lines)', 'eta':eta_def, 'led_index':'97'} +stations[40380] = { 'name':' Clark/Lake (Blue Brown Green Orange Purple & Pink lines)', 'eta':eta_def, 'led_index':'98'} +stations[40160] = { 'name':' LaSalle/Van Buren (Brown Orange Purple & Pink lines)', 'eta':eta_def, 'led_index':'99'} +stations[40700] = { 'name':' Laramie (Green Line)', 'eta':eta_def, 'led_index':'100'} +stations[40240] = { 'name':' 79th (Red Line)', 'eta':eta_def, 'led_index':'101'} +stations[40290] = { 'name':' Ashland/63rd (Green Line)', 'eta':eta_def, 'led_index':'102'} +stations[40450] = { 'name':' 95th/Dan Ryan (Red Line)', 'eta':eta_def, 'led_index':'103'} +stations[40210] = { 'name':' Damen (Pink Line)', 'eta':eta_def, 'led_index':'104'} +stations[41140] = { 'name':' King Drive (Green Line)', 'eta':eta_def, 'led_index':'105'} +stations[41710] = { 'name':' Damen (Green Line)', 'eta':eta_def, 'led_index':'106'} +stations[40980] = { 'name':' Harlem (Blue Line - Forest Park Branch)', 'eta':eta_def, 'led_index':'107'} +stations[41270] = { 'name':' 43rd (Green Line)', 'eta':eta_def, 'led_index':'108'} +stations[40080] = { 'name':' Sheridan (Red Line)', 'eta':eta_def, 'led_index':'109'} +stations[40610] = { 'name':' Ridgeland (Green Line)', 'eta':eta_def, 'led_index':'110'} +stations[41070] = { 'name':' Kedzie (Green Line)', 'eta':eta_def, 'led_index':'111'} +stations[41430] = { 'name':' 87th (Red Line)', 'eta':eta_def, 'led_index':'112'} +stations[41250] = { 'name':' Central (Purple Line)', 'eta':eta_def, 'led_index':'113'} +stations[40880] = { 'name':' Thorndale (Red Line)', 'eta':eta_def, 'led_index':'114'} +stations[41680] = { 'name':' Oakton-Skokie (Yellow Line)', 'eta':eta_def, 'led_index':'115'} +stations[41120] = { 'name':' 35th-Bronzeville-IIT (Green Line)', 'eta':eta_def, 'led_index':'116'} +stations[41460] = { 'name':' Irving Park (Brown Line)', 'eta':eta_def, 'led_index':'117'} +stations[41220] = { 'name':' Fullerton (Red Brown & Purple lines)', 'eta':eta_def, 'led_index':'118'} +stations[40990] = { 'name':' 69th (Red Line)', 'eta':eta_def, 'led_index':'119'} +stations[41040] = { 'name':' Kedzie (Pink Line)', 'eta':eta_def, 'led_index':'120'} +stations[40800] = { 'name':' Sedgwick (Brown & Purple lines)', 'eta':eta_def, 'led_index':'121'} +stations[40060] = { 'name':' Belmont (Blue Line)', 'eta':eta_def, 'led_index':'122'} +stations[40840] = { 'name':' South Boulevard (Purple Line)', 'eta':eta_def, 'led_index':'123'} +stations[40170] = { 'name':' Ashland (Green & Pink lines)', 'eta':eta_def, 'led_index':'124'} +stations[40810] = { 'name':' Illinois Medical District (Blue Line)', 'eta':eta_def, 'led_index':'125'} +stations[41230] = { 'name':' 47th (Red Line)', 'eta':eta_def, 'led_index':'126'} +stations[41500] = { 'name':' Montrose (Brown Line)', 'eta':eta_def, 'led_index':'127'} +stations[40930] = { 'name':' Midway (Orange Line)', 'eta':eta_def, 'led_index':'128'} +stations[40550] = { 'name':' Irving Park (Blue Line)', 'eta':eta_def, 'led_index':'129'} +stations[40370] = { 'name':' Washington (Blue Line)', 'eta':eta_def, 'led_index':'130'} +stations[40890] = { 'name':' OHare (Blue Line)', 'eta':eta_def, 'led_index':'131'} +stations[40630] = { 'name':' Clark/Division (Red Line)', 'eta':eta_def, 'led_index':'132'} +stations[41420] = { 'name':' Addison (Red Line)', 'eta':eta_def, 'led_index':'133'} +stations[41290] = { 'name':' Kimball (Brown Line)', 'eta':eta_def, 'led_index':'134'} +stations[40300] = { 'name':' Indiana (Green Line)', 'eta':eta_def, 'led_index':'135'} +stations[40420] = { 'name':' Cicero (Pink Line)', 'eta':eta_def, 'led_index':'136'} +stations[40720] = { 'name':' Cottage Grove (Green Line)', 'eta':eta_def, 'led_index':'137'} +stations[41380] = { 'name':' Bryn Mawr (Red Line)', 'eta':eta_def, 'led_index':'138'} +stations[41450] = { 'name':' Chicago (Red Line)', 'eta':eta_def, 'led_index':'139'} +stations[40590] = { 'name':' Damen (Blue Line)', 'eta':eta_def, 'led_index':'140'} +stations[41180] = { 'name':' Kedzie (Brown Line)', 'eta':eta_def, 'led_index':'141'} +stations[40010] = { 'name':' Austin (Blue Line)', 'eta':eta_def, 'led_index':'142'} +stations[41310] = { 'name':' Paulina (Brown Line)', 'eta':eta_def, 'led_index':'143'} +stations[40970] = { 'name':' Cicero (Blue Line)', 'eta':eta_def, 'led_index':'144'} + +# Function sets up all LEDs. +init_LEDs() -for station in stations: - print(station) +while(True): + # Have we queried API in the query_period seconds? + if (time() - last_query) > query_period: + # Query updated API + trains = (requests.get("https://lapi.transitchicago.com/api/1.0/ttpositions.aspx?key="+APIKEY+"&rt=Blue&outputType=JSON")).json()['ctatt'] + + # Timestamps are served in local Chicago time, convert to GMT for simplicity on this side. + print(f"Time of poll is: "+str(gmtime(time_from_iso(trains['tmst'])+(5*60*60)))) + + # Loop through all trains and update matching stations + for train in trains['route'][0]['train']: + nextStation = int(train['nextStaId']) + eta_time = time_from_iso(train['arrT'])+(5*60*60) + + # Entirely possible there's two trains with same next station? add logic here + + stations[nextStation]['eta'] = eta_time + + + last_query = time() # uptime polling window + print(gmtime(last_query)) + + + + # Process the ETA for each station + # turn off all LEDs - lazy solution, better to track state and only toggle + machine.Pin(15, machine.Pin.OUT).off() + + for station, dict in stations.items(): + time_from_now = dict['eta'] - time() + if station == 40820: + print('Train will arrive at'+dict['name']+' in '+ str(dict['eta']-time()) + ' seconds') + if time_from_now < 60 and time_from_now > -60: # within 2 minutes + # Our test station for onboard LED + machine.Pin(15, machine.Pin.OUT).on() - -response = urequests.get("https://lapi.transitchicago.com/api/1.0/ttpositions.aspx?key="+local_secrets.APIKEY+"&rt=Blue&outputType=JSON") + sleep(1)