Arduino Mega Server

Модератор: Alex

serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server

Сообщение serghei » Сб фев 02, 2019 11:14 pm

А где сам код реле ? Какую переменную хотите вывести на страницу ? Посмотрите как это сделано у ser009. Я только собрал всё вместе и повторил. Сначала пишем код для реле и его состояния.

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

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

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

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

/*  значения максимальных и минимальых значений для включения  
    и выключения RELE1 
*/

int value_on = 100;
int value_off = 0;
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){ 
      timeStamp();
      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){ 
        timeStamp();
        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())){
  timeStamp();
  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())){
  timeStamp();
  rele1state = 0;
  
  MessText = "Выход D32. Отключение по времени";
           MessLoger(String (MessText), String (Info));
         //  #ifdef SERIAL_PRINT
           Serial.println("Out D32. command OFF to time");
        //   #endif
           }  else {};
 
//if (!rele1state && rele1mode == 1 && dht11_h >= value_on){

//if (!rele1state && rele1mode == 1 && dht.readHumidity() > value_on){ 
if (!rele1state == 1 && rele1mode == 1 && analogRead(A0) > value_on){     
  digitalWrite(rele1pin, HIGH);
  
  timeStamp();
  
  rele1state = 1;                                               
  MessText = "Выход D32. Включение по датчику влажности";
           MessLoger(String (MessText), String (Info));
        //   #ifdef SERIAL_PRINT
           Serial.println("Out D32. command ON to HUM ");
        //   #endif
     
  }   //if

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

//if (!rele1state && rele1mode == 1 && dht.readHumidity() < value_off){   
if (rele1state == 1 && rele1mode == 1 && analogRead(A0) < value_off){    
                                             
  digitalWrite(rele1pin, LOW);

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

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

    else if (StrContains(HTTP_req, "request_regulset")){sendXmlAnswer(cl); setRegul();       responseRegulset(cl);}
    else if (StrContains(HTTP_req, "request_regulval")){sendXmlAnswer(cl); valRegul();       responseRegulval(cl);}
Это чтобы отображались сами страницы. Далее

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

// Make Response

void valRegul(){
     if (StrContains(HTTP_req, "RELE1=1")){value_web = 1;}
    
     else if (StrContains(HTTP_req, "RELE1=0")){value_web = 0;}
}

void setRegul(){
     byte pos1;
     float pos2;
     String commandStr;
     
  if      (StrContains(HTTP_req, "r1mode=")) {
          pos1 = request.indexOf("r1mode=") + 7; 
          pos2 = request.indexOf("&", pos1);
          commandStr = request.substring(pos1, pos2);
          rele1mode = commandStr.toFloat();}

  if      (StrContains(HTTP_req, "r1hon=")) {
          pos1 = request.indexOf("r1hon=") + 6; 
          pos2 = request.indexOf("&", pos1);
          commandStr = request.substring(pos1, pos2);
          r1hour_on = commandStr.toFloat();}
          
  if      (StrContains(HTTP_req, "r1mon=")) {
          pos1 = request.indexOf("r1mon=") + 6; 
          pos2 = request.indexOf("&", pos1);
          commandStr = request.substring(pos1, pos2);
          r1minute_on = commandStr.toFloat();}

  if      (StrContains(HTTP_req, "r1hoff=")) {
          pos1 = request.indexOf("r1hoff=") + 7; 
          pos2 = request.indexOf("&", pos1);
          commandStr = request.substring(pos1, pos2);
          r1hour_off = commandStr.toFloat();}

  if      (StrContains(HTTP_req, "r1moff=")) {
          pos1 = request.indexOf("r1moff=") + 7; 
          pos2 = request.indexOf("&", pos1);
          commandStr = request.substring(pos1, pos2);
          r1minute_off = commandStr.toFloat();}
          
  if      (StrContains(HTTP_req, "r1valon=")) {
          pos1 = request.indexOf("r1valon=") + 8; 
          pos2 = request.indexOf("&", pos1);
          commandStr = request.substring(pos1, pos2);
          value_on = commandStr.toFloat();}

  if      (StrContains(HTTP_req, "r1valoff=")) {
          pos1 = request.indexOf("r1valoff=") + 9; 
          pos2 = request.indexOf("&", pos1);
          commandStr = request.substring(pos1, pos2);
          value_off = commandStr.toFloat();} 
           
  if      (StrContains(HTTP_req, "value=")) {
          pos1 = request.indexOf("value=") + 6; 
          pos2 = request.indexOf("&", pos1);
          commandStr = request.substring(pos1, pos2);
          dht11_h = commandStr.toFloat();} 
}


void responseRegulset(EthernetClient cl) {
  String s = tagXmlVersion();
  s += openInputs();
     s += makeTag("r1mode", "", String(rele1mode));
     s += makeTag("D", String(rele1pin), String(rele1state));
     s += makeTag("r1hon", "", String(r1hour_on));
     s += makeTag("r1mon", "", String(r1minute_on));
     s += makeTag("r1hoff", "", String(r1hour_off));
     s += makeTag("r1moff", "", String(r1minute_off));
     s += makeTag("r1valon", "", String(value_on));
     s += makeTag("r1valoff", "", String(value_off));
     s += makeTag("value", "", String(dht.readHumidity())); // Тут привязка по датчику DHT11
     s += closeInputs();
  cl.println(s);
}

void responseRegulval(EthernetClient cl) {
  String s = tagXmlVersion();
  s += openInputs();
     s += makeTag("r1mode", "", String(rele1mode));
     s += makeTag("D", String(rele1pin), String(rele1state));
     s += makeTag("value", "", String(dht11_h));
  s += closeInputs();
  cl.println(s);
}
Ну и сами страницы
SD_Due_work.zip
(3.33 КБ) 141 скачивание
Что бы с этим всем разобраться наверное проще выложить полную версию ))
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Аватара пользователя
ser009
Сообщения: 595
Зарегистрирован: Сб окт 13, 2012 9:55 am
Благодарил (а): 4 раза
Поблагодарили: 43 раза

Re: Arduino Mega Server

Сообщение ser009 » Вс фев 03, 2019 5:01 am

Небольшое лирическое отступление.

Я предлагал сделать из данного проекта "Отличный конструктор".
Именно для этого создавалась ветка "готовые решения".
Регламентировать и закрепить в проекте определенные правила (имена переменных, вкладок, функций) позволяющие более опытным участниками помогать начинающим с меньшими затратами времени. Также описывать небольшие куски проще и меньшие затраты по времени.

Как уже писалось выше большая часть кода доступна для понимания людям без глубоких познаний программирования.
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server

Сообщение alexsis_76 » Вс фев 03, 2019 7:31 am

Да уже есть готовые, зачем еще то
да и смысл какой, ардуиновский код очень примитивен(примитивнее только php), шаблонов вагон, практический каждый может подобрать на свой вкус и размер и переделать под себя.
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server

Сообщение serghei » Вс фев 03, 2019 9:14 am

Мои 6 копеек. Все решения , которые тут выкладываются , это всё таки примеры. Что бы это конкретно применить на деле , надо многое дописывать самому. Банальный пример - последняя просьба объяснить , как управлять реле. Для этого есть 3 варианта решения.
  • 1. Управлять вручную со страницы " control".
    2. Как выше описано привязать к любому датчику , вручную или по времени.
    3. Привязать код реле к датчикам.
Все это уже реализовано. Но есть небольшое НО. Первый вариант не удобен , это только для ознакомления " как это работает".
Второй вариант слишком тяжелый и опять же не понятно , как добавить еще 15 реле. Но это очень хороший конструктор.
Самый практичный третий вариант. Элементарно подключается необходимое количество реле и очень просто выводится на страницу. А так же привязываются к любым датчикам .
Но что бы это повторить , конечному пользователю в любом случае придется лезть в код и прописывать свои данные.

Как резюме - создавать еще одну тему из серии Энциклопедии по AMS, для этого надо очень хорошо разбираться в коде. У меня так не получается. Но попробую выложить свою версию термостата.

PS/ Еще добавлю. Чтобы проект стал " народным" , он должен быть простым и понятным для конфигурирования простыми пользователями. Так сделано в известных проектах типа WiFi-Iot. С AMS на данном этапе так не получится , потому что необходимо редактировать две - три вкладки в коде и две HTML страницы.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server

Сообщение alexsis_76 » Вс фев 03, 2019 10:18 am

написать все это не так уж и сложно, также не сложно написать условия и даже модуль под мажердомо, только надо писать для чего-то или кого-то, иначе в чем смысл сего действа.
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server

Сообщение serghei » Вс фев 03, 2019 10:25 am

Смысл всего этого действа - что бы AMS превратить в действующий контроллер. У автора это получается , но за деньги и закрытый код. Тут же мы выкладываем просто набор решений и примеров.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server

Сообщение alexsis_76 » Вс фев 03, 2019 10:28 am

что бы AMS превратить в действующий контролер
а сейчас он какой
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server

Сообщение alexsis_76 » Вс фев 03, 2019 10:29 am

т/е создать еще одну мегад, только с графическим интерфейсом?
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server

Сообщение serghei » Вс фев 03, 2019 10:46 am

alexsis_76 писал(а):
Вс фев 03, 2019 10:28 am
а сейчас он какой
Благодаря усилиям здесь присутствующих разработчиков у меня так
СпойлерПоказать
AMS_ESP32.jpg
AMS_ESP32.jpg (1.39 МБ) 3485 просмотров
Нижняя плата с исправленными ошибками ))
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
alexsis_76
Сообщения: 791
Зарегистрирован: Пт янв 22, 2016 10:08 am
Благодарил (а): 6 раз
Поблагодарили: 63 раза

Re: Arduino Mega Server

Сообщение alexsis_76 » Вс фев 03, 2019 10:50 am

ну что-ж весьма не дурно
Ответить