Страница 112 из 326
Re: Arduino Mega Server
Добавлено: Ср янв 27, 2016 8:30 pm
Alex
Для Андроида и иОс я бы написал приложение с виждетом.
Не совсем понятно, что будет делать приложение — чтобы всё работало — это надо всю функциональность браузера и яваскрипта повторить (а потом поддерживать, ведь они комплиментарны со скетчем, который будет изменяться).
Это получается самим себе работы добавить.
Re: Arduino Mega Server
Добавлено: Ср янв 27, 2016 11:08 pm
ledmax
Alex писал(а):И не могу разобраться с инициализацией модулей - как сделать. что бы например void getTemperature выполнялся каждые 30сек?
Код: Выделить всё
if (cycle30s) {
sensors.requestTemperatures();
getTemperature(0);
getTemperature(1);
getTemperature(2);
}
Спасибо,
А по поводу запросов что подскажете?
И можете этот момент расшифровать:
Код: Выделить всё
#ifdef TEMP_FEATURE
if (cycle5m || (timeSec < startSendTime)) {
tempWorks();
}
#endif
Re: Arduino Mega Server
Добавлено: Чт янв 28, 2016 12:13 am
ledmax
SPbDima писал(а):Моя доработка версии 0.14 (черновая).
Работаю только с http://ххх.ххх.ххх.ххх/sensors.htm
Единственное sensors.htm до конца не подчистил с версии 0.13(отказался от ряда параметров), т.к. занялся файловым менеджером и сейчас усиленно курю CSS. Примерный вид ФМ на страничке sdcard.htm(для просмотра необходимо добавить файлы из архива CSS).
P.S.: Если обнаружите ошибки, сообщайте!
Мощный подход к делу
Посмотрите мой вариант сравнения ид датчиков - вы в своём скетче тоже это делаете, только посложнее... У меня сравниваются ид, учитывая их порядковый номер, до тех пор, пока не совпадут.
Код: Выделить всё
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];
То потом можно использовать температуру датчика в любом месте программы
в том числе и для логов.
Что думаете по этому поводу?
Ещё хорошо бы было добавить возможность установки пределов для каждого датчика отдельно. А то например в тёплых полах - 40 градусов уже много, а для бойлера и 90 норма.
Re: Arduino Mega Server
Добавлено: Чт янв 28, 2016 8:27 am
Alex
А по поводу запросов что подскажете?
Вам нужно управлять Ардуино из М или М из Ардуино?
И можете этот момент расшифровать:
Температура измеряется каждые 5 минут и в короткий период после самого старта системы (это связано с особенностями взаимодействия с М, возможно уже можно убрать, не тестировал).
Re: Arduino Mega Server
Добавлено: Чт янв 28, 2016 11:45 am
ledmax
Вам нужно управлять Ардуино из М или М из Ардуино?
Нужно получать установочное значение для пид регулятора
из М.
Re: Arduino Mega Server
Добавлено: Чт янв 28, 2016 1:30 pm
Alex
Посмотрите модуль server_commands — там примеры приёма команд от М.
192.168.1.37/?night=1
По такому принципу можете формировать команды на стороне М и интерпретировать их в АМС (см. примеры в коде).
Re: Arduino Mega Server
Добавлено: Чт янв 28, 2016 5:32 pm
SPbDima
ledmax писал(а):SPbDima писал(а):Моя доработка версии 0.14 (черновая).
Работаю только с http://ххх.ххх.ххх.ххх/sensors.htm
Единственное sensors.htm до конца не подчистил с версии 0.13(отказался от ряда параметров), т.к. занялся файловым менеджером и сейчас усиленно курю CSS. Примерный вид ФМ на страничке sdcard.htm(для просмотра необходимо добавить файлы из архива CSS).
P.S.: Если обнаружите ошибки, сообщайте!
Мощный подход к делу
Посмотрите мой вариант сравнения ид датчиков - вы в своём скетче тоже это делаете, только посложнее... У меня сравниваются ид, учитывая их порядковый номер, до тех пор, пока не совпадут.
Код: Выделить всё
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]);
Сложный способ был по причине необходимости соответствия порядка датчиков в конфиге и то что инициализировалось.
ledmax писал(а):
В итоге, если в начале всей программе определить датчики
Код: Выделить всё
//temp
byte const MAX_TEMP_SENSORS = 1;
float current_temp[MAX_TEMP_SENSORS];
То потом можно использовать температуру датчика в любом месте программы
А во всех вариантах так и используется.
ledmax писал(а):
в том числе и для логов.
Что думаете по этому поводу?
Ещё хорошо бы было добавить возможность установки пределов для каждого датчика отдельно. А то например в тёплых полах - 40 градусов уже много, а для бойлера и 90 норма.
По поводу пределов: если использовать конфиг, то там это есть; если без конфига, то можно модернизировать код Алекса несколькими строчками:
Код: Выделить всё
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))" - спасибо, попробую упростить код убрав сортировку датчиков в конфиге и тогда будет проще работать с датчиками разных типов.
Re: Arduino Mega Server
Добавлено: Чт янв 28, 2016 5:40 pm
SPbDima
ledmax писал(а):И можете этот момент расшифровать:
Код: Выделить всё
#ifdef TEMP_FEATURE
if (cycle5m || (timeSec < startSendTime)) {
tempWorks();
}
#endif
Попробуй интервал cycle5m или какой используешь, поставить в инициализации в true убрав из условия (timeSec < startSendTime), т.е.:
Код: Выделить всё
#ifdef TEMP_FEATURE
if (cycle5m) {
tempWorks();
}
#endif
У меня нет возможности проверить М, а Алекс не помнит для чего датчик должен постоянно сканироваться некоторое время после старта системы (или актуальность этого).
Re: Arduino Mega Server
Добавлено: Чт янв 28, 2016 8:12 pm
SPbDima
Alex, у тебя раскраска строк таблицы сделана при помощи разных классов чётных/нечётных строк, а при использовании CSS3 - это делается намного проще и гибче.
Но это так, для информации.
http://professorweb.ru/my/css/css_theory/level1/1_2.php
Re: Arduino Mega Server
Добавлено: Чт янв 28, 2016 10:15 pm
Alex
Да, это я уже узнал, но не стал переделывать — совершенство недостижимо, а более актуальных задач вагон и маленькая тележка.