@@ -880,9 +880,26 @@ async def clock_synchronize(self) -> bool:
880880 return False
881881
882882 dt_now = datetime .now (tz = UTC )
883- days_diff = response .day_of_week .value - dt_now .weekday ()
884- target_date = dt_now + timedelta (days = days_diff )
885- circle_timestamp = target_date .replace (
883+ dt_now_date = dt_now .replace (hour = 0 , minute = 0 , second = 0 , microsecond = 0 )
884+ response_date = datetime (
885+ response .date .value .year ,
886+ response .date .value .month ,
887+ response .date .value .day ,
888+ hour = 0 ,
889+ minute = 0 ,
890+ second = 0 ,
891+ microsecond = 0 ,
892+ tzinfo = UTC ,
893+ )
894+ if dt_now_date != response_date :
895+ _LOGGER .info (
896+ "Sync clock of node %s because time has drifted %s days" ,
897+ self ._mac_in_str ,
898+ int (abs ((dt_now_date - response_date ).days )),
899+ )
900+ return await self ._send_clock_set_req ()
901+
902+ circle_timestamp : datetime = dt_now .replace (
886903 hour = response .time .value .hour ,
887904 minute = response .time .value .minute ,
888905 second = response .time .value .second ,
@@ -902,7 +919,10 @@ async def clock_synchronize(self) -> bool:
902919 raise NodeError (
903920 "Unable to synchronize clock when protocol version is unknown"
904921 )
922+ return await self ._send_clock_set_req ()
905923
924+ async def _send_clock_set_req (self ) -> bool :
925+ """Send CirclePlusRealTimeClockSetRequest."""
906926 set_request = CircleClockSetRequest (
907927 self ._send ,
908928 self ._mac_in_bytes ,
0 commit comments