34 lines
1.7 KiB
Python
34 lines
1.7 KiB
Python
from django.db import models
|
||
from datetime import datetime, timedelta
|
||
# select UNIX_TIMESTAMP(datetime), level_percentage, radar_low_reg, status_reg from tcs
|
||
|
||
|
||
class MbTankRecord(models.Model):
|
||
dt = models.DateTimeField(verbose_name="Время записи", default=datetime.now)
|
||
radar_raw = models.PositiveIntegerField(verbose_name="Уровень воды по радару радара")
|
||
level = models.PositiveSmallIntegerField(verbose_name="Уровень воды в % (пересчитан ПЛК)")
|
||
status = models.PositiveSmallIntegerField(verbose_name="Регистр статуса")
|
||
|
||
def __str__(self):
|
||
return f"({self.id}) {self.dt}: radar={self.radar_raw}, level={self.level}"
|
||
|
||
@staticmethod
|
||
def load_stats():
|
||
result = {
|
||
'last_update': None, # последнее обновление, unix time
|
||
'level': None, # текущее показание, пересчитанное в %
|
||
'radar': None, # текущее показание с радара
|
||
'status': None, # статусный регистр
|
||
'last_radar_values': [] # последние показания за 15 минут
|
||
}
|
||
|
||
last_save = MbTankRecord.objects.order_by('-dt').first()
|
||
if last_save is not None:
|
||
result['last_update'] = last_save.dt.timestamp()
|
||
result['level'] = last_save.level
|
||
result['radar'] = last_save.radar_raw / 10000
|
||
result['status'] = last_save.status
|
||
query = MbTankRecord.objects.filter(dt__gt=(datetime.now() - timedelta(minutes=15))).order_by('dt')
|
||
result['last_radar_values'] = [(int(item.dt.timestamp()), item.radar_raw) for item in query]
|
||
return result
|