Arduino Mega Server

Модератор: Alex

Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Пн мар 21, 2016 8:10 am

Спасибо, еще столкнулся с таким моментом, возможно вы знали, что автоматизацию какого либо процесса нужно писать в Ардуино скетче, а не на JS. Так как JS требует постоянно открытой страничке на ПК.
Это само-собой разумеется и так оно и сделано. Об этом написано на странице «Архитектура системы»

http://hi-lab.ru/arduino-mega-server/do ... chitecture

Цитата:

«Контроллер без подключения браузера

Это основной режим работы контроллера в котором он проводит 99% своего времени. Подключение браузера отсутствует, интерфейс не работает. Контроллер занимается своими прямыми обязанностями, т. е. обслуживает датчики и периферийные устройства. Также, в этом режиме контроллер осуществляет сетевые взаимодействия (принимает и отдаёт команды и информацию по сети).»
Я использую планшет и после выключения подсветки стопорится страничка, скрипты в JS не работают.
Трудно сказать в чём причина, у меня работает корректно.
allexmak1
Сообщения: 12
Зарегистрирован: Пт дек 18, 2015 8:28 pm
Благодарил (а): 4 раза
Поблагодарили: 0

Re: Arduino Mega Server

Сообщение allexmak1 » Вт мар 22, 2016 1:14 pm

еще вопрос, немогу разобратся как мне отправить данные (1...255) с переменной JS на мегу?
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Ср мар 23, 2016 7:58 am

еще вопрос, немогу разобратся как мне отправить данные (1...255) с переменной JS на мегу?
Посмотрите любой пример отправки и сделайте по аналогии. Например, в файле settings.js

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

  // send HTTP GET request with strCommands
  request.open("GET", "request_settings" + strLED1 + strLED2 +randomNoCache(), true);
отправляются значения переменных strLED1 и strLED2, а в модуле server_ajax они «ловятся»

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

  else if (StrContains(HTTP_req, "request_settings")) {
    sendXmlAnswer(cl);
    setControl();
    responseControl(cl);
  }
и

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

  if (StrContains(HTTP_req, "LED1=1")) {
    modeNetWork = MODE_MAJOR;
  } 
  else if (StrContains(HTTP_req, "LED1=0")) {
    modeNetWork = MODE_ONE;
  }
allexmak1
Сообщения: 12
Зарегистрирован: Пт дек 18, 2015 8:28 pm
Благодарил (а): 4 раза
Поблагодарили: 0

Re: Arduino Mega Server

Сообщение allexmak1 » Пт мар 25, 2016 6:30 pm

Спасибо работает, только немогу сообразить как сделать цикл, а то 100 значений для каждой переменной это не практично.

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

  
int variable1 = 0;
if (StrContains(HTTP_req, "var1=0a")) {
    variable1 = 0;
     } else if (StrContains(HTTP_req, "var1=1a")) {
      variable1 = 1;
    } else if (StrContains(HTTP_req, "var1=2a")) {
      variable1 = 2;
    } else if (StrContains(HTTP_req, "var1=3a")) {
      variable1 = 3;
    } else if (StrContains(HTTP_req, "var1=4a")) {
      variable1 = 4;
    } else if (StrContains(HTTP_req, "var1=5a")) {
      variable1 = 5;
    } else if (StrContains(HTTP_req, "var1=6a")) {
      variable1 = 6;
    } else if (StrContains(HTTP_req, "var1=7a")) {
      variable1 = 7;
    } else if (StrContains(HTTP_req, "var1=8a")) {
      variable1 = 8;
    } else if (StrContains(HTTP_req, "var1=9a")) {
      variable1 = 9;
    } else if (StrContains(HTTP_req, "var1=10a")) {
      variable1 = 10;
    }
*** Сообщение запрещено. Сообщение похоже на спам. ***
allexmak1
Сообщения: 12
Зарегистрирован: Пт дек 18, 2015 8:28 pm
Благодарил (а): 4 раза
Поблагодарили: 0

Re: Arduino Mega Server

Сообщение allexmak1 » Пт мар 25, 2016 6:34 pm

Работает, спасибо, вот только немогу разобратся с цыклом, а то 100 значений как то непрактично.

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

int variable1 = 0;
  if (StrContains(HTTP_req, "var1=0a")) {
    variable1 = 0;
     } else if (StrContains(HTTP_req, "var1=1a")) {
      variable1 = 1;
    } else if (StrContains(HTTP_req, "var1=2a")) {
      variable1 = 2;
    } else if (StrContains(HTTP_req, "var1=3a")) {
      variable1 = 3;
    } else if (StrContains(HTTP_req, "var1=4a")) {
      variable1 = 4;
    } else if (StrContains(HTTP_req, "var1=5a")) {
      variable1 = 5;
    } else if (StrContains(HTTP_req, "var1=6a")) {
      variable1 = 6;
    } else if (StrContains(HTTP_req, "var1=7a")) {
      variable1 = 7;
    } else if (StrContains(HTTP_req, "var1=8a")) {
      variable1 = 8;
    } else if (StrContains(HTTP_req, "var1=9a")) {
      variable1 = 9;
    } else if (StrContains(HTTP_req, "var1=10a")) {
      variable1 = 10;
    }
 
*** Сообщение запрещено. Сообщение похоже на спам. ***
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Сб мар 26, 2016 8:09 am

По идее, нужно не определять заранее 100 значений переменной, а один раз сделать парсинг любого значения из пары var=xxx. Парсить нужно переменную HTTP_req. Как конкретно это сделать не подскажу (у меня нет примеров), но идеи вы можете взять из функций

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

void parseCommands(EthernetClient cl) {
  int posBegin;
  int posEnd;
  int posParam;
  
  if (request.indexOf("?") >= 0) {
    posBegin = request.indexOf("?") + 1;
    posEnd = request.indexOf("HTTP");

    if (request.indexOf("=") >= 0) {
       posParam = request.indexOf("=");
       command = request.substring(posBegin, posParam);              
       parameter = request.substring(posParam + 1, posEnd - 1);              
    } else {
        command = request.substring(posBegin, posEnd - 1);              
        parameter = "";
      }

    Serialprint("command: "); Serial.println(command);
    Serialprint("parameter: "); Serial.println(parameter);
и

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

char StrContains(char *str, char *sfind) {
  char found = 0;
  char index = 0;
  char len;

  len = strlen(str);
  if (strlen(sfind) > len) {return 0;}
  
  while (index < len) {
    if (str[index] == sfind[found]) {
      found++;
      if (strlen(sfind) == found) {return 1;}
    } else {
        found = 0;
      }
    index++;
  }
  return 0;
}
За это сообщение автора Alex поблагодарил:
allexmak1 (Сб мар 26, 2016 2:13 pm)
Рейтинг: 1.16%
allexmak1
Сообщения: 12
Зарегистрирован: Пт дек 18, 2015 8:28 pm
Благодарил (а): 4 раза
Поблагодарили: 0

Re: Arduino Mega Server

Сообщение allexmak1 » Сб мар 26, 2016 2:13 pm

Alex, мне конкретно это нужно для выставления времени включения и выключения какого либо прибора (конкретно с веб странички), и точную яркость светильников, так что думаю в будующем, это будет реализованно в проекте.
SPbDima
Сообщения: 113
Зарегистрирован: Пн окт 19, 2015 8:27 am
Благодарил (а): 9 раз
Поблагодарили: 21 раз

Re: Arduino Mega Server

Сообщение SPbDima » Вт мар 29, 2016 2:19 pm

ledmax писал(а):По поводу выше сказанного насчёт отображения страницы в браузере-
У меня веб морда толком не работает - главная страница загружается - все остальные только текст без картинок и фонов. При этом с мажор домом связь норм, и отправляет и получает.
За не имением время толком не разбирался в этой проблеме - пока что использую сервер только для посылки и приёма гет запросов, но с большими планами на будущие...
Грешу на китайский шилд. Буду рад, если вы разберётесь с проблемой зависания вебморды..
Хоть вопрос был месяц назад, но отвечу:
У меня похожая ситуация (МД не использую), т.к. периодически загружается только страничка (без скриптов и стилей) спасает энное количество обновления сайта. Кто то писал про перегрев чипа 5100, так и у меня когда перестают доставляться пакеты для Даш - о чип можно обжечься.
Поэтому при проблеме с открытием страницы лезем в "инструменты разработчика" (в chrome: "ctrl+Shift+I") открываем закладку Network и смотрим как прогружается сайт. Если пакеты перестали доставляться, тогда проверяем температуру, а если данная беда постоянно, то нужен радиатор.
Ещё про проблему с Хромом вспомнил: При длительной работе у него (Хрома) забиваются сокеты и страница перестаёт открываться с сообщением, что "Ожидание сокета"(вроде звучит так. Пишу по памяти).
Последний раз редактировалось SPbDima Вт мар 29, 2016 2:37 pm, всего редактировалось 1 раз.
SPbDima
Сообщения: 113
Зарегистрирован: Пн окт 19, 2015 8:27 am
Благодарил (а): 9 раз
Поблагодарили: 21 раз

Re: Arduino Mega Server

Сообщение SPbDima » Вт мар 29, 2016 2:32 pm

Алекс, у меня к тебе вопрос по правильному\красивому алгоритму:
1. Периодически проверяю температуру и, если превышен порог, то включаю\выключаю порт. Как правильнее было бы реализовать: изменять состояние порта только при переходе границы или устанавливать значение постоянно при считывании данных температурного датчика?
2. Если вдобавок на значение порта оказывает текущее время, т.е. помимо температурного диапазона есть ещё временной диапазон.
Спасибо!
braserlaky
Сообщения: 5
Зарегистрирован: Пн сен 07, 2015 11:08 am
Откуда: KZ
Благодарил (а): 8 раз
Поблагодарили: 0

Re: Arduino Mega Server

Сообщение braserlaky » Ср мар 30, 2016 5:30 am

SPbDima писал(а):
ledmax писал(а):По поводу выше сказанного насчёт отображения страницы в браузере-
У меня веб морда толком не работает - главная страница загружается - все остальные только текст без картинок и фонов. При этом с мажор домом связь норм, и отправляет и получает.
За не имением время толком не разбирался в этой проблеме - пока что использую сервер только для посылки и приёма гет запросов, но с большими планами на будущие...
Грешу на китайский шилд. Буду рад, если вы разберётесь с проблемой зависания вебморды..
Хоть вопрос был месяц назад, но отвечу:
У меня похожая ситуация (МД не использую), т.к. периодически загружается только страничка (без скриптов и стилей) спасает энное количество обновления сайта. Кто то писал про перегрев чипа 5100, так и у меня когда перестают доставляться пакеты для Даш - о чип можно обжечься.
Поэтому при проблеме с открытием страницы лезем в "инструменты разработчика" (в chrome: "ctrl+Shift+I") открываем закладку Network и смотрим как прогружается сайт. Если пакеты перестали доставляться, тогда проверяем температуру, а если данная беда постоянно, то нужен радиатор.
Ещё про проблему с Хромом вспомнил: При длительной работе у него (Хрома) забиваются сокеты и страница перестаёт открываться с сообщением, что "Ожидание сокета"(вроде звучит так. Пишу по памяти).
спасибо за ответ :)
правда моему чипу уже ничто не поможет. теперь он просто при включении сразу накаляется, периферия вообще молчит.
походу перегрелся. жду новый шилд, а пока ковыряю отдельно мажордомо и gsm модем к нему. аварийные сообщения и альтернативный канал связи.
Ответить