From e7bdaceaf85c385d147b13854bda75862b46d159 Mon Sep 17 00:00:00 2001 From: Martin Schroeder Date: Thu, 29 Jan 2026 17:25:14 +0000 Subject: [PATCH] fixed write_datapoints --- pyscada/influxdb/models.py | 49 ++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/pyscada/influxdb/models.py b/pyscada/influxdb/models.py index d1396b1..30d9be5 100644 --- a/pyscada/influxdb/models.py +++ b/pyscada/influxdb/models.py @@ -87,33 +87,35 @@ class InfluxDatabase(models.Model): return int(timestamp) def create_data_element_from_variable(self, variable, timestamp, value, **kwargs): - if value is not None: - date_saved = kwargs.get( - "date_saved", - variable.date_saved if hasattr(variable, "date_saved") else now(), - ) + if value is None: + return None + if timestamp is None: + return None + date_saved = kwargs.get( + "date_saved", + variable.date_saved if hasattr(variable, "date_saved") else now(), + ) - # variable_id and device_id had to be a tag to be easily - # filtered by, even if it is an numeric value - logger.debug(f"{variable} {timestamp} {value}") - point = ( - Point(self.measurement_name) - .tag("variable_id", variable.pk) - .tag("device_protocol", variable.device.protocol.protocol) - .tag("device_id", variable.device_id) - .tag("value_class", variable.value_class) - .tag("unit", str(variable.unit)) - .field("value", value) - .field("date_saved", date_saved.timestamp()) - .time(datetime.utcfromtimestamp(timestamp)) - ) - return point - return None + # variable_id and device_id had to be a tag to be easily + # filtered by, even if it is an numeric value + logger.debug(f"{variable} {timestamp} {value}") + point = ( + Point(self.measurement_name) + .tag("variable_id", variable.pk) + .tag("device_protocol", variable.device.protocol.protocol) + .tag("device_id", variable.device_id) + .tag("value_class", variable.value_class) + .tag("unit", str(variable.unit)) + .field("value", value) + .field("date_saved", date_saved.timestamp()) + .time(datetime.utcfromtimestamp(timestamp/1000.0)) + ) + return point def last_datapoint(self, **kwargs): if self.only_write_to_influxdb: django_database = self.get_django_database() - return django_database.last_value(**kwargs) + return django_database.last_datapoint(**kwargs) variable = kwargs.pop("variable") if "variable" in kwargs else None use_date_saved = ( @@ -222,6 +224,7 @@ class InfluxDatabase(models.Model): date_saved = kwargs.pop("date_saved") if "date_saved" in kwargs else now() batch_size = kwargs.pop("batch_size") if "batch_size" in kwargs else 5000 i = 0 + logger.debug(f"write_datapoints {items}") for item in items: logger.debug(f"{item} has {len(item.cached_values_to_write)} to write.") if len(item.cached_values_to_write): @@ -236,7 +239,7 @@ class InfluxDatabase(models.Model): item.date_saved = date_saved # create the recorded data object point = self.create_data_element_from_variable( - item, cached_value[1], cached_value[0], **kwargs + item, cached_value[0], cached_value[1], **kwargs ) if self.only_write_to_influxdb or True: rc = data_model.objects.create_data_element_from_variable(