a:1:{i:0;a:8:{s:5:"TITLE";s:10:"Thermostat";s:9:"PARENT_ID";s:1:"0";s:5:"NOLOG";s:1:"0";s:11:"DESCRIPTION";s:14:"ПЗА ver 1.0";s:8:"TEMPLATE";s:12208:" %.object_description% Текущая температура воздуха Текущая %.airCurrentTemp%°C Индикатор работы и таймеров температура по ПЗА ПЗА вода %.pzaTemp%°C Расчетная температура теплоносителя Расчетная %.waterRequiredTemp%°C Текущая температура теплоносителя Текущая %.waterCurrentTemp%°C Сообщения вкл по температуре уст. таймер работы Отклонение вверх и вниз Гистерезис %.hysteresis%°C Автоматическое или ручное управление auto manual Расчет температуры воздуха по суточному термостату Расчетная температура воздуха %.airRequiredTemp%°C ";s:7:"METHODS";a:10:{i:0;a:8:{s:5:"TITLE";s:7:"refresh";s:11:"DESCRIPTION";s:51:"вызвать после изменения status";s:4:"CODE";s:347:"if (defined('THRM_LOG_LEVEL') && THRM_LOG_LEVEL != '') { $log_level = THRM_LOG_LEVEL; } else { $log_level = 0; } if ($log_level>0) { $ot=$this->object_title; } if ($log_level>1) { DebMes($ot.'.refresh','thrm'); } $status=$this->getProperty('status'); if ($status) { $this->callMethod('turnOn'); } else { $this->callMethod('turnOff'); }";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-21 16:52:47";s:15:"EXECUTED_PARAMS";s:42:"{"ORIGINAL_OBJECT_TITLE":"thrm_gamma_100"}";s:12:"EXECUTED_SRC";s:0:"";}i:1;a:8:{s:5:"TITLE";s:12:"airCalculate";s:11:"DESCRIPTION";s:77:"рассчитать требуемую температуру воздуха";s:4:"CODE";s:5343:"/* Расчет целевой температуры воздуха в зависимости от времени суток В результате записывается свойство с историей airRequiredTemp для построения графика и контроля достижения заданной температуры; и свойство без истории airShiftTemp для расчета температуры подачи с учетом инерции системы. Если целевая t воздуха в свойстве airFunc задана числом, то переменная $t_desire будет равна этому числу, и часть кода для расчета суточной температуры не будет выполняться. airRequiredTemp и airShiftTemp будут установлены = $t_desire Если airFunc задана массивом, то в airRequiredTemp будет записана температура по текущему часу, а в airShiftTemp температура со сдвигом по свойству timeShift */ if (defined('THRM_LOG_LEVEL') && THRM_LOG_LEVEL != '') { $log_level = THRM_LOG_LEVEL; } else { $log_level = 0; } if ($log_level>0) { $ot=$this->object_title; } if ($log_level>1) { DebMes($ot.'.airCalculate','thrm'); } $h=(int)date('G',time()); $m=date('i',time()); $airFunc=$this->getProperty('airFunc'); // свойство airFunc может содержать массив из 24 цифр разделенных пробелом, либо только одну цифру. if (is_numeric($airFunc)) { $t_desire = $airFunc; // логи if ($log_level>1) { DebMes("$ot Свойство airFunc задано числом $t_desire",'thrm'); } } else { // логи if ($log_level>1) { DebMes("$ot Свойство airFunc задано массивом",'thrm'); } // Преобразовать строку в массив $arrTemp=explode(' ', $airFunc); // Проверить корректность массива температур if (count($arrTemp)<>24) { if ($log_level>0) { DebMes("$ot ИСКЛЮЧЕНИЕ в методе airCalculate объекта ".$this->object_title.' не корректный массив в свойстве airFunc','thrm'); } say("$ot Исключение в методе airCalculate объекта ".$this->object_title); return; } // Получить значение температуры текущего часа $t_desire=$arrTemp[$h]; // следующий элемент массива $hn=$h+1; if ($hn>23) {$hn-=24;} // пропорционально изменить на разницу значения следующего часа $t_desire+=($arrTemp[$hn]-$arrTemp[$h])*$m/60; $t_desire=round($t_desire, 1); // логи if ($log_level>1) { DebMes("$ot Установленная температура текущего часа $arrTemp[$h]",'thrm'); DebMes("$ot Установленная температура следующего часа $arrTemp[$hn]",'thrm'); } } // логи if ($log_level>0) { DebMes("$ot целевая температура воздуха $t_desire",'thrm'); } // airRequiredTemp используется в основном для построения графиков // и показа желаемого значения температуры на элементах термостатов $this->setProperty('airRequiredTemp', $t_desire); // пересчитать со здвигом значение $t_desire если $airFunc не число // иначе $t_desire останется равным числу в $airFunc if (!is_numeric($airFunc)) { // Смотреть в будущее чтобы успеть по причине инерционности системы $h+=$this->getProperty('timeShift'); if ($h>23) {$h-=24;} // Получить значение температуры текущего часа $t_desire=$arrTemp[$h]; // следующий элемент массива $hn=$h+1; if ($hn>23) {$hn-=24;} // пропорционально изменить на разницу значения следующего часа $t_desire+=($arrTemp[$hn]-$arrTemp[$h])*$m/60; $t_desire=round($t_desire, 1); // логи if ($log_level>1) { DebMes("$ot Установленная температура будущего часа $arrTemp[$h]",'thrm'); DebMes("$ot Установленная температура следующего часа $arrTemp[$hn]",'thrm'); } if ($log_level>0) { DebMes("$ot Требуемая будущая температура $t_desire",'thrm'); } } // сохраненная будущая температура не равна расчетной будущей // перезапись новой температуры, вызов метода расчета t подачи воды if ($this->getProperty('airShiftTemp') <> $t_desire) { $this->setProperty('airShiftTemp', $t_desire); $this->callMethod('waterCalculate', array('airShiftTemp'=>$t_desire)); }";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-24 21:35:00";s:15:"EXECUTED_PARAMS";s:42:"{"ORIGINAL_OBJECT_TITLE":"thrm_gamma_100"}";s:12:"EXECUTED_SRC";s:105:"/api.php/method/ClockChimeClimate.onNewMinute?m_c_s[0]=ClockChimeClimate.onNewMinute&r_s_m=1&no_session=1";}i:2;a:8:{s:5:"TITLE";s:12:"pzaCalculate";s:11:"DESCRIPTION";s:50:"рассчитать температуру ПЗА";s:4:"CODE";s:3351:"/* Расчет требуемой температуры подачи по ПЗА Учитывается уличная температура, скорость ветра, яркость солнца Коэффициенты влияния этих факторов указаны в коде */ if (defined('THRM_LOG_LEVEL') && THRM_LOG_LEVEL != '') { $log_level = THRM_LOG_LEVEL; } else { $log_level = 0; } if ($log_level>0) { $ot=$this->object_title; } if ($log_level>1) { DebMes($ot.'.pzaCalculate','thrm'); } // температура улица. ВНИМАНИЕ данные берутся с объекта улицы if (isset($params['t'])) { $t =$params['t']; } else { $t = gg('weather_now.temperature'); } // коэффициент выбора кривой. Поднимает хвост графика. Увеличить для + в морозы if (isset($params['k1'])) { $k1 =$params['k1']; } else { $k1 = $this->getProperty('K1'); } // коэффициент правки всей кривой. Перемещает вверх/вниз весь график if (isset($params['k2'])) { $k2 =$params['k2']; } else { $k2 = $this->getProperty('K2'); } // значение по умолчанию if (!$k1) { $k1=1.5; } if (!$k2) { $k2=20; } // Рассчитать изгиб кривой $Tp = sqrt((20-$t)*$k1)*10; if (!isset($params['t']) && $log_level>1) { DebMes("$ot Изгиб кривой $Tp",'thrm'); } // При увеличении желаемой комнатной температуры на 1°C кривая традиционно смещается на 5°C: $Tp = $Tp + ($k2-20)*5; if (!isset($params['t']) && $log_level>1) { DebMes("$ot Смещение кривой $Tp",'thrm'); } // Правка на ветер // <3 Слабый <6 Сильный <9 Очень сильный Иначе Шквальный // поправку вносим от 0 до 10 м*с. Корректировка на 25% $Tp+=$Tp*25/100 * min(max(gg('weather_now.windSpeed')/10,0),1)**3; if (!isset($params['t']) && $log_level>1) { DebMes("$ot Поправка на ветер $Tp",'thrm'); } // Правка на солнце // Освещенность наблюдается от 0 до 600 пунктов. Понижать t будет от 200 до 600 // Корректировка на 10% //$Tp-=$Tp*10/100 * min(max((gg('DrivewayArea.Luminiscence')-200)/400,0),1); $Tp-=$Tp*10/100 * min(max(gg('DrivewayArea.Luminiscence')/600,0),1)**3; if (!isset($params['t']) && $log_level>1) { DebMes("$ot Поправка на солнце $Tp",'thrm'); } // округлить, ограничить и записать $Tp = round($Tp); $Tp = min($Tp,85); $Tp = max($Tp,20); if (!isset($params['t']) && $log_level>0) { DebMes("$ot Итоговая t по ПЗА $Tp",'thrm'); } // при передаче параметра t вернуть ответ для графиков или метода waterCalculate. // Иначе установка свойства и запуск метода if (isset($params['t'])) { if ($log_level>0) { DebMes("$ot На запрос уличной $t отправлен ответ $Tp",'thrm'); } return($Tp); } else { $this->setProperty('pzaTemp', $Tp); $this->callMethod('waterCalculate', array('pzaTemp'=>$Tp)); }";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-24 21:35:01";s:15:"EXECUTED_PARAMS";s:50:"{"t":-30,"ORIGINAL_OBJECT_TITLE":"thrm_bathhouse"}";s:12:"EXECUTED_SRC";s:253:"/api.php/method/thrm_bathhouse.waterCalculate?PROPERTY=airCurrentTemp&NEW_VALUE=20.4&OLD_VALUE=20.4&SOURCE=/api.php/script/82?raiseEvent=1&m_c_s[0]=ClockChimeWorker.onNewMinute&m_c_s[1]=Anteroom.onTempChanges.bfa3f0a7b99ee306f82e9fdc1f3c61b7&m_c_s[2]...";}i:3;a:8:{s:5:"TITLE";s:8:"mayBanOn";s:11:"DESCRIPTION";s:156:"метод может запретить работу термостата. Для этого в коде метода должен быть return true; ";s:4:"CODE";s:215:"if (defined('THRM_LOG_LEVEL') && THRM_LOG_LEVEL != '') { $log_level = THRM_LOG_LEVEL; } else { $log_level = 0; } if ($log_level>0) { $ot=$this->object_title; } if ($log_level>1) { DebMes($ot.'.mayBanOn','thrm'); }";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-24 21:35:01";s:15:"EXECUTED_PARAMS";s:42:"{"ORIGINAL_OBJECT_TITLE":"thrm_bathhouse"}";s:12:"EXECUTED_SRC";s:253:"/api.php/method/thrm_bathhouse.waterCalculate?PROPERTY=airCurrentTemp&NEW_VALUE=20.4&OLD_VALUE=20.4&SOURCE=/api.php/script/82?raiseEvent=1&m_c_s[0]=ClockChimeWorker.onNewMinute&m_c_s[1]=Anteroom.onTempChanges.bfa3f0a7b99ee306f82e9fdc1f3c61b7&m_c_s[2]...";}i:4;a:8:{s:5:"TITLE";s:14:"waterCalculate";s:11:"DESCRIPTION";s:56:"рассчитать температуру подачи";s:4:"CODE";s:2834:"/* Расчет температуры подачи если фактическая температура воздуха +3 <= заблаговременной расчетной т.е. запаздываем на 3 градуса, то берем максимальную температуру подачи из ПЗА. иначе если температура воздуха +1 <= заблаговременной расчетной т.е. меньше заданной на 1 градус, то берем температуру по ПЗА иначе при приближении к заблаговременной температуре воздуха, начинаем уменьшать t подачи */ if (defined('THRM_LOG_LEVEL') && THRM_LOG_LEVEL != '') { $log_level = THRM_LOG_LEVEL; } else { $log_level = 0; } if ($log_level>0) { $ot=$this->object_title; } if ($log_level>1) { DebMes($ot.'.waterCalculate','thrm'); } // температура по ПАЗ if (isset($params['pzaTemp'])) { $pzat=$params['pzaTemp']; } else { $pzat=$this->getProperty('pzaTemp'); } // текущая температура воздуха (возможно выцепить без обращения к db) $act = $this->getProperty('airCurrentTemp'); // заблаговременный расчет требуемой температуры воздуха if (isset($params['airShiftTemp'])) { $ast=$params['airShiftTemp']; } else { $ast=$this->getProperty('airShiftTemp'); } if ($act+3<=$ast) { $t='максимальная t подачи из ПЗА'; $wrt=$this->callMethod('pzaCalculate', array('t'=>-30)); // Получить максимальную температуру по ПЗА; } elseif ($act+1<=$ast) { $t='t подачи по ПЗА'; $wrt=$pzat; } else { $t='коррекция t при приближении'; // 15% от температуры ПЗА * коэффициент приближения // после превышения до 1 градуса ещё 15 процентов упеньшения подачи // коррекция идет по логарифмической шкале $wrt=$pzat; $wrt-=$pzat*15/100 * min(max((1-$ast+$act)**2,0),2); $wrt=round($wrt); } if ($log_level>0) { DebMes("$ot $t $wrt",'thrm'); } if ($this->getProperty('waterRequiredTemp') <> $wrt) { $this->setProperty('waterRequiredTemp', $wrt); // Запуск исполняющих методов $this->callMethod('setTemperature', array('waterRequiredTemp'=>$wrt)); $this->callMethod('positionServo', array('waterRequiredTemp'=>$wrt)); } // подумать когда и при каких условиях вызывать чтобы сократить выполнение кода $this->callMethod('workDecision');";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-24 21:35:01";s:15:"EXECUTED_PARAMS";s:154:"{"PROPERTY":"airCurrentTemp","NEW_VALUE":"20.4","OLD_VALUE":"20.4","raiseEvent":"1","r_s_m":"1","no_session":"1","ORIGINAL_OBJECT_TITLE":"thrm_bathhouse"}";s:12:"EXECUTED_SRC";s:253:"/api.php/method/thrm_bathhouse.waterCalculate?PROPERTY=airCurrentTemp&NEW_VALUE=20.4&OLD_VALUE=20.4&SOURCE=/api.php/script/82?raiseEvent=1&m_c_s[0]=ClockChimeWorker.onNewMinute&m_c_s[1]=Anteroom.onTempChanges.bfa3f0a7b99ee306f82e9fdc1f3c61b7&m_c_s[2]...";}i:5;a:8:{s:5:"TITLE";s:7:"turnOff";s:11:"DESCRIPTION";s:36:"управление вкл/выкл";s:4:"CODE";s:670:"if (defined('THRM_LOG_LEVEL') && THRM_LOG_LEVEL != '') { $log_level = THRM_LOG_LEVEL; } else { $log_level = 0; } if ($log_level>0) { $ot=$this->object_title; } if ($log_level>1) { DebMes($ot.'.turnOff','thrm'); } $this->setProperty('status',0); $n = $this->object_title; // Время минимальной работы $mintimeoff = $this->getProperty('mintimeoff'); if ( !is_numeric($mintimeoff) ) {$mintimeoff = 20*60;} // установить таймер паузы setTimeOut($n.'_nowork', "debmes('Tаймер $n закончен'); cm('$n.workDecision');", $mintimeoff); // Удалить таймер работы clearTimeOut($n.'_work');";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-24 06:55:00";s:15:"EXECUTED_PARAMS";s:38:"{"ORIGINAL_OBJECT_TITLE":"thrm_alpha"}";s:12:"EXECUTED_SRC";s:105:"/api.php/method/ClockChimeClimate.onNewMinute?m_c_s[0]=ClockChimeClimate.onNewMinute&r_s_m=1&no_session=1";}i:6;a:8:{s:5:"TITLE";s:6:"turnOn";s:11:"DESCRIPTION";s:36:"управление вкл/выкл";s:4:"CODE";s:664:"if (defined('THRM_LOG_LEVEL') && THRM_LOG_LEVEL != '') { $log_level = THRM_LOG_LEVEL; } else { $log_level = 0; } if ($log_level>0) { $ot=$this->object_title; } if ($log_level>1) { DebMes($ot.'.turnOn','thrm'); } $this->setProperty('status',1); $n = $this->object_title; // Время минимальной работы $mintimeon = $this->getProperty('mintimeon'); if ( !is_numeric($mintimeon) ) {$mintimeon = 15*60;} //установить таймер работы setTimeOut($n.'_work', "debmes('Tаймер $n закончен'); cm('$n.workDecision');", $mintimeon); // Удалить таймер паузы clearTimeOut($n.'_nowork');";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-24 09:43:21";s:15:"EXECUTED_PARAMS";s:38:"{"ORIGINAL_OBJECT_TITLE":"thrm_alpha"}";s:12:"EXECUTED_SRC";s:253:"/api.php/method/thrm_alpha.waterCalculate?PROPERTY=airCurrentTemp&NEW_VALUE=23.3&OLD_VALUE=23.4&SOURCE=/api.php/script/69?raiseEvent=1&m_c_s[0]=Livingroom.onTempChanges.cb8af5c4f4859f09821fdb2b7b2c552e&m_c_s[1]=script.69&r_s_s=1&no_session=1&raiseEve...";}i:7;a:8:{s:5:"TITLE";s:13:"positionServo";s:11:"DESCRIPTION";s:47:"управление сервоприводом";s:4:"CODE";s:641:"/* Вызывается когда меняется текущая или расчетная температура подачи, при разнице температур запускает на некоторое время мотор сервопривода в нужную сторону. по размеру разницы можно устанавливать время работы привода. */ if (defined('THRM_LOG_LEVEL') && THRM_LOG_LEVEL != '') { $log_level = THRM_LOG_LEVEL; } else { $log_level = 0; } if ($log_level>0) { $ot=$this->object_title; } if ($log_level>1) { DebMes($ot.'.positionServo','thrm'); }";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-24 21:35:01";s:15:"EXECUTED_PARAMS";s:156:"{"PROPERTY":"waterCurrentTemp","NEW_VALUE":"33.8","OLD_VALUE":"33.8","raiseEvent":"1","r_s_m":"1","no_session":"1","ORIGINAL_OBJECT_TITLE":"thrm_bathhouse"}";s:12:"EXECUTED_SRC";s:253:"/api.php/method/thrm_bathhouse.positionServo?PROPERTY=waterCurrentTemp&NEW_VALUE=33.8&OLD_VALUE=33.8&SOURCE=/api.php/method/ClockChimeWorker.onNewMinute?m_c_s[0]=ClockChimeWorker.onNewMinute&r_s_m=1&no_session=1&raiseEvent=1&m_c_s[0]=ClockChimeWorker...";}i:8;a:8:{s:5:"TITLE";s:14:"setTemperature";s:11:"DESCRIPTION";s:60:"установка требуемой температуры";s:4:"CODE";s:483:"// Вызывается когда меняется текущая или расчетная температура подачи, // передает другому объекту или агрегату расчетную температуру подачи. if (defined('THRM_LOG_LEVEL') && THRM_LOG_LEVEL != '') { $log_level = THRM_LOG_LEVEL; } else { $log_level = 0; } if ($log_level>0) { $ot=$this->object_title; } if ($log_level>1) { DebMes($ot.'.setTemperature','thrm'); }";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-24 21:06:23";s:15:"EXECUTED_PARAMS";s:65:"{"waterRequiredTemp":55,"ORIGINAL_OBJECT_TITLE":"thrm_gamma_100"}";s:12:"EXECUTED_SRC";s:253:"/api.php/method/thrm_gamma_100.waterCalculate?PROPERTY=airCurrentTemp&NEW_VALUE=22.8&OLD_VALUE=22.9&SOURCE=/api.php/script/69?raiseEvent=1&m_c_s[0]=Livingroom.onTempChanges.882d9945277e9d36342bf6f7962e29c4&m_c_s[1]=script.69&r_s_s=1&no_session=1&rais...";}i:9;a:8:{s:5:"TITLE";s:12:"workDecision";s:11:"DESCRIPTION";s:124:"Принять решение о работе котла или насоса. Аналог метода logic по сути";s:4:"CODE";s:3825:"/* Принимает решение о работе котла или насоса, на основе текущей и требуемой температуры воздуха Запускается из метода airCalculate, а так же может быть вызван при необходимости проверки решения о работе котла из других элементов системы */ if (defined('THRM_LOG_LEVEL') && THRM_LOG_LEVEL != '') { $log_level = THRM_LOG_LEVEL; } else { $log_level = 0; } if ($log_level>0) { $ot=$this->object_title; } if ($log_level>1) { DebMes($ot.'.workDecision','thrm'); } // Не выполнять логику если установлен ручной режим if (!$this->getProperty('auto')) { if ($log_level>0) { DebMes("$ot Выполнение запрещено. auto режим не выбран",'thrm'); } return; } // Сбор данных $s = $this->getProperty('status'); $t = $this->getProperty('Title'); $n = $this->object_title; $t_desire = $this->getProperty('airShiftTemp'); // гистерезис и значение по умолчанию $hyst = $this->getProperty('hysteresis'); if (!is_numeric($hyst)) {$hyst = 0.2;} // предельные температуры подачи и значения по умолчанию $waterMaxTemp = $this->getProperty('waterMaxTemp'); $waterMinTemp = $this->getProperty('waterMinTemp'); if (!is_numeric($waterMaxTemp)) {$waterMaxTemp = 75;} if (!is_numeric($waterMinTemp)) {$waterMinTemp = 10;} // Текущая температура подачи. Если данных нет, // то принять за 25, чтобы исключить влияние на решение $waterCurrentTemp = $this->getProperty('waterCurrentTemp'); if (!is_numeric($waterCurrentTemp)) {$waterCurrentTemp = 25;} /* Получить значение метода, запрещающего работу. В некоторых ситуациях необходимо запретить работу. Например, в данный момент у нас работает бойлер нагрева горячей воды, и предел допустимой мощности не позвоняет включить электрический. */ $mayBanOn = intval($this->callmethod('mayBanOn')); // При запрете метод вернет 2. Преобразовать ответ в true / false if ($log_level>1) { DebMes("$ot метод mayBanOn вернул $mayBanOn",'thrm'); } if ($mayBanOn == 2) {$mayBanOn = true;} else {$mayBanOn = false;} if ($s) { // текущая t воздуха >= заблаговременной требуемой + гистерезис if ($this->getProperty('airCurrentTemp') >= $t_desire + $hyst || $mayBanOn || $waterCurrentTemp > $waterMaxTemp) { // Если существует таймер if (timeOutExists($n.'_work') && !$mayBanOn && $waterCurrentTemp < $waterMaxTemp) { if ($log_level>0) { DebMes("$ot Обеспечение минимального времени работы котла $t",'thrm'); } } else { $this->callMethod('turnOff'); } } } else { // текущая t воздуха <= заблаговременной требуемой - гистерезис if (($this->getProperty('airCurrentTemp') <= $t_desire - $hyst || $waterCurrentTemp < $waterMinTemp) && !$mayBanOn) { // Если существует таймер паузы if (timeOutExists($n.'_nowork')) { if ($log_level>0) { DebMes("$ot Обеспечение минимальной паузы перед включением котла $t",'thrm'); } } else { $this->callMethod('turnOn'); } } }";s:11:"CALL_PARENT";s:1:"0";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-24 21:35:01";s:15:"EXECUTED_PARAMS";s:42:"{"ORIGINAL_OBJECT_TITLE":"thrm_bathhouse"}";s:12:"EXECUTED_SRC";s:253:"/api.php/method/thrm_bathhouse.waterCalculate?PROPERTY=airCurrentTemp&NEW_VALUE=20.4&OLD_VALUE=20.4&SOURCE=/api.php/script/82?raiseEvent=1&m_c_s[0]=ClockChimeWorker.onNewMinute&m_c_s[1]=Anteroom.onTempChanges.bfa3f0a7b99ee306f82e9fdc1f3c61b7&m_c_s[2]...";}}s:10:"PROPERTIES";a:18:{i:0;a:12:{s:5:"TITLE";s:5:"Title";s:11:"DESCRIPTION";s:39:"Имя комнаты или котла";s:12:"KEEP_HISTORY";s:1:"0";s:8:"ONCHANGE";s:0:"";s:6:"SYSTEM";s:0:"";s:8:"DATA_KEY";s:1:"0";s:9:"DATA_TYPE";s:1:"0";s:15:"VALIDATION_TYPE";s:1:"0";s:18:"VALIDATION_NUM_MIN";s:0:"";s:18:"VALIDATION_NUM_MAX";s:0:"";s:15:"VALIDATION_LIST";s:0:"";s:15:"VALIDATION_CODE";N;}i:1;a:12:{s:5:"TITLE";s:7:"pzaTemp";s:11:"DESCRIPTION";s:34:"температура по ПЗА";s:12:"KEEP_HISTORY";s:1:"7";s:8:"ONCHANGE";s:0:"";s:6:"SYSTEM";s:0:"";s:8:"DATA_KEY";s:1:"0";s:9:"DATA_TYPE";s:1:"0";s:15:"VALIDATION_TYPE";s:1:"0";s:18:"VALIDATION_NUM_MIN";s:0:"";s:18:"VALIDATION_NUM_MAX";s:0:"";s:15:"VALIDATION_LIST";s:0:"";s:15:"VALIDATION_CODE";N;}i:2;a:12:{s:5:"TITLE";s:16:"waterCurrentTemp";s:11:"DESCRIPTION";s:43:"текущая t теплоносителя";s:12:"KEEP_HISTORY";s:1:"7";s:8:"ONCHANGE";s:13:"positionServo";s:6:"SYSTEM";s:0:"";s:8:"DATA_KEY";s:1:"0";s:9:"DATA_TYPE";s:1:"0";s:15:"VALIDATION_TYPE";s:1:"0";s:18:"VALIDATION_NUM_MIN";s:0:"";s:18:"VALIDATION_NUM_MAX";s:0:"";s:15:"VALIDATION_LIST";s:0:"";s:15:"VALIDATION_CODE";N;}i:3;a:12:{s:5:"TITLE";s:17:"waterRequiredTemp";s:11:"DESCRIPTION";s:47:"расчетная t теплоносителя";s:12:"KEEP_HISTORY";s:1:"7";s:8:"ONCHANGE";s:0:"";s:6:"SYSTEM";s:0:"";s:8:"DATA_KEY";s:1:"0";s:9:"DATA_TYPE";s:1:"0";s:15:"VALIDATION_TYPE";s:1:"0";s:18:"VALIDATION_NUM_MIN";s:0:"";s:18:"VALIDATION_NUM_MAX";s:0:"";s:15:"VALIDATION_LIST";s:0:"";s:15:"VALIDATION_CODE";N;}i:4;a:12:{s:5:"TITLE";s:7:"airFunc";s:11:"DESCRIPTION";s:162:"массив из 24 цифр (0...23 час) разделенных пробелом, либо только одну цифру желаемой t воздуха";s:12:"KEEP_HISTORY";s:1:"0";s:8:"ONCHANGE";s:0:"";s:6:"SYSTEM";s:0:"";s:8:"DATA_KEY";s:1:"0";s:9:"DATA_TYPE";s:1:"0";s:15:"VALIDATION_TYPE";s:1:"0";s:18:"VALIDATION_NUM_MIN";s:0:"";s:18:"VALIDATION_NUM_MAX";s:0:"";s:15:"VALIDATION_LIST";s:0:"";s:15:"VALIDATION_CODE";N;}i:5;a:12:{s:5:"TITLE";s:9:"timeShift";s:11:"DESCRIPTION";s:100:"временной сдвиг по причине инерционности системы (час)";s:12:"KEEP_HISTORY";s:1:"0";s:8:"ONCHANGE";s:0:"";s:6:"SYSTEM";s:0:"";s:8:"DATA_KEY";s:1:"0";s:9:"DATA_TYPE";s:1:"0";s:15:"VALIDATION_TYPE";s:1:"0";s:18:"VALIDATION_NUM_MIN";s:0:"";s:18:"VALIDATION_NUM_MAX";s:0:"";s:15:"VALIDATION_LIST";s:0:"";s:15:"VALIDATION_CODE";N;}i:6;a:12:{s:5:"TITLE";s:12:"airShiftTemp";s:11:"DESCRIPTION";s:103:"заблаговременный расчет требуемой температуры воздуха ";s:12:"KEEP_HISTORY";s:1:"0";s:8:"ONCHANGE";s:0:"";s:6:"SYSTEM";s:0:"";s:8:"DATA_KEY";s:1:"0";s:9:"DATA_TYPE";s:1:"0";s:15:"VALIDATION_TYPE";s:1:"0";s:18:"VALIDATION_NUM_MIN";s:0:"";s:18:"VALIDATION_NUM_MAX";s:0:"";s:15:"VALIDATION_LIST";s:0:"";s:15:"VALIDATION_CODE";N;}i:7;a:12:{s:5:"TITLE";s:15:"airRequiredTemp";s:11:"DESCRIPTION";s:56:"требуемая температура воздуха";s:12:"KEEP_HISTORY";s:1:"7";s:8:"ONCHANGE";s:0:"";s:6:"SYSTEM";s:0:"";s:8:"DATA_KEY";s:1:"0";s:9:"DATA_TYPE";s:1:"0";s:15:"VALIDATION_TYPE";s:1:"0";s:18:"VALIDATION_NUM_MIN";s:0:"";s:18:"VALIDATION_NUM_MAX";s:0:"";s:15:"VALIDATION_LIST";s:0:"";s:15:"VALIDATION_CODE";N;}i:8;a:12:{s:5:"TITLE";s:14:"airCurrentTemp";s:11:"DESCRIPTION";s:52:"текущая температура воздуха";s:12:"KEEP_HISTORY";s:1:"7";s:8:"ONCHANGE";s:14:"waterCalculate";s:6:"SYSTEM";s:0:"";s:8:"DATA_KEY";s:1:"0";s:9:"DATA_TYPE";s:1:"0";s:15:"VALIDATION_TYPE";s:1:"0";s:18:"VALIDATION_NUM_MIN";s:0:"";s:18:"VALIDATION_NUM_MAX";s:0:"";s:15:"VALIDATION_LIST";s:0:"";s:15:"VALIDATION_CODE";N;}i:9;a:12:{s:5:"TITLE";s:6:"status";s:11:"DESCRIPTION";s:40:"работает или выключен";s:12:"KEEP_HISTORY";s:1:"7";s:8:"ONCHANGE";s:0:"";s:6:"SYSTEM";s:0:"";s:8:"DATA_KEY";s:1:"0";s:9:"DATA_TYPE";s:1:"0";s:15:"VALIDATION_TYPE";s:1:"0";s:18:"VALIDATION_NUM_MIN";s:0:"";s:18:"VALIDATION_NUM_MAX";s:0:"";s:15:"VALIDATION_LIST";s:0:"";s:15:"VALIDATION_CODE";N;}i:10;a:12:{s:5:"TITLE";s:4:"auto";s:11:"DESCRIPTION";s:104:"разрешить автоматическое управление (переключение) реле";s:12:"KEEP_HISTORY";s:1:"0";s:8:"ONCHANGE";s:0:"";s:6:"SYSTEM";s:0:"";s:8:"DATA_KEY";s:1:"0";s:9:"DATA_TYPE";s:1:"0";s:15:"VALIDATION_TYPE";s:1:"0";s:18:"VALIDATION_NUM_MIN";s:0:"";s:18:"VALIDATION_NUM_MAX";s:0:"";s:15:"VALIDATION_LIST";s:0:"";s:15:"VALIDATION_CODE";N;}i:11;a:12:{s:5:"TITLE";s:2:"K1";s:11:"DESCRIPTION";s:90:"коэффициент отопительной кривой (по умолчанию 1.2)";s:12:"KEEP_HISTORY";s:1:"0";s:8:"ONCHANGE";s:0:"";s:6:"SYSTEM";s:0:"";s:8:"DATA_KEY";s:1:"0";s:9:"DATA_TYPE";s:1:"0";s:15:"VALIDATION_TYPE";s:1:"0";s:18:"VALIDATION_NUM_MIN";s:0:"";s:18:"VALIDATION_NUM_MAX";s:0:"";s:15:"VALIDATION_LIST";s:0:"";s:15:"VALIDATION_CODE";N;}i:12;a:12:{s:5:"TITLE";s:2:"K2";s:11:"DESCRIPTION";s:80:"сдвиг климатической кривой (по умолчанию 20) ";s:12:"KEEP_HISTORY";s:1:"0";s:8:"ONCHANGE";s:0:"";s:6:"SYSTEM";s:0:"";s:8:"DATA_KEY";s:1:"0";s:9:"DATA_TYPE";s:1:"0";s:15:"VALIDATION_TYPE";s:1:"0";s:18:"VALIDATION_NUM_MIN";s:0:"";s:18:"VALIDATION_NUM_MAX";s:0:"";s:15:"VALIDATION_LIST";s:0:"";s:15:"VALIDATION_CODE";N;}i:13;a:12:{s:5:"TITLE";s:10:"hysteresis";s:11:"DESCRIPTION";s:157:"Гистерезис. Отклонение вверх и вниз от расчетной температуры воздуха. По умолчанию 0.2 ";s:12:"KEEP_HISTORY";s:1:"0";s:8:"ONCHANGE";s:0:"";s:6:"SYSTEM";s:0:"";s:8:"DATA_KEY";s:1:"0";s:9:"DATA_TYPE";s:1:"0";s:15:"VALIDATION_TYPE";s:1:"0";s:18:"VALIDATION_NUM_MIN";s:0:"";s:18:"VALIDATION_NUM_MAX";s:0:"";s:15:"VALIDATION_LIST";s:0:"";s:15:"VALIDATION_CODE";N;}i:14;a:12:{s:5:"TITLE";s:9:"mintimeon";s:11:"DESCRIPTION";s:118:"Минимальное время работы после включения. По умолчанию 15*60 т.е. 900";s:12:"KEEP_HISTORY";s:1:"0";s:8:"ONCHANGE";s:0:"";s:6:"SYSTEM";s:0:"";s:8:"DATA_KEY";s:1:"0";s:9:"DATA_TYPE";s:1:"0";s:15:"VALIDATION_TYPE";s:1:"0";s:18:"VALIDATION_NUM_MIN";s:0:"";s:18:"VALIDATION_NUM_MAX";s:0:"";s:15:"VALIDATION_LIST";s:0:"";s:15:"VALIDATION_CODE";N;}i:15;a:12:{s:5:"TITLE";s:10:"mintimeoff";s:11:"DESCRIPTION";s:117:"Минимальное время паузы после включения. По умолчанию 20*60 т.е. 1200";s:12:"KEEP_HISTORY";s:1:"0";s:8:"ONCHANGE";s:0:"";s:6:"SYSTEM";s:0:"";s:8:"DATA_KEY";s:1:"0";s:9:"DATA_TYPE";s:1:"0";s:15:"VALIDATION_TYPE";s:1:"0";s:18:"VALIDATION_NUM_MIN";s:0:"";s:18:"VALIDATION_NUM_MAX";s:0:"";s:15:"VALIDATION_LIST";s:0:"";s:15:"VALIDATION_CODE";N;}i:16;a:12:{s:5:"TITLE";s:12:"waterMinTemp";s:11:"DESCRIPTION";s:81:"Минимальная t теплоносителя. По умолчанию 10°";s:12:"KEEP_HISTORY";s:1:"0";s:8:"ONCHANGE";s:0:"";s:6:"SYSTEM";s:0:"";s:8:"DATA_KEY";s:1:"0";s:9:"DATA_TYPE";s:1:"0";s:15:"VALIDATION_TYPE";s:1:"0";s:18:"VALIDATION_NUM_MIN";s:0:"";s:18:"VALIDATION_NUM_MAX";s:0:"";s:15:"VALIDATION_LIST";s:0:"";s:15:"VALIDATION_CODE";N;}i:17;a:12:{s:5:"TITLE";s:12:"waterMaxTemp";s:11:"DESCRIPTION";s:83:"Максимальная t теплоносителя. По умолчанию 75°";s:12:"KEEP_HISTORY";s:1:"0";s:8:"ONCHANGE";s:0:"";s:6:"SYSTEM";s:0:"";s:8:"DATA_KEY";s:1:"0";s:9:"DATA_TYPE";s:1:"0";s:15:"VALIDATION_TYPE";s:1:"0";s:18:"VALIDATION_NUM_MIN";s:0:"";s:18:"VALIDATION_NUM_MAX";s:0:"";s:15:"VALIDATION_LIST";s:0:"";s:15:"VALIDATION_CODE";N;}}s:7:"OBJECTS";a:6:{i:0;a:6:{s:5:"TITLE";s:9:"thrm_beta";s:11:"DESCRIPTION";s:38:"Газовый котел Подвал";s:11:"LOCATION_ID";s:2:"19";s:12:"KEEP_HISTORY";s:1:"0";s:6:"SYSTEM";s:0:"";s:7:"METHODS";a:2:{i:0;a:8:{s:5:"TITLE";s:6:"turnOn";s:11:"DESCRIPTION";s:0:"";s:4:"CODE";s:127:"say('Включаю газовый котёл в подвале'); callMethod('MegaD4.setOutput',array('port'=>8,'value'=>1));";s:11:"CALL_PARENT";s:1:"1";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-05-05 03:25:53";s:15:"EXECUTED_PARAMS";s:30:"{"method":"%thrm_beta.turnOn"}";s:12:"EXECUTED_SRC";s:41:"/objects/?method=%thrm_beta.workDecision&";}i:1;a:8:{s:5:"TITLE";s:7:"turnOff";s:11:"DESCRIPTION";s:0:"";s:4:"CODE";s:131:"say('Выключаю газовый котёл в подвале'); callMethod('MegaD4.setOutput',array('port'=>8,'value'=>0)); ";s:11:"CALL_PARENT";s:1:"1";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-21 16:52:45";s:15:"EXECUTED_PARAMS";s:31:"{"method":"%thrm_beta.turnOff"}";s:12:"EXECUTED_SRC";s:0:"";}}}i:1;a:6:{s:5:"TITLE";s:12:"thrm_kitchen";s:11:"DESCRIPTION";s:35:"Теплый пол на кухне";s:11:"LOCATION_ID";s:1:"5";s:12:"KEEP_HISTORY";s:1:"0";s:6:"SYSTEM";s:0:"";s:7:"METHODS";a:1:{i:0;a:8:{s:5:"TITLE";s:13:"positionServo";s:11:"DESCRIPTION";N;s:4:"CODE";s:1013:"$ot=$this->object_title; $ct=$this->getProperty('waterCurrentTemp'); $rt=$this->getProperty('waterRequiredTemp'); $t=abs($rt-$ct); // функцией перевести разницу температур во время вращения сервопривода // ToDo подогнать по ситуации $c=round($t^1.3/3, 0); // ограничить максимальным временем вращения $c=min($c,60); if ($c) { if ($ct<$rt) { // текущая меньше расчетной // включить реле открытия привода на $c секунд // callMethod('MegaD4.setOutput',array('port'=>Х,'value'=>1)); // setTimeOut($ot.'_servo1_stop',"cm('MegaD4.setOutput',array('port'=>Х,'value'=>0));", $c); } else { // текущая больше расчетной // callMethod('MegaD4.setOutput',array('port'=>Y,'value'=>1)); // setTimeOut($ot.'_servo2_stop',"cm('MegaD4.setOutput',array('port'=>Y,'value'=>0));", $c); } }";s:11:"CALL_PARENT";s:1:"1";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-24 20:30:02";s:15:"EXECUTED_PARAMS";s:24:"{"waterRequiredTemp":26}";s:12:"EXECUTED_SRC";s:253:"/api.php/method/DrivewayArea.onTempChanges?PROPERTY=Temperature&NEW_VALUE=-5&OLD_VALUE=-5&SOURCE=/api.php/method/ClockChimeWorker.onNewMinute?m_c_s[0]=ClockChimeWorker.onNewMinute&r_s_m=1&no_session=1&raiseEvent=1&m_c_s[0]=ClockChimeWorker.onNewMinut...";}}}i:2;a:6:{s:5:"TITLE";s:10:"thrm_alpha";s:11:"DESCRIPTION";s:36:"Газовый котел Кухня";s:11:"LOCATION_ID";s:1:"5";s:12:"KEEP_HISTORY";s:1:"0";s:6:"SYSTEM";s:0:"";s:7:"METHODS";a:3:{i:0;a:8:{s:5:"TITLE";s:6:"turnOn";s:11:"DESCRIPTION";N;s:4:"CODE";s:125:"say('Включаю газовый котёл на кухне'); callMethod('MegaD4.setOutput',array('port'=>7,'value'=>1));";s:11:"CALL_PARENT";s:1:"1";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-24 09:43:21";s:15:"EXECUTED_PARAMS";s:31:"{"method":"%thrm_alpha.turnOn"}";s:12:"EXECUTED_SRC";s:253:"/api.php/method/thrm_alpha.waterCalculate?PROPERTY=airCurrentTemp&NEW_VALUE=23.3&OLD_VALUE=23.4&SOURCE=/api.php/script/69?raiseEvent=1&m_c_s[0]=Livingroom.onTempChanges.cb8af5c4f4859f09821fdb2b7b2c552e&m_c_s[1]=script.69&r_s_s=1&no_session=1&raiseEve...";}i:1;a:8:{s:5:"TITLE";s:7:"turnOff";s:11:"DESCRIPTION";N;s:4:"CODE";s:127:"say('Выключаю газовый котёл на кухне'); callMethod('MegaD4.setOutput',array('port'=>7,'value'=>0));";s:11:"CALL_PARENT";s:1:"1";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-24 06:55:00";s:15:"EXECUTED_PARAMS";s:32:"{"method":"%thrm_alpha.turnOff"}";s:12:"EXECUTED_SRC";s:105:"/api.php/method/ClockChimeClimate.onNewMinute?m_c_s[0]=ClockChimeClimate.onNewMinute&r_s_m=1&no_session=1";}i:2;a:8:{s:5:"TITLE";s:14:"setTemperature";s:11:"DESCRIPTION";N;s:4:"CODE";s:1897:"if (defined('THRM_LOG_LEVEL') && THRM_LOG_LEVEL != '') { $log_level = THRM_LOG_LEVEL; } else { $log_level = 0; } if ($log_level>0) { $ot=$this->object_title; } if (isset($params['waterRequiredTemp'])) { $wrt=$params['waterRequiredTemp']; } else { $wrt=$this->getProperty('waterRequiredTemp'); } if (!isOnline('MyHeat')) { DebMes("$ot Выполнение прервано, контроллер не в сети",'thrm'); return; } curl_setopt_array($ch = curl_init(), array( CURLOPT_URL => "https://my2.myheat.net/api/request/", CURLOPT_RETURNTRANSFER => 1, CURLOPT_POSTFIELDS => json_encode(array( "action" => "setEnvGoal", "deviceId" => "3744", "objId" => "24", "login" => gg('myHeatApiLogin'), "key" => gg('myHeatApiKey'), //"changeMode" => "0", "goal" => $wrt, )) )); $res=curl_exec($ch); if (curl_errno($ch) > 0) { // say("Ошибка запроса curl при попытке отправки целевой температуры контроллеру"); if ($log_level>0) { DebMes("$ot Ошибка запроса curl при попытке отправки целевой температуры контроллеру",'thrm'); } sg('myheaterror','curl_error '.curl_error($ch)); die('Ошибка curl: ' . curl_error($ch)); } curl_close($ch); $array = json_decode($res, true); if ($array["err"]===0) { // say("Установка целевой температуры ".$wrt.'°'); if ($log_level>1) { DebMes("$ot Установка целевой температуры ".$wrt.'°','thrm'); } sg('myheaterror',''); } else { say("Контрллер не подтвердил получение данных"); if ($log_level>1) { DebMes("$ot Контрллер не подтвердил получение данных",'thrm'); } sg('myheaterror','myheat_error '.$array["err"]); }";s:11:"CALL_PARENT";s:1:"1";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-24 21:06:23";s:15:"EXECUTED_PARAMS";s:24:"{"waterRequiredTemp":56}";s:12:"EXECUTED_SRC";s:253:"/api.php/method/thrm_alpha.waterCalculate?PROPERTY=airCurrentTemp&NEW_VALUE=22.8&OLD_VALUE=22.9&SOURCE=/api.php/script/69?raiseEvent=1&m_c_s[0]=Livingroom.onTempChanges.882d9945277e9d36342bf6f7962e29c4&m_c_s[1]=script.69&r_s_s=1&no_session=1&raiseEve...";}}}i:3;a:6:{s:5:"TITLE";s:13:"thrm_gamma_50";s:11:"DESCRIPTION";s:34:"Электро котёл 1 дом";s:11:"LOCATION_ID";s:2:"10";s:12:"KEEP_HISTORY";s:1:"0";s:6:"SYSTEM";s:0:"";s:7:"METHODS";a:3:{i:0;a:8:{s:5:"TITLE";s:6:"turnOn";s:11:"DESCRIPTION";s:0:"";s:4:"CODE";s:59:"callMethod('MegaD3.setOutput',array('port'=>7,'value'=>1));";s:11:"CALL_PARENT";s:1:"1";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-21 16:52:46";s:15:"EXECUTED_PARAMS";s:34:"{"method":"%thrm_gamma_50.turnOn"}";s:12:"EXECUTED_SRC";s:0:"";}i:1;a:8:{s:5:"TITLE";s:7:"turnOff";s:11:"DESCRIPTION";s:0:"";s:4:"CODE";s:59:"callMethod('MegaD3.setOutput',array('port'=>7,'value'=>0));";s:11:"CALL_PARENT";s:1:"1";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-19 20:05:13";s:15:"EXECUTED_PARAMS";s:35:"{"method":"%thrm_gamma_50.turnOff"}";s:12:"EXECUTED_SRC";s:23:"Job: thrm_gamma_50_work";}i:2;a:8:{s:5:"TITLE";s:8:"mayBanOn";s:11:"DESCRIPTION";N;s:4:"CODE";s:141:"// уровень энергопотребления не ниже повышенного if (gg('EconomMode.status') < 1) { return 2; }";s:11:"CALL_PARENT";s:1:"1";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-24 21:34:52";s:15:"EXECUTED_PARAMS";N;s:12:"EXECUTED_SRC";s:253:"/api.php/method/thrm_gamma_50.waterCalculate?PROPERTY=airCurrentTemp&NEW_VALUE=22.8&OLD_VALUE=22.8&SOURCE=/api.php/script/69?raiseEvent=1&m_c_s[0]=Bedroom.onTempChanges.3b9960d951e9ca71357f4ffd588b4e46&m_c_s[1]=script.69&r_s_s=1&no_session=1&raiseEve...";}}}i:4;a:6:{s:5:"TITLE";s:14:"thrm_bathhouse";s:11:"DESCRIPTION";s:46:"Электрический котел Баня";s:11:"LOCATION_ID";s:2:"21";s:12:"KEEP_HISTORY";s:1:"0";s:6:"SYSTEM";s:0:"";s:7:"METHODS";a:3:{i:0;a:8:{s:5:"TITLE";s:7:"turnOff";s:11:"DESCRIPTION";s:0:"";s:4:"CODE";s:258:"say('Выключаю электрический котёл в бане'); callMethod('MegaD7.setOutput',array('port'=>28,'value'=>0)); // Проверить логику электрического котла callMethod('thrm_gamma_100.workDecision');";s:11:"CALL_PARENT";s:1:"1";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-21 16:52:46";s:15:"EXECUTED_PARAMS";s:36:"{"method":"%thrm_bathhouse.turnOff"}";s:12:"EXECUTED_SRC";s:0:"";}i:1;a:8:{s:5:"TITLE";s:6:"turnOn";s:11:"DESCRIPTION";s:0:"";s:4:"CODE";s:256:"say('Включаю электрический котёл в бане'); callMethod('MegaD7.setOutput',array('port'=>28,'value'=>1)); // Проверить логику электрического котла callMethod('thrm_gamma_100.workDecision');";s:11:"CALL_PARENT";s:1:"1";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-23 07:43:22";s:15:"EXECUTED_PARAMS";s:35:"{"method":"%thrm_bathhouse.turnOn"}";s:12:"EXECUTED_SRC";s:46:"/objects/?method=%thrm_bathhouse.workDecision&";}i:2;a:8:{s:5:"TITLE";s:8:"mayBanOn";s:11:"DESCRIPTION";N;s:4:"CODE";s:129:"// уровень энергопотребления не ниже нормы if (gg('EconomMode.status') < 0) { return 2; }";s:11:"CALL_PARENT";s:1:"1";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-24 21:35:01";s:15:"EXECUTED_PARAMS";N;s:12:"EXECUTED_SRC";s:253:"/api.php/method/thrm_bathhouse.waterCalculate?PROPERTY=airCurrentTemp&NEW_VALUE=20.4&OLD_VALUE=20.4&SOURCE=/api.php/script/82?raiseEvent=1&m_c_s[0]=ClockChimeWorker.onNewMinute&m_c_s[1]=Anteroom.onTempChanges.bfa3f0a7b99ee306f82e9fdc1f3c61b7&m_c_s[2]...";}}}i:5;a:6:{s:5:"TITLE";s:14:"thrm_gamma_100";s:11:"DESCRIPTION";s:34:"Электро котёл 2 дом";s:11:"LOCATION_ID";s:2:"10";s:12:"KEEP_HISTORY";s:1:"0";s:6:"SYSTEM";s:0:"";s:7:"METHODS";a:3:{i:0;a:8:{s:5:"TITLE";s:7:"turnOff";s:11:"DESCRIPTION";N;s:4:"CODE";s:59:"callMethod('MegaD3.setOutput',array('port'=>8,'value'=>0));";s:11:"CALL_PARENT";s:1:"1";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-24 03:09:29";s:15:"EXECUTED_PARAMS";s:36:"{"method":"%thrm_gamma_100.turnOff"}";s:12:"EXECUTED_SRC";s:253:"/api.php/method/thrm_gamma_100.waterCalculate?PROPERTY=airCurrentTemp&NEW_VALUE=23.4&OLD_VALUE=23.3&SOURCE=/api.php/script/69?raiseEvent=1&m_c_s[0]=Bedroom.onTempChanges.e0d2916dfc05a5613466599e5f88575e&m_c_s[1]=script.69&r_s_s=1&no_session=1&raiseEv...";}i:1;a:8:{s:5:"TITLE";s:6:"turnOn";s:11:"DESCRIPTION";N;s:4:"CODE";s:59:"callMethod('MegaD3.setOutput',array('port'=>8,'value'=>1));";s:11:"CALL_PARENT";s:1:"1";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-24 00:20:59";s:15:"EXECUTED_PARAMS";s:35:"{"method":"%thrm_gamma_100.turnOn"}";s:12:"EXECUTED_SRC";s:253:"/api.php/method/thrm_gamma_100.waterCalculate?PROPERTY=airCurrentTemp&NEW_VALUE=22.6&OLD_VALUE=22.7&SOURCE=/api.php/method/KitchenArea.onTempChanges?PROPERTY=Temperature&NEW_VALUE=21.1&OLD_VALUE=22.2&SOURCE=&raiseEvent=1&m_c_s[0]=KitchenArea.onTempCh...";}i:2;a:8:{s:5:"TITLE";s:8:"mayBanOn";s:11:"DESCRIPTION";N;s:4:"CODE";s:466:"// разрешить работу 2-ой ступени электрокотла дома только если: // не работает электрокотел в бане или не работает большой бойлер if (gg('thrm_bathhouse.status') && gg('RelayBoiler4.status')) { return 2; } // уровень энергопотребления не ниже максимального if (gg('EconomMode.status') < 2) { return 2; }";s:11:"CALL_PARENT";s:1:"1";s:9:"SCRIPT_ID";s:1:"0";s:8:"EXECUTED";s:19:"2020-12-24 21:34:52";s:15:"EXECUTED_PARAMS";N;s:12:"EXECUTED_SRC";s:253:"/api.php/method/thrm_gamma_100.waterCalculate?PROPERTY=airCurrentTemp&NEW_VALUE=22.8&OLD_VALUE=22.8&SOURCE=/api.php/script/69?raiseEvent=1&m_c_s[0]=Bedroom.onTempChanges.3b9960d951e9ca71357f4ffd588b4e46&m_c_s[1]=script.69&r_s_s=1&no_session=1&raiseEv...";}}}}}}