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:
@@ -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:
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user