Добрый день.
Как восстановить исторические данные, которые попали в систему позже. т.е. Например данные температуры опоздали на полдня(не было связи). Хочется чтобы графики в итоге были цельные.
Имеем Класс Погода, Свойство Т1.
Из вне получаем Температура и Дата_Измерения
как я понимаю надо напрямую залить в phistory (viewtopic.php?f=4&t=1894) но не понятно как получать VALUE_ID
Помогите плиз разобраться новичку в MD. )
Восстановить часть пропущенных данных в History
Модератор: immortal
Re: Восстановить часть пропущенных данных в History
Добрый день.
Ребята, я решил свой вопрос. Знаю что кому-то поможет.
Ладно, рассказываю смысл идеи:
Есть датчик температуры, через 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++
Ставим пальцы если пригодилось )
Ребята, я решил свой вопрос. Знаю что кому-то поможет.
Ладно, рассказываю смысл идеи:
Есть датчик температуры, через 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++
Ставим пальцы если пригодилось )