@@ -70,6 +70,7 @@ async def __run_loop(self) -> None:
7070 topic = self .get_topic (mqtt_topics .INTERNAL_LWT , False ),
7171 payload = "offline" ,
7272 retain = True ,
73+ qos = 1 ,
7374 ),
7475 )
7576 client .pending_calls_threshold = 150
@@ -220,19 +221,23 @@ async def __on_message_real(self, *, topic: str, payload: str) -> None:
220221 vin = vin , topic = topic , payload = payload
221222 )
222223
223- def __publish (self , topic : str , payload : Any ) -> None :
224+ def __publish (
225+ self , topic : str , payload : Any , retain : bool = False , qos : int = 0
226+ ) -> None :
224227 LOG .debug ("Publishing to MQTT topic %s with payload %s" , topic , payload )
225228 loop = asyncio .get_running_loop ()
226229 asyncio .run_coroutine_threadsafe (
227- self .__async_publish (topic , payload , retain = True ), loop
230+ self .__async_publish (topic , payload , retain = retain , qos = qos ), loop
228231 )
229232
230- async def __async_publish (self , topic : str , payload : Any , retain : bool ) -> None :
233+ async def __async_publish (
234+ self , topic : str , payload : Any , retain : bool , qos : int
235+ ) -> None :
231236 if not (self .client and self .is_connected ()):
232237 LOG .error ("Failed to publish: MQTT client is not connected" )
233238 return
234239 try :
235- await self .client .publish (topic , payload , retain )
240+ await self .client .publish (topic , payload , retain = retain , qos = qos )
236241 except aiomqtt .MqttError as e :
237242 LOG .error (
238243 f"Failed to publish to MQTT topic { topic } with payload { payload } : { e } "
@@ -244,30 +249,76 @@ def is_connected(self) -> bool:
244249
245250 @override
246251 def publish_json (
247- self , key : str , data : dict [str , Any ], no_prefix : bool = False
252+ self ,
253+ key : str ,
254+ data : dict [str , Any ],
255+ no_prefix : bool = False ,
256+ retain : bool = False ,
257+ qos : int = 0 ,
248258 ) -> None :
249259 payload = self .dict_to_anonymized_json (data )
250- self .__publish (topic = self .get_topic (key , no_prefix ), payload = payload )
260+ self .__publish (
261+ topic = self .get_topic (key , no_prefix ),
262+ payload = payload ,
263+ retain = retain ,
264+ qos = qos ,
265+ )
251266
252267 @override
253- def publish_str (self , key : str , value : str , no_prefix : bool = False ) -> None :
254- self .__publish (topic = self .get_topic (key , no_prefix ), payload = value )
268+ def publish_str (
269+ self ,
270+ key : str ,
271+ value : str ,
272+ no_prefix : bool = False ,
273+ retain : bool = False ,
274+ qos : int = 0 ,
275+ ) -> None :
276+ self .__publish (
277+ topic = self .get_topic (key , no_prefix ), payload = value , retain = retain , qos = qos
278+ )
255279
256280 @override
257- def publish_int (self , key : str , value : int , no_prefix : bool = False ) -> None :
258- self .__publish (topic = self .get_topic (key , no_prefix ), payload = value )
281+ def publish_int (
282+ self ,
283+ key : str ,
284+ value : int ,
285+ no_prefix : bool = False ,
286+ retain : bool = False ,
287+ qos : int = 0 ,
288+ ) -> None :
289+ self .__publish (
290+ topic = self .get_topic (key , no_prefix ), payload = value , retain = retain , qos = qos
291+ )
259292
260293 @override
261- def publish_bool (self , key : str , value : bool , no_prefix : bool = False ) -> None :
262- self .__publish (topic = self .get_topic (key , no_prefix ), payload = value )
294+ def publish_bool (
295+ self ,
296+ key : str ,
297+ value : bool ,
298+ no_prefix : bool = False ,
299+ retain : bool = False ,
300+ qos : int = 0 ,
301+ ) -> None :
302+ self .__publish (
303+ topic = self .get_topic (key , no_prefix ), payload = value , retain = retain , qos = qos
304+ )
263305
264306 @override
265- def publish_float (self , key : str , value : float , no_prefix : bool = False ) -> None :
266- self .__publish (topic = self .get_topic (key , no_prefix ), payload = value )
307+ def publish_float (
308+ self ,
309+ key : str ,
310+ value : float ,
311+ no_prefix : bool = False ,
312+ retain : bool = False ,
313+ qos : int = 0 ,
314+ ) -> None :
315+ self .__publish (
316+ topic = self .get_topic (key , no_prefix ), payload = value , retain = retain , qos = qos
317+ )
267318
268319 @override
269- def clear_topic (self , key : str , no_prefix : bool = False ) -> None :
270- self .__publish (topic = self .get_topic (key , no_prefix ), payload = None )
320+ def clear_topic (self , key : str , no_prefix : bool = False , qos : int = 0 ) -> None :
321+ self .__publish (topic = self .get_topic (key , no_prefix ), payload = None , qos = qos )
271322
272323 def get_vin_from_topic (self , topic : str ) -> str :
273324 global_topic_removed = topic [len (self .configuration .mqtt_topic ) + 1 :]
0 commit comments