Временной сдвиг на графике

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
tpa58
Сообщения: 2
Зарегистрирован: Ср окт 02, 2013 8:06 am
Благодарил (а): 0
Поблагодарили: 0

Временной сдвиг на графике

Сообщение tpa58 » Ср окт 02, 2013 12:11 pm

Такая проблема - формирую график следующим запросом:

Код: Выделить всё

<img src="/pChart/?p=GRU2-1.I1&type=1h&unit=А">
график получаю, но с отставанием значений на 40 минут. Т.е. ось времени полностью корректна, но точки на графике смещены влево. Временная зона выставлена, с временем системы (Windows, MajorDoMo обновлен) совпадает. В истории переменной время правильное...
Вложения
Graph.jpg
Graph.jpg (87.22 КБ) 7114 просмотров
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Временной сдвиг на графике

Сообщение sergejey » Ср окт 02, 2013 12:45 pm

очень и очень странно. так сходу даже предположить не могу в чём может быть дело. если в истории значений время правильное, то и тут должно быть нормально всё. а что выводится если открыть в браузере:
/pChart/?p=GRU2-1.I1&type=1h&unit=А&op=log
?

по идее выведется история, но если она корректная, то надо копать дальше.
в общем, сделайте пожалуйста вывод графика и плюс историю переменной как я написал (можно в текстовом файле если значений много) -- чтобы можно было сопоставить одно с другим.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
tpa58
Сообщения: 2
Зарегистрирован: Ср окт 02, 2013 8:06 am
Благодарил (а): 0
Поблагодарили: 0

Re: Временной сдвиг на графике

Сообщение tpa58 » Чт окт 03, 2013 8:15 am

График и история переменной:

Код: Выделить всё

2013-10-03 09:04:25: 79.5
2013-10-03 09:03:05: 75.4
2013-10-03 09:01:45: 78.9
2013-10-03 09:00:24: 68.3
2013-10-03 08:59:04: 58.3
2013-10-03 08:57:44: 83.4
2013-10-03 08:56:24: 78.7
2013-10-03 08:55:03: 84.3
2013-10-03 08:53:43: 87.3
2013-10-03 08:52:23: 79.5
2013-10-03 08:51:02: 77.7
2013-10-03 08:49:42: 77.8
2013-10-03 08:48:21: 88.7
2013-10-03 08:47:01: 67.4
2013-10-03 08:45:41: 60.2
2013-10-03 08:44:20: 84.5
2013-10-03 08:43:00: 83.2
2013-10-03 08:41:40: 59.9
2013-10-03 08:40:27: 59.5
2013-10-03 08:39:07: 56.5
2013-10-03 08:37:47: 56.6
2013-10-03 08:36:27: 82
2013-10-03 08:35:06: 66
2013-10-03 08:33:46: 56.5
2013-10-03 08:32:25: 53.7
2013-10-03 08:31:05: 57.1
2013-10-03 08:29:45: 61.2
2013-10-03 08:28:25: 24.4
2013-10-03 08:27:05: 25.2
2013-10-03 08:25:45: 13.5
2013-10-03 08:24:26: 10.6
2013-10-03 08:23:08: 10.3
2013-10-03 08:21:50: 10.3
2013-10-03 08:20:32: 10.3
2013-10-03 08:19:14: 11.4
2013-10-03 08:17:56: 8.8
2013-10-03 08:16:38: 8.8
2013-10-03 08:15:20: 8.5
2013-10-03 08:14:02: 8.8
2013-10-03 08:12:44: 8.3
2013-10-03 08:11:25: 8.5
2013-10-03 08:10:07: 8.8
2013-10-03 08:08:49: 9.5
2013-10-03 08:07:31: 9.5
2013-10-03 08:06:12: 9.7
Заметил еще одну особенность, из-за отсутствия питания система не работала, после включения отставания графика было примерно на 1 час, постепенно сократилось до 40 минут...
Вложения
Graph.jpg
Graph.jpg (86.08 КБ) 7073 просмотра
martynovis
Сообщения: 7
Зарегистрирован: Пн сен 16, 2013 9:53 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Временной сдвиг на графике

Сообщение martynovis » Чт окт 03, 2013 10:47 am

Тоже периодически графики как будто сдвигаются на 50% влево. Но бывает не всегда. И текущие показания по середине графика +-. хотя в базе все ок.
ksgroup
Сообщения: 135
Зарегистрирован: Ср дек 19, 2012 10:35 am
Откуда: Ukraine/Kiev
Благодарил (а): 7 раз
Поблагодарили: 14 раз

Re: Временной сдвиг на графике

Сообщение ksgroup » Вт окт 08, 2013 9:50 am

Покопавшись в скрипте генерирующем данные для построения графика обнаружил что если в данных имеется "провал" в значениях. Ну в смысле у вас значения в базу писались скажем раз в 10 минут, а потом вдруг по каким то причинам не заполнялись в течении какого то времени и после этого вновь начали заполняться в базу. Короче на графике данные поступившие после "провала" отображаются уже со сдвигом.

Если у вас график строится например за 24 часа, а значения в базе начали заполняться позже (например 3 часа назад) график тоже получается со сдвигом.

Вся проблема в том что программа отвечающая за расстановку значений по графику не вставляет повторы значений в случае "провала" в данных, но она почему то это делает в конце графика там где должны быть текущие значения.

Извините за сумбурное описание - пишу на работе, а за спиной начальство :)
CubieBoard A10 - основной сервер Majordomo
Raspberry Pi - цифровая мини АТС ASTERISK
Arduino - блок управления реле, электросчетчик, счетчики воды, управление вентиляционной системой, СКУД.
martynovis
Сообщения: 7
Зарегистрирован: Пн сен 16, 2013 9:53 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Временной сдвиг на графике

Сообщение martynovis » Вт окт 08, 2013 10:02 am

ksgroup писал(а):Короче на графике данные поступившие после "провала" отображаются уже со сдвигом.
Очень похоже на правду.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Временной сдвиг на графике

Сообщение sergejey » Вт окт 08, 2013 1:36 pm

Спасибо за информацию про "провал" -- думаю, что в этом дело. Разберёмся )

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
ksgroup
Сообщения: 135
Зарегистрирован: Ср дек 19, 2012 10:35 am
Откуда: Ukraine/Kiev
Благодарил (а): 7 раз
Поблагодарили: 14 раз

Re: Временной сдвиг на графике

Сообщение ksgroup » Вт окт 08, 2013 2:59 pm

sergejey писал(а):Спасибо за информацию про "провал" -- думаю, что в этом дело. Разберёмся )
Я для себя разобрался примерно так:

Код: Выделить всё

   while($start_time<$end_time) {

       $value = 0;
       $ind=0;

      for($i=0;$i<$total_values;$i++) {
       		if ($history[$i]['UNX']>=$start_time && $history[$i]['UNX']<=$start_time+$period) {
            		$value += ($history[$i]['VALUE']*1);
            		$ind++;
      		}
        	if ($ind == 0){ 
			$value = $old_value; 
		}else{
        		$value = round($value / $ind,2);
			$old_value = $value;
		}

      $values[]=$value;


     $start_time+=$period;
     $px+=$px_per_point;
     $px_passed+=$px_per_point;

     if ($px_passed>30) {
      		if (date('Y-m-d', $start_time)!=$dt) {
       			$hours[]=date('d/m', $start_time);
       			$dt=date('Y-m-d', $start_time);
      		} else {
       			$hours[]=date('H:i', $start_time);
      		}
      		$px_passed=0;
     } else {
      		$hours[]='';
     }

   }
Вместо:

Код: Выделить всё

   while($start_time<$end_time) {
     if ($next_index<$total_values) {
      for($i=$next_index;$i<$total_values;$i++) {
       $next_index=$i+1;
       if ($history[$i]['UNX']>=$start_time) {
        if ($approx=='sum') {
         $value=array_sum($temp_array);
        } elseif ($approx=='max') {
         $value=max($temp_array);
        } else {
         $value=round(array_sum($temp_array)/count($temp_array), 2);
        }
        $temp_array=array($history[$i]['VALUE']);
        break;
       } else {
        $temp_array[]=$history[$i]['VALUE'];
       }
      }
     } else {
       // last known value
      $value=$history[$total_values-1]['VALUE'];
     }
     $values[]=$value;
     if ($px_passed>30) {
      if (date('Y-m-d', $start_time)!=$dt) {
       $hours[]=date('d/m', $start_time);
       $dt=date('Y-m-d', $start_time);
      } else {
       $hours[]=date('H:i', $start_time);
      }
      $px_passed=0;
     } else {
      $hours[]='';
     }
     $start_time+=$period;
     $px+=$px_per_point;
     $px_passed+=$px_per_point;
   }
Вот два графика составленных этими процедурами:
Изображение
Изображение
Верхний создан моей процедурой.
Сереж, я думаю ты знаешь где эта процедура находится. Я переделал ее под себя, но и в таком виде мне не очень нравится как она работает. Указал ее здесь просто как ориентир где копать. Я не программист, особенно в PHP. Уверен у тебя получится в итоге лучше.
CubieBoard A10 - основной сервер Majordomo
Raspberry Pi - цифровая мини АТС ASTERISK
Arduino - блок управления реле, электросчетчик, счетчики воды, управление вентиляционной системой, СКУД.
Ответить