PS Не прошло и 3 года как это стало актуальным и для меня
![Very Happy :D](./images/smilies/icon_e_biggrin.gif)
Модератор: Alex
Передача удалена по тем же соображениям. Все эти состояния и статусы — мои поделки на коленке для моей конкретной ситуации в то время (кроме того, они весьма спорны как концептуально, так и по исполнению) и к дистрибутиву не имеют никакого отношения. Но это не мешает прикрутить их обратно тому, кому это нужно.Да, но при этом пропала и передача состояния в МД. Впрочем как и статус живости AMS. Теперь восстанавливаю во всех новых дистрибутивах.
Концептуально соглашусь , в исполнении знаю ( но не доделал) как отдать одним запросом. С MQTT только начинаю разбираться. Пример реализации выложили.
Код: Выделить всё
#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
А что надо будет еще править в новой версии кроме скетча Contacts что бы связь с МД оставалась?
Код: Выделить всё
// Work mode
#define MODE_SERVER 1
#define MODE_UPDATE 2
byte modeWork = MODE_SERVER;
// Durations
time_t prevEventElectroCycle;
time_t prevEventMegaLive;
time_t prevEventRequest;
Код: Выделить всё
#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
Код: Выделить всё
char objSens[MAX_DS18B20_SENSORS][12] = {"temp1", "temp2", "temp2"};
Код: Выделить всё
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");// Отдаем каждую минуту
}
}
Вот добавил. Но у меня старая версия на Винде и чего то Дую она вообще не видит , а PIR только время апдейта. Попробую еще на Апельсине.lihodeev писал(а): ↑Чт авг 09, 2018 10:47 amРебят, ткните в пример - подключил датчик движения к AMS в XRAY получаю 10:37:09 0.19678900 object [pirHAL] not found что делать чтобы сработало реле освещения которое включается (http://192.168.1.37/?rele20=0)? А потом в зависимости от времени суток или включать или не включать если светло
Код: Выделить всё
#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
здравствуйте,nick7zmail писал(а): ↑Вс апр 24, 2016 10:31 am1) Оборудование: Датчик температуры DHT11/DHT22DHT22-PinOut.png
2) Возможности: Снятие показаний температуры/влажности. Отправка их в MD, если активен модуль MD, вывод показаний в монитор порта.
3) Для установки достаточно активировать модуль TEMP_FEATURE (если он не активирован), и заменить в папке со скетчем для ардуино файл rtemp.ino (во вложенном архиве). Показания храняться в dht1_temp, dht1_hum. По аналогии можно добавить несколько датчиков.
4) Пока не придумал как совместить со стандартным rtemp, т.к. там датчики ds18b20, и с них записываются только показания только температуры, и для 1 датчика ds нужно 1 место в массиве, а для DHT нужно 2 места под температуру и влажность...чуть позже подумаю над этим вопросом.
Код: Выделить всё
Serial.println(current_temp[n]);