示例#1
0
    def get_30p_data(self, dttm_from=date.today() - timedelta(1), dttm_to=date.today()):

        res = {'prm_num': self.prmnum,
               'prm_name': self.prmname,
               'ctrl_tm': {}, }
        # Запрос исторических данных телеметрии в базе
        d_list = pcs_source._hist_data('hist_' + self.ms_accronim.lower(), self.prmnum, dttm_from, dttm_to)
        if len(d_list) == 0:
            return res
        # >
        # Берем первый замер, переносим в буфер
        buf_t, buf_v = d_list.pop(0)
        # Находим первую метку времени получасовки и инициализируем накопитель нулем
        buf_30t = round_tm_30_up(buf_t)
        res['ctrl_tm'][buf_30t] = 0
        for item in d_list:
            if item.dt > buf_30t:
                # Если перешагнули получасовку
                res['ctrl_tm'][buf_30t] += delta_e(buf_v, buf_t, buf_30t) * 2
                buf_t = buf_30t
                buf_30t = round_tm_30_up(item.dt)
                res['ctrl_tm'][buf_30t] = 0
            else:
                # Если не перешагнули получасовку
                res['ctrl_tm'][buf_30t] += delta_e(buf_v, buf_t, item.dt) * 2
                buf_t, buf_v = item
        # Запрос получасовок в базе данных АИИС КУЭ
        askue_dict = askue_source._30p_data(self.enh_addr, dttm_from, dttm_to + timedelta(minutes=15))
        for key, val in res['ctrl_tm'].items():
            askue_val = askue_dict.get(key, None)
            if askue_val:
                res['ctrl_tm'][key] = '{}</br>-----</br>{}'.format(round(val), round(askue_val))
            else:
                res['ctrl_tm'][key] = '{}</br>-----</br>{}'.format(round(val), '-')
        return res
示例#2
0
    def get_30p_data(self,
                     dttm_from=date.today() - timedelta(1),
                     dttm_to=date.today()):

        res = {
            'prm_num': self.prmnum,
            'prm_name': self.prmname,
            'ctrl_tm': {},
        }
        # Запрос исторических данных телеметрии в базе
        d_list = pcs_source._hist_data('hist_' + self.ms_accronim.lower(),
                                       self.prmnum, dttm_from, dttm_to)
        if len(d_list) == 0:
            return res
        # >
        # Берем первый замер, переносим в буфер
        buf_t, buf_v = d_list.pop(0)
        # Находим первую метку времени получасовки и инициализируем накопитель нулем
        buf_30t = round_tm_30_up(buf_t)
        res['ctrl_tm'][buf_30t] = 0
        for item in d_list:
            if item.dt > buf_30t:
                # Если перешагнули получасовку
                res['ctrl_tm'][buf_30t] += delta_e(buf_v, buf_t, buf_30t) * 2
                buf_t = buf_30t
                buf_30t = round_tm_30_up(item.dt)
                res['ctrl_tm'][buf_30t] = 0
            else:
                # Если не перешагнули получасовку
                res['ctrl_tm'][buf_30t] += delta_e(buf_v, buf_t, item.dt) * 2
                buf_t, buf_v = item
        # Запрос получасовок в базе данных АИИС КУЭ
        askue_dict = askue_source._30p_data(self.enh_addr, dttm_from,
                                            dttm_to + timedelta(minutes=15))
        for key, val in res['ctrl_tm'].items():
            askue_val = askue_dict.get(key, None)
            if askue_val:
                res['ctrl_tm'][key] = '{}</br>-----</br>{}'.format(
                    round(val), round(askue_val))
            else:
                res['ctrl_tm'][key] = '{}</br>-----</br>{}'.format(
                    round(val), '-')
        return res
示例#3
0
 def prepare(self, dtfrom_str, dtto_str):
     """
     Prepare content of Report
     """
     # Calculate time_row
     dtfrom = datetime.strptime(dtfrom_str, "%d.%m.%Y %H:%M")
     dtto = datetime.strptime(dtto_str, "%d.%m.%Y %H:%M")
     res = {
         'rtitles': [],
         'content': [],
     }
     if dtfrom > dtto:
         return res
     if self.rtype == 'hs':
         #  Округление до часа
         dttemp = datetime(dtfrom.year, dtfrom.month, dtfrom.day, dtfrom.hour)
         if dttemp == dtfrom:
             res['rtitles'].append(dttemp)
         #  Заполнение заголовков
         while dttemp <= dtto:
             dttemp += timedelta(hours=1)
             if dttemp <= dtto:
                 res['rtitles'].append(dttemp)
         for band in self.bands.all():
             prm = Param.objects.get(pk=band.param_num)
             hist_data = prm.get_slice_data(dtfrom, dtto)
             hrow = []
             for tm in res['rtitles']:
                 tv = hist_data['ctrl_tm'].get(tm, '-')
                 if tv != '-':
                     tv = tv.v
                 hrow.append(tv)
             res['content'].append([band.name, ] + hrow)
     elif self.rtype == 'ahh':
         dttemp = round_tm_30_up(dtfrom)
         #  Заполнение заголовков
         res['rtitles'].append(dttemp)
         while dttemp <= dtto:
             dttemp += timedelta(minutes=30)
             res['rtitles'].append(dttemp)
         for band in self.bands.all():
             prm = Param.objects.get(pk=band.param_num)
             # Интервал берем заведомо больший, чтобы учесть ведущие и завершающие дельты
             hist_data = prm.get_30p_data(dtfrom - timedelta(minutes=30), dtto + timedelta(minutes=30))
             hrow = []
             for tm in res['rtitles']:
                 tv = hist_data['ctrl_tm'].get(tm, '-')
                 hrow.append(tv)
             res['content'].append([band.name, ] + hrow)
     return res