Fix time pattern listener firing a few microseconds early (#39281)

This commit is contained in:
J. Nick Koston 2020-08-26 10:50:25 -05:00 committed by GitHub
parent 51a63c1fc4
commit 715fe4eef8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -996,13 +996,19 @@ def async_track_utc_time_change(
calculate_next(now + timedelta(seconds=1))
# We always get time.time() first to avoid time.time()
# ticking forward after fetching hass.loop.time()
# and callback being scheduled a few microseconds early
cancel_callback = hass.loop.call_at(
hass.loop.time() + next_time.timestamp() - time.time(),
-time.time() + hass.loop.time() + next_time.timestamp(),
pattern_time_change_listener,
)
# We always get time.time() first to avoid time.time()
# ticking forward after fetching hass.loop.time()
# and callback being scheduled a few microseconds early
cancel_callback = hass.loop.call_at(
hass.loop.time() + next_time.timestamp() - time.time(),
-time.time() + hass.loop.time() + next_time.timestamp(),
pattern_time_change_listener,
)