Arduino Mega Server

Модератор: Alex

prapor
Сообщения: 7
Зарегистрирован: Пт ноя 11, 2016 9:47 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Arduino Mega Server

Сообщение prapor » Вс окт 29, 2017 12:15 am

Прежде всего хотел бы поблагодарить за такой замечательный продукт, как AMS!
Сотворил я на его базе (Arduino Mega 2560 + W5100) переключатель антенн с вэб-интрефесом, чтобы сидя дома переключать антенны, подключенные к SDR-приемнику, что стоит на работе
И возник вопрос со стабильностью - периодически девайс перестает откликаться на запросы, иногда чрез некоторое время он оживает и начинает отвечать, а иногда уходит в ступор до выключения питания. Девайс воткнут в боевую сеть и траффик там порядочный, в том числе и широковещаетельный - ARP и тд и тп
Вопрос в чем - проверен ли AMS в работе при большом количестве широковещательных запросов в сети или стоит выделить под него отдельную подсеть ?
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Arduino Mega Server

Сообщение Alex » Вс окт 29, 2017 8:20 am

И возник вопрос со стабильностью - периодически девайс перестает откликаться на запросы, иногда чрез некоторое время он оживает и начинает отвечать, а иногда уходит в ступор до выключения питания. Девайс воткнут в боевую сеть и траффик там порядочный, в том числе и широковещаетельный - ARP и тд и тп
Вопрос в чем - проверен ли AMS в работе при большом количестве широковещательных запросов в сети или стоит выделить под него отдельную подсеть ?
Скорее всего дело не в сети, а в ваших изменения в коде АМС. Но это легко проверить — запустите вашу систему в пустой сети и посмотрите изменится ли ситуация с зависаниями.
prapor
Сообщения: 7
Зарегистрирован: Пт ноя 11, 2016 9:47 pm
Благодарил (а): 2 раза
Поблагодарили: 0

Re: Arduino Mega Server

Сообщение prapor » Пн окт 30, 2017 10:52 pm

Похоже, дело было в NTP - у меня наружу он открыт только для контроллеров домена, а сами они отвечают только членам домена с аутентификацией. Девайс не мог получить время ни снаружи, ни от местных серверов. Отрубил модули RTC и NTP и пока, тьфу-тьфу, все работает стабильно и откликается быстрее.
Аватара пользователя
ser009
Сообщения: 595
Зарегистрирован: Сб окт 13, 2012 9:55 am
Благодарил (а): 4 раза
Поблагодарили: 43 раза

Re: Arduino Mega Server

Сообщение ser009 » Вт окт 31, 2017 1:01 pm

Снимок.JPG
Снимок.JPG (16.51 КБ) 8402 просмотра
Вопрос по графикам AMS.
Может кто прикручивал?
Где можно задать шкалы X и Y. Я так понимаю график должен рисоваться по середине , а не вверху. И хотелось бы увеличить время скажем до 1 часа, чтобы была видна динамика при медленно изменяющихся параметрах
abulka
Сообщения: 1
Зарегистрирован: Вт окт 31, 2017 6:29 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Arduino Mega Server

Сообщение abulka » Вт окт 31, 2017 7:30 pm

Не подскажете новичку, чем недовольна программа.
Скачал AMS.
В настройках IDE, сделал как указано.
Библиотеки не обновлял.
IDE сегодняшней версии 1.8.5
Без подключения плат запустил проверку и получил такую ошибку:
СпойлерПоказать
Arduino: 1.8.5 (Windows 10), Плата:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

ВНИМАНИЕ: Категория '' в библиотеке Ethernet2 не является действительной. Установка на 'Uncategorized'
In file included from D:\Arduino\ArduinoMegaServer\Sketches\ams\Arduino\arduino_mega_server\arduino_mega_server.ino:115:0:

D:\Arduino\ArduinoMegaServer\Sketches\ams\Arduino\libraries\DS1307RTC/DS1307RTC.h:19:22: error: 'tmElements_t' has not been declared

static bool read(tmElements_t &tm);

^

D:\Arduino\ArduinoMegaServer\Sketches\ams\Arduino\libraries\DS1307RTC/DS1307RTC.h:20:23: error: 'tmElements_t' has not been declared

static bool write(tmElements_t &tm);

^

D:\Arduino\ArduinoMegaServer\Sketches\ams\Arduino\arduino_mega_server\rtc.ino: In function 'void rtcInit()':

rtc:10: error: 'setSyncProvider' was not declared in this scope

setSyncProvider(getNtpTime);

^

rtc:14: error: 'setSyncProvider' was not declared in this scope

setSyncProvider(RTC.get); // get time from RTC

^

D:\Arduino\ArduinoMegaServer\Sketches\ams\Arduino\arduino_mega_server\rtc.ino: In function 'void rtcSync()':

rtc:24: error: 'setSyncProvider' was not declared in this scope

setSyncProvider(getNtpTime);

^

rtc:26: error: 'timeStatus' was not declared in this scope

if (timeStatus() != timeNotSet) {

^

rtc:26: error: 'timeNotSet' was not declared in this scope

if (timeStatus() != timeNotSet) {

^

D:\Arduino\ArduinoMegaServer\Sketches\ams\Arduino\arduino_mega_server\rtc.ino: In function 'void serialRTC()':

rtc:42: error: 'year' was not declared in this scope

Serial.print(year());

^

rtc:44: error: 'month' was not declared in this scope

printDigits(month());

^

rtc:46: error: 'day' was not declared in this scope

printDigits(day());

^

rtc:48: error: 'hour' was not declared in this scope

printDigits(hour());

^

rtc:50: error: 'minute' was not declared in this scope

printDigits(minute());

^

rtc:52: error: 'second' was not declared in this scope

printDigits(second());

^

D:\Arduino\ArduinoMegaServer\Sketches\ams\Arduino\arduino_mega_server\rtc.ino: In function 'void showDuration(time_t)':

rtc:73: error: 'SECS_PER_DAY' was not declared in this scope

if(duration >= SECS_PER_DAY){

^

rtc:78: error: 'SECS_PER_HOUR' was not declared in this scope

if(duration >= SECS_PER_HOUR){

^

rtc:83: error: 'SECS_PER_MIN' was not declared in this scope

if(duration >= SECS_PER_MIN){

^

D:\Arduino\ArduinoMegaServer\Sketches\ams\Arduino\arduino_mega_server\rtc.ino: In function 'void checkEvent(time_t*)':

rtc:94: error: 'now' was not declared in this scope

time_t timeNow = now();

^

D:\Arduino\ArduinoMegaServer\Sketches\ams\Arduino\arduino_mega_server\rtc.ino: In function 'void setNtpInterval()':

rtc:149: error: 'timeStatus' was not declared in this scope

if (timeStatus() == timeNotSet) {

^

rtc:149: error: 'timeNotSet' was not declared in this scope

if (timeStatus() == timeNotSet) {

^

rtc:150: error: 'setSyncInterval' was not declared in this scope

setSyncInterval(18);

^

D:\Arduino\ArduinoMegaServer\Sketches\ams\Arduino\arduino_mega_server\server_ajax.ino: In function 'String makeTime()':

server_ajax:226: error: 'hour' was not declared in this scope

s += makeDigits(hour());

^

server_ajax:227: error: 'second' was not declared in this scope

if (second() % 2 == 0) {s += " ";}

^

server_ajax:229: error: 'minute' was not declared in this scope

s += makeDigits(minute());

^

D:\Arduino\ArduinoMegaServer\Sketches\ams\Arduino\arduino_mega_server\server_ajax.ino: In function 'void responseDash(EthernetClient)':

server_ajax:789: error: 'day' was not declared in this scope

s += makeTag("day", "", String(day()));

^

server_ajax:790: error: 'month' was not declared in this scope

s += makeTag("month", "", String(month()));

^

server_ajax:791: error: 'weekday' was not declared in this scope

s += makeTag("weekday", "", String(weekday()));

^

D:\Arduino\ArduinoMegaServer\Sketches\ams\Arduino\arduino_mega_server\tntp.ino: In function 'time_t getNtpTime()':

tntp:54: error: 'setSyncInterval' was not declared in this scope

setSyncInterval(3600);

^

tntp:55: error: 'SECS_PER_HOUR' was not declared in this scope

return secsSince1900 - 2208988800UL + timeZone * SECS_PER_HOUR;

^

tntp:59: error: 'setSyncInterval' was not declared in this scope

setSyncInterval(18);

^

D:\Arduino\ArduinoMegaServer\Sketches\ams\Arduino\arduino_mega_server\upload.ino: In function 'void uploadWorks()':

upload:160: error: 'setSyncProvider' was not declared in this scope

setSyncProvider(RTC.get);

^

upload:162: error: 'timeStatus' was not declared in this scope

if (timeStatus() != timeSet) {

^

upload:162: error: 'timeSet' was not declared in this scope

if (timeStatus() != timeSet) {

^

Несколько библиотек найдено для "Ethernet.h"
Используется: D:\Arduino\ArduinoMegaServer\Sketches\ams\Arduino\libraries\Ethernet
Не используется: C:\Program Files (x86)\Arduino\libraries\Ethernet
exit status 1
'setSyncProvider' was not declared in this scope

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
*** Сообщение запрещено. Сообщение похоже на спам. ***
Аватара пользователя
ser009
Сообщения: 595
Зарегистрирован: Сб окт 13, 2012 9:55 am
Благодарил (а): 4 раза
Поблагодарили: 43 раза

Re: Arduino Mega Server

Сообщение ser009 » Вт окт 31, 2017 10:29 pm

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

Re: Arduino Mega Server

Сообщение serghei » Ср ноя 01, 2017 11:08 pm

prapor писал(а):....Похоже, дело было в NTP....... Девайс не мог получить время ни снаружи, ни от местных серверов. Отрубил модули RTC и NTP...
Извините , а откуда тогда Вы получаете время??? Я понимаю , что можно обойтись без этого , но только на период изучения возможностей АМС. Тогда уж можно прикрутить железные часики.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server

Сообщение serghei » Ср ноя 01, 2017 11:40 pm

ser009 писал(а):Вопрос по графикам AMS.
Может кто прикручивал?
Где можно задать шкалы X и Y. Я так понимаю график должен рисоваться по середине , а не вверху. И хотелось бы увеличить время скажем до 1 часа, чтобы была видна динамика при медленно изменяющихся параметрах
Очень давно я прикрутил аналоговые часики на .JS Код очень похож на многофунциональный индикатор.
СпойлерПоказать

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

// clock


var oldSeconds = 0;

function updateClock() {
 var t = new Date();
 var clockArms = [t.getHours(), t.getMinutes(), t.getSeconds()];
 if (clockArms[2] == oldSeconds) return; //секунды не менялись? выйти
 oldSeconds = clockArms[2];
 
 var c = document.getElementById('clock');
 var ctx = c.getContext('2d');
 //очистить канву:
//ctx.fillStyle = 'white';                  // фон квадрата часов
 ctx.fillRect(0, 0, c.width, c.height);
 //нарисовать контур часов:
 var x = Math.round(c.width/2);
 var y = Math.round(c.height/2);
 var r = Math.round(Math.min(x,y));
 ctx.beginPath(); 
 ctx.arc(x,y,r,0,2*Math.PI,true);
 ctx.fillStyle = 'rgba(200,200,200,1)';// задает фон внутри циферблата
 ctx.fill(); //????????
 ctx.lineWidth = 1;
 ctx.strokeStyle = 'rgba(128,128,128,0)';//-----------------------------окружность!!!!!
 ctx.stroke();
 ctx.closePath();
 //нарисовать метки циферблата и цифры:
 ctx.save();
 ctx.textBaseline = "middle";
 ctx.textAlign = "center";
// ctx.shadowColor = "rgb(128,0,0)";       //тени возле цифр
// ctx.shadowOffsetX = 3;
// ctx.shadowOffsetY = 3;
// ctx.shadowBlur = 6;
 var delta = Math.max(8,Math.round(r/10)); //для размера шрифта и отсечек
 ctx.font = 'bold '+delta+'pt sans-serif';
 var u=Math.PI/2;
 var r1=r-delta;
 for (var i=1; i<=12; i++) {
  ctx.beginPath();
  var x1 = x+Math.round(r1*Math.cos(u)), //так можно узнать позиции делений циферблата
      y1 = y-Math.round(r1*Math.sin(u)),
      x2 = x+Math.round(r*Math.cos(u)),
      y2 = y-Math.round(r*Math.sin(u));
  ctx.strokeStyle = 'rgb(99,99,99)';
  ctx.moveTo(x1,y1);
  ctx.lineTo(x2,y2);
  u+=Math.PI/6;
  ctx.stroke();
  ctx.closePath();
  ctx.beginPath();
  ctx.fillStyle = 'rgba(33,33,33,0)';
  //ctx.fillText (''+(13-i),x1,y1); //а так вывести цифры по часовому кругу
  ctx.fill();
  ctx.closePath();
 }
 ctx.restore();
 //нарисовать стрелки:
 clockArms[1] += clockArms[2] / 60;
 clockArms[0] += clockArms[1] / 60;
 drawClockArm(ctx, x, y, clockArms[0] * 30, 2*r/2.5 - 15, 5, 'navy'); // длина , толщина и цвет стрелок
 drawClockArm(ctx, x, y, clockArms[1] * 6,  2*r/2.2 - 10, 3, 'darkgreen');
 drawClockArm(ctx, x, y, clockArms[2] * 6,  2*r/2.0 - 6,  2, 'darkred');
}
 
function drawClockArm(ctx, x,y, degrees, len, lineWidth, style) {
 ctx.save();
 ctx.lineWidth = lineWidth;
 ctx.lineCap = 'round';
 ctx.translate(x, y);
 ctx.rotate((degrees - 90) * Math.PI / 180);
 ctx.strokeStyle = style;
 ctx.beginPath();
 ctx.moveTo(-len / 10, 0);
 ctx.lineTo(len, 0);
 ctx.stroke();
 ctx.restore();
}
 
function initClock() {
 window.setInterval(updateClock, 333); //интервал обновления - треть секунды
}

onload = initClock;]
Не вижу большого смысла делать период показа около часа - при каждом открытии страницы график рисуется сначала. А то что он рисует линию сверху - это логично и предсказуемо. А вот где лежит этот код - надо искать. Но это все делает .JS
По поводу NRF24. Не всегда , но тоже на такое поведение натыкался. Хотя даже если в сериале " передача не удалась", цифры нормально доходят до сервера.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Omiroshin
Сообщения: 2
Зарегистрирован: Вс май 21, 2017 7:13 pm
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Arduino Mega Server

Сообщение Omiroshin » Сб ноя 11, 2017 7:08 pm

Всем привет!

Заглянул в тему после статьи на хабре: https://geektimes.ru/post/259898/

Возник вопрос: использую w5100 для выхода ардуинки в сеть, использую стандартную библиотечку для этой платы, после прочтения статьи (в ней описан баг с подвисаниями клиентов web-сервера) захотелось обойти описанный в статье баг, как это можно сделать?

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

Re: Arduino Mega Server

Сообщение serghei » Сб ноя 11, 2017 8:40 pm

ser009 писал(а):Еще одно интересное замечание.
Если есть клиенты nrf24, то при перезагрузке сервера приходится перезапускать и клиентов.
На ESP8266 и 32 такой проблемы нет. При запуске сервера за минуту проходит вся карусель , и данные на странице.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Ответить