Arduino Mega Server

Модератор: Alex

alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am

Re: Arduino Mega Server

Сообщение alexsis_76 »

Да самый лучший вариант это сокет, устройство всегда будет знать живой датчик или нет,http этого не может,сокет tcp либо udp в локальной сети без разницы.
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв

Re: Arduino Mega Server

Сообщение serghei »

Тогда остался не ясным вопрос. Что бы увидеть UDP пакеты , надо приконнектиться к устройству. В моём случае IP MySensors гейта задан жестко и AMS сначала коннектится к гейту , а затем слушает все ответы. Распарсивать значения уже дело десятое.
А тут предлагают слушать кучу ESP12 с непонятно каким протоколом. И как тогда просто слушать весь траффик без привязки к конкретному устройству ?
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Контактная информация:

Re: Arduino Mega Server

Сообщение skysilver »

serghei писал(а): Пн авг 06, 2018 10:51 am А тут предлагают слушать кучу ESP12 с непонятно каким протоколом. И как тогда просто слушать весь траффик без привязки к конкретному устройству ?
Сделать по аналогии со шлюзами сяоми. Там используется udp multicast рассылка. Все клиенты шлют сообщения в мультикаст группу. А те, кому надо принимать от них сообщения (МДМ, АМС и т.п.), "подписываются" на эту группу. Очень удобно. У меня два шлюза сяоми, а получать от них данные и управлять ими я могу с 3-4х инстансов МДМ без каких-либо доработок. Главное чтобы все сидели в одной vlan.

Протокол можно самим придумать. У того же сяоми обычный обмен json-сообщениями.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am

Re: Arduino Mega Server

Сообщение alexsis_76 »

udp multicast
о там даже пример мультикаста есть.
А тут предлагают слушать кучу ESP12 с непонятно каким протоколом
протокол tcp,очень удобно,не то что тормозной http,кстати использует tcp в качестве транспорта.
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв

Re: Arduino Mega Server

Сообщение serghei »

skysilver писал(а): Пн авг 06, 2018 11:02 am ... Все клиенты шлют сообщения в мультикаст группу. А те, кому надо принимать от них сообщения (МДМ, АМС и т.п.), "подписываются" на эту группу.
Действительно удобно. А реализация на AMS есть ? А то получается если гейт включить после ардуины , то пакетов не видно. И это бы решило проблему с реконнектом.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Контактная информация:

Re: Arduino Mega Server

Сообщение skysilver »

serghei писал(а): Пн авг 06, 2018 12:45 pm Действительно удобно. А реализация на AMS есть ?
Нет конечно. Откуда ей взяться. :) Код не особо сложный будет. Исходники протокола можно взять у модуля Xiaomi Home.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am

Re: Arduino Mega Server

Сообщение alexsis_76 »

очень хорошая реализация udp на 8266
void udp_init() {
const char dst_ip[4] = {192, 168, 0, 85}; // Server IP
memset(&udp_conn, 0, sizeof(struct espconn));
memset(&udp, 0, sizeof(esp_udp));
udp_conn.proto.udp = &udp;
udp_conn.type = ESPCONN_UDP;
udp_conn.state = ESPCONN_NONE;
os_memcpy(udp_conn.proto.udp->remote_ip, dst_ip, 4); // Remote Server IP
udp_conn.proto.udp->remote_port = 8881;// Remote Server Port
udp_conn.proto.udp->local_port = 8886;//espconn_port();
espconn_regist_sentcb(&udp_conn, udp_sent_cb); // register a udp packet sending callback
espconn_regist_recvcb(&udp_conn, udp_recv_cb);
udp_conn.reverse = NULL;
int status = espconn_create(&udp_conn);
}
объявляете две функции обратного вызова
void udp_recv_cb(void *arg, char *pusrdata, unsigned short length)
{
struct espconn *pespconn = (struct espconn *)arg;
}
void udp_sent_cb(void *arg)
{
}
когда придут данные будет вызвана udp_recv_cb
можно обработать данные
когда будет отправлен пакет будет вызвана
udp_sent_cb()
Тогда остался не ясным вопрос. Что бы увидеть UDP пакеты , надо приконнектиться к устройству
не надо никуда приконекчиваться, udp не устанавливает соединения,даже подтверждения не требуется.
svetozar161
Сообщения: 72
Зарегистрирован: Пт янв 13, 2017 11:48 pm

Re: Arduino Mega Server

Сообщение svetozar161 »

Честно говоря я ничего не понял)) я в этом профан. При прошивке wifi-iot прошивки была выбрана опция передачи GET запросом данных на свой домашний сервер, например majordomo на порт 80
Цитата
"Функция позволяет с установленным интервалом отправлять данные GET запросом на свой домашний сервер. Это может быть сервер MajorDoMo или другая система или свой простенький php скрипт.
Папка с скриптом должна находится по адресу /objects/ , но адрес можно поменять на другой в конструкторе прошивки, например /test.php . Скрипт должен обрабатывать входящие данные согласно метрикам, указанным в конце статьи.
Если на веб сервере используются vhost , то в его настройках необходимо указать vhost с именем homeserver"

Сейчас в мажордомо видно 4 датчика(3 на подходе), которые передают температуру и влажность.
слаботочка UTP5 cat.png
слаботочка UTP5 cat.png (33.59 КБ) 5192 просмотра
Я хочу просто поставить Мегу2560 с прошивкой АМС на управление котлом (у меня 5 лет до этого стоял набор от мастер-кита термостат на далласах, все работало отлично).
Может просто организовать термостат на сервере с мажордомо? Но там нету защиты от глюков системы, все-таки винда и пропадания электричества например в середине февраля ночью)) комп не сможет сам снова запуститься(я еще буду думать об этом).
Вложение слаботочка UTP5 cat.png больше недоступно

Так вот, согласно схемы моей сети к месту установки котла подходит витая пара, но протянуть от котла датчики по всей комнате витой парой уже проблематично, поэтому я хотел чтобы АМС видела датчик например в спальне и работала термостатом, в будущем подсоединить к ней уже физически датчик давления теплоносителя, далласы обратки и подачи, счетчик воды, газа и электроэнергии. Вот и все))
з.ы. Хотел сначала поставить прошивку MegaD(не реклама)) ), но оказалось, что там используется контроллер 2561, а на ArduinoMega контроллер 2560. На форуме создатель прошивки пояснил, что на этот контроллер прошивка не встанет и переписывать он не будет. Поэтому искал альтернативу и нашел АМС.
Кто может, помогите разобраться)) Спасибо.
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв

Re: Arduino Mega Server

Сообщение serghei »

svetozar161 писал(а): Пн авг 06, 2018 7:42 pm Честно говоря я ничего не понял))
Да это мы так подбираемся к какому нибудь глобальному решению ( межсобойчик ). В результате мозговой атаки получаются прикольные вещи. Одна страница обновляемых графиков чего стоит.
svetozar161 писал(а): Пн авг 06, 2018 7:42 pm ....Поэтому искал альтернативу и нашел АМС.
Судя по рисунку собственно на AMS все это уже реализовано. Температуру меряет ,потребление воды и газа - то же есть на микрухах DS2423. /* Классная штука , но дорогие заразы */.
Давление то же не проблема , но датчики по 13 баксов. Вот с ваттметром посложнее будет. То что есть де-факто - показывает , но с линейностью не справился. Хотя то же через эти же счетчики реализуется.
svetozar161 писал(а): Пн авг 06, 2018 7:42 pm ... я хотел чтобы АМС видела датчик например в спальне и работала термостатом
Это то же просто. Если температуру задать в коде , то

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

#define relePin 04

void testInit(){
  pinMode(relePin, OUTPUT);
  digitalWrite(relePin, LOW);
}

void testRele(){ // рабочая функция 
  if(!releSt && current_temp[3] > 40.0){
   // if(!releSt && analogRead(35) > 2000.0){
      
  digitalWrite(relePin, HIGH);

  timeStamp();
  Serial.println(" Rele \"ON\"");
  releSt = 1;
  }
  if(releSt && current_temp[3] < 35.0){

  //  if(releSt && analogRead(35) < 1500.0){
  digitalWrite(relePin, LOW);
 timeStamp();
  Serial.println(" Rele \"OFF\"");
  releSt = 0;
  }
}
Там же к стати и регулирование по аналоговому сигналу. Получается так
SPOILERSPOILER_SHOW
Screenshot_2018-08-06 ESP32 SD - Arduino Mega Server.png
Screenshot_2018-08-06 ESP32 SD - Arduino Mega Server.png (14.08 КБ) 5177 просмотров
Пока думаю как размножить на 4 реле.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am

Re: Arduino Mega Server

Сообщение alexsis_76 »

для начала немножко теории.Практически все устройства в сети работают по пр принципу сервер-клиент,задача сервера состоит в прослушивании порта на предмет входящих соединений(http слушает порт 80 или 8080),клиент может устанавливать соединение к серверу,сервер пассивен и ни чего ни куда передать не может а может только отвечать на запросы которые инициирует клиент,клиентом может являтся любой кто постучится на указанные порты,если вы создаете вебстраничку на esp,то esp будет сервером(хотя это громко сказано) а браузер клиентом,после установления соединения клиент может слать запросы,обычно используют запросы типа GET
GET/test.php?fname=Иван&lname=Иванов где GET-тип запроса,test.php-получатель запроса(тот кто обработает запрос)в данном случае скрипт,
fname=Иван&lname=Иванов парметры запроса(ради которых все собственно и затевалось) передаются после ?
так вот открываете сервер на вашем новоявленном девайсе и слушаете,датчик который хочет передать данные делает подобный запрос а вы парсите его и все довольны,если у датчиков имеются свои веб интерфейсы то можете тянуть прямо оттуда(новоявленный девайс будет клиентом)
Функция позволяет с установленным интервалом отправлять данные GET запросом на свой домашний сервер. Это может быть сервер MajorDoMo или другая система или свой простенький php скрипт
Ответить