1
0
mirror of https://github.com/thingsboard/thingsboard-gateway synced 2025-10-26 22:31:42 +08:00

Fix for feature "sendDataOnlyOnChange" #237

This commit is contained in:
zbeacon
2020-01-22 14:48:48 +02:00
parent 3fe5430897
commit 6702f47396
2 changed files with 37 additions and 20 deletions

View File

@@ -86,6 +86,8 @@ class ModbusConnector(Connector, threading.Thread):
"next_timeseries_check": 0, "next_timeseries_check": 0,
"telemetry": {}, "telemetry": {},
"attributes": {}, "attributes": {},
"last_telemetry": {},
"last_attributes": {}
} }
except Exception as e: except Exception as e:
log.exception(e) log.exception(e)
@@ -125,28 +127,43 @@ class ModbusConnector(Connector, threading.Thread):
log.debug(device_responses) log.debug(device_responses)
converted_data = self.__devices[device]["converter"].convert(config=None, data=device_responses) converted_data = self.__devices[device]["converter"].convert(config=None, data=device_responses)
if (converted_data["telemetry"] != self.__devices[device]["telemetry"] \ if self.__devices[device]["config"].get("sendDataOnlyOnChange"):
or converted_data["attributes"] != self.__devices[device]["attributes"]) \
and self.__devices[device]["config"].get("sendDataOnlyOnChange") == True:
self.statistics['MessagesReceived'] += 1 self.statistics['MessagesReceived'] += 1
to_send = {"deviceName": converted_data["deviceName"], "deviceType": converted_data["deviceType"]} to_send = {"deviceName": converted_data["deviceName"], "deviceType": converted_data["deviceType"]}
if converted_data["telemetry"] != self.__devices[device]["telemetry"]: if to_send.get("telemetry") is None:
self.__devices[device]["last_telemetry"] = converted_data["telemetry"] to_send["telemetry"] = []
to_send["telemetry"] = converted_data["telemetry"] if to_send.get("attributes") is None:
if converted_data["attributes"] != self.__devices[device]["attributes"]: to_send["attributes"] = []
self.__devices[device]["last_telemetry"] = converted_data["attributes"] for telemetry_dict in converted_data["telemetry"]:
to_send["attributes"] = converted_data["attributes"] for key, value in telemetry_dict.items():
self.__gateway.send_to_storage(self.get_name(), to_send) if self.__devices[device]["last_telemetry"].get(key) is None or \
self.statistics['MessagesSent'] += 1 self.__devices[device]["last_telemetry"][key] != value:
elif self.__devices[device]["config"].get("sendDataOnlyOnChange") is None or self.__devices[device]["config"].get("sendDataOnlyOnChange") == False: 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 self.statistics['MessagesReceived'] += 1
to_send = {"deviceName": converted_data["deviceName"], "deviceType": converted_data["deviceType"]} to_send = {"deviceName": converted_data["deviceName"], "deviceType": converted_data["deviceType"]}
if converted_data["telemetry"] != self.__devices[device]["telemetry"]: # if converted_data["telemetry"] != self.__devices[device]["telemetry"]:
self.__devices[device]["last_telemetry"] = converted_data["telemetry"] self.__devices[device]["last_telemetry"] = converted_data["telemetry"]
to_send["telemetry"] = converted_data["telemetry"] to_send["telemetry"] = converted_data["telemetry"]
if converted_data["attributes"] != self.__devices[device]["attributes"]: # if converted_data["attributes"] != self.__devices[device]["attributes"]:
self.__devices[device]["last_telemetry"] = converted_data["attributes"] self.__devices[device]["last_telemetry"] = converted_data["attributes"]
to_send["attributes"] = converted_data["attributes"] to_send["attributes"] = converted_data["attributes"]
self.__gateway.send_to_storage(self.get_name(), to_send) self.__gateway.send_to_storage(self.get_name(), to_send)
self.statistics['MessagesSent'] += 1 self.statistics['MessagesSent'] += 1
except ConnectionException: except ConnectionException:

View File

@@ -79,9 +79,9 @@ class TBGatewayService:
self._load_connectors(config) self._load_connectors(config)
self._connect_with_connectors() self._connect_with_connectors()
self.__remote_configurator = None self.__remote_configurator = None
self.__request_config_after_connect = False
if config["thingsboard"].get("remoteConfiguration"): if config["thingsboard"].get("remoteConfiguration"):
try: try:
self.__request_config_after_connect = False
self.__remote_configurator = RemoteConfigurator(self, config) self.__remote_configurator = RemoteConfigurator(self, config)
except Exception as e: except Exception as e:
log.exception(e) log.exception(e)
@@ -109,7 +109,7 @@ class TBGatewayService:
except Exception as e: except Exception as e:
log.exception(e) log.exception(e)
break 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.tb_client.is_connected() and not self.tb_client.client.get_subscriptions_in_progress():
self.__request_config_after_connect = True self.__request_config_after_connect = True
self.__check_shared_attributes() self.__check_shared_attributes()