а состояние реле соноффа не получаете, то по нему время работы тена как-то прямее смотретьMaxVM писал(а): ↑Пт ноя 15, 2019 10:25 amВ батареи датчик температуры и sonoff, режим работы (eco и comfort) переключает он + на нем датчик температуры который смотрит растет температура или нет. По ниму и смотрю время физической работы тена в радиаторе. Хочу знать в расчете на сутки сколько он раз включился, для начала в процентном отношении и по среднему посчитать потребление электроэнергии каждым конвектором
[Сценарий] Анализ периода от начала суток и построение индикатора
-
- Сообщения: 1961
- Зарегистрирован: Пт апр 07, 2017 12:20 pm
- Благодарил (а): 306 раз
- Поблагодарили: 423 раза
Re: [Сценарий] Анализ периода от начала суток и построение индикатора
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Re: [Сценарий] Анализ периода от начала суток и построение индикатора
Конечно получаю, просто сонофф совсем не выключает батарею. Он два режима делаетLogrus писал(а):а состояние реле соноффа не получаете, то по нему время работы тена как-то прямее смотретьMaxVM писал(а): ↑Пт ноя 15, 2019 10:25 amВ батареи датчик температуры и sonoff, режим работы (eco и comfort) переключает он + на нем датчик температуры который смотрит растет температура или нет. По ниму и смотрю время физической работы тена в радиаторе. Хочу знать в расчете на сутки сколько он раз включился, для начала в процентном отношении и по среднему посчитать потребление электроэнергии каждым конвектором
0-нормальный режим, реле НО держит температуру по крутилке стоящей на нем
1-экономичный режим, реле НЗ включает на конвекторе режим антизамерзания +5 в помещении.
А мне надо физическую работу тена в 2х режимах
Отправлено с моего MI 9 через Tapatalk
Re: [Сценарий] Анализ периода от начала суток и построение индикатора
xor писал(а): ↑Чт ноя 14, 2019 11:08 pmкстати, сошлюсь на себя https://connect.smartliving.ru/profile/ ... rdomo.html
Я там среднее считал, взвешенное по времени, эту функцию легко переделать для поиска времени на периоде, когда свойство удовлетворяет каким-то требованиям.
зы. и по-моему, за основу и брал скрипт из этого топика) там немного упрощено получение айдишников с использованием встроенных функций
вот как получилось:СпойлерПоказатьвот выводКод: Выделить всё
//function getHistoryAvgMy($varname, $start_time, $stop_time = 0) { $varname = 'Noorelay_1.status'; $what = 1; // какое значение считаем $start_time = strtotime(date("Y-m-d").' 00:00:00'); $stop_time = 0; if ($start_time <= 0) $start_time = (time() + $start_time); if ($stop_time <= 0) $stop_time = (time() + $stop_time); // Get hist val id $pvalue = getHistoryValueId($varname); if (defined('SEPARATE_HISTORY_STORAGE') && SEPARATE_HISTORY_STORAGE == 1) { $table_name = createHistoryTable($pvalue); } else { $table_name = 'phistory'; } // Получить количество записей за нужный период времени $arr_s = SQLSelectOne("SELECT COUNT(ID) as COUNT_ID FROM $table_name ". "WHERE VALUE_ID=".$pvalue." and not value is null ". "AND ADDED between '".date('Y-m-d H:i:s', $start_time)."' AND '".date('Y-m-d H:i:s', $stop_time)."'"); // Взять это количество записей +1 $arr_s = SQLSelect("SELECT * FROM $table_name WHERE VALUE_ID=".$pvalue." and not value is null ". " AND ADDED<='".date('Y-m-d H:i:s', $stop_time)."' ORDER BY ADDED DESC LIMIT 0 , ".(1+$arr_s['COUNT_ID'])); $tmr2 = $stop_time; // Переберем весь массив foreach($arr_s as $s) { $tmr1 = $tmr2; $tmr2 = strtotime($s['ADDED']); // Ограничить началом if ($tmr2<$start_time) $tmr2 = $start_time; // Двигаясь вниз по массиву времени складывать отрезки //echo(date('H:i:s', $tmr1).' - '.date('H:i:s', $tmr2).' = '.($tmr1 - $tmr2).'c t='.$s['VALUE'].'<br>'); if($s['VALUE']==$what) $tmr_mem = $tmr_mem + $tmr1 - $tmr2; //$ss = $ss + $s['VALUE']*($tmr1 - $tmr2); } $all = $stop_time - $start_time; //всего времени с начала суток all $proc = ($tmr_mem/$all)*100; //%% echo('part = '.$tmr_mem.' sec of value='.$what.'<br>') ; echo('start = '.date("Y-m-d H:i:s",$start_time).'<br>') ; echo('stop = '.date("Y-m-d H:i:s",$stop_time).'<br>') ; echo('all = '.$all.' sec<br>'); echo('proc = '.$proc.' %');
Код: Выделить всё
part = 621 sec of value=1 start = 2019-11-15 00:00:00 stop = 2019-11-15 00:25:03 all = 1503 sec proc = 41.317365269461 %
Годный код!!! Спасибо Xor-у!!!!
Но я чего то совсем туплю как этот, как сделать этот метод универсальным для всех объектов класса. $this я так думаю но как вставить грамотно, опять же синтаксис да мой мозг барахлит.
- xor
- Сообщения: 1969
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 269 раз
- Поблагодарили: 615 раз
Re: [Сценарий] Анализ периода от начала суток и построение индикатора
Если надо работать с объектом/свойством, принимающим значения 0/1, то можно тупо использовать функцию средневзвешенного, приведённую в блоге. Она как раз выдаст долю единиц в интервале) кстати, там можно и другие периоды задавать, например, месяц, неделю, год, если данные в истории естьMaxVM писал(а):xor писал(а): ↑Чт ноя 14, 2019 11:08 pmкстати, сошлюсь на себя https://connect.smartliving.ru/profile/ ... rdomo.html
Я там среднее считал, взвешенное по времени, эту функцию легко переделать для поиска времени на периоде, когда свойство удовлетворяет каким-то требованиям.
зы. и по-моему, за основу и брал скрипт из этого топика) там немного упрощено получение айдишников с использованием встроенных функций
вот как получилось:СпойлерПоказатьвот выводКод: Выделить всё
//function getHistoryAvgMy($varname, $start_time, $stop_time = 0) { $varname = 'Noorelay_1.status'; $what = 1; // какое значение считаем $start_time = strtotime(date("Y-m-d").' 00:00:00'); $stop_time = 0; if ($start_time <= 0) $start_time = (time() + $start_time); if ($stop_time <= 0) $stop_time = (time() + $stop_time); // Get hist val id $pvalue = getHistoryValueId($varname); if (defined('SEPARATE_HISTORY_STORAGE') && SEPARATE_HISTORY_STORAGE == 1) { $table_name = createHistoryTable($pvalue); } else { $table_name = 'phistory'; } // Получить количество записей за нужный период времени $arr_s = SQLSelectOne("SELECT COUNT(ID) as COUNT_ID FROM $table_name ". "WHERE VALUE_ID=".$pvalue." and not value is null ". "AND ADDED between '".date('Y-m-d H:i:s', $start_time)."' AND '".date('Y-m-d H:i:s', $stop_time)."'"); // Взять это количество записей +1 $arr_s = SQLSelect("SELECT * FROM $table_name WHERE VALUE_ID=".$pvalue." and not value is null ". " AND ADDED<='".date('Y-m-d H:i:s', $stop_time)."' ORDER BY ADDED DESC LIMIT 0 , ".(1+$arr_s['COUNT_ID'])); $tmr2 = $stop_time; // Переберем весь массив foreach($arr_s as $s) { $tmr1 = $tmr2; $tmr2 = strtotime($s['ADDED']); // Ограничить началом if ($tmr2<$start_time) $tmr2 = $start_time; // Двигаясь вниз по массиву времени складывать отрезки //echo(date('H:i:s', $tmr1).' - '.date('H:i:s', $tmr2).' = '.($tmr1 - $tmr2).'c t='.$s['VALUE'].'<br>'); if($s['VALUE']==$what) $tmr_mem = $tmr_mem + $tmr1 - $tmr2; //$ss = $ss + $s['VALUE']*($tmr1 - $tmr2); } $all = $stop_time - $start_time; //всего времени с начала суток all $proc = ($tmr_mem/$all)*100; //%% echo('part = '.$tmr_mem.' sec of value='.$what.'<br>') ; echo('start = '.date("Y-m-d H:i:s",$start_time).'<br>') ; echo('stop = '.date("Y-m-d H:i:s",$stop_time).'<br>') ; echo('all = '.$all.' sec<br>'); echo('proc = '.$proc.' %');
Код: Выделить всё
part = 621 sec of value=1 start = 2019-11-15 00:00:00 stop = 2019-11-15 00:25:03 all = 1503 sec proc = 41.317365269461 %
Годный код!!! Спасибо Xor-у!!!!
Но я чего то совсем туплю как этот, как сделать этот метод универсальным для всех объектов класса. $this я так думаю но как вставить грамотно, опять же синтаксис да мой мозг барахлит.
Отправлено с моего Redmi 4X через Tapatalk
- Рейтинг: 1.18%
win7 connect https://connect.smartliving.ru/profile/303
- xor
- Сообщения: 1969
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 269 раз
- Поблагодарили: 615 раз
Re: [Сценарий] Анализ периода от начала суток и построение индикатора
вот функцию более-менее универсальную нарисовал https://connect.smartliving.ru/profile/ ... omili.html
проверяйте
проверяйте
- Рейтинг: 2.35%
win7 connect https://connect.smartliving.ru/profile/303
Re: [Сценарий] Анализ периода от начала суток и построение индикатора
Аааа аааа, круто! Только разобрался с предидущими двумя, как бац и опять смотри! СПАСИБО! Учиться никогда не поздно!xor писал(а):вот функцию более-менее универсальную нарисовал https://connect.smartliving.ru/profile/ ... omili.html
проверяйте
Отправлено с моего MI 9 через Tapatalk