Страница 1 из 2

[Сценарий] Определение скважности работы отопителя

Добавлено: Пт июн 08, 2018 9:00 am
Ander
Есть отопитель -объект со свойством принимающим значения 0,1. Как определить время включенного состояния за период времени?
Пробовал getHistoryAvg. При общем времени включенного состояния 5 мин за сутки выдает значение 0.375, чего быть не может. Самое интересное, что если взять период 1day, 3day ... значение не меняется.

Re: Определение скважности работы отопителя

Добавлено: Пт июн 08, 2018 12:32 pm
xor
На форуме считали время работы экономрежима. Очень похожая задача. Поищите.

Re: Определение скважности работы отопителя

Добавлено: Пт июн 08, 2018 2:16 pm
Logrus
еще у меня в класс девайс методы можно посмотреть

Re: Определение скважности работы отопителя

Добавлено: Пт июн 08, 2018 2:22 pm
Chainik
Logrus писал(а):
Пт июн 08, 2018 2:16 pm
еще у меня в класс девайс методы можно посмотреть
В смысле вот это?

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

$last_register = $this->getProperty('Time');
$this->setProperty('Time', time());
$ot = $this->object_title;

if ($this->getProperty('online') != 1)
{
 $period = time() - $last_register;
 //в ПУ время работы
 //sg($ot . 'Counter.valueWork', $period);
 //в свое свойство время работы
 //$value = $this->getProperty('value');
 $value = $this->getProperty('value') + $period;
 $this->setProperty('value',$value);
 //date_default_timezone_set('Etc/GMT0');
 //$this->setProperty('working', date('d:H:i', $value));
 $this->setProperty('working', sprintf('%02d:%02d:%02d', $value/3600, ($value%3600)/60, ($value%3600)%60));
}
else
{
 //$period = time() - $last_register;
 //в ПУ время простоя
 //sg($ot . 'Counter.valueWork', $period);
}

Re: Определение скважности работы отопителя

Добавлено: Пт июн 08, 2018 2:25 pm
Logrus
ага, недоделано до идеала/красоты то что закомментировано это в пу счетчик когда он появился хотел, но не понравилось, может сейчас изменили/доработали его, но то что есть работает (мне общее нужно, можно и только за час, сутки, неделю сделать)
т.ч. для тс выбор есть )))

а вообще без кода "Пробовал getHistoryAvg." как из среднего получали, скорее всего в вашем коде что-то не так

Re: Определение скважности работы отопителя

Добавлено: Сб июн 09, 2018 10:29 am
Ander
Написать код конечно можно, и все же как работает функция getHistoryAvg и чем отличается от getHistoryValue?

Re: Определение скважности работы отопителя

Добавлено: Сб июн 09, 2018 1:24 pm
xor
Из примеров

Если среднесуточная температура меньше 7 градусов, то пора менять колёса на зимние.

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

 if (getHistoryAvg("tsrearyard.temp", strtotime("-1 day")) < 7)
   say("Пора менять колёса на зимние");



Самое интересное можно взять значение на определённом отрезке времени, даже если выборки попали между запросом (Берутся 2 точки до и после, из них делается интерполяция)

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

if (getHistoryValue("tsrearyard.temp", strtotime("03:00")) < 0)
   say("Ночью была минусовая температура"); 

Re: Определение скважности работы отопителя

Добавлено: Сб июн 09, 2018 1:27 pm
Logrus
названия функций есть, поиск по гитхабу тоже работает, код который неверно работал так и не увидел никто )))

Re: Определение скважности работы отопителя

Добавлено: Сб июн 09, 2018 1:30 pm
Logrus
xor писал(а):
Сб июн 09, 2018 1:24 pm
Из примеров

Если среднесуточная температура меньше 7 градусов, то пора менять колёса на зимние.

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

 if (getHistoryAvg("tsrearyard.temp", strtotime("-1 day")) < 7)
   say("Пора менять колёса на зимние");



Самое интересное можно взять значение на определённом отрезке времени, даже если выборки попали между запросом (Берутся 2 точки до и после, из них делается интерполяция)

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

if (getHistoryValue("tsrearyard.temp", strtotime("03:00")) < 0)
   say("Ночью была минусовая температура"); 
там, на форуме помимо примера, а у тс несколько другое расписаны параметры на входе
viewtopic.php?f=7&t=2997&p=34229&hilit= ... ory#p34229

Re: Определение скважности работы отопителя

Добавлено: Сб июн 09, 2018 4:36 pm
xor
Я так понимаю, что для верной работы gethistoryavg необходимо, чтобы в таблице хранились данные, взятые через один и тот же интервал времени+должно быть условие на сохранение повторяющихся данных.
Сужу по коду в \lib\objects.class.php:

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

        // Get data
        $data = SQLSelectOne("SELECT AVG(VALUE+0.0) AS VALUE FROM $table_name ".
                "WHERE  VALUE != \"\" AND VALUE_ID='".$id."' AND ADDED>=('".date('Y-m-d H:i:s', $start_time)."') AND ADDED<=('".date('Y-m-d H:i:s', $stop_time)."')");

        if (!$data['VALUE']) {
            $data = SQLSelectOne("SELECT VALUE+0.0 FROM $table_name ".
                "WHERE  VALUE != \"\" AND VALUE_ID='".$id."' AND ADDED<('".date('Y-m-d H:i:s', $start_time)."') ORDER BY ADDED DESC LIMIT 1");