esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Модераторы: Bagir, Ivan, Vit, Alex

eGorka
Сообщения: 125
Зарегистрирован: Чт ноя 24, 2016 10:47 am
Благодарил (а): 1 раз
Поблагодарили: 16 раз

Re: esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Сообщение eGorka » Сб июл 14, 2018 12:07 am

serghei писал(а):
Пт июл 13, 2018 10:05 pm
Таки да и уже есть , но не работает :lol: . ser009 предоставил код , работает со страницы. Выбор срабатывания реле по времени , вручную по нажатию на экран. А вот по условию влажности не хочет. Выставляю верхнею и нижнею границы. Запоминаю. При превышению значения реле начинает бешено переключаться.
СпойлерПоказать

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

/*
  Modul Algoritm
  part of Arduino Mega Server project
*/

/* значение по которому ведется регулирование
 * в примере это значени будет задаваться вручную с web
 */
//int value1 = 5 сек;

// mode режим
  // 0 - ручной
  // 1 - по значению датчика
  // 2 - по времени
  // 3 - not defined and not contXstatus
byte rele1mode = 0;

/* значения максимальных и минимальых значений для включения  
 * и выключения RELE1 
 */
int value_on = 0;
int value_off = 100;
int value_web = 0;

/* время включения по умолчанию /часы, минуты/
 * при необходимости можно добавить секунды 
 */
int r1hour_on = 19; int r1minute_on = 00;
int r1hour_off = 19; int r1minute_off = 15;

void Regul(){

if (rele1state == 0&&rele1mode == 0&&value_web == 1){ 
      rele1state = 1;
      MessText = "Выход D32. Включение с Веб";
           MessLoger(String (MessText), String (Info));
           #ifdef SERIAL_PRINT
           Serial.println("Out D32. command ON to Web");
           #endif
           } else{};

if (rele1state == 1&&rele1mode == 0&&value_web == 0){ 
        rele1state = 0;
        MessText = "Выход D32. Отключение с Веб";
           MessLoger(String (MessText), String (Info));
           #ifdef SERIAL_PRINT
           Serial.println("Out D32. command ON to Web");
           #endif
           } else{};
  
if (rele1state == 0&&rele1mode == 2&&r1hour_on == int (hour())&&r1minute_on == int (minute())){
  rele1state = 1;
  MessText = "Выход D32. Включение по времени";
           MessLoger(String (MessText), String (Info));
           #ifdef SERIAL_PRINT
           Serial.println("Out D32. command ON to time");
           #endif
           } else{};

if (rele1state == 1&&rele1mode == 2&&r1hour_off == int (hour())&&r1minute_off == int (minute())){
  rele1state = 0;
  
  MessText = "Выход D32. Отключение по времени";
           MessLoger(String (MessText), String (Info));
           #ifdef SERIAL_PRINT
           Serial.println("Out D32. command OFF to time");
           #endif
           }  else {};
/*
  if (rele1state == 0&&rele1mode == 1&&value_on >= dht11_h){
  rele1state = 1;
  MessText = "Выход D32. Включение по датчику влажности";
           MessLoger(String (MessText), String (Info));
           #ifdef SERIAL_PRINT
           Serial.println("Out D32. command ON to HUM ");
           #endif
  }else {};

  if (rele1state == 1&&rele1mode == 1&&value_off < dht11_h){
  rele1state = 0;
  MessText = "Выход D32. Отключение по датчику влажности";
           MessLoger(String (MessText), String (Info));
           #ifdef SERIAL_PRINT
           Serial.println("Out D32. command OFF to HUM ");
           #endif
} else {};
*/
//--------------------------------------------
/*
if (rele1state == 0&&rele1mode == 1&&value_on >= dht11_h){

//  if (rele1mode == 1&&value_on >= dht11_h){
  rele1state = 1;


    MessText = "Выход D32. Включение по датчику влажности";
           MessLoger(String (MessText), String (Info));
           #ifdef SERIAL_PRINT
           Serial.println("Out D32. command ON to HUM ");
           #endif
   
} // if      
else if (rele1state == 1&&rele1mode == 1&&value_off <= dht11_h){

//  else if (rele1mode == 1&&value_off <= dht11_h){
  rele1state = 0;
 

     MessText = "Выход D32. Отключение по датчику влажности";
           MessLoger(String (MessText), String (Info));
           #ifdef SERIAL_PRINT
           Serial.println("Out D32. command OFF to HUM ");
           #endif
} // else if
  */         
} // void regul

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

if (rele1state == 0 && rele1mode == 1 && value_on >= dht11_h){
  rele1state = 1;  
}      
else if (rele1state == 1 && rele1mode == 1 && value_off <= dht11_h){
  rele1state = 0;
} 
изощрённо-извращённый способ :D
dht11_h >= value_on
dht11_h <= value_off
А что будет если value_on == value_off и value_on < value_off ?
Последний раз редактировалось eGorka Сб июл 14, 2018 8:05 am, всего редактировалось 1 раз.
Alex
Сообщения: 2203
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 249 раз

Re: esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Сообщение Alex » Сб июл 14, 2018 7:49 am

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

if (rele1state == 0&&rele1mode == 1&&value_on >= dht11_h){
  rele1state = 1;  
}      
else if (rele1state == 1&&rele1mode == 1&&value_off <= dht11_h){
  rele1state = 0;
} 
Что это за конструкция? Это бред сумасшедшего или так можно? И в чём смысл такой записи условий?
eGorka
Сообщения: 125
Зарегистрирован: Чт ноя 24, 2016 10:47 am
Благодарил (а): 1 раз
Поблагодарили: 16 раз

Re: esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Сообщение eGorka » Сб июл 14, 2018 8:54 am

Alex писал(а):
Сб июл 14, 2018 7:49 am

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

if (rele1state == 0 && rele1mode == 1 && value_on >= dht11_h){
  rele1state = 1;  
}      
else if (rele1state == 1 && rele1mode == 1 && value_off <= dht11_h){
  rele1state = 0;
} 
Что это за конструкция? Это бред сумасшедшего или так можно? И в чём смысл такой записи условий?
Классическая конструкция.
Так можно.
Компактность кода.
Встречный вопрос: - а какой смысл, в данном случае, проверять каждое условие по отдельности?

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

if(rele1state == 0){
  if(rele1mode == 1){
    if(value_on >= dht11_h){
      rele1state = 1;
    }
  }
}
else if(rele1state == 1){
  if(rele1mode == 1){
    if(value_off <= dht11_h){
      rele1state = 0;
    }
  }
}
alexsis_76
Сообщения: 532
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 2 раза
Поблагодарили: 33 раза

Re: esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Сообщение alexsis_76 » Сб июл 14, 2018 9:20 am

Да ты знаешь толк в извращениях.
Ты сначала включаешь реле а затем выключаешь.
eGorka
Сообщения: 125
Зарегистрирован: Чт ноя 24, 2016 10:47 am
Благодарил (а): 1 раз
Поблагодарили: 16 раз

Re: esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Сообщение eGorka » Сб июл 14, 2018 9:26 am

alexsis_76 писал(а):
Сб июл 14, 2018 9:20 am
Ты сначала включаешь реле а затем выключаешь.
Это где? Как бы value_on и value_off не одно и тоже.
alexsis_76
Сообщения: 532
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 2 раза
Поблагодарили: 33 раза

Re: esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Сообщение alexsis_76 » Сб июл 14, 2018 9:50 am

if (rele1state == 0 && rele1mode == 1 && value_on >= dht11_h){
rele1state = 1;
}
else if (rele1state == 1 && rele1mode == 1 && value_off <= dht11_h){
rele1state = 0;
}

когда выполняется первое условие ]if (rele1state == 0 && rele1mode == 1 && value_on >= dht11_),rele1state становится равным 1,в следующем проходе выполняется код в ветке else if (rele1state == 1 && rele1mode == 1 && value_off <= dht11_h) т к rele1state = 1 и value_off наверняка меньше или равно dht11_h то и это условие выполняется,ну и далее по кругу.
eGorka
Сообщения: 125
Зарегистрирован: Чт ноя 24, 2016 10:47 am
Благодарил (а): 1 раз
Поблагодарили: 16 раз

Re: esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Сообщение eGorka » Сб июл 14, 2018 10:22 am

alexsis_76 писал(а):
Сб июл 14, 2018 9:50 am
if (rele1state == 0 && rele1mode == 1 && value_on >= dht11_h){
rele1state = 1;
}
else if (rele1state == 1 && rele1mode == 1 && value_off <= dht11_h){
rele1state = 0;
}

когда выполняется первое условие ]if (rele1state == 0 && rele1mode == 1 && value_on >= dht11_),rele1state становится равным 1,в следующем проходе выполняется код в ветке else if (rele1state == 1 && rele1mode == 1 && value_off <= dht11_h) т к rele1state = 1 и value_off наверняка меньше или равно dht11_h то и это условие выполняется,ну и далее по кругу.
eGorka писал(а):dht11_h >= value_on
dht11_h <= value_off
Ну тогда я совсем дурак.
alexsis_76
Сообщения: 532
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 2 раза
Поблагодарили: 33 раза

Re: esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Сообщение alexsis_76 » Сб июл 14, 2018 10:52 am

Именно так как написано у Сергея
Показание датчика 25 , value_ on 30, value_off 20 вот и переключается постоянно.
Alex
Сообщения: 2203
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 249 раз

Re: esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Сообщение Alex » Сб июл 14, 2018 10:56 am

Так можно.
Прошу прощения, невнимательно посмотрел, меня ввело в заблуждение отсутствие пробелов рядом со знаками && и вместо

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

(rele1state == 1&&rele1mode == 1&&value_off <= dht11_h)
я увидел что-то вроде

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

(rele1state == rele1mode == value_off <= dht11_h)
и у меня порвался шаблон :)
alexsis_76
Сообщения: 532
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 2 раза
Поблагодарили: 33 раза

Re: esp8266 + AMS + MajorDoMo - ПЕРВЫЕ ШАГИ

Сообщение alexsis_76 » Сб июл 14, 2018 11:12 am

вообще то вместо if (rele1state == 1) можно написать if (rele1state) и будет правильно.
Ответить