История значений объекта

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

Модератор: immortal

Ответить
PAV
Сообщения: 969
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 71 раз
Поблагодарили: 95 раз

История значений объекта

Сообщение PAV » Ср июн 10, 2015 10:13 am

Голову уже сломал, чувствую элементарно, но не соображу как.
КАК вывести на страницу последние (10, 20, 30) значения определенного свойства объекта? (как буковку H нажимаем в свойствах объекта).
Вот хочу колонку последних 10 значений sensorMovement1.status с указанием времени. Как?
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: История значений объекта

Сообщение sergejey » Ср июн 10, 2015 10:21 am

историю за 8 часов (в данном случае свойства sensorMovement4.status) можно вывести так:

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

<iframe src="/pChart/?p=sensorMovement4.status&op=log&type=8h" width="200" height="300"></iframe> 

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
PAV
Сообщения: 969
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 71 раз
Поблагодарили: 95 раз

Re: История значений объекта

Сообщение PAV » Ср июн 10, 2015 12:09 pm

Супер, то, что надо.
А, пардон, цвет шрифта можно как-то изменить? А то черное на черном.
dmw
Сообщения: 469
Зарегистрирован: Вт мар 12, 2013 1:22 am
Благодарил (а): 41 раз
Поблагодарили: 81 раз

Re: История значений объекта

Сообщение dmw » Пт июл 03, 2015 11:29 am

Ну можно получить историю в JSON-формате и распоряжатся массивом как душе угодно
для этого в ссылке нужно заменить &op=log на &op=timed
directman66
Сообщения: 2800
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 695 раз
Контактная информация:

Re: История значений объекта

Сообщение directman66 » Пт май 19, 2017 8:22 am

Для php скриптов как получить историю?
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 2800
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 695 раз
Контактная информация:

Re: История значений объекта

Сообщение directman66 » Пт май 19, 2017 1:52 pm

Из вики

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

Функции работы с историей
getHistoryMin($varname, $start_time, $stop_time) -- Возвращает минимальное значение за период
getHistoryMax($varname, $start_time, $stop_time) -- Возвращает максимальное значение за период
getHistoryCount($varname, $start_time, $stop_time) -- Возвращает количество значений за период
getHistorySum($varname, $start_time, $stop_time) -- Возвращает сумму значений за период
getHistoryAvg($varname, $start_time, $stop_time) -- Возвращает среднее значений за период
getHistory($varname, $start_time, $stop_time) -- Возвращает массив значений истории
getHistoryValue($varname, $start_time, $stop_time) -- Возвращает среднее значений за период
varname - "объект.свойство" (строка)
start_time - Время начало выборки, включительно (метка времени Unix)
stop_time - Время конца выборки, включительно (метка времени Unix)
Если нет никаких данных функция возвращает false.
 
$data = getHistoryMin("RainGauge1.value", -3*60*60);
echo print_r($data, true)."<br/>\n";

Если минимальная температура за день меньше 5 градусов, то пора сливать воду из системы полива.
 if (getHistoryMin("tsrearyard.temp", strtotime("-1 day")) < 5)
   say("Пора сливать воду из системы полива");
Если среднесуточная температура меньше 7 градусов, то пора менять колёса на зимние.
 if (getHistoryAvg("tsrearyard.temp", strtotime("-1 day")) < 7)
   say("Пора менять колёса на зимние"); 

Самое интересное можно взять значение на определённом отрезке времени, даже если выборки попали между запросом (Берутся 2 точки до и после, из них делается интерполяция)
 if (getHistoryValue("tsrearyard.temp", strtotime("03:00")) < 0)
   say("Ночью была минусовая температура"); 


Если нет никаких данных функция возвращает false - а что делать по этому поводу решать вам. Может нужно сказать "Датчик дождя не выдавал значения за этот период"
$ret = gethistorycount("ws.isRain",strtotime("-15 minute"));
if ($ret === false) $ret = 0;
if ($ret != 0) say(' пошёл дождь...',1);
 
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 2800
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 695 раз
Контактная информация:

Re: История значений объекта

Сообщение directman66 » Пт июн 02, 2017 11:32 am

подскажите, как вывести историю между 3 и 2 часами назад?
мой код ничего не возвращает

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

$press2=getHistoryAvg('onesensor.pressure',strtotime("-2 hour") ,strtotime("-1 hour")); 
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: История значений объекта

Сообщение nick7zmail » Пт июн 02, 2017 12:21 pm

А чем этот способ не угодил?

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

<iframe src="/pChart/?p=sensorMovement4.status&op=log&type=8h" width="200" height="300"></iframe> 
Только для скрипта он поменяется на

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

$contetnt=file_get_contents(/pChart/?p=sensorMovement4.status&op=timed&type=8h
$json_history=json_decode($contetnt); 
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
directman66
Сообщения: 2800
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 695 раз
Контактная информация:

Re: История значений объекта

Сообщение directman66 » Пт июн 02, 2017 12:34 pm

я полагаю запрос через http сильнее должен загружать систему нежели встроенная функция
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Ответить