Added try/except to prevent exiting of sunset thread
This commit is contained in:
		
							parent
							
								
									fa157287e1
								
							
						
					
					
						commit
						9d490f8ce4
					
				| 
						 | 
				
			
			@ -3,7 +3,7 @@ import sys
 | 
			
		|||
import json
 | 
			
		||||
from time import sleep
 | 
			
		||||
from threading import Thread
 | 
			
		||||
from datetime import datetime, timedelta
 | 
			
		||||
from datetime import datetime, time, timedelta
 | 
			
		||||
 | 
			
		||||
import requests
 | 
			
		||||
from flask import Blueprint, request, jsonify
 | 
			
		||||
| 
						 | 
				
			
			@ -14,32 +14,40 @@ blueprint = Blueprint('detection', __name__)
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
def get_sunset() -> datetime:
 | 
			
		||||
    IPGEOLOCATION_API_KEY = os.environ['IPGEOLOCATION_API_KEY']
 | 
			
		||||
    ipgeolocation_api_response = requests.get(f'https://api.ipgeolocation.io/astronomy?apiKey={IPGEOLOCATION_API_KEY}&location=Winter+Haven,+FL')
 | 
			
		||||
    ipgeolocation_api_response.raise_for_status()
 | 
			
		||||
 | 
			
		||||
    astronomical_json = json.loads(ipgeolocation_api_response.content)
 | 
			
		||||
    sunset_time = datetime.strptime(astronomical_json['sunset'], '%H:%M').time()
 | 
			
		||||
    sunset_date = datetime.now().date()
 | 
			
		||||
    if sunset_time < datetime.now().time():
 | 
			
		||||
        # Sunset has already passed today
 | 
			
		||||
        sunset_date += timedelta(days=1)
 | 
			
		||||
    return datetime.combine(sunset_date, sunset_time)
 | 
			
		||||
    try:
 | 
			
		||||
        IPGEOLOCATION_API_KEY = os.environ['IPGEOLOCATION_API_KEY']
 | 
			
		||||
        ipgeolocation_api_response = requests.get(f'https://api.ipgeolocation.io/astronomy?apiKey={IPGEOLOCATION_API_KEY}&location=Winter+Haven,+FL')
 | 
			
		||||
        ipgeolocation_api_response.raise_for_status()
 | 
			
		||||
 | 
			
		||||
        astronomical_json = json.loads(ipgeolocation_api_response.content)
 | 
			
		||||
        sunset_time = datetime.strptime(astronomical_json['sunset'], '%H:%M').time()
 | 
			
		||||
    except Exception as e:
 | 
			
		||||
        print(e, file=sys.stderr)
 | 
			
		||||
        sunset_time = time(20, 00, 00)
 | 
			
		||||
    finally:
 | 
			
		||||
        if sunset_time < datetime.now().time():
 | 
			
		||||
            # Sunset has already passed today
 | 
			
		||||
            sunset_date += timedelta(days=1)
 | 
			
		||||
        return datetime.combine(sunset_date, sunset_time)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def reset_all_camera_detection_at_sunset():
 | 
			
		||||
    while True:
 | 
			
		||||
        sunset = get_sunset()
 | 
			
		||||
        print(f'Waiting until {sunset} to reset detection for all cameras...', file=sys.stderr)
 | 
			
		||||
        seconds_until_sunset = (sunset - datetime.now()).total_seconds()
 | 
			
		||||
        sleep(seconds_until_sunset)
 | 
			
		||||
        try:
 | 
			
		||||
            sunset = get_sunset()
 | 
			
		||||
            print(f'Waiting until {sunset} to reset detection for all cameras...', file=sys.stderr)
 | 
			
		||||
            seconds_until_sunset = (sunset - datetime.now()).total_seconds()
 | 
			
		||||
            sleep(seconds_until_sunset)
 | 
			
		||||
 | 
			
		||||
        # Get all camera names
 | 
			
		||||
        frigate_api_response = requests.get('http://frigate:5000/api/config')
 | 
			
		||||
        frigate_api_response.raise_for_status()
 | 
			
		||||
        all_camera_names = json.loads(frigate_api_response.content)['cameras'].keys()
 | 
			
		||||
        for camera_name in all_camera_names:
 | 
			
		||||
            set_camera_detection(camera_name, True)
 | 
			
		||||
            # Get all camera names
 | 
			
		||||
            frigate_api_response = requests.get('http://frigate:5000/api/config')
 | 
			
		||||
            frigate_api_response.raise_for_status()
 | 
			
		||||
            all_camera_names = json.loads(frigate_api_response.content)['cameras'].keys()
 | 
			
		||||
            for camera_name in all_camera_names:
 | 
			
		||||
                set_camera_detection(camera_name, True)
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
            print(e, file=sys.stderr)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def set_camera_detection(camera: str, value: bool, delay: int = 0) -> None:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue