@@ -77,9 +77,26 @@ async def clock_synchronize(self) -> bool:
7777 await self ._available_update_state (True , response .timestamp )
7878
7979 dt_now = datetime .now (tz = UTC )
80- days_diff = (response .day_of_week .value - dt_now .weekday ()) % 7
80+ dt_now_date = dt_now .replace (hour = 0 , minute = 0 , second = 0 , microsecond = 0 )
81+ response_date = datetime (
82+ response .date .value .year ,
83+ response .date .value .month ,
84+ response .date .value .day ,
85+ hour = 0 ,
86+ minute = 0 ,
87+ second = 0 ,
88+ microsecond = 0 ,
89+ tzinfo = UTC ,
90+ )
91+ if dt_now_date != response_date :
92+ _LOGGER .warning (
93+ "Reset realtime clock of node %s because time has drifted %s days" ,
94+ self ._mac_in_str ,
95+ int (abs ((dt_now_date - response_date ).days )),
96+ )
97+ return await self ._send_clock_set_req ()
98+
8199 circle_plus_timestamp : datetime = dt_now .replace (
82- day = (dt_now .day + days_diff ),
83100 hour = response .time .value .hour ,
84101 minute = response .time .value .minute ,
85102 second = response .time .value .second ,
@@ -93,9 +110,13 @@ async def clock_synchronize(self) -> bool:
93110 _LOGGER .warning (
94111 "Reset realtime clock of node %s because time has drifted %s seconds while max drift is set to %s seconds)" ,
95112 self ._mac_in_str ,
96- str ( int (abs (clock_offset .total_seconds () ))),
97- str ( MAX_TIME_DRIFT ) ,
113+ int (abs (clock_offset .total_seconds ())),
114+ MAX_TIME_DRIFT ,
98115 )
116+ return await self ._send_clock_set_req ()
117+
118+ async def _send_clock_set_req (self ) -> bool :
119+ """Send CirclePlusRealTimeClockSetRequest."""
99120 set_request = CirclePlusRealTimeClockSetRequest (
100121 self ._send , self ._mac_in_bytes , datetime .now (tz = UTC )
101122 )
0 commit comments