Код: Выделить всё
if ($TempHouse >= 23 && $TempHouse <= 25) {sg('Boiler1.targetTemp',47);
Код: Выделить всё
if ($TempHouse > 26) {sg('Boiler1.targetTemp',45);
Код: Выделить всё
if ($TempHouse >= 23 && $TempHouse <= 25) {sg('Boiler1.targetTemp',47);
Код: Выделить всё
if ($TempHouse > 26) {sg('Boiler1.targetTemp',45);
Код: Выделить всё
getHistoryValue($varname, $start_time, $stop_time) -- Возвращает среднее значений за период
Код: Выделить всё
$historyStartTime = strtotime('-1 minute'); # За какой период брать данные.
define('HOST', '192.168.0.14'); # Адрес контроллера
define('PASS', 'sec'); # Пароль контроллера
define('PORT', 30); # Порт контроллера
if ( $historyStartTime ) { # если указан интервал, то берутся средние значение за интервал
$indoor = getHistoryAvg("Sensor_temphum01.value", $historyStartTime); # cреднее за время
$outdoor = getHistoryAvg("Sensor_temp07.value", $historyStartTime); # cреднее за время
} else { # иначе, берутся текущие значения
$outdoor = gg('Sensor_temp07.value'); # Получаем текущие значения
$indoor = gg('Sensor_temphum01.value'); # Получаем значения
}
if ( gg('Boiler1.status') != 1) return; # если бойлер выключен, не продолжаем
#если в переменных оказались не числа, не продолжаем.
if ( !preg_match ( "/[0-9.]+/" , $outdoor) or !preg_match ( "/[0-9.]d+/" , $indoor) ) return;
function setTemp( $target ) {
if ( gg('Boiler1.targetTemp') == $target ) return; # если уже установлено, не продолжаем
sg('Boiler1.targetTemp', $target);
file_get_contents('http://' . HOST . '/' . PASS . '/?pt=' . PORT . '&misc=' . $target);
}
if ( $outdoor < -15 ) { # Если на улице ниже -15
if ( $indoor > 25 ) { # если дома выше 25
setTemp(55); # cтавим 55
} elseif ( $indoor < 23 ){ # иначе, если ниже 23
setTemp(65); # ставим 65
} else { # иначе
setTemp(60); # ставим 60
}
} elseif ( $outdoor < -5 ) { # иначе, если на улице ниже -5
if ( $indoor > 25 ) { # если дома выше 25
setTemp(47); # ставим 47
} elseif ( $indoor < 23 ){ # иначе, если ниже 23
setTemp(60); # ставим 60
} else { # иначе,
setTemp(55); # ставим 55
}
} elseif ( $outdoor < 5 ) { # иначе, если на улице ниже 5
if ( $indoor > 25 ) { # если дома выше 25
setTemp(45); # cтавим 45
} elseif ( $indoor < 23 ){ # иначе, если ниже 23
setTemp(50); # ставим 50
} else { # иначе,
setTemp(47); # ставим 47
}
} elseif ( $outdoor > 4 ) { # иначе, если на улице выше 4
if ( $indoor > 25 ) { # если дома выше 25
setTemp(30); # ставим 30
} elseif ( $indoor < 23 ){ # иначе, если ниже 23
setTemp(40); # ставим 40
} else { # иначе,
setTemp(35); # ставим 35
}
}
Пока температура в доме не попала в диапазон >= 23 && <= 25 градусов (а на картинке она у вас вне этого диапазона), нельзя сказать, что не сработало.nail писал(а): ↑03 апр 2021, 22:37Кажется что то не сработало относительно температуры в доме?иКод: Выделить всё
if ($TempHouse >= 23 && $TempHouse <= 25) {sg('Boiler1.targetTemp',47);
Код: Выделить всё
if ($TempHouse > 26) {sg('Boiler1.targetTemp',45);
Код: Выделить всё
$TempOutDoor = getHistoryValue('Sensor_temp07.value', strtotime("-20 minute"));
$TempHouse = getHistoryValue('Sensor_temphum01.value, strtotime("-20 minute"));
и так вроде тесты показали , работа термостата работает нормально, без дерганий. Тестируем дальше.Ruslan писал(а): ↑04 апр 2021, 00:16floop прав относительно того, что колебания температур из-за погрешностей измерения можно снизить, усредняя значения:Только я бы брал более длинный период. Скажем, данные за последние 20 минут.Код: Выделить всё
$TempOutDoor = getHistoryValue('Sensor_temp07.value', strtotime("-20 minute")); $TempHouse = getHistoryValue('Sensor_temphum01.value, strtotime("-20 minute"));
Код: Выделить всё
if (gg('Boiler1.termostatActiveted') == 1) {
$TempOutDoor = getHistoryValue('Sensor_temp07.value', strtotime("-20 minute"));
$TempHouse = getHistoryValue('Sensor_temphum01.value', strtotime("-20 minute"));
$targetTemp = gg('Boiler1.targetTemp');
//при температуре на улице от -25 до -15
if ($TempOutDoor >= -25 && $TempOutDoor < -16) {
if ($TempHouse < 22) {sg('Boiler1.targetTemp',65);
if ($targetTemp == 65) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=65");}
if ($TempHouse >= 23 && $TempHouse <= 25) {sg('Boiler1.targetTemp',60);
if ($targetTemp == 60) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=60");}
if ($TempHouse > 26) {sg('Boiler1.targetTemp',55);
if ($targetTemp == 55) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=55");
}
}
//при температуре на улице -15 до -5
if ($TempOutDoor >= -14 && $TempOutDoor < -6) {
if ($TempHouse < 22) {sg('Boiler1.targetTemp',60);
if ($targetTemp == 60) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=60");
}
if ($TempHouse >= 23 && $TempHouse <= 25) { sg('Boiler1.targetTemp',55);
if ($targetTemp == 55) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=55");
}
if ($TempHouse > 26) {sg('Boiler1.targetTemp',47);
if ($targetTemp == 47) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=47");
}
}
//при температуре на улице -5 до +5
if ($TempOutDoor >= -4 && $TempOutDoor < 4) {
if ($TempHouse < 22) {sg('Boiler1.targetTemp',50);
if ($targetTemp == 50) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=50");
}
if ($TempHouse >= 23 && $TempHouse <= 25) {sg('Boiler1.targetTemp',47);
if ($targetTemp == 47) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=47");
}
if ($TempHouse > 26) {sg('Boiler1.targetTemp',45);
if ($targetTemp == 45) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=45");
}
}
//при температуре на улице +5 до +15
if ($TempOutDoor >= 6 && $TempOutDoor < 14) {
if ($TempHouse < 22) {sg('Boiler1.targetTemp',45);
if ($targetTemp == 45) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=45");
}
if ($TempHouse >= 23 && $TempHouse <= 25) {sg('Boiler1.targetTemp',42);
if ($targetTemp == 42) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=42");
}
if ($TempHouse > 26) {sg('Boiler1.targetTemp',37);
if ($targetTemp == 37) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=37");
}
}
}
Код: Выделить всё
if (gg('Boiler1.termostatActiveted') == 1) {
$TempOutDoor = getHistoryValue('Sensor_temp07.value', strtotime("-20 minute"));
$TempHouse = getHistoryValue('Sensor_temphum01.value', strtotime("-20 minute"));
$targetTemp = gg('Boiler1.targetTemp');
//при температуре на улице от -25 до -15
if ($TempOutDoor >= -25 && $TempOutDoor < -16) {
if ($TempHouse < 22) {sg('Boiler1.targetTemp',65);
if ($targetTemp == 65) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=65");}
if ($TempHouse >= 23 && $TempHouse <= 25) {sg('Boiler1.targetTemp',60);
if ($targetTemp == 60) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=60");}
if ($TempHouse > 26) {sg('Boiler1.targetTemp',55);
if ($targetTemp == 55) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=55");
}
}
//при температуре на улице -15 до -5
if ($TempOutDoor >= -14 && $TempOutDoor < -6) {
if ($TempHouse < 22) {sg('Boiler1.targetTemp',60);
if ($targetTemp == 60) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=60");
}
if ($TempHouse >= 23 && $TempHouse <= 25) { sg('Boiler1.targetTemp',55);
if ($targetTemp == 55) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=55");
}
if ($TempHouse > 26) {sg('Boiler1.targetTemp',47);
if ($targetTemp == 47) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=47");
}
}
//при температуре на улице -5 до +5
if ($TempOutDoor >= -4 && $TempOutDoor < 4) {
if ($TempHouse < 22) {sg('Boiler1.targetTemp',50);
if ($targetTemp == 50) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=50");
}
if ($TempHouse >= 23 && $TempHouse <= 25) {sg('Boiler1.targetTemp',47);
if ($targetTemp == 47) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=47");
}
if ($TempHouse > 26) {sg('Boiler1.targetTemp',45);
if ($targetTemp == 45) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=45");
}
}
//при температуре на улице +5 до +15
if ($TempOutDoor >= 6 && $TempOutDoor < 14) {
if ($TempHouse < 22) {sg('Boiler1.targetTemp',45);
if ($targetTemp == 45) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=45");
}
if ($TempHouse >= 23 && $TempHouse <= 25) {sg('Boiler1.targetTemp',42);
if ($targetTemp == 42) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=42");
}
if ($TempHouse > 26) {sg('Boiler1.targetTemp',37);
if ($targetTemp == 37) return;
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=37");
}
}
//при температуре на улице > +17 и в доме > +23 выключаем отопление
if ($TempOutDoor > 17) {
if ($TempHouse > 23) {
if (gg('Boiler1.status' != 0)) sg('Boiler1.status',0);
if ($targetTemp == 5) return;
sg('Boiler1.targetTemp',5);
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=5");}
}
}
Спасибо . тестирую.Ruslan писал(а): ↑19 апр 2021, 18:54Это хорошо. Значит мы угадали с "зазорами" )).
Хотя, возможно, (я просто уже не помню всю логику) вместо "sg('Boiler1.status',0);" можно выполнить метод выключения: "cm('Boiler1.turnOff);". Так даже было бы лучше.
Попробуйте сделать эту корректировку и заменить на метод (cm('Boiler1.turnOff);).
Код: Выделить всё
$ElectricityCosts = 8 * gg('Sensor_voltage02.value') / 1000;
sg('Sensor_voltage02.ElectricityCosts', $ElectricityCosts);
Добрый день правильно ли я понял вставить строку cm('Boiler1.turnOff'); ?
Код: Выделить всё
//при температуре на улице > +17 и в доме > +23 выключаем отопление
if ($TempOutDoor > 17) {
if ($TempHouse > 23) {
if cm('Boiler1.turnOff');
if ($targetTemp == 5) return;
sg('Boiler1.targetTemp',5);
file_get_contents("http://192.168.0.4/sec/?pt=30&misc=5");}
}
}
Код: Выделить всё
if (gg('Boiler1.status' != 0)) sg('Boiler1.status',0);
Код: Выделить всё
if (gg('Boiler1.status' != 0)) cm('Boiler1.turnOff');