Написание логики в методе logicAction

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

Модератор: immortal

Ответить
Forth
Сообщения: 48
Зарегистрирован: Вс янв 13, 2019 4:37 pm
Благодарил (а): 39 раз
Поблагодарили: 0

Написание логики в методе logicAction

Сообщение Forth » Вс апр 26, 2020 10:20 am

Всем доброго дня.
Не могу победить казалось бы простую логику в методе, помогите пожалуйста.
Необходимо в выставленное время включать полив на определенное время, включать полив получается хорошо, но вот отключать и блокировать от включения не получается.
Вроде все просто, но не получается, еще я заметил, что ESP32 по каким то причинам сама включает реле и я решил обезопасится и в методе logicAction запретить включение реле в отличное от установленного времени.
Вообщем не могу реализовать все задуманное, помогите пожалуйста.
Скрин кнопок https://ibb.co/z63RLsp

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

// Начало - Если статус 2 крана выключен отключаем полив
if (getGlobal('Kr_2_Off'.'.'.'status') == 1)
    {
    setGlobal('Rele_2_K'.'.'.'status', '0');  //  ... то включаем реле на полив
    }
// Конец

// Начало - Если время не соответствует установленному утром или чечером отключаем полив
if (timeIs(getGlobal('Tame_2_Kr_Utro'.'.'.'Tame_On_Kr_2_Utro'))<>1 && (timeIs(getGlobal('Tame_2_Kr_Vecher'.'.'.'Tame_On_Kr_2_Vecher')<>1)))
    {    
    setGlobal('Rele_2_K'.'.'.'status', '0');  //  ... то включаем реле на полив

if (timeIs(getGlobal('Tame_2_Kr_Utro'.'.'.'Tame_On_Kr_2_Utro'))==1 && getGlobal('Kr_2_Utro'.'.'.'status') == 1) 
{
     setGlobal('Rele_2_K'.'.'.'status', '1');  //  ... то включаем реле на полив
     if (getGlobal('Kr_2_2min'.'.'.'status') == 1) 
     {
      say(time_poliva_Kr_0_30с,2);
      setTimeOut('Выключить Rele_2_K через', "setGlobal('Rele_2_K.status', 0);", 30);  //время полива при нажатой 1 кнопки 
     }
     if (getGlobal('Kr_2_4min'.'.'.'status') == 1) 
     {
      say(time_poliva_Kr_1м,2);
      setTimeOut('Выключить Rele_2_K через', "setGlobal('Rele_2_K.status', 0);", 60); //время полива при нажатой 2 кнопки
     }
     if (getGlobal('Kr_2_6min'.'.'.'status') == 1) 
     {
      setTimeOut('Выключить Rele_2_K через', "setGlobal('Rele_2_K.status', 0);", 90); //время полива при нажатой 3 кнопки
      say(time_poliva_Kr_1_5м,2);
     }
     if (getGlobal('Kr_2_8min'.'.'.'status') == 1) 
     {
      setTimeOut('Выключить Rele_2_K через', "setGlobal('Rele_2_K.status', 0);", 120); //время полива при нажатой 4 кнопки
      say(time_poliva_Kr_2м,2);
     }
     if (getGlobal('Kr_2_5min'.'.'.'status') == 1) 
     {
      setTimeOut('Выключить Rele_2_K через', "setGlobal('Rele_2_K.status', 0);", 150); //время полива при нажатой 4 кнопки
      say(time_poliva_Kr_2_5м,2);
     }
     if (getGlobal('Kr_2_10min'.'.'.'status') == 1) 
     {
      setTimeOut('Выключить Rele_2_K через', "setGlobal('Rele_2_K.status', 0);", 180); //время полива при нажатой 4 кнопки
      say(time_poliva_Kr_3м,2);
     }
// тут по идее нужно скобку ставить, но тогда не отключается по времени реле
// Эта часть работать не хочет, реле начинает включаться и отключаться (идет борьба)
 if (timeIs(getGlobal('Tame_2_Kr_Vecher'.'.'.'Tame_On_Kr_2_Vecher'))==1 && getGlobal('Kr_2_Vecher'.'.'.'status') == 1) 
     {
     setGlobal('Rele_2_K'.'.'.'status', '1');  //  ... то включаем реле на полив
     if (getGlobal('Kr_2_2min'.'.'.'status') == 1) 
     {
      say(time_poliva_Kr_0_30с,2);
      setTimeOut('Выключить Rele_2_K через', "setGlobal('Rele_2_K.status', 0);", 30);  //время полива при нажатой 1 кнопки (1мин - 60)
     }
     if (getGlobal('Kr_2_4min'.'.'.'status') == 1) 
     {
      say(time_poliva_Kr_1м,2);
      setTimeOut('Выключить Rele_2_K через', "setGlobal('Rele_2_K.status', 0);", 60); //время полива при нажатой 2 кнопки
     }
     if (getGlobal('Kr_2_6min'.'.'.'status') == 1) 
     {
      setTimeOut('Выключить Rele_2_K через', "setGlobal('Rele_2_K.status', 0);", 90); //время полива при нажатой 3 кнопки
      say(time_poliva_Kr_1_5м,2);
     }
     if (getGlobal('Kr_2_8min'.'.'.'status') == 1) 
     {
      setTimeOut('Выключить Rele_2_K через', "setGlobal('Rele_2_K.status', 0);", 120); //время полива при нажатой 4 кнопки
      say(time_poliva_Kr_2м,2);
     }
     if (getGlobal('Kr_2_5min'.'.'.'status') == 1) 
     {
      setTimeOut('Выключить Rele_2_K через', "setGlobal('Rele_2_K.status', 0);", 150); //время полива при нажатой 4 кнопки
      say(time_poliva_Kr_2_5м,2);
     }
     if (getGlobal('Kr_2_10min'.'.'.'status') == 1) 
     {
      setTimeOut('Выключить Rele_2_K через', "setGlobal('Rele_2_K.status', 0);", 180); //время полива при нажатой 4 кнопки
      say(time_poliva_Kr_3м,2);
     }
}
}
}
Ответить