Включение насоса от разницы температур

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Ignatnet
Сообщения: 20
Зарегистрирован: Вс апр 08, 2018 8:57 pm
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Включение насоса от разницы температур

Сообщение Ignatnet » Пт сен 25, 2020 10:33 pm

В подвале стоит бойлер с горячей водой, на выходе стоит датчик температуры Т1.
Водяная система закольцована через насос, для прокачки воды, чтобы не сливать холодную воду, пока не пойдет горячая. На трубе после насоса стоит датчик Т2. Управляется Мегой.
Цель
Поддержание температуры воды в системе.
Необходимо при изменении разницы температуры между датчиками Т1 и Т2 на 4 С запускать насос.
После увеличения Т2 на 2 С, (разница между датчиками на 2 С), останавливаем насос.
Работает в интервале времени с 06.00 до 23.00

Возможно просто сделать по таймеру, например: каждые 15 минут включать насос на 1 минуту в интервале с 06.00 до 23.00

$T1 = Temp_Water.value;
$T2 = Temp_Nasos.value;
$TR1 =($T1-4); //разница температур для включения
$TR2 =($T1-2); //разница температур для выключения
if ($T2 < $TR1) {
file_get_contents("http://192.168.0.3/sec/?cmd=13:1");
setGlobal("OUT_13.status",1);
}
if ($T2 < $TR2);
{
file_get_contents("http://192.168.0.3/sec/?cmd=13:0");
setGlobal('OUT_13.status', 0);
}
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Включение насоса от разницы температур

Сообщение Chainik » Пт сен 25, 2020 10:45 pm

Ignatnet писал(а):
Пт сен 25, 2020 10:33 pm
Возможно просто сделать по таймеру, например: каждые 15 минут включать насос на 1 минуту в интервале с 06.00 до 23.00
А вопрос то в чем? Как просто включать насос на 1 минуту каждые 15 минут в интервале с 06.00 до 23.00 (без доп.условий)?
Или ваш скрипт надо запускать раз в 15 минут?
В чем состоит проблема?

Короче говоря, если я правильно понял, надо сделать примерно следующее.
1. Создаем сценарий, например, "PumpControl" с кодом

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

$T1 = gg('Temp_Water.value');
$T2 = gg('Temp_Nasos.value');
$TR1 =($T1-4); //разница температур для включения
$TR2 =($T1-2); //разница температур для выключения
if ($T2 < $TR1) {
file_get_contents("http://192.168.0.3/sec/?cmd=13:1");
setGlobal("OUT_13.status",1);
//выключаем насос через минуту после включения
SetTimeOut("PumpOff","file_get_contents('http://192.168.0.3/sec/?cmd=13:1');sg('OUT_13.status',0);",60);
}
if ($T2 < $TR2)
{
file_get_contents("http://192.168.0.3/sec/?cmd=13:0");
setGlobal('OUT_13.status', 0);
}
2. Запускаем сценарий каждые 15 минут в интервале с 06.00 до 23.00.
Проще всего сделать это, записав в конец "OnNewMitute" (Панель управления --> ОБЪЕКТЫ --> Объекты --> [класс] Timer --> ClockChime --> onNewMinute) код:

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

if ((timeBetween('06:00','23:30')) && ($m%15 == 0))  {runScript("PumpControl");}
Последний раз редактировалось Chainik Сб сен 26, 2020 10:57 am, всего редактировалось 2 раза.
Ignatnet
Сообщения: 20
Зарегистрирован: Вс апр 08, 2018 8:57 pm
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Включение насоса от разницы температур

Сообщение Ignatnet » Пт сен 25, 2020 11:22 pm

проблема!? что надежнее.
Запускать насос по таймеру, надежнее, отработал-отключился. Но если в системе вода горячая, зачем лишний раз запускать насос.
По температуре - не надежнее, но насос включается, когда разница температур превышает разницу в 4-5 градусов.
Вопрос - не что выбрать, а код, наверное лучше опробовать два варианта, просто я в скриптах не силен.
Лето-Зима
Летом такой проблемы нет, а вот когда наступают холода, желательно чтобы вода в системе была теплой.
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Включение насоса от разницы температур

Сообщение Chainik » Пт сен 25, 2020 11:38 pm

Тогда предлагаю написать скрипт в таком виде:

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

$T1 = gg('Temp_Water.value');
$T2 = gg('Temp_Nasos.value');
$TR1 =($T1-4); //разница температур для включения
$TR2 =($T1-2); //разница температур для выключения
if ($T2 < $TR1) {
file_get_contents("http://192.168.0.3/sec/?cmd=13:1");
setGlobal("OUT_13.status",1);
//Перезапускаем скрипт через минуту для проверки условий для работы насоса (значений температуры)
SetTimeOut("RestartPumpControl","runScript('PumpControl');",60);
}
if ($T2 < $TR2)
{
file_get_contents("http://192.168.0.3/sec/?cmd=13:0");
setGlobal('OUT_13.status', 0);
}
Таким образом, если условие по разнице температур для запуска насоса будет соблюдаться, насос будет работать.
Единственное, если это условие (большая разница температур) к 23:30 будет выполняться и будет продолжать сохраняться в интервале времени 23:30 - 6:00, то насос будет работать все это время. Насколько это критично?
Если критичо, допишите в начало скрипта строчку кода:

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

if (timeBetween('23:30','06:00'))  {return"";}
Строчка прекратит дальнейшее выполнение скрипта в интервале времени '23:30' - '06:00'.
(Еще в скрипте я 'sg' на 'gg' исправил.)
Последний раз редактировалось Chainik Сб сен 26, 2020 10:58 am, всего редактировалось 1 раз.
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Включение насоса от разницы температур

Сообщение Logrus » Сб сен 26, 2020 1:23 am

Ignatnet писал(а):
Пт сен 25, 2020 11:22 pm
проблема!? что надежнее.
Запускать насос по таймеру, надежнее, отработал-отключился. Но если в системе вода горячая, зачем лишний раз запускать насос.
По температуре - не надежнее, но насос включается, когда разница температур превышает разницу в 4-5 градусов.
Вопрос - не что выбрать, а код, наверное лучше опробовать два варианта, просто я в скриптах не силен.
Лето-Зима
Летом такой проблемы нет, а вот когда наступают холода, желательно чтобы вода в системе была теплой.
я подобное управление насосом решал в методе оного в который передается т2, учитывается время суток, режим кто дома, никого нет, все спят, происходит дезинфекция от легионеллы раз в сутки ночью
имхо, вы изначально не верно сформулировали свое тз
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Ignatnet
Сообщения: 20
Зарегистрирован: Вс апр 08, 2018 8:57 pm
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Включение насоса от разницы температур

Сообщение Ignatnet » Сб сен 26, 2020 8:59 pm

А если пойти по другому пути, например.
1.Температура снимается с датчика Т1, если она ниже 30 ℃ работа скрипта остановлена, если выше 30℃, то выполняем п.2.
2. Идет запрос к датчику Т2, если она ниже, например 28 ℃, включается насос на 1 мин (таймер) в интервале 20 минут каждого часа (3 раза в час) с 06.00 до 23.30, если ($T2 >= 28) ℃, не включается вообще (заморозка скрипта).

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

if (timeBetween('23:30','06:00')) {return"";}
$T1 = gg('Temp_Water.value'); //Температура датчика Т1
$T2 = gg('Temp_Nasos.value'); //Температура датчика Т2
if ($T1 < 30)// если Т1 ниже 30℃, то Запрет на включение насоса или на выполнение скрипта
{
// или другой код
file_get_contents("http://192.168.0.3/sec/?cmd=13:0");
setGlobal('OUT_13.status', 0);
}
else { //иначе разрешаем работу п.2.
if ($T2 < 28) {
// работа таймера включения насоса на 1 мин через 20 минут
file_get_contents("http://192.168.0.3/sec/?cmd=13:1");
setGlobal("OUT_13.status",1);
SetTimeOut("RestartPumpControl","runScript('PumpControl');",60);
clearTimeOut("RestartPumpControl");
}}
Мне кажется что-то не совсем правильно
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Включение насоса от разницы температур

Сообщение Logrus » Сб сен 26, 2020 9:03 pm

во втором по таймеру отключение если не нагрело за заданное время
сам метод вызывать по изменению т2 и там много чего, выше не все описал
п.с. использование скриптов сильно усложнит отладку и вообще понимание далее, это все желательно в методе актион об!екта насоса (реле)
далее когда за сотню таких перевалит намного проще будет эксплуатировать
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Ignatnet
Сообщения: 20
Зарегистрирован: Вс апр 08, 2018 8:57 pm
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Включение насоса от разницы температур

Сообщение Ignatnet » Сб сен 26, 2020 9:29 pm

Logrus писал(а):
Сб сен 26, 2020 9:03 pm
во втором по таймеру отключение если не нагрело за заданное время
сам метод вызывать по изменению т2 и там много чего, выше не все описал
п.с. использование скриптов сильно усложнит отладку и вообще понимание далее, это все желательно в методе актион об!екта насоса (реле)
далее когда за сотню таких перевалит намного проще будет эксплуатировать
Мне нужно, чтобы вода циркулировала в замкнутой сети в течении дня и поддерживала температуру, иначе я сливаю холодную воду, пока не пойдет горячая. Ночью насос отключается. Как то так, наверное лучше подготовить ТЗ, но мыслей куча, а нужно выбрать правильный алгоритм.
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Включение насоса от разницы температур

Сообщение Chainik » Сб сен 26, 2020 9:44 pm

В принципе, ув.Logrus, конечно, прав. При увеличении количества объектов логику надо простраивать более тщательно с ориентацией на ООП.

Но для начала давайте попробуем реализовать (приблизительно) вашу логику по старинке, "с помощью топора и кувалды" ))

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

if (timeBetween('23:30','06:00')) {return"";}
$T1 = gg('Temp_Water.value'); //Температура датчика Т1
if ($T1 < 30)// если Т1 ниже 30℃, то выключаем насос и прекращаем выполнение скрипта
{
file_get_contents("http://192.168.0.3/sec/?cmd=13:0");
setGlobal('OUT_13.status', 0);
return""; //останавливаем выполнение скрипта
}

$T2 = gg('Temp_Nasos.value'); //Температура датчика Т2
if ($T2 < 28) {
// включаем насос
file_get_contents("http://192.168.0.3/sec/?cmd=13:1");
setGlobal("OUT_13.status",1);
//выключим насос через 70 секунд после включения
SetTimeOut("PumpOff","file_get_contents('http://192.168.0.3/sec/?cmd=13:1');sg('OUT_13.status',0);",70);
//Перезапускаем скрипт через 1 минуту для проверки условий, при которых насос должен работать
SetTimeOut("RestartPumpControl","runScript('PumpControl');",60);
}
Таким образом, пока условия (температурные и временные) для работы насоса сохраняются, он будет работать. Единственное, надеюсь, периодичность получения показаний с температурных датчиков не превышает минуту.

Только из OnNewMinute запускайте скрипт через каждые 20 минут:

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

if ((timeBetween('06:00','23:30')) && ($m%20 == 0))  {runScript("PumpControl");}
Последний раз редактировалось Chainik Сб сен 26, 2020 10:39 pm, всего редактировалось 1 раз.
Ignatnet
Сообщения: 20
Зарегистрирован: Вс апр 08, 2018 8:57 pm
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Включение насоса от разницы температур

Сообщение Ignatnet » Сб сен 26, 2020 9:58 pm

Chainik писал(а):
Сб сен 26, 2020 9:44 pm
В принципе, ув.Logrus, конечно, прав. При увеличении количества объектов логику надо простраивать более тщательно с ориентацией на ООП.
Но для начала давайте попробуем реализовать (приблизительно) вашу логику по старинке, "с помощью топора и кувалды" ))
Спасибо. Реализую, сразу отпишусь.
Ответить