@@ -182,7 +182,7 @@ def get_vehicle_status_with_retry(self, vin_info: VinInfo) -> MessageV2:
182182
183183 def lock_vehicle (self , vin_info : VinInfo ) -> MessageV2 :
184184 rvc_params = []
185- return self .send_vehicle_ctrl_cmd_with_retry (vin_info , b'\x01 ' , rvc_params )
185+ return self .send_vehicle_ctrl_cmd_with_retry (vin_info , b'\x01 ' , rvc_params , False )
186186
187187 def unlock_vehicle (self , vin_info : VinInfo ) -> MessageV2 :
188188 rvc_params = []
@@ -211,7 +211,7 @@ def unlock_vehicle(self, vin_info: VinInfo) -> MessageV2:
211211 param5 .param_value = b'\x00 '
212212 rvc_params .append (param5 )
213213
214- return self .send_vehicle_ctrl_cmd_with_retry (vin_info , b'\x02 ' , rvc_params )
214+ return self .send_vehicle_ctrl_cmd_with_retry (vin_info , b'\x02 ' , rvc_params , False )
215215
216216 def start_rear_window_heat (self , vin_info : VinInfo ) -> MessageV2 :
217217 rvc_params = []
@@ -225,7 +225,7 @@ def start_rear_window_heat(self, vin_info: VinInfo) -> MessageV2:
225225 param2 .param_value = b'\x00 '
226226 rvc_params .append (param2 )
227227
228- return self .send_vehicle_ctrl_cmd_with_retry (vin_info , b'\x20 ' , rvc_params )
228+ return self .send_vehicle_ctrl_cmd_with_retry (vin_info , b'\x20 ' , rvc_params , False )
229229
230230 def stop_rear_window_heat (self , vin_info : VinInfo ) -> MessageV2 :
231231 rvc_params = []
@@ -239,7 +239,7 @@ def stop_rear_window_heat(self, vin_info: VinInfo) -> MessageV2:
239239 param2 .param_value = b'\x00 '
240240 rvc_params .append (param2 )
241241
242- return self .send_vehicle_ctrl_cmd_with_retry (vin_info , b'\x20 ' , rvc_params )
242+ return self .send_vehicle_ctrl_cmd_with_retry (vin_info , b'\x20 ' , rvc_params , False )
243243
244244 def start_ac (self , vin_info : VinInfo ) -> MessageV2 :
245245 rcv_params = []
@@ -258,7 +258,7 @@ def start_ac(self, vin_info: VinInfo) -> MessageV2:
258258 param3 .param_value = b'\x00 '
259259 rcv_params .append (param3 )
260260
261- return self .send_vehicle_ctrl_cmd_with_retry (vin_info , b'\x06 ' , rcv_params )
261+ return self .send_vehicle_ctrl_cmd_with_retry (vin_info , b'\x06 ' , rcv_params , True )
262262
263263 def stop_ac (self , vin_info : VinInfo ) -> MessageV2 :
264264 rcv_params = []
@@ -277,7 +277,7 @@ def stop_ac(self, vin_info: VinInfo) -> MessageV2:
277277 param3 .param_value = b'\x00 '
278278 rcv_params .append (param3 )
279279
280- return self .send_vehicle_ctrl_cmd_with_retry (vin_info , b'\x06 ' , rcv_params )
280+ return self .send_vehicle_ctrl_cmd_with_retry (vin_info , b'\x06 ' , rcv_params , True )
281281
282282 def start_ac_blowing (self , vin_info : VinInfo ) -> MessageV2 :
283283 rcv_params = []
@@ -301,7 +301,7 @@ def start_ac_blowing(self, vin_info: VinInfo) -> MessageV2:
301301 param4 .param_value = b'\x00 '
302302 rcv_params .append (param4 )
303303
304- return self .send_vehicle_ctrl_cmd_with_retry (vin_info , b'\x06 ' , rcv_params )
304+ return self .send_vehicle_ctrl_cmd_with_retry (vin_info , b'\x06 ' , rcv_params , True )
305305
306306 def stop_ac_blowing (self , vin_info : VinInfo ) -> MessageV2 :
307307 rcv_params = []
@@ -325,7 +325,7 @@ def stop_ac_blowing(self, vin_info: VinInfo) -> MessageV2:
325325 param4 .param_value = b'\x00 '
326326 rcv_params .append (param4 )
327327
328- return self .send_vehicle_ctrl_cmd_with_retry (vin_info , b'\x06 ' , rcv_params )
328+ return self .send_vehicle_ctrl_cmd_with_retry (vin_info , b'\x06 ' , rcv_params , True )
329329
330330 def start_front_defrost (self , vin_info : VinInfo ) -> MessageV2 :
331331 rcv_params = []
@@ -349,7 +349,7 @@ def start_front_defrost(self, vin_info: VinInfo) -> MessageV2:
349349 param4 .param_value = b'\x00 '
350350 rcv_params .append (param4 )
351351
352- return self .send_vehicle_ctrl_cmd_with_retry (vin_info , b'\x06 ' , rcv_params )
352+ return self .send_vehicle_ctrl_cmd_with_retry (vin_info , b'\x06 ' , rcv_params , True )
353353
354354 def stop_front_defrost (self , vin_info : VinInfo ) -> MessageV2 :
355355 rcv_params = []
@@ -373,19 +373,37 @@ def stop_front_defrost(self, vin_info: VinInfo) -> MessageV2:
373373 param4 .param_value = b'\x00 '
374374 rcv_params .append (param4 )
375375
376- return self .send_vehicle_ctrl_cmd_with_retry (vin_info , b'\x06 ' , rcv_params )
376+ return self .send_vehicle_ctrl_cmd_with_retry (vin_info , b'\x06 ' , rcv_params , True )
377377
378- def send_vehicle_ctrl_cmd_with_retry (self , vin_info : VinInfo , rvc_req_type : bytes , rvc_params : list ) -> MessageV2 :
378+ def send_vehicle_ctrl_cmd_with_retry (self , vin_info : VinInfo , rvc_req_type : bytes , rvc_params : list ,
379+ has_app_data : bool ) -> MessageV2 :
379380 vehicle_control_cmd_rsp_msg = self .send_vehicle_control_command (vin_info , rvc_req_type , rvc_params )
380- while vehicle_control_cmd_rsp_msg .application_data is None :
381- if vehicle_control_cmd_rsp_msg .body .error_message is not None :
382- self .handle_error (vehicle_control_cmd_rsp_msg .body )
383- else :
384- logging .debug ('API request returned no application data and no error message.' )
385- time .sleep (float (AVG_SMS_DELIVERY_TIME ))
386381
387- vehicle_control_cmd_rsp_msg = self .send_vehicle_control_command (vin_info , rvc_req_type , rvc_params ,
388- vehicle_control_cmd_rsp_msg .body .event_id )
382+ if has_app_data :
383+ while vehicle_control_cmd_rsp_msg .application_data is None :
384+ if vehicle_control_cmd_rsp_msg .body .error_message is not None :
385+ self .handle_error (vehicle_control_cmd_rsp_msg .body )
386+ else :
387+ logging .debug ('API request returned no application data and no error message.' )
388+ time .sleep (float (AVG_SMS_DELIVERY_TIME ))
389+
390+ event_id = vehicle_control_cmd_rsp_msg .body .event_id
391+ vehicle_control_cmd_rsp_msg = self .send_vehicle_control_command (vin_info , rvc_req_type , rvc_params ,
392+ event_id )
393+ else :
394+ retry = 1
395+ while (
396+ vehicle_control_cmd_rsp_msg .body .error_message is not None
397+ and retry <= 3
398+ ):
399+ self .handle_error (vehicle_control_cmd_rsp_msg .body )
400+ event_id = vehicle_control_cmd_rsp_msg .body .event_id
401+ vehicle_control_cmd_rsp_msg = self .send_vehicle_control_command (vin_info , rvc_req_type , rvc_params ,
402+ event_id )
403+ retry += 1
404+ if vehicle_control_cmd_rsp_msg .body .error_message is not None :
405+ raise SaicApiException (vehicle_control_cmd_rsp_msg .body .error_message .decode (),
406+ vehicle_control_cmd_rsp_msg .body .result )
389407 return vehicle_control_cmd_rsp_msg
390408
391409 def get_message_list_with_retry (self ) -> list :
0 commit comments