[Сценарий] Анализ периода от начала суток и построение индикатора

Не требует установки программ или изменения файлов

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

Vit
Сообщения: 867
Зарегистрирован: Вт янв 17, 2012 12:31 pm
Благодарил (а): 121 раз
Поблагодарили: 78 раз

[Сценарий] Анализ периода от начала суток и построение индикатора

Сообщение Vit » Вт фев 10, 2015 8:23 pm

Задача анализа периода от начала суток оказалась весьма хитрая. Она была бы намного проще, если предположить, что в истории за 0 всегда идет 1, а за 1 всегда 0. Да и что каждый день вообще есть записи в истории. Слишком много если.. Поэтому было принято решение сделать запрос к базе данных и посчитать временные интервалы.
Суть индикатора отражена в названии. Активность периода за Сегодня. То есть считать нужно только в пределах текущих суток.
Пример можно применять не обязательно для Еко режима. Можно считать что угодно. Например работу отопителя или увлажнителя. Все зависит от Вашей фантазии.

Ну благодаря Bagir (у), спасибо ему огромное за отзывчивость и помощь, запустил я у себя сценарий расчета активности режима (1-активен, 0-неактивен), чем и хочу поделится с сообществом.

1. добавил свойство у класса режимов
СпойлерПоказать
Изображение
2. повторяюсь благодаря помощи Bagir добавил сценарий EconomModePeriod со следующим кодом
СпойлерПоказать

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

/* Данные истории находятся в таблице phistory. Чтобы их от туда взять, нужно знать VALUE_ID нашего Объект.Свойства
   Получить его можно разными путями в зависимости от ситуации. Приведу общий способ, который будет работать в любом месте. 
   Например из сценария, где нет такого указателя как $this. Еще этот код немного расскажет про связь между таблицами в базе данных.
*/

$start_time=date("Y-m-d").' 00:00:00';
$tmr_start = strtotime($start_time);
$tmr_now = time();
$tmr_mem = 0; //накопитель времени в секундах


// Мы знаем имя объекта и имя свойства.

// Имена объектов находятся в таблице objects и они должны быть уникальными
// Для начала нам нужно получить id нашего объекта и id класса которому принадлежит объект
$obj_title = 'EconomMode'; //имя объекта (поменять на свой !!!!!!!!!!!!!!!!!)
$arr_s = SQLSelectOne("SELECT * FROM objects WHERE TITLE='".$obj_title."'");
$obj_id = $arr_s['ID'];
$class_id = $arr_s['CLASS_ID'];

/* Имена свойств находятся в таблице properties
   с указанием id класса если свойство заданно на уровне класса,
   или id объекта если свойство принадлежит объекту лично.
*/   
// Получим id свойства по его имени И (id класса ИЛИ id объекта)
$prop_title = 'active';  //имя свойства (поменять на свое!!!!!!!!!!!!!)
$arr_s = SQLSelectOne("SELECT * FROM properties WHERE TITLE='".$prop_title."' AND (CLASS_ID='".$class_id."' OR OBJECT_ID='".$obj_id."')");
$prop_id = $arr_s['ID'];

// значения свойств находятся в таблице pvalues
// Нам нужен id. (уточнить необходимость сортировки по UPDATED)
$arr_s = SQLSelectOne("SELECT * FROM pvalues WHERE OBJECT_ID='".$obj_id."' AND PROPERTY_ID='".$prop_id."'");
$pvalue = $arr_s['ID'];

/* Зная $pvalue можно слазать за данными истории в таблицу phistory
   Для нашей задачи нужно получить все записи по времени >= началу суток + 1 запись
*/   
// Получить количество записей за нужный период времени
$arr_s = SQLSelectOne("SELECT COUNT(ID) as COUNT_ID FROM phistory WHERE VALUE_ID=".$pvalue." AND ADDED>='".date('Y-m-d H:i:s', $tmr_start)."'");
// Взять это количество записей +1
$arr_s = SQLSelect("SELECT * FROM phistory WHERE VALUE_ID=".$pvalue." ORDER BY ADDED DESC LIMIT 0 , ".(1+$arr_s['COUNT_ID']));


$tmr2 = $tmr_now;

// Переберем весь массив
foreach($arr_s as $s) {
 $tmr1 = $tmr2;
 $tmr2 = strtotime($s['ADDED']);
 
 // Ограничить началом суток
 if ($tmr2<$tmr_start) { $tmr2=$tmr_start; }
 
 
 // Двигаясь вниз по массиву времени складывать отрезки если режим включен
 if ($s['VALUE']) { $tmr_mem = $tmr_mem + $tmr1 - $tmr2; }
}

$period = round( $tmr_mem * 100 / ($tmr_now - $tmr_start) );

setGlobal("EconomMode.period",$period); //запись значения в свойство объекта (поменять на свое!!!!!!!!!!!!!!)           


запускаю пока этот сценарий в методе onNewHour каждый час командой

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

runScript('EconomModePeriod'); 
далее выводим активность режима на сцене в виде
СпойлерПоказать
Изображение
для этого я сделал контейнер с двумя элементами, чтобы удобней было при желании перемещать по сцене
СпойлерПоказать
Изображение
1 HTML элемент это просто надпись
СпойлерПоказать
Изображение
2 HTML элемент сам индикатор со следующим кодом
Данные о размере берутся из его свойств ширины и высоты
Не забудьте поменять element_117 на свой
СпойлерПоказать

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

<style type = "text/CSS">
div.element_117 {
  border-style: solid;
  border-width: 1px;
  border-color: black;
}
.element_117 .line {
  width:%EconomMode.period%%;
  height:100%;
  background-color: rgb(59,103,158); /* Old browsers */
  background-image: linear-gradient(rgb(59,73,128), rgb(89,133,188) 10%);
}
</style>

<div class="line"></div> 
объект.свойство в коде поменяйте на свое..

вот в принципе и все....

доработка как кода так и дизайна приветствуется...

может кто подскажет по каким то недочетам либо ошибкам...


Пробуйте, тестируйте и отписывайтесь

Изображение

P.S. Благодарю Bagir (а) за помощь
файл элементов сцена в attach
Последний раз редактировалось Vit Сб фев 28, 2015 4:12 pm, всего редактировалось 1 раз.
За это сообщение автора Vit поблагодарили (всего 10):
devoff (Чт апр 16, 2015 12:32 am) • polunds (Ср ноя 11, 2015 4:31 pm) • zelevova (Вт дек 29, 2015 1:23 pm) • ABola (Чт янв 21, 2016 1:58 pm) • VAD07 (Чт мар 08, 2018 11:03 pm) • TrDA (Вт мар 13, 2018 10:19 am) • kas5858 (Вс ноя 25, 2018 3:14 pm) • iTango (Чт янв 03, 2019 3:03 pm) • Yashalta (Ср мар 20, 2019 4:35 pm) • antpino (Пт авг 23, 2019 8:46 am)
Рейтинг: 11.63%
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: стили для элементов сцен

Сообщение Bagir » Вт фев 10, 2015 10:47 pm

Очень рад, что все получилось! Сегодня ночью я посмотрю как отработает переход на новые сутки. Пока что циферки просчитывал, все сходится.
Из дополнений:
Скрипту в параметрах можно передавать имя Объект.свойство у которого берем историю, и Объект.свойство которому надо присвоить ответ. Тогда скрипт можно вызывать для разных объектов.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
adzam
Сообщения: 602
Зарегистрирован: Сб дек 08, 2012 10:28 pm
Откуда: Кишинев
Благодарил (а): 20 раз
Поблагодарили: 138 раз

Re: стили для элементов сцен

Сообщение adzam » Ср фев 11, 2015 8:32 pm

А этот файл Elements20-32-30.rar как раскрыть или его надо импортировать?
После распаковки получаем файл Elements20-32-30.elements и что с ним делать?
Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
Vit
Сообщения: 867
Зарегистрирован: Вт янв 17, 2012 12:31 pm
Благодарил (а): 121 раз
Поблагодарили: 78 раз

Re: стили для элементов сцен

Сообщение Vit » Ср фев 11, 2015 9:21 pm

adzam писал(а):А этот файл Elements20-32-30.rar как раскрыть или его надо импортировать?
После распаковки получаем файл Elements20-32-30.elements и что с ним делать?
в сценах в элементах выбранной сцены
СпойлерПоказать
Изображение
есть пункт
СпойлерПоказать
Изображение
выбрать файл и импортировать
Аватара пользователя
adzam
Сообщения: 602
Зарегистрирован: Сб дек 08, 2012 10:28 pm
Откуда: Кишинев
Благодарил (а): 20 раз
Поблагодарили: 138 раз

Re: стили для элементов сцен

Сообщение adzam » Ср фев 11, 2015 9:25 pm

Получилось , спасибо,но это только индикатор.
Сделай пож импорт всей этой сцены , я хочу посмотреть как у тебя сделано, или пару кнопок
Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
Vit
Сообщения: 867
Зарегистрирован: Вт янв 17, 2012 12:31 pm
Благодарил (а): 121 раз
Поблагодарили: 78 раз

Re: стили для элементов сцен

Сообщение Vit » Ср фев 11, 2015 9:29 pm

adzam писал(а):Получилось , спасибо,но это только индикатор.
Сделай пож импорт всей этой сцены , я хочу посмотреть как у тебя сделано, или пару кнопок
я тоже ее только начал рисовать...так пока для примера новых стилей

может кто из присутствующих может планы помещений в 3d почертить помочь, буду благодарен
Вложения
Elements23-09-09.rar
(832 байт) 470 скачиваний
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Анализ периода от начала суток и построение индикатора

Сообщение Amarok » Ср апр 15, 2015 2:35 pm

А что это вообще за РежимЭкономии? Что он делает?
  • Кэп: Экономит!
  • я: Спасибо, Капитан!
А что входит в понятие экономия?
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
Аватара пользователя
Bagir
Сообщения: 1613
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 374 раза

Re: Анализ периода от начала суток и построение индикатора

Сообщение Bagir » Ср апр 15, 2015 3:23 pm

Можно например уменьшить время включения освещения в режиме экономии.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
Аватара пользователя
Amarok
Сообщения: 1425
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Анализ периода от начала суток и построение индикатора

Сообщение Amarok » Ср апр 15, 2015 3:25 pm

Примерчиков бы живых...
Алиска живёт на Ubuntu Server 14.04.3 LTS
connect, группа в Telegram, Яндекс.Деньги для благодарностей за помощь: 41001355945165
Аватара пользователя
mazahaka7sk
Сообщения: 54
Зарегистрирован: Сб фев 20, 2016 8:46 am
Откуда: Усть-Каменогорс
Благодарил (а): 8 раз
Поблагодарили: 10 раз
Контактная информация:

Re: Анализ периода от начала суток и построение индикатора

Сообщение mazahaka7sk » Вт ноя 22, 2016 11:35 am

Сделал все как у вас имена обьектов не менял так как у меня такие же названия но почему то не работает ( что я сделал не так подскажите??
CONNECT |Группа в VK| ЮТУБ КАНАЛ
Система стоит на Raspberry pi 3b v3.31
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
Ответить