|  |  | @ -5,7 +5,6 @@ import time | 
			
		
	
		
		
			
				
					
					|  |  |  | import subprocess |  |  |  | import subprocess | 
			
		
	
		
		
			
				
					
					|  |  |  | from typing import NoReturn |  |  |  | from typing import NoReturn | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | import requests |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | from timezonefinder import TimezoneFinder |  |  |  | from timezonefinder import TimezoneFinder | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | from openpilot.common.params import Params |  |  |  | from openpilot.common.params import Params | 
			
		
	
	
		
		
			
				
					|  |  | @ -41,35 +40,18 @@ def main() -> NoReturn: | 
			
		
	
		
		
			
				
					
					|  |  |  |   # Get allowed timezones |  |  |  |   # Get allowed timezones | 
			
		
	
		
		
			
				
					
					|  |  |  |   valid_timezones = subprocess.check_output('timedatectl list-timezones', shell=True, encoding='utf8').strip().split('\n') |  |  |  |   valid_timezones = subprocess.check_output('timedatectl list-timezones', shell=True, encoding='utf8').strip().split('\n') | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   timezone = params.get("Timezone", encoding='utf8') | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   if timezone is not None: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     cloudlog.debug("Setting timezone based on param") | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     set_timezone(valid_timezones, timezone) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   while True: |  |  |  |   while True: | 
			
		
	
		
		
			
				
					
					|  |  |  |     time.sleep(60) |  |  |  |     time.sleep(60) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # Set based on param |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     timezone = params.get("Timezone", encoding='utf8') |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     if timezone is not None: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       cloudlog.debug("Setting timezone based on param") |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       set_timezone(valid_timezones, timezone) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       continue |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     location = params.get("LastGPSPosition", encoding='utf8') |  |  |  |     location = params.get("LastGPSPosition", encoding='utf8') | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     # Find timezone based on IP geolocation if no gps location is available |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     if location is None: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       cloudlog.debug("Setting timezone based on IP lookup") |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       try: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         r = requests.get("https://ipapi.co/timezone", headers=REQUEST_HEADERS, timeout=10) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         if r.status_code == 200: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |           set_timezone(valid_timezones, r.text) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         else: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |           cloudlog.error(f"Unexpected status code from api {r.status_code}") |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         time.sleep(3600)  # Don't make too many API requests |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       except requests.exceptions.RequestException: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         cloudlog.exception("Error getting timezone based on IP") |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |         continue |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     # Find timezone by reverse geocoding the last known gps location |  |  |  |     # Find timezone by reverse geocoding the last known gps location | 
			
		
	
		
		
			
				
					
					|  |  |  |     else: |  |  |  |     if location is not None: | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |       cloudlog.debug("Setting timezone based on GPS location") |  |  |  |       cloudlog.debug("Setting timezone based on GPS location") | 
			
		
	
		
		
			
				
					
					|  |  |  |       try: |  |  |  |       try: | 
			
		
	
		
		
			
				
					
					|  |  |  |         location = json.loads(location) |  |  |  |         location = json.loads(location) | 
			
		
	
	
		
		
			
				
					|  |  | 
 |