diff --git a/thingsboard_gateway/connectors/modbus/modbus_connector.py b/thingsboard_gateway/connectors/modbus/modbus_connector.py index 1784c0a8..a811697e 100644 --- a/thingsboard_gateway/connectors/modbus/modbus_connector.py +++ b/thingsboard_gateway/connectors/modbus/modbus_connector.py @@ -86,6 +86,8 @@ class ModbusConnector(Connector, threading.Thread): "next_timeseries_check": 0, "telemetry": {}, "attributes": {}, + "last_telemetry": {}, + "last_attributes": {} } except Exception as e: log.exception(e) @@ -125,28 +127,43 @@ class ModbusConnector(Connector, threading.Thread): log.debug(device_responses) converted_data = self.__devices[device]["converter"].convert(config=None, data=device_responses) - if (converted_data["telemetry"] != self.__devices[device]["telemetry"] \ - or converted_data["attributes"] != self.__devices[device]["attributes"]) \ - and self.__devices[device]["config"].get("sendDataOnlyOnChange") == True: + if self.__devices[device]["config"].get("sendDataOnlyOnChange"): self.statistics['MessagesReceived'] += 1 to_send = {"deviceName": converted_data["deviceName"], "deviceType": converted_data["deviceType"]} - if converted_data["telemetry"] != self.__devices[device]["telemetry"]: - self.__devices[device]["last_telemetry"] = converted_data["telemetry"] - to_send["telemetry"] = converted_data["telemetry"] - if converted_data["attributes"] != self.__devices[device]["attributes"]: - self.__devices[device]["last_telemetry"] = converted_data["attributes"] - to_send["attributes"] = converted_data["attributes"] - self.__gateway.send_to_storage(self.get_name(), to_send) - self.statistics['MessagesSent'] += 1 - elif self.__devices[device]["config"].get("sendDataOnlyOnChange") is None or self.__devices[device]["config"].get("sendDataOnlyOnChange") == False: + if to_send.get("telemetry") is None: + to_send["telemetry"] = [] + if to_send.get("attributes") is None: + to_send["attributes"] = [] + for telemetry_dict in converted_data["telemetry"]: + for key, value in telemetry_dict.items(): + if self.__devices[device]["last_telemetry"].get(key) is None or \ + self.__devices[device]["last_telemetry"][key] != value: + self.__devices[device]["last_telemetry"][key] = value + to_send["telemetry"].append({key: value}) + for attribute_dict in converted_data["attributes"]: + for key, value in attribute_dict.items(): + if self.__devices[device]["last_attributes"].get(key) is None or \ + self.__devices[device]["last_attributes"][key] != value: + self.__devices[device]["last_attributes"][key] = value + to_send["attributes"].append({key: value}) + # to_send["telemetry"] = converted_data["telemetry"] + # if converted_data["attributes"] != self.__devices[device]["attributes"]: + # self.__devices[device]["last_attributes"] = converted_data["attributes"] + # to_send["attributes"] = converted_data["attributes"] + if to_send.get("attributes") is not None or to_send.get("telemetry"): + self.__gateway.send_to_storage(self.get_name(), to_send) + self.statistics['MessagesSent'] += 1 + else: + log.debug("Data has not been changed.") + elif self.__devices[device]["config"].get("sendDataOnlyOnChange") is None or not self.__devices[device]["config"].get("sendDataOnlyOnChange"): self.statistics['MessagesReceived'] += 1 to_send = {"deviceName": converted_data["deviceName"], "deviceType": converted_data["deviceType"]} - if converted_data["telemetry"] != self.__devices[device]["telemetry"]: - self.__devices[device]["last_telemetry"] = converted_data["telemetry"] - to_send["telemetry"] = converted_data["telemetry"] - if converted_data["attributes"] != self.__devices[device]["attributes"]: - self.__devices[device]["last_telemetry"] = converted_data["attributes"] - to_send["attributes"] = converted_data["attributes"] + # if converted_data["telemetry"] != self.__devices[device]["telemetry"]: + self.__devices[device]["last_telemetry"] = converted_data["telemetry"] + to_send["telemetry"] = converted_data["telemetry"] + # if converted_data["attributes"] != self.__devices[device]["attributes"]: + self.__devices[device]["last_telemetry"] = converted_data["attributes"] + to_send["attributes"] = converted_data["attributes"] self.__gateway.send_to_storage(self.get_name(), to_send) self.statistics['MessagesSent'] += 1 except ConnectionException: diff --git a/thingsboard_gateway/gateway/tb_gateway_service.py b/thingsboard_gateway/gateway/tb_gateway_service.py index 8e22034c..799f7d00 100644 --- a/thingsboard_gateway/gateway/tb_gateway_service.py +++ b/thingsboard_gateway/gateway/tb_gateway_service.py @@ -79,9 +79,9 @@ class TBGatewayService: self._load_connectors(config) self._connect_with_connectors() self.__remote_configurator = None + self.__request_config_after_connect = False if config["thingsboard"].get("remoteConfiguration"): try: - self.__request_config_after_connect = False self.__remote_configurator = RemoteConfigurator(self, config) except Exception as e: log.exception(e) @@ -109,7 +109,7 @@ class TBGatewayService: except Exception as e: log.exception(e) break - if self.__remote_configurator is not None and not self.__request_config_after_connect and \ + if not self.__request_config_after_connect and \ self.tb_client.is_connected() and not self.tb_client.client.get_subscriptions_in_progress(): self.__request_config_after_connect = True self.__check_shared_attributes()