Историчные свойства объектов, на примере анализа температуры

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

Модератор: immortal

Ответить
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 140 раз
Контактная информация:

Историчные свойства объектов, на примере анализа температуры

Сообщение ErmolenkoM » Пт ноя 08, 2013 1:17 pm

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

Задачу решил так(свойство Temp объекта YandexSamara - исторично):
При обновлении текущей температуры обновляется температура сутки назад:

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

// Запишем температуру вчерашнего дня для этого часа
$SQLText = " SELECT ph.value as val";
$SQLText.= " FROM pvalues pv, objects o, properties p, phistory ph ";
$SQLText.= " WHERE pv.object_id = o.id ";
$SQLText.= " AND p.id = pv.property_id ";
$SQLText.= " AND o.title =  'YandexSamara' ";
$SQLText.= " AND p.title =  'Temp' ";
$SQLText.= " AND ph.value_id = pv.id ";
$SQLText.= " AND UNIX_TIMESTAMP( pv.updated ) - UNIX_TIMESTAMP( ph.added ) <24 *60 *60 +30 *60 ";
$SQLText.= " ORDER BY ph.added ";
$SQLText.= " LIMIT 1 ";
$tempYesterday = SQLSelectOne($SQLText);
sg("YandexSamara.tempYesterday ",$tempYesterday['val'] );
т.о. в свойство tempYesterday объекта YandexSamara записывается температура 24 часа назад (получасовая добавка введена для того что бы бралась ближайшая к последней минус сутки проверке дата).

Используется вот так:

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

    // Сравнение со вчерашним днем
    if ((float)getGlobal('YandexSamara.Temp')>=(float)getGlobal('YandexSamara.tempYesterday')){
      say("Сегодня теплее, чем вчера.",1);
    }else{
      say("Сегодня холоднее, чем вчера.",1);
    }
Таким образом можно анализировать поведение параметров (угол наклона производной к оси абсцисс) - как быстро падает температура, курс доллара, баланс телефона.
aka msh555
Cubian на Cubietruck, Connect
Ответить