Arduino Mega Server (AMS) и MySensors

Модератор: Alex

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

Arduino Mega Server (AMS) и MySensors

Сообщение serghei » Ср май 09, 2018 5:10 pm

Приветствую Всех. Так как не получилось из дистибутива создать сеть из NRF24 сенсоров ( с одним проблем нет - передаю две температуры , влажность и два счетчика), обнаглел и решил прикрутить готовое решение от MySensors. НЕ ГЕЙТ !!!!.

За основу взял вкладку с работой от "Laurent" , так как он умеет работать по сети. Добавил вкладку
СпойлерПоказать

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

 /*
  Module MySensors ESP32
  part of Arduino Mega Server project
*/
  #ifdef FEATURE_MYSEN


  #define ANSW_BUF_SIZE 128
char HTTP_answ[ANSW_BUF_SIZE] = {0};

// target net settings
byte MHC_IP[] = {192, 168, 2, 120};  //IP адрес гейта MySensors
int MHC_PORT = 5003;                 //порт гейта 

#define MAX_LEN_MREQUEST 128
String srequest = "";

WiFiClient sclient;

 void initMYSEN() {

    initStart(F("MySensors"), true);                       // инициализация модуля
  timeStamp();
  Serial.print(F(" Connect to MySensors_Gate... "));       // подключение
  if (sclient.connect(MHC_IP, MHC_PORT)) {
    Serial.println(F("OK"));                                
   
    sclient.println();
  } else {
      Serial.println(F("failed"));
    }
  delay(200);
  sclient.stop();
  moduleMYSEN = ENABLE;
  started(F("MySensors"), true);                           // старт модуля
  }

void sendMySemsorsRequest() {
  if (sclient.connect(MHC_IP, MHC_PORT)) {
    timeStamp(); Serial.print(F("Command: "));             // а вот тут сплошные косяки ))
    Serial.println(buf);
    sclient.println(buf);
    delay(100);
  
    timeStamp(); Serial.print(F("Answer GateWay:  "));     // но часть ответа видим ))
    srequest = "";
    while(sclient.available() != 0) {
      char c = sclient.read();
      Serial.print(c);
      if (srequest.length() < MAX_LEN_MREQUEST) {
        srequest += (c);
      }
    }
    delay(500);
    sclient.stop();
  } else {
      timeStamp(); Serial.println(F("Error sending command"));
    }
} // sendLaurentRequest()

  void workMYSEN() {
  if (cycle5m) {
sendMySemsorsRequest();                           // при вызове этого гейт перегружается ?
  }
  }
  #endif
......В результате в сериале вижу картину
СпойлерПоказать
  • 2018-05-09 11:55:22 Module DHT... started
    2018-05-09 11:55:22 Module MySensors...
    2018-05-09 11:55:22 Connect to MySensors_Gate... OK // Подключились
    2018-05-09 11:55:22 Module MySensors... started // Стартанули
    2018-05-09 11:55:22 Module BME... started
    2018-05-09 11:55:22 Module Electro... started
    2018-05-09 11:55:22 Module TLog... started
    2018-05-09 11:55:22 HTTP port: 8080
    2018-05-09 11:55:22 Module Http... started // это другая песня и работает ))).
    GLOBAL Init DONE (35s)

    AMS WORK
А дальше следующее
СпойлерПоказать
  • 2018-05-09 12:04:49 Command:
    2018-05-09 12:04:49 Answer GateWay: 0;255;3;0;14;Gateway startup complete. // Знающие люди поймут ))
Дальше мои знания заканчиваются . Если тема кому то интересна - убедительная просьба присоединиться к проекту и помочь решить проблему.

Библиотека передает "всего" 53 переменных с числами , ну и знать с какого ID что прилетело. А дальше распарсивать ответы можно и руками. Вывести на страницу уже не проблема.

PS Отдельное СПАСИБО ledmax за его идею разговора двух AMS по сети. ( хотя у меня ничего не взлетело ((((( )))).
Последний раз редактировалось serghei Ср май 09, 2018 7:10 pm, всего редактировалось 1 раз.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server (AMS) и MySensors

Сообщение serghei » Ср май 09, 2018 5:19 pm

Боюсь что форум опять зарубит вложения. Вывод в сериале
СпойлерПоказать
MySens_AMS.jpg
MySens_AMS.jpg (316.56 КБ) 3320 просмотров
То есть насколько я понимаю , задача просто слушать эфир с такого то адреса по 5003 порту и хотя бы увидеть ответы в сериале. Может быть чистить буфер для новых ответов.
Сейчас получается , что на каждый ответ гейта AMS выводит Answer GateWay: 0;255;3;0;14;Gateway startup complete.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server (AMS) и MySensors

Сообщение serghei » Вс май 13, 2018 1:43 pm

" Дело было вечером , делать было ..." -- короче по-развлекались и наизвращались с гейтом.

Теперь AMS видит всё , что гейт валит в сеть.
СпойлерПоказать
AMS_MySen.jpg
AMS_MySen.jpg (285.72 КБ) 3254 просмотра
Осталось только раскалбасить на странице весь этот поток бреда :lol: . И вот тут не понятно что хуже - прописывать в коде каждый AMS-сенсор , или распарсивать ( опять же руками (( ) все ответы от гейта.

Дебаг можно убрать , оставить только значения от нод.
СпойлерПоказать
  • 2018-05-13 09:52:41 : 99456 (34%) 0
    Self temp: 35.6 C

    20;255;3;0;11;OutDoor sensor // Имя Ноды
    20;255;3;0;12;1.0 // Версия скетча
    20;1;0;0;30;Battery // Презентация
    20;2;0;0;6;Temp

    20;2;1;0;0;25.0
    25 // Температура
    20;1;1;0;38;2918
    2.92 // Напряжение батарейки



    20;255;0;0;17;2.2.0
    20;255;3;0;6;0
    2018-05-13 09:53:40 tempSTR: 17.69
    2018-05-13 09:53:40 tempHOM: 31.00
    2018-05-13 09:53:40 tempWRM: 30.19
    2018-05-13 09:53:40 tempB2: ID problem or not present

    *** workCount ***
    2018-05-13 09:53:40 count1: (0)0.07 (1)13.51
    2018-05-13 09:53:40 count2: (0)0.07 (1)13.51
    2018-05-13 09:53:40 count3: (0)0.07 (1)13.51
    2018-05-13 09:53:41 count4: (0)0.07 (1)13.51
    2018-05-13 09:53:41 count5: (0)0.07 (1)13.51
    *** workCount ***
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

Re: Arduino Mega Server (AMS) и MySensors

Сообщение serghei » Чт май 17, 2018 9:39 pm

Законченный вариант решения. Вкладка "MySensors"
СпойлерПоказать

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

 /*
  Module MySensors ESP32
  part of Arduino Mega Server project
*/

  #ifdef FEATURE_MYSEN

char* gateAddr = "192.168.2.120";// IP адрес гейта ( задан жестко)
int gatePort = 5003;// порт гейта
// вот здесь нужна легенда
   int data1;                // температура DHT 1
   int data2;                // влажность   DHT 1
   int data3;                // температура DS18B20  20
   int data4;                // батарея         20 
  // String data4;           // батарея         20
          String data5;      // название скетча 20
          String data6;      // название скетча 1

WiFiClient gate;

void initMYSEN() {                                  // инициализация модуля

    statusGate();
  delay(5000);
  
// initStart(F("MySensors"), true);                      
  //  timeStamp();

  moduleMYSEN = ENABLE;
  started(F("MySensors"), true);                           // старт модуля
  }
  void workMYSEN() {
    reqGate();
}
void statusGate() {
  Serial.println("***Gate status***");
  if (gate.connect(gateAddr, gatePort)) {
    Serial.println("Gate connect: Ok");
  } else {
    Serial.println("Gate connect: Fail");
  }
}
void reqGate() {                                    // функция чтения данных из порта
  String dataString = "";                           // объявляем dataString как локальную переменную
  while(gate.available() > 0) {                     // цикл чтения данных, если есть данные то записываем
    char data = gate.read();                        // запись пришедшего байта
 #ifdef MYSENS_DEBUG                               // Дебаг
    Serial.print(String(data));                     // только для отладки нужно
 #endif   
    dataString += String(data);                     // добавляем записанный байт в строку(она и есть буфер)
  }                                                             // данных не поступает, строка dataString либо с данными, либо пуста
  if (dataString.startsWith("1;1;1;0;0;")) {        //  температура DHT 1 сенсора
     data1 = dataString.substring(10).toInt();
    Serial.println(data1);
  }
  if (dataString.startsWith("1;0;1;0;1;")) {    // распарсивание данных с гейта
     data2 = (dataString.substring(10)).toInt();
    Serial.println(data2);
   // dataString = "";
  }
  if (dataString.startsWith("20;2;1;0;0;")) {
     data3 = (dataString.substring(11)).toInt();
    Serial.println(data3);
   //dataString = "";
  }
  if (dataString.startsWith("20;1;1;0;38;")) {
     data4 = (dataString.substring(12)).toInt();      
    Serial.println(data4);
  }
    if (dataString.startsWith("20;255;3;0;11;")) { // 20;255;3;0;11;OutDoor sensor - название скетча
    data5 = (dataString.substring(14));
    Serial.println(data5);
  }
    if (dataString.startsWith("1;255;3;0;11;")) { //1;255;3;0;11;TemperatureAndHumidity
     data6 = (dataString.substring(13));       // 
    Serial.println(data6);
  }
}
#endif
В сервере-ажакс вывод значений от двух нод
СпойлерПоказать

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

     #ifdef FEATURE_MYSEN  
       s += makeTag("tempNode1",    "", String(data1));
       s += makeTag("humNode1",     "", String(data2));
       s += makeTag("nameNode1",     "", data6);
       s += makeTag("tempNode2",    "", String(data3));
       s += makeTag("batNode2",     "", String(data4));
       s += makeTag("nameNode2",     "", data5);   
     #endif
На выходе получаем картинку ( добавлено к странице " Сенсоры" от ser009) . Значения реальные.
СпойлерПоказать
AMS_MySens.jpg
AMS_MySens.jpg (45.8 КБ) 3184 просмотра
Выражаю ОГРОМНУЮ благодарность форумчанам за реальную помощь в науке программирования и безграничное терпение к моим хотелкам )))!!!!
PS. Огромным плюсом такого решения является " прикручивание " сети датчиков NRF24 чужими вычислительными мощностями. Физического подключения радио-модуля НЕ ТРЕБУЕТСЯ !
За это сообщение автора serghei поблагодарил:
Andrey64 (Вс июл 08, 2018 4:10 pm)
Рейтинг: 1.16%
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Ответить