Arduino Mega Server

Модератор: Alex

Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm

Re: Arduino Mega Server

Сообщение Alex »

Для Андроида и иОс я бы написал приложение с виждетом.
Не совсем понятно, что будет делать приложение — чтобы всё работало — это надо всю функциональность браузера и яваскрипта повторить (а потом поддерживать, ведь они комплиментарны со скетчем, который будет изменяться).

Это получается самим себе работы добавить.
ledmax
Сообщения: 88
Зарегистрирован: Сб окт 24, 2015 9:56 pm

Re: Arduino Mega Server

Сообщение ledmax »

Alex писал(а):
И не могу разобраться с инициализацией модулей - как сделать. что бы например void getTemperature выполнялся каждые 30сек?

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

if (cycle30s) {
  sensors.requestTemperatures();
  getTemperature(0); 
  getTemperature(1);
  getTemperature(2); 
} 

Спасибо,

А по поводу запросов что подскажете?

И можете этот момент расшифровать:

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

#ifdef TEMP_FEATURE
      if (cycle5m || (timeSec < startSendTime)) {
        tempWorks();
      }
    #endif  
ledmax
Сообщения: 88
Зарегистрирован: Сб окт 24, 2015 9:56 pm

Re: Arduino Mega Server

Сообщение ledmax »

SPbDima писал(а):Моя доработка версии 0.14 (черновая).
Работаю только с http://ххх.ххх.ххх.ххх/sensors.htm
Единственное sensors.htm до конца не подчистил с версии 0.13(отказался от ряда параметров), т.к. занялся файловым менеджером и сейчас усиленно курю CSS. Примерный вид ФМ на страничке sdcard.htm(для просмотра необходимо добавить файлы из архива CSS).

P.S.: Если обнаружите ошибки, сообщайте!
Мощный подход к делу :D

Посмотрите мой вариант сравнения ид датчиков - вы в своём скетче тоже это делаете, только посложнее... У меня сравниваются ид, учитывая их порядковый номер, до тех пор, пока не совпадут.

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

 for (byte i = 0; i < MAX_TEMP_SENSORS; i++) {
      
       if (!memcmp(tempSensor[i], idTempDat[n], MAX_TEMP_SENSORS)){
        
        current_temp[i] = sensors.getTempC(tempSensor[i]);
        
        timeStamp();
        
        Serial.print(objSens[n]);
        Serial.print(": ");
        Serial.println(current_temp[i]); 
В итоге, если в начале всей программе определить датчики

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

//temp
byte const MAX_TEMP_SENSORS = 1;
float current_temp[MAX_TEMP_SENSORS]; 
То потом можно использовать температуру датчика в любом месте программы

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

current_temp[номер датчика] 
в том числе и для логов.

Что думаете по этому поводу?

Ещё хорошо бы было добавить возможность установки пределов для каждого датчика отдельно. А то например в тёплых полах - 40 градусов уже много, а для бойлера и 90 норма.
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm

Re: Arduino Mega Server

Сообщение Alex »

А по поводу запросов что подскажете?
Вам нужно управлять Ардуино из М или М из Ардуино?
И можете этот момент расшифровать:
Температура измеряется каждые 5 минут и в короткий период после самого старта системы (это связано с особенностями взаимодействия с М, возможно уже можно убрать, не тестировал).
ledmax
Сообщения: 88
Зарегистрирован: Сб окт 24, 2015 9:56 pm

Re: Arduino Mega Server

Сообщение ledmax »

Вам нужно управлять Ардуино из М или М из Ардуино?
Нужно получать установочное значение для пид регулятора из М.
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm

Re: Arduino Mega Server

Сообщение Alex »

Посмотрите модуль server_commands — там примеры приёма команд от М.

192.168.1.37/?night=1

По такому принципу можете формировать команды на стороне М и интерпретировать их в АМС (см. примеры в коде).
SPbDima
Сообщения: 113
Зарегистрирован: Пн окт 19, 2015 8:27 am

Re: Arduino Mega Server

Сообщение SPbDima »

SPOILERSPOILER_SHOW
ledmax писал(а):
SPbDima писал(а):Моя доработка версии 0.14 (черновая).
Работаю только с http://ххх.ххх.ххх.ххх/sensors.htm
Единственное sensors.htm до конца не подчистил с версии 0.13(отказался от ряда параметров), т.к. занялся файловым менеджером и сейчас усиленно курю CSS. Примерный вид ФМ на страничке sdcard.htm(для просмотра необходимо добавить файлы из архива CSS).

P.S.: Если обнаружите ошибки, сообщайте!
Мощный подход к делу :D

Посмотрите мой вариант сравнения ид датчиков - вы в своём скетче тоже это делаете, только посложнее... У меня сравниваются ид, учитывая их порядковый номер, до тех пор, пока не совпадут.

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

 for (byte i = 0; i < MAX_TEMP_SENSORS; i++) {
      
       if (!memcmp(tempSensor[i], idTempDat[n], MAX_TEMP_SENSORS)){
        
        current_temp[i] = sensors.getTempC(tempSensor[i]);
        
        timeStamp();
        
        Serial.print(objSens[n]);
        Serial.print(": ");
        Serial.println(current_temp[i]);
Сложный способ был по причине необходимости соответствия порядка датчиков в конфиге и то что инициализировалось.
SPOILERSPOILER_SHOW
ledmax писал(а): В итоге, если в начале всей программе определить датчики

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

//temp
byte const MAX_TEMP_SENSORS = 1;
float current_temp[MAX_TEMP_SENSORS];
То потом можно использовать температуру датчика в любом месте программы
А во всех вариантах так и используется.
SPOILERSPOILER_SHOW
ledmax писал(а):

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

current_temp[номер датчика]
в том числе и для логов.

Что думаете по этому поводу?

Ещё хорошо бы было добавить возможность установки пределов для каждого датчика отдельно. А то например в тёплых полах - 40 градусов уже много, а для бойлера и 90 норма.
По поводу пределов: если использовать конфиг, то там это есть; если без конфига, то можно модернизировать код Алекса несколькими строчками:
SPOILERSPOILER_SHOW

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

float amin[MAX_TEMP_SENSORS]={20,...}; // нижний предел
float amax[MAX_TEMP_SENSORS]={30,...}; // верхний предел
byte actionMin[MAX_TEMP_SENSORS]={0,...}; //номер действия при выходе за нижний предел
byte actionMax[MAX_TEMP_SENSORS]={0,...}; //номер действия при выходе за верхний предел
typedef void (* CallFunc) (byte, byte); // ссылка на вызов функции
CallFunc actionOnT[] = {warning, coldWater, hotWater};//массив из действий(функций) при выходе за границы темп диапазона

void warning(byte n, byte state) {
}
void coldWater(byte n, byte state) { //действия если вода стала холодной
}
void hotWater(byte n, byte state) { //действия если вода стала горячей
}

void checkAlertT(byte n)
{
  #ifdef TEMP_ACTION
   //если состояние датчика не изменилось, тогда пропускаем действия
    if((tConfig[n].alert==0)&&(tConfig[n].amax>tConfig[n].current_temp)&&(tConfig[n].current_temp>tConfig[n].amin)) return;
    if((tConfig[n].alert==1)&&(tConfig[n].current_temp<tConfig[n].amin)) return;
    if((tConfig[n].alert==2)&&(tConfig[n].current_temp>tConfig[n].amax)) return;
   //состояние датчика изменилось, перейдена граница в любую сторону
    if((tConfig[n].alert==1)&&(tConfig[n].current_temp>tConfig[n].amin)) {actionOnT[tConfig[n].actionMin](n, 0); tConfig[n].alert=0;}
    if((tConfig[n].alert==2)&&(tConfig[n].current_temp<tConfig[n].amax)) {actionOnT[tConfig[n].actionMax](n, 0); tConfig[n].alert=0;}
    if(tConfig[n].current_temp<tConfig[n].amin) {actionOnT[tConfig[n].actionMin](n, 1); tConfig[n].alert=1;}
    if(tConfig[n].current_temp>tConfig[n].amax) {actionOnT[tConfig[n].actionMax](n, 1); tConfig[n].alert=2;}
  #endif
}

// checkAlertT добавить в getTemperature
 
По поводу "if (!memcmp(tempSensor, idTempDat[n], MAX_TEMP_SENSORS))" - спасибо, попробую упростить код убрав сортировку датчиков в конфиге и тогда будет проще работать с датчиками разных типов.
Последний раз редактировалось SPbDima Чт янв 28, 2016 5:43 pm, всего редактировалось 1 раз.
SPbDima
Сообщения: 113
Зарегистрирован: Пн окт 19, 2015 8:27 am

Re: Arduino Mega Server

Сообщение SPbDima »

ledmax писал(а):И можете этот момент расшифровать:

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

#ifdef TEMP_FEATURE
      if (cycle5m || (timeSec < startSendTime)) {
        tempWorks();
      }
    #endif    
Попробуй интервал cycle5m или какой используешь, поставить в инициализации в true убрав из условия (timeSec < startSendTime), т.е.:

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

#ifdef TEMP_FEATURE
      if (cycle5m) {
        tempWorks();
      }
    #endif  
У меня нет возможности проверить М, а Алекс не помнит для чего датчик должен постоянно сканироваться некоторое время после старта системы (или актуальность этого).
SPbDima
Сообщения: 113
Зарегистрирован: Пн окт 19, 2015 8:27 am

Re: Arduino Mega Server

Сообщение SPbDima »

Alex, у тебя раскраска строк таблицы сделана при помощи разных классов чётных/нечётных строк, а при использовании CSS3 - это делается намного проще и гибче.
Но это так, для информации.
http://professorweb.ru/my/css/css_theory/level1/1_2.php
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm

Re: Arduino Mega Server

Сообщение Alex »

Да, это я уже узнал, но не стал переделывать — совершенство недостижимо, а более актуальных задач вагон и маленькая тележка.
Ответить