83 lines
3.0 KiB
Python
Executable File
83 lines
3.0 KiB
Python
Executable File
from django.db import models
|
|
from django.forms.models import BaseInlineFormSet
|
|
from django.core.exceptions import ValidationError
|
|
|
|
from pyscada.models import DataSource, DataSourceModel, Variable
|
|
|
|
from time import time
|
|
import random
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class LoggingRandomDataSourceExample(models.Model):
|
|
datasource = models.OneToOneField(DataSource, on_delete=models.CASCADE)
|
|
random_min = models.PositiveSmallIntegerField(default=0)
|
|
random_max = models.PositiveSmallIntegerField(default=10)
|
|
|
|
interval_ms = 10000
|
|
|
|
def __str__(self):
|
|
return f"LoggingRandomDataSourceExample-{self.random_min}-{self.random_max}"
|
|
|
|
def last_value(self, **kwargs):
|
|
value = None
|
|
if "variable" in kwargs:
|
|
value = random.uniform(self.random_min, self.random_max)
|
|
variable = kwargs["variable"]
|
|
logger.info(
|
|
f"LoggingRandomDataSourceExample - read value from datasource - {variable} : {value}"
|
|
)
|
|
else:
|
|
logger.info(
|
|
f"LoggingRandomDataSourceExample - read value from datasource - missing variable in kwargs"
|
|
)
|
|
return [time()*1000, value]
|
|
|
|
def read_multiple(self, **kwargs):
|
|
variable_ids = kwargs.pop("variable_ids") if "variable_ids" in kwargs else []
|
|
time_min = kwargs.pop("time_min") if "time_min" in kwargs else 0
|
|
time_max = kwargs.pop("time_max") if "time_max" in kwargs else time.time()
|
|
time_in_ms = kwargs.pop("time_in_ms") if "time_in_ms" in kwargs else True
|
|
query_first_value = (
|
|
kwargs.pop("query_first_value") if "query_first_value" in kwargs else False
|
|
)
|
|
variable_ids = self.datasource.datasource_check(
|
|
variable_ids, items_as_id=True, ids_model=Variable
|
|
)
|
|
|
|
values = {"timestamp": time() * 1000, "date_saved_max": time() * 1000}
|
|
for variable_id in variable_ids:
|
|
values[variable_id] = []
|
|
kwargs["variable"] = Variable.objects.get(id=variable_id)
|
|
for t in range(int(time_min*1000), int(time_max*1000), self.interval_ms):
|
|
value = random.uniform(self.random_min, self.random_max)
|
|
values[variable_id].append([t, value])
|
|
|
|
return values
|
|
|
|
def write_multiple(self, **kwargs):
|
|
items = kwargs.pop("items") if "items" in kwargs else []
|
|
items = self.datasource.datasource_check(items)
|
|
|
|
for item in items:
|
|
self.datasource._send_cov_notification(item)
|
|
logger.info(
|
|
f"LoggingRandomDataSourceExample - write readed value to datasource - {item} : {item.cached_values_to_write}"
|
|
)
|
|
|
|
def get_first_element_timestamp(self, **kwargs):
|
|
t = time()
|
|
logger.info(
|
|
f"LoggingRandomDataSourceExample - get_first_element_timestamp - {t}"
|
|
)
|
|
return time()
|
|
|
|
def get_last_element_timestamp(self, **kwargs):
|
|
t = time()
|
|
logger.info(
|
|
f"LoggingRandomDataSourceExample - get_last_element_timestamp - {t}"
|
|
)
|
|
return t
|