[Сценарий] Анализ периода от начала суток и построение индикатора
Re: [Сценарий] Анализ периода от начала суток и построение индикатора
Как бы понять что означает
$tmr_mem = 0; //накопитель времени в секундах
В коде
$tmr_mem = 0; //накопитель времени в секундах
В коде
Re: [Сценарий] Анализ периода от начала суток и построение индикатора
Такой массив получаю
Как отобрать значения только 1 [SOURCE]
СпойлерПоказать
Array ( [0] => Array ( [ID] => 1523583 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:33:23 [VALUE] => 1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?PROPERTY=value&NEW_VALUE=62.3&OLD_VALUE=62.2&SOURCE=%2Fobjects%2F%3Fscript%3Despdata%26idesp%3DESP826600b38609%26hostname%3DBatZal-2%26dsw1%3D62.3%26uptime%3D2267700%26errconn%3D18%26wanip%3D192.168.18.59... ) [1] => Array ( [ID] => 1523554 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:32:43 [VALUE] => -1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?PROPERTY=value&NEW_VALUE=62.3&OLD_VALUE=62.6&SOURCE=%2Fobjects%2F%3Fscript%3Despdata%26idesp%3DESP826600b38609%26hostname%3DBatZal-2%26dsw1%3D62.3%26uptime%3D2267660%26errconn%3D18%26wanip%3D192.168.18.59... ) [2] => Array ( [ID] => 1523538 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:32:23 [VALUE] => 1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?PROPERTY=value&NEW_VALUE=62.6&OLD_VALUE=62.1&SOURCE=%2Fobjects%2F%3Fscript%3Despdata%26idesp%3DESP826600b38609%26hostname%3DBatZal-2%26dsw1%3D62.6%26uptime%3D2267640%26errconn%3D18%26wanip%3D192.168.18.59... ) [3] => Array ( [ID] => 1523525 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:32:04 [VALUE] => -1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?PROPERTY=value&NEW_VALUE=62.1&OLD_VALUE=62.4&SOURCE=%2Fobjects%2F%3Fscript%3Despdata%26idesp%3DESP826600b38609%26hostname%3DBatZal-2%26dsw1%3D62.1%26uptime%3D2267620%26errconn%3D18%26wanip%3D192.168.18.59... ) [4] => Array ( [ID] => 1523508 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:31:43 [VALUE] => 1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?PROPERTY=value&NEW_VALUE=62.4&OLD_VALUE=62.1&SOURCE=%2Fobjects%2F%3Fscript%3Despdata%26idesp%3DESP826600b38609%26hostname%3DBatZal-2%26dsw1%3D62.4%26uptime%3D2267600%26errconn%3D18%26wanip%3D192.168.18.59... ) [5] => Array ( [ID] => 1523495 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:31:23 [VALUE] => -1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?PROPERTY=value&NEW_VALUE=62.1&OLD_VALUE=62.6&SOURCE=%2Fobjects%2F%3Fscript%3Despdata%26idesp%3DESP826600b38609%26hostname%3DBatZal-2%26dsw1%3D62.1%26uptime%3D2267580%26errconn%3D18%26wanip%3D192.168.18.59... ) [6] => Array ( [ID] => 1523463 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:30:43 [VALUE] => 1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?PROPERTY=value&NEW_VALUE=62.3&OLD_VALUE=61.6&SOURCE=%2Fobjects%2F%3Fscript%3Despdata%26idesp%3DESP826600b38609%26hostname%3DBatZal-2%26dsw1%3D62.3%26uptime%3D2267540%26errconn%3D18%26wanip%3D192.168.18.59... ) [7] => Array ( [ID] => 1523434 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:30:03 [VALUE] => -1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?PROPERTY=value&NEW_VALUE=61.8&OLD_VALUE=62.2&SOURCE=%2Fobjects%2F%3Fscript%3Despdata%26idesp%3DESP826600b38609%26hostname%3DBatZal-2%26dsw1%3D61.8%26uptime%3D2267500%26errconn%3D18%26wanip%3D192.168.18.59... ) [8] => Array ( [ID] => 1523391 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:29:03 [VALUE] => 1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?PROPERTY=value&NEW_VALUE=61.3&OLD_VALUE=61.0&SOURCE=%2Fobjects%2F%3Fscript%3Despdata%26idesp%3DESP826600b38609%26hostname%3DBatZal-2%26dsw1%3D61.3%26uptime%3D2267440%26errconn%3D18%26wanip%3D192.168.18.59... ) [9] => Array ( [ID] => 1523376 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:28:43 [VALUE] => -1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?PROPERTY=value&NEW_VALUE=61.0&OLD_VALUE=61.5&SOURCE=%2Fobjects%2F%3Fscript%3Despdata%26idesp%3DESP826600b38609%26hostname%3DBatZal-2%26dsw1%3D61.0%26uptime%3D2267420%26errconn%3D18%26wanip%3D192.168.18.59... ) [10] => Array ( [ID] => 1523344 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:28:03 [VALUE] => 1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?PROPERTY=value&NEW_VALUE=61.0&OLD_VALUE=60.6&SOURCE=%2Fobjects%2F%3Fscript%3Despdata%26idesp%3DESP826600b38609%26hostname%3DBatZal-2%26dsw1%3D61.0%26uptime%3D2267380%26errconn%3D18%26wanip%3D192.168.18.59... ) [11] => Array ( [ID] => 1523316 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:27:23 [VALUE] => -1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?
-
- Сообщения: 2084
- Зарегистрирован: Пт апр 07, 2017 12:20 pm
- Благодарил (а): 313 раз
- Поблагодарили: 457 раз
Re: [Сценарий] Анализ периода от начала суток и построение индикатора
if ($s['VALUE'] == 1) { $tmr_mem = $tmr_mem + $tmr1 - $tmr2; }
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Re: [Сценарий] Анализ периода от начала суток и построение индикатора
Не срабатывает
СпойлерПоказать
Код: Выделить всё
$start_time=date("Y-m-d").' 00:00:00';
$tmr_start = strtotime($start_time);
$tmr_now = time();
$tmr_mem = 0;
$obj_title = 'espSensor_temp04';
$arr_s = SQLSelectOne("SELECT * FROM objects WHERE TITLE='".$obj_title."'");
$obj_id = $arr_s['ID'];
$class_id = $arr_s['CLASS_ID'];
$znach = 1;
$prop_title = 'direction';
$arr_s = SQLSelectOne("SELECT * FROM properties WHERE TITLE='".$prop_title."'");
$prop_id = $arr_s['ID'];
$arr_s = SQLSelectOne("SELECT * FROM pvalues WHERE OBJECT_ID='".$obj_id."' AND PROPERTY_ID='".$prop_id."'");
$pvalue = $arr_s['ID'];
$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)."'");
$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'] == 1) { $tmr_mem = $tmr_mem + $tmr1 - $tmr2; }
$period = round( $tmr_mem * 100 / ($tmr_now - $tmr_start) );
setGlobal("espSensor_temp02.periodten",$period);
print_r($period);
СпойлерПоказать
Array ( [0] => Array ( [ID] => 1524371 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:51:43 [VALUE] => -1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?PROPERTY=value&NEW_VALUE=62.1&OLD_VALUE=62.3&SOURCE=%2Fobjects%2F%3Fscript%3Despdata%26idesp%3DESP826600b38609%26hostname%3DBatZal-2%26dsw1%3D62.1%26uptime%3D2268800%26errconn%3D18%26wanip%3D192.168.18.59... ) [1] => Array ( [ID] => 1524341 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:51:03 [VALUE] => 1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?PROPERTY=value&NEW_VALUE=61.8&OLD_VALUE=61.6&SOURCE=%2Fobjects%2F%3Fscript%3Despdata%26idesp%3DESP826600b38609%26hostname%3DBatZal-2%26dsw1%3D61.8%26uptime%3D2268760%26errconn%3D18%26wanip%3D192.168.18.59... ) [2] => Array ( [ID] => 1524308 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:50:23 [VALUE] => -1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?PROPERTY=value&NEW_VALUE=61.8&OLD_VALUE=62.0&SOURCE=%2Fobjects%2F%3Fscript%3Despdata%26idesp%3DESP826600b38609%26hostname%3DBatZal-2%26dsw1%3D61.8%26uptime%3D2268720%26errconn%3D18%26wanip%3D192.168.18.59... ) [3] => Array ( [ID] => 1524291 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:50:03 [VALUE] => 1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?PROPERTY=value&NEW_VALUE=62.0&OLD_VALUE=61.5&SOURCE=%2Fobjects%2F%3Fscript%3Despdata%26idesp%3DESP826600b38609%26hostname%3DBatZal-2%26dsw1%3D62.0%26uptime%3D2268700%26errconn%3D18%26wanip%3D192.168.18.59... ) [4] => Array ( [ID] => 1524277 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:49:43 [VALUE] => -1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?PROPERTY=value&NEW_VALUE=61.5&OLD_VALUE=61.8&SOURCE=%2Fobjects%2F%3Fscript%3Despdata%26idesp%3DESP826600b38609%26hostname%3DBatZal-2%26dsw1%3D61.5%26uptime%3D2268680%26errconn%3D18%26wanip%3D192.168.18.59... ) [5] => Array ( [ID] => 1524262 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:49:23 [VALUE] => 1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?PROPERTY=value&NEW_VALUE=61.8&OLD_VALUE=61.7&SOURCE=%2Fobjects%2F%3Fscript%3Despdata%26idesp%3DESP826600b38609%26hostname%3DBatZal-2%26dsw1%3D61.8%26uptime%3D2268660%26errconn%3D18%26wanip%3D192.168.18.59... ) [6] => Array ( [ID] => 1524229 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:48:43 [VALUE] => -1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?PROPERTY=value&NEW_VALUE=61.8&OLD_VALUE=61.9&SOURCE=%2Fobjects%2F%3Fscript%3Despdata%26idesp%3DESP826600b38609%26hostname%3DBatZal-2%26dsw1%3D61.8%26uptime%3D2268620%26errconn%3D18%26wanip%3D192.168.18.59... ) [7] => Array ( [ID] => 1524216 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:48:23 [VALUE] => 1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?PROPERTY=value&NEW_VALUE=61.9&OLD_VALUE=61.6&SOURCE=%2Fobjects%2F%3Fscript%3Despdata%26idesp%3DESP826600b38609%26hostname%3DBatZal-2%26dsw1%3D61.9%26uptime%3D2268600%26errconn%3D18%26wanip%3D192.168.18.59... ) [8] => Array ( [ID] => 1524198 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:48:03 [VALUE] => 0 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?PROPERTY=value&NEW_VALUE=61.6&OLD_VALUE=61.6&SOURCE=%2Fobjects%2F%3Fscript%3Despdata%26idesp%3DESP826600b38609%26hostname%3DBatZal-2%26dsw1%3D61.6%26uptime%3D2268580%26errconn%3D18%26wanip%3D192.168.18.59... ) [9] => Array ( [ID] => 1524183 [VALUE_ID] => 4813 [ADDED] => 2019-11-14 19:47:43 [VALUE] => -1 [SOURCE] => /api.php/method/espSensor_temp04.valueUpdated?
Re: [Сценарий] Анализ периода от начала суток и построение индикатора
Мне кажется надо сразу, при создании массива, откидывать значения 0 и -1 оставлять только 1, но как не знаю!
Re: [Сценарий] Анализ периода от начала суток и построение индикатора
И снова, здрасте!
Выручите пожалуйста!
Немного модифицировал код и работать перестало. Т.е. вроде бы работает но в историю объекта прилетают сплошные 0 и соответственно не считает значение для прогресс бара.
Модифицировал т.к. с ПУ датчика температуры прилетают не только 1 но и 0, -1.
Вроде бы удалось с этим делом разобраться, но летят 0.
Выручите пожалуйста!
Немного модифицировал код и работать перестало. Т.е. вроде бы работает но в историю объекта прилетают сплошные 0 и соответственно не считает значение для прогресс бара.
Модифицировал т.к. с ПУ датчика температуры прилетают не только 1 но и 0, -1.
Вроде бы удалось с этим делом разобраться, но летят 0.
СпойлерПоказать
Код: Выделить всё
$start_time=date("Y-m-d").' 00:00:00';
$tmr_start = strtotime($start_time);
$tmr_now = time();
$tmr_mem = 0;
$znach = 1;
$obj_title = 'espSensor_temp04';
$arr_s = SQLSelectOne("SELECT * FROM objects WHERE TITLE='".$obj_title."'");
$obj_id = $arr_s['ID'];
$class_id = $arr_s['CLASS_ID'];
$prop_title = 'direction';
$arr_s = SQLSelectOne("SELECT * FROM properties WHERE TITLE='".$prop_title."'");
$prop_id = $arr_s['ID'];
$arr_s = SQLSelectOne("SELECT * FROM pvalues WHERE OBJECT_ID='".$obj_id."' AND PROPERTY_ID='".$prop_id."'");
$pvalue = $arr_s['ID'];
$arr_s = SQLSelect ("SELECT * FROM phistory WHERE VALUE_ID=".$pvalue." AND VALUE='".$znach."' AND ADDED>='".date('Y-m-d H:i:s', $tmr_start)."'");
$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)."' AND VALUE='".$znach."'");
$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) );
print_r($period);
setGlobal("espSensor_temp04.periodten",$period);
-
- Сообщения: 2084
- Зарегистрирован: Пт апр 07, 2017 12:20 pm
- Благодарил (а): 313 раз
- Поблагодарили: 457 раз
Re: [Сценарий] Анализ периода от начала суток и построение индикатора
то что у вас не смотрел, но нет, у меня режим никого нет 0,1,2 2- все спят, его считаю и все отлично работает
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
- xor
- Сообщения: 2039
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 286 раз
- Поблагодарили: 629 раз
Re: [Сценарий] Анализ периода от начала суток и построение индикатора
кстати, сошлюсь на себя 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 %
- Рейтинг: 1.16%
win10 connect https://connect.smartliving.ru/profile/303
-
- Сообщения: 2084
- Зарегистрирован: Пт апр 07, 2017 12:20 pm
- Благодарил (а): 313 раз
- Поблагодарили: 457 раз
Re: [Сценарий] Анализ периода от начала суток и построение индикатора
ту ксор
вот и доработать функцию, на входе еще что считать, на выходе в массиве общее и того что считали
ту тс
так и не понял физический смысл измерения направления изменения сенсора, а не факт работы тена, т.е. статус 1
вот и доработать функцию, на входе еще что считать, на выходе в массиве общее и того что считали
ту тс
так и не понял физический смысл измерения направления изменения сенсора, а не факт работы тена, т.е. статус 1
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Re: [Сценарий] Анализ периода от начала суток и построение индикатора
В батареи датчик температуры и sonoff, режим работы (eco и comfort) переключает он + на нем датчик температуры который смотрит растет температура или нет. По ниму и смотрю время физической работы тена в радиаторе. Хочу знать в расчете на сутки сколько он раз включился, для начала в процентном отношении и по среднему посчитать потребление электроэнергии каждым конвектором