@@ -51,23 +51,30 @@ def update_agents(agents: list[Agent]):
5151 time .sleep (update_frequency )
5252
5353
54- def control_camera (camera : Camera , reset_hour = 3 ):
55- ''' Control loop to trigger updating the camera position based on currently
54+ def control_camera (camera : Camera , reset_time : datetime . datetime ):
55+ """ Control loop to trigger updating the camera position based on currently
5656 active events.
57- '''
57+ param camera: Camera object to control
58+ param reset_time: datetime to reset control to automatic (default: 03:00)
59+ """
60+ if reset_time is None :
61+ reset_time = datetime .datetime .combine (
62+ date = datetime .date .today (),
63+ time = datetime .time (3 , 00 , 00 )
64+ )
5865 error_handler = RequestErrorHandler (
5966 camera .url ,
6067 f'Failed to communicate with camera { camera } ' )
6168 while True :
6269 with error_handler :
63- # Reset camera to automatic control at the hour
64- # specified in reset_hour
65- now = datetime .datetime .now ()
66- if now .hour == reset_hour and now .minute < 1 :
67- logger .info (f'It\' s { reset_hour } o\' clock ==> Reset camera'
68- f' control to \' automatic\' ' )
70+ if reset_time < datetime .datetime .now ():
71+ logger .info (f'current time is { datetime .datetime .now ()} , '
72+ f'the reset time is { reset_time } ' )
73+ logger .info (f'Reset { camera } to \' automatic\' ' )
6974 camera .control = "automatic"
7075 camera .position = - 1
76+ reset_time = reset_time + datetime .timedelta (days = 1 )
77+ logger .info (f'Next reset time is set to { reset_time } ' )
7178 if camera .control == "automatic" :
7279 camera .update_position ()
7380 else :
@@ -99,6 +106,11 @@ def main():
99106
100107 cameras = []
101108 agents = []
109+ reset_time = datetime .datetime .combine (
110+ date = datetime .date .today (),
111+ time = datetime .time .fromisoformat (config_t (str ,'reset_time' )),
112+ )
113+ logger .info ('reset time is set to %s' , reset_time )
102114 for agent_id , agent_cameras in config_rt (dict , 'camera' ).items ():
103115 agent = Agent (agent_id )
104116 agent .verify_agent ()
@@ -117,7 +129,7 @@ def main():
117129 for camera in cameras :
118130 logger .info ('Starting camera control for %s with control status %s' ,
119131 camera , getattr (camera , 'control' ))
120- control_thread = Thread (target = control_camera , args = (camera ,))
132+ control_thread = Thread (target = control_camera , args = (camera , reset_time ))
121133 threads .append (control_thread )
122134 control_thread .start ()
123135
0 commit comments