[Модификация] Строим графики Highstock

Вносятся изменения в файлы или устанавливаются доп программы

Модераторы: immortal, newz20

tsember
Сообщения: 52
Зарегистрирован: Ср фев 04, 2015 12:28 am
Благодарил (а): 54 раза
Поблагодарили: 6 раз

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

Сообщение tsember » Пт дек 30, 2016 5:51 pm

Не знаю, куда правильнее отнести данное сообщение: к графикам или обработке температуры (любых датчиков).

Обновляю свойство 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>";
}
 
Надеюсь, кому нибудь пригодится.
EvgenyG
Сообщения: 220
Зарегистрирован: Вт июл 21, 2015 4:59 pm
Откуда: Москва
Благодарил (а): 57 раз
Поблагодарили: 1 раз

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

Сообщение EvgenyG » Вт янв 31, 2017 1:34 am

В маркет планируется добавить этот модуль?

Можно ли задавать диапазон значений по оси ординат?
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
Ko/|xo3HUk
Сообщения: 160
Зарегистрирован: Ср окт 07, 2015 9:36 am
Благодарил (а): 51 раз
Поблагодарили: 27 раз

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

Сообщение Ko/|xo3HUk » Вт янв 31, 2017 6:49 am

Посмотрите в Маркете дополнений модуль "Charts (by Serge J.) Создание графиков"

P.S. Вот, кстати, ссылка на обсуждение этого модуля: viewtopic.php?f=5&t=2810
Текущий сервер: Ноутбук: HP Probook 4515s (без монитора). ОС: Debian GNU/Linux 8.6 (jessie)
Предыдущий сервер: Raspberry Pi 2B. ОС: Raspbian (jessie)
EvgenyG
Сообщения: 220
Зарегистрирован: Вт июл 21, 2015 4:59 pm
Откуда: Москва
Благодарил (а): 57 раз
Поблагодарили: 1 раз

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

Сообщение EvgenyG » Вт янв 31, 2017 11:41 pm

Ko/|xo3HUk писал(а):Посмотрите в Маркете дополнений модуль "Charts (by Serge J.) Создание графиков"

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

ветка на форуме по модулю Charts полумёртвая
автор не отвечает на вопросы и в личке не отвечает по модулю Charts
понимаю, что система бесплатная, но он бы хоть цену обозначил за техническую поддержу
кучу времени потратил на задачи, которые специалист решил бы за несколько минут
уже зла не хватает
и не знаю на какую систему перейти. уже всё на MDM подвязано
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
Ko/|xo3HUk
Сообщения: 160
Зарегистрирован: Ср окт 07, 2015 9:36 am
Благодарил (а): 51 раз
Поблагодарили: 27 раз

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

Сообщение Ko/|xo3HUk » Ср фев 01, 2017 6:04 am

Я не использую данный модуль - см. выше мой пример графика с двумя осями. Там в коде можно использовать все настройки графиков Highstock.
Текущий сервер: Ноутбук: HP Probook 4515s (без монитора). ОС: Debian GNU/Linux 8.6 (jessie)
Предыдущий сервер: Raspberry Pi 2B. ОС: Raspbian (jessie)
EvgenyG
Сообщения: 220
Зарегистрирован: Вт июл 21, 2015 4:59 pm
Откуда: Москва
Благодарил (а): 57 раз
Поблагодарили: 1 раз

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

Сообщение EvgenyG » Ср фев 01, 2017 9:48 am

Ko/|xo3HUk писал(а):Я не использую данный модуль - см. выше мой пример графика с двумя осями. Там в коде можно использовать все настройки графиков Highstock.
Спасибо
Как Ваш код использовать, куда его записать и как запустить?
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
Ko/|xo3HUk
Сообщения: 160
Зарегистрирован: Ср окт 07, 2015 9:36 am
Благодарил (а): 51 раз
Поблагодарили: 27 раз

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

Сообщение Ko/|xo3HUk » Ср фев 01, 2017 10:05 am

Создаёте домашнюю страницу с типом "HTML Code" и в поле "Код" просто вставляете код графика.
За это сообщение автора Ko/|xo3HUk поблагодарил:
EvgenyG (Ср фев 01, 2017 4:32 pm)
Рейтинг: 1.16%
Текущий сервер: Ноутбук: HP Probook 4515s (без монитора). ОС: Debian GNU/Linux 8.6 (jessie)
Предыдущий сервер: Raspberry Pi 2B. ОС: Raspbian (jessie)
EvgenyG
Сообщения: 220
Зарегистрирован: Вт июл 21, 2015 4:59 pm
Откуда: Москва
Благодарил (а): 57 раз
Поблагодарили: 1 раз

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

Сообщение EvgenyG » Ср фев 01, 2017 4:36 pm

Ko/|xo3HUk писал(а):Создаёте домашнюю страницу с типом "HTML Code" и в поле "Код" просто вставляете код графика.
Спасибо, буду пробовать.
В Модули не планируешь добавить?
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
Ko/|xo3HUk
Сообщения: 160
Зарегистрирован: Ср окт 07, 2015 9:36 am
Благодарил (а): 51 раз
Поблагодарили: 27 раз

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

Сообщение Ko/|xo3HUk » Ср фев 01, 2017 4:38 pm

Я копипастер, а не программист :) Понятия не имею как это в модули добавлять.
Текущий сервер: Ноутбук: HP Probook 4515s (без монитора). ОС: Debian GNU/Linux 8.6 (jessie)
Предыдущий сервер: Raspberry Pi 2B. ОС: Raspbian (jessie)
EvgenyG
Сообщения: 220
Зарегистрирован: Вт июл 21, 2015 4:59 pm
Откуда: Москва
Благодарил (а): 57 раз
Поблагодарили: 1 раз

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

Сообщение EvgenyG » Ср фев 01, 2017 4:49 pm

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

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

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

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

sensornames = ['СпалБолТемпHS.temp',
                                'СпалБолТП1HS.temp',
                 'СпалБолВЛHS.humidity'];
MDM Raspberry Pi 3b, esp32, ModBUS, esp8266, NooLite(MTRF-64-USB, SU-1-***, SLF-1-300, PM112, радиопульты PU)
Ответить