@@ -220,19 +220,23 @@ async def __on_message_real(self, *, topic: str, payload: str) -> None:
220220 vin = vin , topic = topic , payload = payload
221221 )
222222
223- def __publish (self , topic : str , payload : Any ) -> None :
223+ def __publish (
224+ self , topic : str , payload : Any , retain : bool = False , qos : int = 0
225+ ) -> None :
224226 LOG .debug ("Publishing to MQTT topic %s with payload %s" , topic , payload )
225227 loop = asyncio .get_running_loop ()
226228 asyncio .run_coroutine_threadsafe (
227- self .__async_publish (topic , payload , retain = True ), loop
229+ self .__async_publish (topic , payload , retain = retain , qos = qos ), loop
228230 )
229231
230- async def __async_publish (self , topic : str , payload : Any , retain : bool ) -> None :
232+ async def __async_publish (
233+ self , topic : str , payload : Any , retain : bool , qos : int
234+ ) -> None :
231235 if not (self .client and self .is_connected ()):
232236 LOG .error ("Failed to publish: MQTT client is not connected" )
233237 return
234238 try :
235- await self .client .publish (topic , payload , retain )
239+ await self .client .publish (topic , payload , retain = retain , qos = qos )
236240 except aiomqtt .MqttError as e :
237241 LOG .error (
238242 f"Failed to publish to MQTT topic { topic } with payload { payload } : { e } "
@@ -244,30 +248,76 @@ def is_connected(self) -> bool:
244248
245249 @override
246250 def publish_json (
247- self , key : str , data : dict [str , Any ], no_prefix : bool = False
251+ self ,
252+ key : str ,
253+ data : dict [str , Any ],
254+ no_prefix : bool = False ,
255+ retain : bool = False ,
256+ qos : int = 0 ,
248257 ) -> None :
249258 payload = self .dict_to_anonymized_json (data )
250- self .__publish (topic = self .get_topic (key , no_prefix ), payload = payload )
259+ self .__publish (
260+ topic = self .get_topic (key , no_prefix ),
261+ payload = payload ,
262+ retain = retain ,
263+ qos = qos ,
264+ )
251265
252266 @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 )
267+ def publish_str (
268+ self ,
269+ key : str ,
270+ value : str ,
271+ no_prefix : bool = False ,
272+ retain : bool = False ,
273+ qos : int = 0 ,
274+ ) -> None :
275+ self .__publish (
276+ topic = self .get_topic (key , no_prefix ), payload = value , retain = retain , qos = qos
277+ )
255278
256279 @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 )
280+ def publish_int (
281+ self ,
282+ key : str ,
283+ value : int ,
284+ no_prefix : bool = False ,
285+ retain : bool = False ,
286+ qos : int = 0 ,
287+ ) -> None :
288+ self .__publish (
289+ topic = self .get_topic (key , no_prefix ), payload = value , retain = retain , qos = qos
290+ )
259291
260292 @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 )
293+ def publish_bool (
294+ self ,
295+ key : str ,
296+ value : bool ,
297+ no_prefix : bool = False ,
298+ retain : bool = False ,
299+ qos : int = 0 ,
300+ ) -> None :
301+ self .__publish (
302+ topic = self .get_topic (key , no_prefix ), payload = value , retain = retain , qos = qos
303+ )
263304
264305 @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 )
306+ def publish_float (
307+ self ,
308+ key : str ,
309+ value : float ,
310+ no_prefix : bool = False ,
311+ retain : bool = False ,
312+ qos : int = 0 ,
313+ ) -> None :
314+ self .__publish (
315+ topic = self .get_topic (key , no_prefix ), payload = value , retain = retain , qos = qos
316+ )
267317
268318 @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 )
319+ def clear_topic (self , key : str , no_prefix : bool = False , qos : int = 0 ) -> None :
320+ self .__publish (topic = self .get_topic (key , no_prefix ), payload = None , qos = qos )
271321
272322 def get_vin_from_topic (self , topic : str ) -> str :
273323 global_topic_removed = topic [len (self .configuration .mqtt_topic ) + 1 :]
0 commit comments