Страница 6 из 12

Re: Строим графики Highstock

Добавлено: Пт дек 30, 2016 5:51 pm
tsember
Не знаю, куда правильнее отнести данное сообщение: к графикам или обработке температуры (любых датчиков).

Обновляю свойство temp датчика температуры при его изменении на 0.1 (знаю что это изменение не почувствовать, но люблю точность).
В связи с этим, за час истории может набраться 200-300 записей в таблице phistory. При отрисовке графиков, например, за сутки, идет ожидание достаточное время (10-20 сек). В связи с этим, написал обработку всех датчиков температуры (можно легко переделать и на другие датчики (вместо класса Temperature ставим ваш класс, вместо свойства temp ставим ваше свойство (например status)). Метод этот вызывается раз в час из таймера (у меня из cron`a). Вытаскивает все значения с момента прошлого усреднения, записывает их в отдельное свойство объекта, а всю историю по главному свойству с историей - удаляет.

За код сильно не ругайте, мучал его три вечера (ночи):

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

// получаем все объекты класса Temperature
$objects = getObjectsByClass("Temperature");
// перебираем все полученные объекты (цикл)
foreach($objects as $object)
{
// получаем название объекта
$obj_title = $object['TITLE'];
// получаем ID объекта
$obj_id = $object['ID'];
// получаем все свойства объекта по его названию
$obj=getObject($obj_title); 
// получаем ID свойства temp 
$prop_id = $obj->getPropertyByName('temp', $obj->class_id, $obj->obj_id);
// по известным данным вытаскиваем с базы ID свойства
$pvalue = SQLSelectOne("SELECT ID FROM pvalues WHERE PROPERTY_ID='".$prop_id."' AND OBJECT_ID='".$obj->id."' LIMIT 0,1");
foreach ($pvalue as $pvalue_id)
// средствами mysql сразу получаем среднее значение температур
$query = SQLSelectOne("SELECT AVG(VALUE) as AVG_temp FROM phistory WHERE VALUE_ID = $pvalue_id");
// округляем значение до сотых
$avg_t = round($query[AVG_temp], 2);
// проверяем значение на ноль (если датчик в течение часа не обновлялся)
if(!$avg_t) { return; } else
// записываем новое значение
sg("$obj_title.tempAvg",$avg_t);
// удаляем обработанные значения (чистим историю по данному свойству
SQLExec("DELETE FROM phistory WHERE  VALUE_ID = $pvalue_id");
// выводим информацию на экран (работает при прямом вызове)
echo"<br>Средняя температура датчика $obj_title за последние 60 минут составила: ".$avg_t." градусов<br>";
}
 
Надеюсь, кому нибудь пригодится.

Re: Строим графики Highstock

Добавлено: Вт янв 31, 2017 1:34 am
EvgenyG
В маркет планируется добавить этот модуль?

Можно ли задавать диапазон значений по оси ординат?

Re: Строим графики Highstock

Добавлено: Вт янв 31, 2017 6:49 am
Ko/|xo3HUk
Посмотрите в Маркете дополнений модуль "Charts (by Serge J.) Создание графиков"

P.S. Вот, кстати, ссылка на обсуждение этого модуля: viewtopic.php?f=5&t=2810

Re: Строим графики Highstock

Добавлено: Вт янв 31, 2017 11:41 pm
EvgenyG
Ko/|xo3HUk писал(а):Посмотрите в Маркете дополнений модуль "Charts (by Serge J.) Создание графиков"

P.S. Вот, кстати, ссылка на обсуждение этого модуля: viewtopic.php?f=5&t=2810
использую модуль Charts, но там нельзя изменять диапазон по ординате и нет возможности анализировать широкий диапазон дат

ветка на форуме по модулю Charts полумёртвая
автор не отвечает на вопросы и в личке не отвечает по модулю Charts
понимаю, что система бесплатная, но он бы хоть цену обозначил за техническую поддержу
кучу времени потратил на задачи, которые специалист решил бы за несколько минут
уже зла не хватает
и не знаю на какую систему перейти. уже всё на MDM подвязано

Re: Строим графики Highstock

Добавлено: Ср фев 01, 2017 6:04 am
Ko/|xo3HUk
Я не использую данный модуль - см. выше мой пример графика с двумя осями. Там в коде можно использовать все настройки графиков Highstock.

Re: Строим графики Highstock

Добавлено: Ср фев 01, 2017 9:48 am
EvgenyG
Ko/|xo3HUk писал(а):Я не использую данный модуль - см. выше мой пример графика с двумя осями. Там в коде можно использовать все настройки графиков Highstock.
Спасибо
Как Ваш код использовать, куда его записать и как запустить?

Re: Строим графики Highstock

Добавлено: Ср фев 01, 2017 10:05 am
Ko/|xo3HUk
Создаёте домашнюю страницу с типом "HTML Code" и в поле "Код" просто вставляете код графика.

Re: Строим графики Highstock

Добавлено: Ср фев 01, 2017 4:36 pm
EvgenyG
Ko/|xo3HUk писал(а):Создаёте домашнюю страницу с типом "HTML Code" и в поле "Код" просто вставляете код графика.
Спасибо, буду пробовать.
В Модули не планируешь добавить?

Re: Строим графики Highstock

Добавлено: Ср фев 01, 2017 4:38 pm
Ko/|xo3HUk
Я копипастер, а не программист :) Понятия не имею как это в модули добавлять.

Re: Строим графики Highstock

Добавлено: Ср фев 01, 2017 4:49 pm
EvgenyG
Ko/|xo3HUk писал(а):Создаёте домашнюю страницу с типом "HTML Code" и в поле "Код" просто вставляете код графика.
Не работает. Пустая страница открывается.
Заменил только вот эти строки на свои данные:

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

 sensornames = ['ESP8266_Garage.Temper_1',
                                'ESP8266_Garage.am2320_temper',
                 'ESP8266_Garage.am2320_humidity'];
вот как у меня:

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

sensornames = ['СпалБолТемпHS.temp',
                                'СпалБолТП1HS.temp',
                 'СпалБолВЛHS.humidity'];