Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "Прошивки esp8266 - общие вопросы", создана пользователем prmres, 28 фев 2018.

Метки:
  1. prmres

    prmres Читатель

    Сообщения:
    18
    Симпатии:
    10
    Здравствуйте, уважаемые.
    Есть замысел управления нагрузкой (светом например) и с кнопки (на стене в случае света) и по 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

    Скрипт:


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

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

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

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

    PS
    Тему создал в общем то для себя, что б не забыть как что делал, но надеюсь кому-то будет полезным.
     
    Последнее редактирование: 1 мар 2018
    SERG_SSV, Yden_nn, valery73 и 3 другим нравится это.
  2. kab

    kab Авторитетный участник сообщества

    Сообщения:
    633
    Симпатии:
    78
    @prmres
    В заголовке темы можно указать метку: "Делюсь опытом"
     
    prmres нравится это.
  3. prmres

    prmres Читатель

    Сообщения:
    18
    Симпатии:
    10
    kab, спасибо, добавил
     
  4. kab

    kab Авторитетный участник сообщества

    Сообщения:
    633
    Симпатии:
    78
    Я имел в виду встроенную возможность сайта:
    - когда редактировали заголовок - перед своим текстом было поле с выпадающим меню. Там можно выбрать сразу типа "делюсь опытом", "задаю вопрос" и т.д.
     
    prmres нравится это.
  5. prmres

    prmres Читатель

    Сообщения:
    18
    Симпатии:
    10
    kab, слона то я и не заметил :)
    сделал как правильно, теперь красиво
     
    kab нравится это.
  6. corpse

    corpse Новичок

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

    prmres Читатель

    Сообщения:
    18
    Симпатии:
    10
    Нашёл прошивку для управления группой реле, идеально сделанную как для ESP так и ждя ардуины меги (до 48 каналов реле)
     
  8. Bacchus777

    Bacchus777 Новичок

    Сообщения:
    1
    Симпатии:
    0
    А не было проблем с фантомными нажатиями?
     
  9. prmres

    prmres Читатель

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

    rapidshe Новичок

    Сообщения:
    39
    Симпатии:
    3
    а можно как то оперировать переменными в есп изи?
     
  11. Val

    Val Новичок

    Сообщения:
    8
    Симпатии:
    0
    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
     
  12. Val

    Val Новичок

    Сообщения:
    8
    Симпатии:
    0
    ещё добавлю два скрина
    Снимок.1PNG.PNG Снимок.PNG
     
  13. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.441
    Симпатии:
    173
    На схеме D1, а в установках GPIO13 - D7, это как?
     
  14. Val

    Val Новичок

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

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.441
    Симпатии:
    173
    Не работал с ESPeasy, но не нравиться Input switch, нет какого Output?
     
  16. Val

    Val Новичок

    Сообщения:
    8
    Симпатии:
    0
    такого нет, вот скрин чт о есть
    Новый точечный рисунок.png Безымянный.png
     
    Последнее редактирование: 24 янв 2019
  17. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.441
    Симпатии:
    173
    GPIO - Let's Control It
    "You dont need a Device definition (task) to control basic GPIO output. You can always control all the pins by HTTP."
     
    Последнее редактирование: 24 янв 2019
  18. Val

    Val Новичок

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

    Сергей_Ф Moderator Команда форума

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

    Val Новичок

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

Поделиться этой страницей