Восстановить часть пропущенных данных в History

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

Модератор: immortal

Ответить
xrogi
Сообщения: 4
Зарегистрирован: Вс ноя 27, 2016 9:21 pm
Благодарил (а): 0
Поблагодарили: 1 раз

Восстановить часть пропущенных данных в History

Сообщение xrogi » Вс ноя 27, 2016 10:15 pm

Добрый день.

Как восстановить исторические данные, которые попали в систему позже. т.е. Например данные температуры опоздали на полдня(не было связи). Хочется чтобы графики в итоге были цельные.
Имеем Класс Погода, Свойство Т1.
Из вне получаем Температура и Дата_Измерения

как я понимаю надо напрямую залить в phistory (viewtopic.php?f=4&t=1894) но не понятно как получать VALUE_ID

Помогите плиз разобраться новичку в MD. )
xrogi
Сообщения: 4
Зарегистрирован: Вс ноя 27, 2016 9:21 pm
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Восстановить часть пропущенных данных в History

Сообщение xrogi » Пт дек 02, 2016 7:59 pm

Добрый день.

Ребята, я решил свой вопрос. Знаю что кому-то поможет.
Ладно, рассказываю смысл идеи:
Есть датчик температуры, через Inet он шлёт по MQTT значение Value. MD как обычно принимает и пишет в базу, строит график и пишет архив. Теперь связь пропадает. Датчик понимает что слать не может и сохраняет измерения себе, но поскольку это уже не реальное время, то запоминает пару:
Значение1\tДатаВремя1
Значение2\tДатаВремя2
Как только связь восстанавливается все эти данные идут по MQTT со значением в топике MQTT_TEMP и попадает в классе в переменную MQTT_TEMP. На переменной висит функция обработчик, которая парсит значение и пишет его в базу.
Текст функции ниже:
---------------------------------------------------
$str_in = $this->getProperty("MQTT_TEMP");
$val = explode("\t",$str_in);
if (count($val) == 2)
{
//$this->setProperty("ARX_Temper",$val[0]);
//28.437 20161129T222512
$str_date = $val[1];
$str_date=substr($str_date, 0, 4)."-".substr($str_date, 4, 2)."-".substr($str_date, 6, 2)." ".substr($str_date, 9, 2).":".substr($str_date, 11, 2).":".substr($str_date, 13);
//$this->setProperty("ARX_DATE",$str_date);
$Record = Array();
$Record['VALUE_ID'] =732;
$Record['ADDED'] = $str_date ;
$Record['VALUE'] = $val[0];
$Record['ID']=SQLInsert('phistory', $Record);
}
-----------------------------------------------------

Замечание 1. Значение даты высылается в формате принятом в XML н-р 20161129T222512 => 2016/11/29 22:25:12
Замечание 2. Значение даты можно сразу слать в формате сервера, тогда не надо делать разбор даты с помощью substr, но я так решил сделать.
Замечание 3. Закомментированы переменные ARX_DATE , ARX_Temper - позволяют смотреть работу парсера при отладке
Замечание 4. Значение VALUE_ID взято из таблицы методом просмотра phistory и понимания что мне надо. Если надо подробней или решение по универсальней то пишите.. Мне этого достаточно, не хочу писать подзапросы по получению значения, чтобы оптимизировать производительность на уровне самого кода.

з.ы. приятно удивлён скоростью. пропуск 12 часов измерений через 30 секунд восстановилось буквально за 30 секунд )))
ззы. Буду использовать механизм для восстановления всех исторических данных из любых внешних источников, имхо работает на 5++

Ставим пальцы если пригодилось )
Ответить