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

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

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

Ander
Сообщения: 56
Зарегистрирован: Вс авг 27, 2017 9:20 pm
Благодарил (а): 7 раз
Поблагодарили: 0

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

Сообщение Ander » Пт июн 08, 2018 9:00 am

Есть отопитель -объект со свойством принимающим значения 0,1. Как определить время включенного состояния за период времени?
Пробовал getHistoryAvg. При общем времени включенного состояния 5 мин за сутки выдает значение 0.375, чего быть не может. Самое интересное, что если взять период 1day, 3day ... значение не меняется.
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

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

Сообщение xor » Пт июн 08, 2018 12:32 pm

На форуме считали время работы экономрежима. Очень похожая задача. Поищите.
Logrus
Сообщения: 2084
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

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

Сообщение Logrus » Пт июн 08, 2018 2:16 pm

еще у меня в класс девайс методы можно посмотреть
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

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

Сообщение Chainik » Пт июн 08, 2018 2:22 pm

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);
}
Logrus
Сообщения: 2084
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

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

Сообщение Logrus » Пт июн 08, 2018 2:25 pm

ага, недоделано до идеала/красоты то что закомментировано это в пу счетчик когда он появился хотел, но не понравилось, может сейчас изменили/доработали его, но то что есть работает (мне общее нужно, можно и только за час, сутки, неделю сделать)
т.ч. для тс выбор есть )))

а вообще без кода "Пробовал getHistoryAvg." как из среднего получали, скорее всего в вашем коде что-то не так
За это сообщение автора Logrus поблагодарил:
Chainik (Пт июн 08, 2018 2:41 pm)
Рейтинг: 1.16%
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Ander
Сообщения: 56
Зарегистрирован: Вс авг 27, 2017 9:20 pm
Благодарил (а): 7 раз
Поблагодарили: 0

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

Сообщение Ander » Сб июн 09, 2018 10:29 am

Написать код конечно можно, и все же как работает функция getHistoryAvg и чем отличается от getHistoryValue?
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

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

Сообщение 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("Ночью была минусовая температура"); 
Logrus
Сообщения: 2084
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

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

Сообщение Logrus » Сб июн 09, 2018 1:27 pm

названия функций есть, поиск по гитхабу тоже работает, код который неверно работал так и не увидел никто )))
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Logrus
Сообщения: 2084
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

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

Сообщение Logrus » Сб июн 09, 2018 1:30 pm

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
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

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

Сообщение xor » Сб июн 09, 2018 4:36 pm

Я так понимаю, что для верной работы 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");
Ответить