From 3c5e47050d2a6b5e08501af43c51cb8190a9ab26 Mon Sep 17 00:00:00 2001 From: zbeacon Date: Tue, 1 Sep 2020 15:17:23 +0300 Subject: [PATCH] Added quality of service(qos) parameter in tb_gateway.yaml qos can be 0 or 1 --- thingsboard_gateway/config/tb_gateway.yaml | 1 + thingsboard_gateway/gateway/tb_client.py | 2 +- thingsboard_gateway/tb_client/tb_device_mqtt.py | 11 ++++++----- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/thingsboard_gateway/config/tb_gateway.yaml b/thingsboard_gateway/config/tb_gateway.yaml index a1d8fc86..1a3c0325 100644 --- a/thingsboard_gateway/config/tb_gateway.yaml +++ b/thingsboard_gateway/config/tb_gateway.yaml @@ -5,6 +5,7 @@ thingsboard: remoteConfiguration: false security: accessToken: PUT_YOUR_GW_ACCESS_TOKEN_HERE + qos: 1 storage: type: memory read_records_count: 100 diff --git a/thingsboard_gateway/gateway/tb_client.py b/thingsboard_gateway/gateway/tb_client.py index ea23b252..4bd60694 100644 --- a/thingsboard_gateway/gateway/tb_client.py +++ b/thingsboard_gateway/gateway/tb_client.py @@ -30,7 +30,7 @@ class TBClient(threading.Thread): self.__config = config self.__host = config["host"] self.__port = config.get("port", 1883) - self.__default_quality_of_service = config.get("qos",1) + self.__default_quality_of_service = config.get("qos", 1) credentials = config["security"] self.__min_reconnect_delay = 1 self.__tls = bool(credentials.get('tls', False) or credentials.get('caCert', False)) diff --git a/thingsboard_gateway/tb_client/tb_device_mqtt.py b/thingsboard_gateway/tb_client/tb_device_mqtt.py index cc087970..2d3f1bde 100644 --- a/thingsboard_gateway/tb_client/tb_device_mqtt.py +++ b/thingsboard_gateway/tb_client/tb_device_mqtt.py @@ -235,8 +235,7 @@ class TBDeviceMqttClient: self._client.reconnect_delay_set(min_delay, max_delay) def send_rpc_reply(self, req_id, resp, quality_of_service=None, wait_for_publish=False): - if quality_of_service is None: - quality_of_service = self.__default_quality_of_service + quality_of_service = quality_of_service if quality_of_service is not None else self.__default_quality_of_service if quality_of_service not in (0, 1): log.error("Quality of service (qos) value must be 0 or 1") return None @@ -252,7 +251,7 @@ class TBDeviceMqttClient: payload = {"method": method, "params": params} self._client.publish(RPC_REQUEST_TOPIC + str(rpc_request_id), dumps(payload), - qos=1) + qos=self.__default_quality_of_service) def set_server_side_rpc_request_handler(self, handler): self.__device_on_server_side_rpc_response = handler @@ -266,12 +265,14 @@ class TBDeviceMqttClient: raise TBQoSException("Quality of service (qos) value must be 0 or 1") return TBPublishInfo(self._client.publish(topic, data, qos)) - def send_telemetry(self, telemetry, quality_of_service=1): + def send_telemetry(self, telemetry, quality_of_service=None): + quality_of_service = quality_of_service if quality_of_service is not None else self.__default_quality_of_service if not isinstance(telemetry, list) and not (isinstance(telemetry, dict) and telemetry.get("ts") is not None): telemetry = [telemetry] return self.publish_data(telemetry, TELEMETRY_TOPIC, quality_of_service) - def send_attributes(self, attributes, quality_of_service=1): + def send_attributes(self, attributes, quality_of_service=None): + quality_of_service = quality_of_service if quality_of_service is not None else self.__default_quality_of_service return self.publish_data(attributes, ATTRIBUTES_TOPIC, quality_of_service) def unsubscribe_from_attribute(self, subscription_id):