• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Делюсь опытом ESPEasy: кнопка + реакция на кнопу (нагрузка) + MQTT в обе стороны

prmres

New member
Здравствуйте, уважаемые.
Есть замысел управления нагрузкой (светом например) и с кнопки (на стене в случае света) и по MQTT.
Нажал кнопочку - свет включился (или выключился), состояние опубликовалось в соответствующем топике, так же надо реализовать и "обратную связь", то есть отследить изменение топика и соответственно включить или выключить свет.
Понятно что можно писать скетч самому, можно найти готовый, а когда опыта программирования нет или его мало, то можно попытаться реализовать затею на готовой прошивке.
Хочу поделиться как это сделать на ESPEasy.
Эта прошивка в общем то универсальная, куча всего подключается прямо из веб-интерфейса, но вот в частности реакцию на каком-то пине по нажатию кнопки а так же "отслеживание" топиков mqtt с соответствующей реакцией как оказалось сделать не совсем просто, однако вполне возможно.

Исходные данные примера:
1. прошивка ESPEasy MEGA (установка и настройка описываться не будет, предполагаем что есть и настроена) использовал Release mega-20180119, на последней mega-20180228 у меня жутко тормозит веб-интерфейс
2. ESP12 в виде готового модуля Witty Cloud
3. тактовая кнопка в качестве кнопочного выключателя, на gpio4 с замыканием на gnd
4. светодиод в качестве "наглядной" нагрузки, на gpio5
5. mqtt-spy в качестве MQTT-клиента для отслеживания топиков и проверки реакции на публикацию
6. MQTT брокер moquitto (установку и настройку расписывать не буду, предполагается что оно есть и настроено)

Итак, приступим.

1. Создаём подключение к MQTT брокеру.
Протокол я выбрал OpenHAB MQTT, но в сущности это неважно, влияет только на порядок формирования топиков.
Указываем IP-адрес брокера, порт, пользователя и пароль в случае необходимости авторизации
подписку и публикацию не трогаем, пусть останется как есть.
1.jpg

2. Этот пункт необязателен, если кнопка и\или нагрузка не используют gpio4 и gpio5.
Я в своём случае "отвязал" от этих gpio I2С интерфейс, для этого на закладке HARDWARE нужно SDA и SCL выставить в NONE.
2.jpg

3. "Вешаем кнопку" на gpio.
В своём случае я использовал gpio4, на закладке Devices создаём новое устройство Switch input - Switch, даём имя sw1, ставим галку (она автоматически ставится) PullUP ,назначаем gpio , Switch Button Type выбираем Push Button Active LOW (кнопка будет замыкаться на землю), Value называем state (можно по-другому, не суть важно).
Галочку "send to controller" снимаем, нам не интересно контролировать нажатие кнопки, мы (позже) проконтролируем реакцию на нажатие кнопки.
Имя устройства и имя параметра (value) нам понадобятся далее в скрипте, поэтому названия лучше давать не длинные и удобные для понимания.
3.jpg

4. Делаем "прослушивание" MQTT, что бы изменение в топике приводило к реакции на нужном пине.
В DEVICES создаём новое устройство Generic - MQTT Import, даём устройству имя (я дал имя sniff, как в мануале прошивки, можно естественно обозвать по-своему), указываем топик/%sysname%/GPIO5, изменения в котором будем "отслеживать", value указываем как последний "уровень" в топике - GPIO5, именно оно будет отслеживаться.
Имя устройства и имя value нам понадобятся далее в скрипте.
(следует отметить что здесь переменная %sysname% в названии топика у меня не сработала поэтому я указал имя устройства напрямую, как оно задано в конфиге пошивки)
4.jpg

5. Далее нужно создать правило, то есть маленький скрипт который будет:
- реагировать на кнопку
- публиковать состояние gpio
- регировать на изменение в топике (в зависимости от топика дёргать gpio).
(Закладка RULES включается в Tools / Advanced settings.)

5.jpg

Скрипт:

on sw1#state do
if [sw1#state] = 0
gpio,5,1
Publish /%sysname%/GPIO5,1
else
gpio,5,0
Publish /%sysname%/GPIO5,0
endif
endon

on sniff#GPIO5 do
if [sniff#GPIO5] = 1
gpio,5,1
if [sniff#GPIO5] = 0
gpio,5,0
endif
endon

Краткое пояснение:
- в первой части скрипта (правила) проверяется состояние кнопки (см. п.3) по имени sw1 и свойству state
когда кнопка нажата (активный НОЛЬ то есть LOW уровень) gpio5 выставляется в лог.1 и публикуется состояние в соответствующем топике (топики тут и в п.4 должны совпадать)
иначе gpio5 выставляется в лог.0 и так же публикуется состояние

- во второй части скрипта "слушается" нужный топик (см. п.4), при публикации в нём 1 (единички) gpio5 выставляется в лог.1
при публикации 0 (нуля) gpio5 выставляется в лог.0

В итоге всё работает как и задумано - светодиод на gpio5 включается и выключается как по нажатию кнопки, так и по изменению в соответствующем топике.

Используемые материалы:
настройка MQTT-импорта
как делать Rules, пример, ещё
команда в rules на публикацию mqtt

PS
Тему создал в общем то для себя, что б не забыть как что делал, но надеюсь кому-то будет полезным.
 
Последнее редактирование:

kab

New member
kab, спасибо, добавил
Я имел в виду встроенную возможность сайта:
- когда редактировали заголовок - перед своим текстом было поле с выпадающим меню. Там можно выбрать сразу типа "делюсь опытом", "задаю вопрос" и т.д.
 

prmres

New member
kab, слона то я и не заметил :)
сделал как правильно, теперь красиво
 
  • Like
Реакции: kab

corpse

New member
У меня сделано очень похоже. Есть одна существенная проблема: как только по какой-то причине mqtt сервер недоступен, девайс перестаёт реагировать на нажатие кнопки. Иногда может включить/выключить один раз из 10 нажатий, затем и эта возможность пропадает. Если найдёте решение этой проблемы - отпишитесь пожалуйста. Представьте ситуацию - нужно перенести/поменять/перенастроить девайс, на котором бежит mqtt и делать это вы можете либо в полной темноте без возможности включить свет, либо при освещении без возможности его выключить. Либо нужно разбирать распределительные коробки, например, лезть под фальшпотолок и т.п.. Можно в такой ситуации попробовать дёрнуть гпио через апи, но не знаю, сработает ли. При случае проверю.
 

prmres

New member
Нашёл прошивку для управления группой реле, идеально сделанную как для ESP так и ждя ардуины меги (до 48 каналов реле)
 

prmres

New member
А не было проблем с фантомными нажатиями?
были проблемы с "зацикливанием" нажатий при определенных условиях, но это исправлено
работает стабильно, по крайней мере на "на коленке собранной" модели, 4 физические кнопки (проводки замыкаю) и 4 релюшки
ссылку на прошивку давал вот тут: https://esp8266.ru/forum/threads/esp8266-rele-vremeni.2943/#post-48851
попробуйте
 

Val

New member
prmres,
Подскажите как управлять реле через MQTT?
Прошивка ESPeasy
Подключил примерно по такой схеме реле.
WiFiRelayCircuit.png
Настроил как в статье,только не выводил отдельно кнопку на вкл/выкл. - нужно управлять только через интернет.
Если пишу локально команды вида
Включить: http://192.168.0.23/control?cmd=GPIO,13,1
Выключить: http://192.168.0.23/control?cmd=GPIO,13,0
то реле вкл/выкл -как положено,вопросов нет всё работает.
А вот если через MQTT(сервер в интернете cloudmqtt.com) пишу в топик /ESP_Easy/GPIO13 сообщение 1 или 0, то во вкладке Devices Generi -MQTT Import состояние GPIO13 меняется, а состояние реле state - не меняется
Посмотрите где ошибка.Чёт видно не до конца вкурил логику работы этой прошивки.
Снимок6.PNG Снимок6.PNG Снимок4.PNG Снимок3.PNG Снимок2.PNG
 

Val

New member
Схему привёл как примерный пример,в реале подключено GPIO13 - D7,всё работает, не могу разобраться как управлять реле через MQTT. Подскажите,очень нужно.
 

Val

New member
CodeNameHawk, т.е нет возможности управлять по mqtt?только http? Так я понял? Поясню что хочу получить.Управлять gpio(реле) для ВКЛ/выкл нагрузки удалённо, через интернет. Провайдер выдаёт серый ip(yota), по другому подключиться не могу,вариант был только с mqtt.
 

Сергей_Ф

Moderator
Команда форума
@Val йота на тарифе Бизнес позволяет иметь "белый" ip. Это дороже, конечно.
Или пробуйте Blynk.
 
Последнее редактирование:

Val

New member
Сергей_Ф, Я поднастроил роутер с ётой,и получил бесплатный инет,скорость небольшая,но для датчиков хватает, лучше попробую другую прошивку -от Wifi-iot.
 
Сверху Снизу