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

Модератор: Alex

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

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

Сообщение serghei » Вт авг 07, 2018 5:49 pm

Да, но при этом пропала и передача состояния в МД. Впрочем как и статус живости AMS. Теперь восстанавливаю во всех новых дистрибутивах.
PS Не прошло и 3 года как это стало актуальным и для меня :D
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

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

Сообщение Alex » Вт авг 07, 2018 6:04 pm

Да, но при этом пропала и передача состояния в МД. Впрочем как и статус живости AMS. Теперь восстанавливаю во всех новых дистрибутивах.
Передача удалена по тем же соображениям. Все эти состояния и статусы — мои поделки на коленке для моей конкретной ситуации в то время (кроме того, они весьма спорны как концептуально, так и по исполнению) и к дистрибутиву не имеют никакого отношения. Но это не мешает прикрутить их обратно тому, кому это нужно.
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

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

Сообщение serghei » Вт авг 07, 2018 11:45 pm

Alex писал(а):
Вт авг 07, 2018 6:04 pm
кроме того, они ( ГЕТ запросы) весьма спорны как концептуально, так и по исполнению
Концептуально соглашусь , в исполнении знаю ( но не доделал) как отдать одним запросом. С MQTT только начинаю разбираться. Пример реализации выложили.
По поводу контактов. Правильную тему задумал ser009 ( работать через массив ).Надеюсь на публикацию. А пока подправленный код для двух контактов. Пины можно назначать любые свободные.Только не нарваться на SPI.

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

#ifdef CONTACTS_FEATURE

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

#define OPEN  1
#define CLOSE 0

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

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

// 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);
  moduleContacts = MODULE_ENABLE;
  started("Contacts");
}


void printContMess(char obj[], char mess[]) {
  timeStamp(); Serial.print(obj); Serial.print(F(": ")); Serial.println(mess);
}
void contactsWorks() {
  // cont1 (HOM)
  cont1state = digitalRead(cont1pin);

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

     printContMess(cont1object, cont1closeMess);
     
        #ifdef MAJORDOMO_FEATURE
          sendRequestM(cont1object, CLOSE);
        #endif
      }
  }
  
  if (cycle1m) {
    old_cont1state = cont1state;

    if (cont1state == 0) {
      printContMess(cont1object, cont1openMess);
      #ifdef MAJORDOMO_FEATURE
        sendRequestM(cont1object, OPEN);
      #endif
    } else {
        printContMess(cont1object, cont1closeMess);
        #ifdef MAJORDOMO_FEATURE
          sendRequestM(cont1object, CLOSE);
        #endif
      }
  }

  // cont2 (CLO)
  cont2state = digitalRead(cont2pin);

  if (cont2state != old_cont2state) {
      old_cont2state = cont2state;
      
      if (cont2state == 0) {
        cont2objectState = OPEN;
        printContMess(cont2object, cont2openMess);
        #ifdef MAJORDOMO_FEATURE
          sendRequestM(cont2object, OPEN);
        #endif
      } else {
        cont2objectState = CLOSE;
        printContMess(cont2object, cont2closeMess);
        #ifdef MAJORDOMO_FEATURE
          sendRequestM(cont2object, CLOSE);
        #endif
      }
  }
  
  if (cycle1m) {
    old_cont2state = cont2state;

    if (cont1state == 0) {
      printContMess(cont2object, cont2openMess);
      #ifdef MAJORDOMO_FEATURE
        sendRequestM(cont2object, OPEN);
      #endif
    } else {
        printContMess(cont2object, cont2closeMess);
        #ifdef MAJORDOMO_FEATURE
          sendRequestM(cont2object, CLOSE);
        #endif
      }
  }
}
#endif // CONTACTS_FEATURE   
Проверено на Дуе-017. На Меге возможно придется подправить названия. Вывод в сериале
  • 2018-08-07 23:37:18 Host 192.168.2.108 GET /objects/?object=ncDue01&op=m&m=update&v=1
    2018-08-07 23:37:18 (duration 1 min 0 sec)2018-08-07 23:37:18 cont1: Open
    2018-08-07 23:37:18 Host 192.168.2.108 GET /objects/?object=cont1&op=m&m=update&v=1
    2018-08-07 23:37:18 cont2: Open
    2018-08-07 23:37:18 Host 192.168.2.108 GET /objects/?object=cont2&op=m&m=update&v=1
Физически кнопки не подключал. Из-за дребезга растет нагрузка на сервер.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
lihodeev
Сообщения: 148
Зарегистрирован: Ср июл 25, 2018 10:37 pm
Благодарил (а): 43 раза
Поблагодарили: 8 раз

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

Сообщение lihodeev » Чт авг 09, 2018 10:47 am

Ребят, ткните в пример - подключил датчик движения к AMS в XRAY получаю 10:37:09 0.19678900 object [pirHAL] not found что делать чтобы сработало реле освещения которое включается (http://192.168.1.37/?rele20=0)? А потом в зависимости от времени суток или включать или не включать если светло
Raspberry 3, AMS 16, arduinka 2560, Orange pi Zero, Broadlink RM3, Xiaomi Mi Robot Vacuum SKV4000GL
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

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

Сообщение serghei » Чт авг 09, 2018 11:23 am

Для начала объяснить Алисе что у Вас появился новый класс , например AMS_PIR. Если в лоб , то в Объектах создать новый класс по образу температуры. Посмотри Тут.Пишу по памяти , конкретней только ночью.
Вот как принимаются 3 температуры , так же принять и PIR датчики. А вот что с ними делать дальше - увы еще не дорос (((.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
ученик
Сообщения: 230
Зарегистрирован: Чт фев 12, 2015 2:34 pm
Благодарил (а): 36 раз
Поблагодарили: 6 раз

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

Сообщение ученик » Чт авг 09, 2018 5:41 pm

serghei писал(а):
Вт авг 07, 2018 5:49 pm
Да, но при этом пропала и передача состояния в МД. Впрочем как и статус живости AMS. Теперь восстанавливаю во всех новых дистрибутивах.
PS Не прошло и 3 года как это стало актуальным и для меня :D
А что надо будет еще править в новой версии кроме скетча Contacts что бы связь с МД оставалась?
Не считая тех моментов связанных с IP МД и IP устройства.
server i5, OS-Ubuntu Server 16., 1-wire
php 7, AMS,broadlink rm2,rm3 mini.
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

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

Сообщение serghei » Чт авг 09, 2018 7:46 pm

Первое , что бросается в глаза - Что Мега существует и она жива. Дописать на главной вкладке (если нет)

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

// Work mode
#define MODE_SERVER 1
#define MODE_UPDATE 2
byte modeWork = MODE_SERVER;

// Durations
time_t prevEventElectroCycle;
time_t prevEventMegaLive;
time_t prevEventRequest;
На самой вкладке Major

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

#ifdef MAJORDOMO_FEATURE

char majorMegaObject[] = "ncMega01";// Имя Меги
char majorCommObject[] = "comm_mega01";

byte MAJOR_IP[] = {192, 168, 2, 108};// Адрес Алисы
#define MAJOR_PORT 80
EthernetClient mclient;
И в самом конце вкладки

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

void majorWorks() {

}

/* ------------------------------------------------------
  Function majordomoMegaLive
    Уведомление MajorDomo о том, что Mega жива и работает
--------------------------------------------------------- */

void majordomoMegaLive() {
  if (cycle1m) {
    sendRequestM(majorMegaObject, 1);
    checkEvent(&prevEventMegaLive);
  }
}


#endif // MAJORDOMO_FEATURE
Остальное по необходимости. Еще момент . В 017 версии изменены названия градусников. ( И опять же с ошибкой)).

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

char objSens[MAX_DS18B20_SENSORS][12] = {"temp1", "temp2", "temp2"};
Поэтому надо изменить имена и у Алисы.

PS И еще одна фишка - отдать все значения одним залпом. Для BME280 и DHT будет так

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

void sendBMEMajor(char obj[]) {//Создаем Объект " BMEPack
     sprintf(buf, "GET /objects/?object=%s&op=m&m=update&%s=%.2f&%s=%.2f&%s=%.2f&%s=%.2f&%s=%.2f& HTTP/1.0",
      obj, "Temp", temp, "Pres", pres, "Hum", hum, "TempDHT", dht11_t, "HumDHT", dht11_h);
    #ifdef MAJORDOMO_FEATURE
      sendBuffToMajor();
    #endif
    =====
    void getUIP(char obj[]) {
  sendBMEMajor(obj);
}
========
   if (cycle1m) {
    getUIP("packBME");// Отдаем каждую минуту
    }
}
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

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

Сообщение serghei » Чт авг 09, 2018 9:04 pm

lihodeev писал(а):
Чт авг 09, 2018 10:47 am
Ребят, ткните в пример - подключил датчик движения к AMS в XRAY получаю 10:37:09 0.19678900 object [pirHAL] not found что делать чтобы сработало реле освещения которое включается (http://192.168.1.37/?rele20=0)? А потом в зависимости от времени суток или включать или не включать если светло
Вот добавил. Но у меня старая версия на Винде и чего то Дую она вообще не видит , а PIR только время апдейта. Попробую еще на Апельсине.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
serghei
Сообщения: 2575
Зарегистрирован: Пт ноя 06, 2015 10:22 am
Откуда: Кишинёв
Благодарил (а): 303 раза
Поблагодарили: 282 раза

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

Сообщение serghei » Пн авг 13, 2018 10:29 pm

Долго не мог понять ( да и сейчас не понимаю )), почему не работал LCD_20*4 экран совместно с ESP32. Цифры были видны , но очень бледно выглядели. На экран подавал 3.3 вольта. При этом с Дуей и ESP8266 никаких проблем не было - все работало идеально.
Пока не понял, что на экран надо подать 5 вольт питания. Код ничем не отличается от Меги .

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

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>// перед setup объявляем библиотеки

LiquidCrystal_I2C lcd(0x27,20,4);
==================
  lcd.begin();// initialize the lcd with SDA and SCL pins в setup
  
  // Print a message to the LCD.
  
  lcd.backlight();
 // lcd.clear();

  // Print a message to the LCD.
  
  lcd.setCursor(0,0);
  lcd.print("AMS_ESP32 V_0.17");

  lcd.setCursor(0,1);
  lcd.print("TIME");
  =========================
          lcd.setCursor(10, 3);
        lcd.print(uptimeString()); // в loop
Если прикрутить кнопки на аналоговый вход , то можно с экрана заносить данные в EEPROM и добить наконец то тему термостата :lol:
Сам экран почти идеально устанавливается в корпус D9MG ( только полмиллиметра подпилить у платы).
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
schel4ok
Сообщения: 136
Зарегистрирован: Вс сен 02, 2018 8:03 am
Благодарил (а): 2 раза
Поблагодарили: 0

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

Сообщение schel4ok » Вт сен 11, 2018 7:11 pm

nick7zmail писал(а):
Вс апр 24, 2016 10:31 am
1) Оборудование: Датчик температуры DHT11/DHT22DHT22-PinOut.png
2) Возможности: Снятие показаний температуры/влажности. Отправка их в MD, если активен модуль MD, вывод показаний в монитор порта.
3) Для установки достаточно активировать модуль TEMP_FEATURE (если он не активирован), и заменить в папке со скетчем для ардуино файл rtemp.ino (во вложенном архиве). Показания храняться в dht1_temp, dht1_hum. По аналогии можно добавить несколько датчиков.
4) Пока не придумал как совместить со стандартным rtemp, т.к. там датчики ds18b20, и с них записываются только показания только температуры, и для 1 датчика ds нужно 1 место в массиве, а для DHT нужно 2 места под температуру и влажность...чуть позже подумаю над этим вопросом.
здравствуйте,

Никак не получается подключить DHT22 к AMS017.
Я взял скетч из сообщения, переименовал его в temp_dht.ino
Изменил там пин 28, так как пин 22 вроде как занят под PIR1. Ноги DHT22 подключил так 1 - 5V, 2 - пин 28, 4 - GND.
Скомпилировал успешно. Я уже не надеялся увидеть результат в браузере на странице AMS, но хотя бы в мониторе порта.
Но ничего не появилось.
Хотя в скетче есть код вывода чего-то в монитор.

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

Serial.println(current_temp[n]);
И в самом коде модуля у меня очень вопросов. Сам код какой-то непонятный. Есть какой-то мануал? Когда я брал какие-то простые примеры скетчи подключения датчиков к ардуино и вывод значения в браузер, то проблем с пониманием не было, а тут кругом какие-то массивы с непонятными названиями переменных.
И каждая строчка кода неясна. Я надеялся найти какое-то пояснение по функциям в библиотеке, но не нашел библиотеку DHT.h, которая подключается в шапке файла.
Если пытаюсь подгрузить через менеджер библиотеку DHT от Adafruit, то компиляция вываливается с ошибкой.


Даже названия переменных непонятны:
byte tempSensorHealth - что значит эта переменная? при чем тут health = здоровье?
byte tempModulHealth; - тоже самое

не возникнет ли конфликта между этими массивами? имя же у них одинаковое

objSens[MAX_TEMP_SENSORS][12]
objSens[MAX_DS18B20_SENSORS][12] (из файла temp_ds18b20.ino)

current_temp[MAX_TEMP_SENSORS]
current_temp[MAX_DS18B20_SENSORS];

temp_[MAX_TEMP_SENSORS];
temp_[MAX_DS18B20_SENSORS];


и между функциями tempInit() файла temp_ds18b20.ino и файла temp_dht.ino
Ответить