diff --git a/python_transport/wirepas_gateway/protocol/mqtt_wrapper.py b/python_transport/wirepas_gateway/protocol/mqtt_wrapper.py index 69e10d66..59039e57 100644 --- a/python_transport/wirepas_gateway/protocol/mqtt_wrapper.py +++ b/python_transport/wirepas_gateway/protocol/mqtt_wrapper.py @@ -30,7 +30,9 @@ def __init__(self, settings, logger, on_termination_cb=None, - on_connect_cb=None): + on_connect_cb=None, + last_will_topic=None, + last_will_data=None): Thread.__init__(self) self.daemon = True self.running = False @@ -60,6 +62,9 @@ def __init__(self, settings.mqtt_password) self._client.on_connect = self._on_connect + if last_will_topic is not None and last_will_data is not None: + self._set_last_will(last_will_topic, last_will_data) + try: self._client.connect(settings.mqtt_hostname, settings.mqtt_port, keepalive=MQTTWrapper.KEEP_ALIVE_S) except (socket.gaierror, ValueError) as e: @@ -157,7 +162,7 @@ def _get_socket(self): self._client.socket().setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 2048) return self._client.socket() - def set_last_will(self, topic, data): + def _set_last_will(self, topic, data): # Set Last wil message self._client.will_set(topic, data, qos=2, retain=True) diff --git a/python_transport/wirepas_gateway/transport_service.py b/python_transport/wirepas_gateway/transport_service.py index 69479820..6229f071 100644 --- a/python_transport/wirepas_gateway/transport_service.py +++ b/python_transport/wirepas_gateway/transport_service.py @@ -54,11 +54,17 @@ def __init__( self.whitened_ep_filter = settings.whitened_endpoints_filter + last_will_topic = TopicGenerator.make_status_topic(self.gw_id) + last_will_message = wirepas_messaging.gateway.api.StatusEvent( + self.gw_id, GatewayState.OFFLINE).payload + self.mqtt_wrapper = MQTTWrapper( settings, self.logger, self._on_mqtt_wrapper_termination_cb, - self._on_connect + self._on_connect, + last_will_topic, + last_will_message ) self.mqtt_wrapper.start() @@ -77,10 +83,6 @@ def _on_mqtt_wrapper_termination_cb(self): self.stop_dbus_client() def _set_status(self): - event_offline = wirepas_messaging.gateway.api.StatusEvent( - self.gw_id, GatewayState.OFFLINE - ) - event_online = wirepas_messaging.gateway.api.StatusEvent( self.gw_id, GatewayState.ONLINE ) @@ -88,7 +90,6 @@ def _set_status(self): topic = TopicGenerator.make_status_topic(self.gw_id) self.mqtt_wrapper.publish(topic, event_online.payload, qos=1, retain=True) - self.mqtt_wrapper.set_last_will(topic, event_offline.payload) def _on_connect(self): # Register for get gateway info