Skip to content

Commit 18e8613

Browse files
committed
Update reset time as datetime object, renamed reset timer to reset time, and minor logging improvements
1 parent af4eacd commit 18e8613

File tree

2 files changed

+27
-10
lines changed

2 files changed

+27
-10
lines changed

camera-control.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ calendar:
3131
# Default: 300
3232
camera_update_frequency: 300
3333

34+
# The reset-time is used to reset the camera control status for every camera to "automatic" at a certain time.
35+
# The time is specified in the format HH:MM.
36+
# Default: "03:00"
37+
reset_time: "03:00"
38+
3439
# Camera Configuration
3540
# Configure the capture agents to get the calendar for and a list of cameras to
3641
# control when a capture agent starts.

occameracontrol/__main__.py

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)