Страница 1 из 2
Esp+реле+mqtt+mdm
Добавлено: Чт апр 05, 2018 8:34 am
yden
Здравствуйте.
Подскажите, плиз, правильно ли я делаю. Есть esp, реле и mqtt. Эта релюшка управляется по mqtt - 1 и 0. Так же есп шлет в топик статус этого реле - в случае если релюшка включена кодом самой esp. В mdm заведены объекты в классе relays, например ReleSvet1. В mqtt заведены записи - по 2 на каждое реле: svet1/in (входящее управление реле), svet1/out - статус реле по информации от esp. Обе эти записи связаны со свойством статус ReleSvet1. На mdm крутятся сценарии, изменяющие свойства объектов. Так же есть выключатель, он связан со свойством status методом refresh объекта ReleSvet1.
У меня есть ошибки?
благодарю
Re: Esp+реле+mqtt+mdm
Добавлено: Пт апр 06, 2018 8:45 am
ZyaK
у меня как то так, еспишки рулят релюхами от кнопок(2 есп от 8 железных кнопок - 8 релюхами, 3-я 6 железных кнопок, 8 релюх +IR протоколы)
могут работать и без сервера(на всякий случай если упадёт расбери или флешка кончится)
Объекты класса Light привязаны к MQTT
методы
refresh
turn on/off
switch
свойства
status или 1 или 0 собственно что и шлётся по MQTT
viewtopic.php?f=8&t=1937
viewtopic.php?f=8&t=2830
Re: Esp+реле+mqtt+mdm
Добавлено: Пт апр 06, 2018 9:01 am
Jilber
Здесь CheBuraw выкладывал свои схемы подключения кнопок (у него через оптопары и от 12V). А у вас как подключено ?
Re: Esp+реле+mqtt+mdm
Добавлено: Пт апр 06, 2018 11:12 am
ZyaK
у меня сенсорные кнопки на базе TTP223
прям на ЕСПишке подтягивающие резисторы в 1 килоом на 3.3 и конденсаторы 0.1 на землю, прока это всё лежит на столе, но ради интереса разматывал витую пару на 50 метров и по ней пускал 3.3 вольта на запитку кнопок, работает без проблем.
самое что интересное их пробовал штуки 4 одновременно на 1 вход цеплять! работают как проходные выключатели!
Re: Esp+реле+mqtt+mdm
Добавлено: Пт апр 06, 2018 12:03 pm
yden
ZyaK писал(а): ↑Пт апр 06, 2018 8:45 am
у меня как то так, еспишки рулят релюхами от кнопок(2 есп от 8 железных кнопок - 8 релюхами, 3-я 6 железных кнопок, 8 релюх +IR протоколы)
могут работать и без сервера(на всякий случай если упадёт расбери или флешка кончится)
Объекты класса Light привязаны к MQTT
методы
refresh
turn on/off
switch
свойства
status или 1 или 0 собственно что и шлётся по MQTT
viewtopic.php?f=8&t=1937
viewtopic.php?f=8&t=2830
У вас реле без обратной связи я вижу. Т.е если кодом esp включилось реле, mdm об этом не знает?
Re: Esp+реле+mqtt+mdm
Добавлено: Пт апр 06, 2018 12:12 pm
ZyaK
нет, сделано именно с обратной связью, при изменении состояния летит пакет status того или иного выхода.
самое интересное с командами по ИК
Код: Выделить всё
if (strTopic == "ESP03/usulitel_next_station") {
if ((char)payload[0] == '0') {
u_next_station=0;
}
else if ((char)payload[0] == '1') {
u_next_station=1;
irsend.sendRC5(0x20, 12);
delay(150);
u_next_station=0;
delay(150);
client.publish(usulitel_next_station, String(u_next_station).c_str());
client.loop();
}
}
после выполнения команды возвращает статус в 0 и отправляет в мажордом
а вот опрос кнопок
Код: Выделить всё
void button1()
{
btnPress1 = digitalRead(BUTTON_1);
if (btnPress1 == LOW && lastbtnStat1 == false)
{
delay(100); // защита от дребезга
btnPress1 = digitalRead(BUTTON_1);
if (btnPress1 == LOW && lastbtnStat1 == false)
{
regim1++;
lastbtnStat1 = true;
if (regim1 > 1)
{
regim1 = 0;
}
client.publish(relays_topic1, String(regim1).c_str()); //публикуем изменение состояния выхода 1 на брокер
}
}
if (btnPress1 == HIGH && lastbtnStat1 == true)
{
lastbtnStat1 = false;
}
if (regim1 == 0)
{
Status1 = false;
}
if (regim1 == 1)
{
Status1 = true;
}
client.loop();
}
Долго очень боролся с подпиской на топики, если ЕСПишку подписать более чем на 5 топиков, она тупит жестко, решилось вот так
Код: Выделить всё
client.setServer(mqtt_server, 1883); //подключаемся к MQTT
client.setCallback(callback); //функция получения топиков с брокера
delay(100);
client.connect("ESP03Client");
delay (100);//конектимся с брокером как клиент
client.subscribe(relays_topic1);
client.loop();
client.subscribe(relays_topic2);
client.loop();
client.subscribe(relays_topic3);
client.loop();
client.subscribe(relays_topic4);
client.loop();
client.subscribe(relays_topic5);
client.loop();
client.subscribe(relays_topic6);
client.loop();
client.subscribe(usulitel_power);
client.loop();
client.subscribe(usulitel_vol_up);
client.loop();
client.subscribe(usulitel_vol_down);
client.loop();
client.subscribe(usulitel_av);
client.loop();
client.subscribe(usulitel_radio);
client.loop();
client.subscribe(usulitel_projector);
client.loop();
client.subscribe(usulitel_next_station);
client.loop();
client.subscribe(usulitel_prev_station);
client.loop();
client.subscribe(projector_power);
client.loop();
client.subscribe(led_power_on);
client.loop();
client.subscribe(led_power_off);
client.loop();
client.subscribe(led_lum_up);
client.loop();
client.subscribe(led_lum_down);
client.loop();
client.publish(usulitel_power, String(u_power).c_str());
client.loop();
client.publish(usulitel_vol_up, String(u_vol_up).c_str());
client.loop();
client.publish(usulitel_vol_down, String(u_vol_down).c_str());
client.loop();
client.publish(usulitel_av, String(u_av).c_str());
client.loop();
client.publish(usulitel_radio, String(u_radio).c_str());
client.loop();
client.publish(usulitel_projector, String(u_projector).c_str());
client.loop();
client.publish(usulitel_next_station, String(u_next_station).c_str());
client.loop();
client.publish(usulitel_prev_station, String(u_prev_station).c_str());
client.loop();
client.publish(projector_power, String(p_power).c_str());
client.loop();
client.publish(led_power_on, String(l_power_on).c_str());
client.loop();
client.publish(led_power_off, String(l_power_off).c_str());
client.loop();
client.publish(led_lum_up, String(l_lum_up).c_str());
client.loop();
client.publish(led_lum_down, String(l_lum_down).c_str());
client.loop();
irsend.begin();
Re: Esp+реле+mqtt+mdm
Добавлено: Пт апр 06, 2018 12:30 pm
yden
Покажите пожалуйста в mdm топики одной реле с обратной связью.
Re: Esp+реле+mqtt+mdm
Добавлено: Пт апр 06, 2018 12:44 pm
ZyaK
yden писал(а): ↑Пт апр 06, 2018 12:30 pm
Покажите пожалуйста в mdm топики одной реле с обратной связью.
Там выше я скрины приложил, там есть топики всех 3-х ЕСП, привязанных к свойству status
вот в панели MQTT

- Безымянный.jpg (135.37 КБ) 6692 просмотра
а это управление со сцен

- 1.jpg (121.66 КБ) 6687 просмотров

- 2.jpg (91.22 КБ) 6687 просмотров
Re: Esp+реле+mqtt+mdm
Добавлено: Пт апр 06, 2018 12:48 pm
yden
ZyaK писал(а): ↑Пт апр 06, 2018 12:44 pm
yden писал(а): ↑Пт апр 06, 2018 12:30 pm
Покажите пожалуйста в mdm топики одной реле с обратной связью.
Там выше я скрины приложил, там есть топики всех 3-х ЕСП, привязанных к свойству status
Это обратная связь или управляющий сигнал от mdm?
Если не трудно, скрин этого же реле, но противоположной команды (если было управление, то реакция, если реакция-управление)
И что означает опция Retain?
Re: Esp+реле+mqtt+mdm
Добавлено: Пт апр 06, 2018 12:54 pm
ZyaK
Если была команда на включение /отключение реле со стороны MJD за это отвечает функция КолБэк
Код: Выделить всё
void callback(char* topic, uint8_t* payload, unsigned int length){
//Serial.print("Message arrived [");
//Serial.print(topic);
//Serial.print(" ");
String strTopic = String(topic);
String strPayload = String((char*)payload);
for (unsigned int i = 0; i < length; i++) {
//Serial.print((char)payload[i]);
}
//Serial.println();
if (strTopic == "ESP02/r_1") {
if ((char)payload[0] == '0') {
Status1 = false;
regim1 = 0;
}
else if ((char)payload[0] == '1') {
Status1 = true;
regim1 = 1;
}
}
которая меняет состояние переменной "режим1"
дальше после ЕСП у меня стоит сдвиговый регистр с защелкой чтоб расширить количество выходов, данные в него засылаются вот так
Код: Выделить всё
Dannie = (regim1<<7)|(regim2<<6)|(regim3<<5)|(regim4<<4)|(regim5<<3)|(regim6<<2)|(regim7<<1)|(regim8);
Dannie = ~Dannie;
digitalWrite(latch, LOW);
shiftOut(data, clk, LSBFIRST, Dannie);
digitalWrite(latch, HIGH);
переменная "РежимХ" может меняться как при получении команды с Мажордома также и при нажатии кнопки, далее отправляется обратная команда в мажордом об изменении состояния и все ражимы 8 релюх засылаются в сдвиговый регистр, после чего защелкиваются и релюхи включаются.