Страница 12 из 23

Re: Подключение железа к AMS

Добавлено: Пт июл 27, 2018 10:01 pm
lihodeev
serghei писал(а):
Пт июл 27, 2018 1:41 pm
lihodeev писал(а):
Пт июл 27, 2018 12:48 pm
меня не очень интересует интерфейс меги. Думаю будет достаточно получить от нее данные
90 % кода AMS - это работа с вебом. Еще 9 % - это связь с МД. И только 1 % - это работа с датчиками.
Тут все что работает с обычной ардуиной , будет работать и с в составе AMS . Вся фишка - увидеть эту работу в браузере.
Более подробно вечером.
А потренироваться на кошках - запустите пример с DHT датчиками. Физически можно и не подключать. Добавь код от Sps и мой для даш-панели. А там будет ясно как это работает.Ссылка.
Я надеюсь что ошибаюсь -в конечном итоге мы должны для получения данных в МД парсить данные с AMS?

Re: Подключение железа к AMS

Добавлено: Пт июл 27, 2018 10:23 pm
serghei
Если очень коротко - то ДА.Просто ардуина получает данные с великого множества датчиков и тупо с помощью вкладки Majer передает их Алисе. Последняя в свою очередь просто их распарсивает и Вы их видите где угодно. По дефолту в AMS так реализовано передача трех температур с DS18B20 и 14 данных мощности. Процесс распарсивания выкладывал неоднократно. Но это для AMS как из пушки по воробьям.
Можно пойти еще дальше. Есть замечательная плата от RobotDyn с Мегой и ESP8266 на борту. Есть протокол передачи данных между двумя серверами в обе стороны. На Мегу я прилепил TFT экран 3.5 дюйма с тач-скрином ( БЕЗ интернет-шилда). А идея простая - Мега меряет что нибудь , показывает на экране , при этом сливает данные в ESP8266, а последняя передает Алисе.
В этом отношении AMS нафарширован по самое нихочу )). Надо только очень хорошо разбираться в коде.
А для начала поставить себе простую задачу - включить реле с МД на AMS-е. Для этого уже всё готово.

Re: Подключение железа к AMS

Добавлено: Пт июл 27, 2018 10:40 pm
lihodeev
serghei писал(а):
Пт июл 27, 2018 10:23 pm
Если очень коротко - то ДА.Просто ардуина получает данные с великого множества датчиков и тупо с помощью вкладки Majer передает их Алисе. Последняя в свою очередь просто их распарсивает и Вы их видите где угодно.
Значит я не ошибся... жаль я концепцию всей этой связки представлял иначе - веб сервер собирает и обрабатывает данные себе по тихому, а мы запрашиваем нужное нам у ядра. Т.е. веб нам не нужен в принципе, только для посмотреть на утонченный плиточный , 3D дизайн и когда появится настроение - ознакомиться с роскошными рекламными страничками. Можно посмотреть на состояние портов что как на меня, в этом компоте самое ценное. Так все таки - зачем нам кузнец? ©(...зачем нам кузнец? что я лошадь что ли?....) или тут не прав?

Re: Подключение железа к AMS

Добавлено: Пт июл 27, 2018 10:59 pm
serghei
lihodeev писал(а):
Пт июл 27, 2018 10:40 pm
... я концепцию всей этой связки представлял иначе - веб сервер собирает и обрабатывает данные себе по тихому, а мы запрашиваем нужное нам у ядра..... или тут не прав?
Концепция очень простая. AMS-у Алиса ВООБЩЕ не нужна !! Это абсолютно самодостаточная система , которая умеет даже ползти на сайт погоды и показывать прогноз на 4 дня вперед 73 параметра и с тучками! Я уже не говорю про сеть MySensors.
А Алисе AMS нужен только как гейт между нарисованными кнопками на сценах и реальными реле , заменяющие выключатели с клапанами на батареях ))).
А картинка портов мне оочень полезна - там вижу реальный уровень сигнала с аналоговых датчиков )).

Re: Подключение железа к AMS

Добавлено: Пт июл 27, 2018 11:17 pm
lihodeev
serghei писал(а):
Пт июл 27, 2018 10:59 pm
Концепция очень простая. AMS-у Алиса ВООБЩЕ не нужна !! Это абсолютно самодостаточная система , которая умеет даже ползти на сайт погоды и показывать прогноз на 4 дня вперед 73 параметра и с тучками! Я уже не говорю про сеть MySensors.
А Алисе AMS нужен только как гейт между нарисованными кнопками на сценах и реальными реле , заменяющие выключатели с клапанами на батареях ))).
А картинка портов мне оочень полезна - там вижу реальный уровень сигнала с аналоговых датчиков )).
Только мне Алиса больше по душе. Может потому что с ней понятней и проще, может потому что я ее вижу значительно перспективней применительно к моему дому и я по ней нашел значительно больше нужной и полезной информации и что самое главное- быстрее, а может потому что она просто женщина... :-)
На счет картинки портов полностью согласен! Тогда в свете выше сказанного что посоветуете поставить между моей малиной(Алисой) и домом в качестве промежуточного звена(исполнительное устройство)? Использовать GPIO малины не вижу смысла.

Re: Подключение железа к AMS

Добавлено: Пт июл 27, 2018 11:35 pm
serghei
Сначала поставьте цель. Вот есть Алиса - а вот....ЧТО ??? Если хотите щелкать 24-мя выключателями с лампочками , тогда Вам в Мега-Лайт контроллер . При этом если Алиса уснула , Мега будет пахать сама по себе и свет все таки включится.
Если хотите управлять клапанами на батареях или теплым полом, тогда в AMS и щелкать релюшками со сцены Алисы. Можно еще собрать температуру с влажностью во всех комнатах и просто передать Алисе.
Посмотрите что вытворяет Алекс в AMS-PRO. Если понимаете в программировании ардуино - то теоретически всё это можно повторить.

Лично у меня с Алисой дружить не получается ,хотя живет на апельсине PI-PC и пока только будит по утрам , орет радио и выгоняет на работу ))). Ну и показывает кто из AMS еще жив в системе )) Я то же пока только учусь....

Re: Подключение железа к AMS

Добавлено: Пт июл 27, 2018 11:37 pm
skysilver
lihodeev писал(а):
Пт июл 27, 2018 11:17 pm
что посоветуете поставить между моей малиной(Алисой) и домом в качестве промежуточного звена(исполнительное устройство)? Использовать GPIO малины не вижу смысла.
Зайди в Коннект. Там тонна оборудования, которым пользуются реальные пользователи МДМ. ;)

Re: Подключение железа к AMS

Добавлено: Вт авг 07, 2018 4:47 pm
ученик
И вот...
По поводу скетчей Contacts
из АМС 16 и 17 версии
Старая версия АМС 16

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

/*
  Modul Contacts
  part of Arduino Mega Server project
*/

#ifdef CONTACTS_FEATURE

#define cont1pin 27 // HOM
#define cont2pin 31 // CLO

#define OPEN  1
#define CLOSE 0

char cont1object[] = "contHOM";
char cont2object[] = "contCLO";

char cont1openMess[] = "Open"; char cont1closeMess[] = "Closed";
char cont2openMess[] = "Down"; char cont2closeMess[] = "Norm";

// states
  // 0 - open
  // 1 - close
  // 2 - not defined
  // 3 - not defined and not contXstatus
byte cont1state = 2; byte old_cont1state = 3; byte cont1objectState = 2;
byte cont2state = 2; byte old_cont2state = 3; byte cont2objectState = 2;

void contactsInit() {
  pinMode(cont1pin, INPUT);
  pinMode(cont2pin, INPUT);
  modulContacts = MODUL_ENABLE;

  started("Contacts", true);
}

void printAndSend(char obj[], char mess[]) {
  #ifdef EVENTS_CONTACTS
    timeStamp();
    Serial.print(obj);
    Serialprint(": ");
    Serial.println(mess);
  #endif
}

void contactsWorks() {
  // cont1 (HOM)
  cont1state = digitalRead(cont1pin);

  if (cont1state != old_cont1state) {
      old_cont1state = cont1state;
      
      if (cont1state == 0) {
        cont1objectState = OPEN;
        printAndSend(cont1object, cont1openMess);
        #ifdef MAJORDOMO_FEATURE
          sendRequestM(cont1object, OPEN);
        #endif
      } else {
        cont1objectState = CLOSE;
        printAndSend(cont1object, cont1closeMess);
        #ifdef MAJORDOMO_FEATURE
          sendRequestM(cont1object, CLOSE);
        #endif
      }
  }
  
  if (cycle1m) {
    old_cont1state = cont1state;

    if (cont1state == 0) {
      printAndSend(cont1object, cont1openMess);
      #ifdef MAJORDOMO_FEATURE
        sendRequestM(cont1object, 1);
      #endif
    } else {
        printAndSend(cont1object, cont1closeMess);
        #ifdef MAJORDOMO_FEATURE
          sendRequestM(cont1object, 0);
        #endif
      }
  }

  // cont2 (CLO)
  cont2state = digitalRead(cont2pin);
  
  if (cont2state == 1) {
    if (cont2state != old_cont2state) {
      old_cont2state = cont2state;
      printAndSend(cont2object, cont2openMess);
      #ifdef MAJORDOMO_FEATURE
        sendRequestM(cont2object, 1);
      #endif
    }
  } else {


      if (cont2state != old_cont2state) {
        old_cont2state = cont2state;
        printAndSend(cont2object, cont2closeMess);
        #ifdef MAJORDOMO_FEATURE
          sendRequestM(cont2object, 0);
        #endif
      }
  }

  if (cycle1m) {
    old_cont2state = cont2state;

    if (cont2state == 1) {
      printAndSend(cont2object, cont2openMess);
      #ifdef MAJORDOMO_FEATURE

        sendRequestM(cont2object, 1);
      #endif
    } else {
        printAndSend(cont2object, cont2closeMess);
        #ifdef MAJORDOMO_FEATURE

          sendRequestM(cont2object, 0);
        #endif
      }
  }
} // contactsWorks()

#endif // CONTACTS_FEATURE


новая версия АМС 17

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

/
*
  Module Contacts
  part of Arduino Mega Server project
*/

#ifdef CONTACTS_FEATURE

#define CONT1_PIN 27
#define CONT2_PIN 31

#define OPEN  1
#define CLOSE 0

char cont1object[] = "cont1";
char cont2object[] = "cont2";

char cont1openMess[] = "Open"; char cont1closeMess[] = "Closed";
char cont2openMess[] = "Down"; char cont2closeMess[] = "Norm";

// states
// 0 - open
// 1 - close
// 2 - not defined
byte cont1state = 2; byte old_cont1state = 2; byte cont1objectState = 2;
byte cont2state = 2; byte old_cont2state = 2; byte cont2objectState = 2;

void contactsInit() {
  pinMode(CONT1_PIN, INPUT);
  pinMode(CONT2_PIN, INPUT);
  moduleContacts = MODULE_ENABLE;
  started("Contacts");
}

void printContMess(char obj[], char mess[]) {
  timeStamp(); Serial.print(obj); Serial.print(F(": ")); Serial.println(mess);
}

void contactsWorks() {
  // cont1
  cont1state = digitalRead(CONT1_PIN);
  if (cont1state != old_cont1state) {
      old_cont1state = cont1state;
      if (cont1state == 0) {
        cont1objectState = OPEN;
        printContMess(cont1object, cont1openMess);
      } else {
        cont1objectState = CLOSE;
        printContMess(cont1object, cont1closeMess);
      }
  }
  
  // cont2
  cont2state = digitalRead(CONT2_PIN);
  if (cont2state != old_cont2state) {
    old_cont2state = cont2state;
    if (cont2state == 1) {
      cont2objectState = OPEN;
      printContMess(cont2object, cont2openMess);
    } else {
        cont2objectState = CLOSE;
        printContMess(cont2object, cont2closeMess);
      }
  }
} // contactsWorks()

#endif // CONTACTS_FEATURE

В старой версии присутствует такой кусок кода

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

 if (cont1state == 0) {
        cont1objectState = OPEN;
        printAndSend(cont1object, cont1openMess);
        #ifdef MAJORDOMO_FEATURE
          sendRequestM(cont1object, OPEN);
        #endif
      } else {
        cont1objectState = CLOSE;
        printAndSend(cont1object, cont1closeMess);
        #ifdef MAJORDOMO_FEATURE
          sendRequestM(cont1object, CLOSE);
        #endif
      }
      
В новой версии этого куска кода нет

Re: Подключение железа к AMS

Добавлено: Вт авг 07, 2018 4:55 pm
serghei
Приеду домой - проверю. Один контакт работает на ESP32. На Меге сейчас залью и посмотрю. Только МД нет на работе.

Re: Подключение железа к AMS

Добавлено: Вт авг 07, 2018 5:39 pm
Alex
В новой версии этого куска кода нет
Этот кусок кода унаследован ещё со времён когда АМС-а ещё не было и он использовался в моей частной конфигурации умного дома. Потом он кочевал из версии в версию и когда руки дошли — он был удалён из АМС-а как не системный и не имеющий никакого отношения к дистрибутиву АМС (на концептуальном уровне).