Пришло время переводить выключатели на ESPEasy в Home Assistant
Что имеем:
- Home Assistant 0.70
- Esp прошитый ESPEasy Mega
- Реле
- Переключатель
Приступим к сборке, если делаем новый переключатель.
Подключаем ESP с прошивкой ESPEasy к реле следующим образом:
ESP пин 3v3 к VCC реле
ESP пин GND к GND реле
ESP пин D6 (Gpio-12) к IN реле
В ESPEasy создаем переключатель Switch input — Switch для реле во вкладке Devices.
Приводим его к следующему виду:
Имя: relay
Enabled: — галочка
Internal PullUp: — галочка
Inversed Logic: — пусто
1st GPIO: GPIO-12 (D6)
Switch Type: Switch
Switch Button Type: Normal Switch
Send Boot state: — галочка
Send to Controller: — пусто
IDX: — номер Dummy переключателя в Domoticz (если активно Send to Controller)
Values Name: state
Сохраняем.
Управляется реле командой (192.168.0.23 это адрес ESPEasy):
Включить: http://192.168.0.23/control?cmd=GPIO,12,0
Выключить: http://192.168.0.23/control?cmd=GPIO,12,1
Включаем нулем если реле сделали нормально закрытым, и единицей, если нормально открытым
Выполнив переходы в браузере, реле сработает и выдаст ответ:
{ "log": "GPIO 12 Set to 0", "plugin": 1, "pin": 12, "mode": "output", "state": 0 }
или
{ "log": "GPIO 12 Set to 0", "plugin": 1, "pin": 12, "mode": "output", "state": 1 }
Мы будем управлять через MQTT.
Для этого переходив во вкладку Controllers и добавляем первым контроллером OpenHUB MQTT. Прописываем адрес брокера, порт и не меняя остальные настройки сохраняем.
Теперь создаем переключатель Switch input — Switch для переключателя во вкладке Devices:
Имя: button
Enabled: — галочка
Internal PullUp: — галочка
Inversed Logic: — пусто
1st GPIO: GPIO-14 (D5)
Switch Type: Switch
Switch Button Type: Normal Switch
Send Boot state: — пусто (если активировать, то при загрузке esp синхронизирует реле с выключателем: если был свет включен, то при загрузке тоже будет включен)
Send to Controller: — пусто
Values Name: state
Сохраняем.
Подключим обычный (любой) переключатель света:
от ESP пин GPIO-14 (D5 на NodeMCU) в разрыв переключателя и на GND ESP:
Включаем Rules в Tools> Advanced
Переходим на вкладку Rules и вставляем туда следующее:
//Изменение состояния реле переключателем on button#state do if [button#state]=0 gpio,12,0 else gpio,12,1 endif endon
Теперь при физическом нажатии переключателя, будет меняться статус реле — включаться и выключаться.
В Home Assistant переходим в switches.yaml и добавляем следующее:
#################################################### # Выключатели # #################################################### # Выключатель, спальня - platform: mqtt name: bedroom_switch state_topic: "/esp_switch_bedroom/relay/state" command_topic: "/esp_switch_bedroom/gpio/12" payload_on: "0" payload_off: "1" qos: 1 retain: true
Пояснения:
ESPEasy публикует и слушает данные в MQTT следующим образом:
/esp_switch_bedroom/gpio/12
esp_switch_bedroom — это название нашей esp, заданное во вкладке Main
gpio/12 — тут все ясно
и отправив 1 или 0 мы включим или выключим реле на ESPEasy
Статус:
/esp_switch_bedroom/relay/state
Так как мы русскоговорящие, названия устройств в Home Assistans нам хочется видеть тоже на русском. Но name: bedroom_switch обязательно должно быть на английском, так как от этого имени формируется название устройства в Dev, и именно это название из dev мы будем распределять по группам в будущем (- switch.bedroom_switch)
Если же поставить name: Выключатель, то в dev он примет вид switch.__
Он будет работать, но ровно до тех пор, пока мы не решим добавить еще один выключатель, так как он получит точно же такое имя switch.__
Весь этот набор отлично вмещается в глубокие подрозетники
>state_topic: «/esp_switch_bedroom/relay/state»
>command_topic: «/esp_switch_bedroom/gpio/12»
>payload_on: «0»
> payload_off: «1»
Такой вариант не работает в последних версиях espeasy mega. Теперь статус выдается только json’ом причем не совместимым с компонентом MQTT JSON Light.
— platform: mqtt_template
command_topic: «coil-kitchen/cmd»
state_topic: «coil-kitchen/status»
command_on_template: «gpio,13,1»
command_off_template: «gpio,13,0»
state_template: >
{% if value_json.state == 1 and value_json.pin == 13 %}
on
{% if value_json.state == 0 and value_json.pin == 13 %}
off
{% endif %}
Спасибо, хотел на днях обновить прошивку на выключателях, теперь буду в курсе)
Здравствуйте! Сеществует ли у вас на сегодня связка espeasy и homeassistant? Можете показать пример сбора статусов gpio для актуальных версий? HA ругается на command_topic
Здравствуйте, сейчас пользуюсь ESPHome, подсказать не могу. Про mqtt почитайте на сайте ha, там будут расписаны все параметры mqtt сенсора
Да вот я тоже думаю не присмотреться ли к esphome, спасибо за быстрый ответ!
Да не за что) Тем более я в комментариях указывал конфиг esphome для связки из этого поста, там ничего сложного
Здравствуйте. Второй день пытаюсь разобраться с топиками. Условия: подключить ESPEasy к бесплатному стороннему MQTT серверу mqtt.4api.ru Сервер просит создавать топики так user_854ad62/cmd где user_854ad62 я изменить не могу. Что делаю: Создаю топик user_854ad62/cmd в настройках ESPEasy прописываюName: user_854ad62, OpenHub, srv1.mqtt.4api.ru, логин, пароль. при этом в терминале наблюдаю «Subscribed to: user_854ad62» В конфиге ESPEasy Tools-Advens по умолчанию Subscribe Template: /%sysname%/# пробовал менять на /%sysname%/ и %sysname% и %sysname%/ как вообще правильно? Publish Template:/%sysname%/%tskname%/%valname% В топик шлю: gpio,2,0 Не работает контроль поступления команд контролирую приложением клиентом на телефоне (команді приходят) Также создан топик user_854ad62/gpio/2 куда шлю «0». Не работает. строка из браузера… Подробнее »
А блок питания к этому набору какой и куда его прятать ?
Можно использовать бп с али, например, вот такой: http://ali.pub/32kw16
Или разобрать обычный бп от телефона. В глубоком подрозетнике все помещается)
Где брать данные ip брокера и порт.
Это адрес и порт вашего брокера. Если поставить дополнение Mosquito в hassio, то это адрес вашего ha, порт у Mosquito обычно 1883
Подскажите а как добавлять в Home Asistent что-то не могу подключить.
Подскажите новичку, switches.yaml Home Assistant нужно самому создавать?
Да, и в configuration.yaml прописать его. Будет непонятно — спрашивайте
Здравствуйте уважаемый kvv. Через интернет и физической кнопкой реле управляется. Теперь для меня самое сложное, как этим реле управлять из Home Asistent?
Только начинаю постигать узы, не обессудьте. Спасибо.
Да, в configuration.yaml вставил то, что вы указали.
Вообще советую приглядеться к ESPHome, у них связь с HA по api, без промежуточных узлов в виде mqtt брокера
Случайно наткнулся на ваш блог, и уже второй день перечитываю)) Спасибо огромное за вашу работу!
Если вас не затруднит, не подскажите, как в HA настроить работу switch c GPIO RPi как кнопку?
Как вкл/выкл работает, а так, чтобы «нажал» и через пол секунды вернулось состояние не могу сделать ?
Использую код:
Добрый день! Спасибо за Ваш отзыв)
Я правильно понял, у вас на этом gpio висит реле? Если так, то можно без проблем сделать автоматизацию на изменение состояния после определенной задержки по времени, те же полсекунды. Сейчас набросаю код
Автоматизация выключает switch.you_switch если он переходит из состояния off в on после 500 миллисекунд задержки.
«Спасибо большое» кинул на кофе ))
Читаю дальше ваш блог и учусь ))
Благодарю)
Всё отлично работало, пока сегодня не обновил HA с предпоследней на последнюю версию…
Теперь даже когда ставлю задержку 50 милисекунд, всё равно «держит» больше секунды.
У меня это критично, спалю реле…
Подскажите пожалуйста, где копать? Возможно что какая-то задержка при обработке? Вот мой конфиг:
— alias: ‘knopka_svet_koridor’
trigger:
— platform: state
entity_id: switch.koridor
from: ‘off’
to: ‘on’
action:
— delay:
milliseconds: 50
— service: switch.turn_off
data:
entity_id: switch.koridor
— alias: ‘knopka_svet_spalnia’
trigger:
— platform: state
entity_id: switch.spalnia
from: ‘off’
to: ‘on’
action:
— delay:
milliseconds: 50
— service: switch.turn_off
data:
entity_id: switch.spalnia
Может как-то можно объединить автоматизацию для двух свитчей в одну?
Какая у вас версия HA? У меня на 0.108.6 все отлично работает, сейчас проверил. Объединить автоматизацию для двух свитчей в одну можно, ниже код, тоже проверил, работает
Работать то работает, но ставлю 100мсек задержку, а держит больше секунды…
Причем заметил, что из нескольких проб вкл/выкл бывает что отрабатывает задержку правильно.
Может быть что HA как-то кэширует это?
Home Assistant 0.108.6
Я у себя тестил с выключателями на esphome, всегда отрабатывают вовремя. А у вас через gpio, то есть вообще локально, долно все быть молниеносно. Советую открыть проблему на github HA (https://github.com/home-assistant/core/issues), с указанием того что вы мне писали (что до обновления все было нормально). Подробно все распишите
Стыдно признаться, но мой английский оставляет желать лучшего, так что описать проблему я грамотно не смогу.
Да и честно говоря, я уже не уверен что «чисто» работало до обновления. Поскольку иногда и сейчас работает как нужно, а до обновления я особо не успел «потестить».
Вообщем решил пока оставить как есть, планирую в ближайшее время переехать на с RPi на ноут с докер+ХА. Значит прямых GPIO всё равно не будет.
Спасибо за участие и помощь!
Успехов в дальнейших начинаниях) все равно странно, что автоматизации не отрабатывали задержку как нужно..
возможно что не всегда отрабатывает как нужно, поскольку вся система грузится и работает на RPi3 не с SD карты, а с USB флешки. Поскольку там милисекунды, может запрос-ответ с флешки «съедает» это время? Или вся автоматизация в RAM уходит?
У меня ранее ha на usb ssd работал на pi3, как то даже не замечал, все быстро и без косяков, намного быстрее чем sd флешка. Если именно на usb флешке у вас, то они могут быть медленными, тогда все сходится.
Вряд ли автоматизации будут в ram висеть.. хотя даже не задумывался об этом, надо почитать
А вообще, можно ли без автоматизаций создать кнопку, а не переключатель в ХА? Т.е. «замкнуто-пока-нажато»?
Встроенными средствами ha gpio? Я не нашел. На есп с прошивкой ESPHome все очень просто делается, добавив on_press к нужному binary_sensor. Советую вам взглянуть в сторону ESPHome)
Да, когда перенесу ХА с RPi на ноут, придётся.
Но я сторонник принципа «подключение проводами лучше чем по воздуху». И если у меня роутер, сервер и исполняющие реле стоят рядом, то согласитесь, хотелось бы использовать это по максимуму.
Полностью согласен с вашим принципом, я придерживаюсь такого же мнения. Сейчас доделываю в спальне ремонт, провел к выключателю витую пару, хочу esp32 подключить через lan. И к этой же еспшке led контроллер для подсветки. И она же будет принимать данные с термометра от Xiaomi c e-ink экраном. Понравился он мне внешне) ну и проводной датчик co2 какой-нибудь
«хочу esp32 подключить через lan» — вот с этого места прошу по-подробнее )) Как?!
Через модуль LAN8720, компонент ESPHome: https://esphome.io/components/ethernet.html
Класс! Там есть пример конфига для Olimex ESP32-POE, крутая штука, но стоимость тоже не малая: (https://aliexpress.ru/item/4000188817036.html?spm=a2g0v.12057483.0.0.6cd46f8a8RnBVc)
А у вас уже есть практический опыт подключения LAN8720 к ESP32s?
Не поделитесь? Отличная тема для статьи в вашем блоге!
Да все никак руки не дойдут) модуль лежит, ждет своего часа))
Думаю часом там не отделаться ))
С нетерпением буду ждать!
Здравствуйте!
Приобрёл вот такой модуль LAN8720: https://aliexpress.ru/item/32828023330.html
Пытаюсь подружить его с ESP32-WROOM-32U (https://aliexpress.ru/item/4000155919030.html) и чет совсем грустно.
3.3в питание для LAN взял с платы ESP32
Вот мой последний конфиг:
Не подскажите, куда копать?
Посмотрю какой у меня ethernet модуль, если такой же, то попробую подключить и напишу. Лежит уже полгода, никак руки не дойдут)
Извините что беспокою, ну как, не удалось подключить?
Прям руки чешутся :))
Пока нет, в скором времени) самому интересно
А на таком модуле https://aliexpress.ru/item/32946148832.html
можно реализовать 2 on_press-кнопки? в ESPHome?
Сложный конфиг? С ESP_easy знаком, а вот ESPHome ни разу не щупал…
Уточняю вопрос, можно ли в этой конфигурации: (https://gist.github.com/frenck/0af30b05f7c98d17219548b46a03df21#file-doorbell-yaml) к ESP-01s, «прицепить» ещё две on_press-кнопки? У неё вроде 4 GPIO, а здесь задействовано 2.
Да, там 4 свободных gpio, 2 задействовано. Какую конфигурацию вы хотите реализовать? Что в итоге должно получиться?
Хотел в этот конфиг https://gist.github.com/frenck/0af30b05f7c98d17219548b46a03df21#file-doorbell-yaml добавить две on_press-кнопки на свободные GPIO. Но включил голову и понял что на 2 кнопки с релюхами, нужно не 2 свободных GPIO, а 4. Т.е. нужно уже NodeMCU.
Т.е., теперь хочу в выше указанный конфиг, добавить две on_press-кнопки, каждая на своё реле, с учётом что будет модуль NodeMCU.
По вашему совету, решил переходить с GPIO RPi, на ESPHome )
Вот поэтому я и спросил)) Конечно переходите, мне в ESPHome нравится, то, что задействован api. То есть мы без танцев с бубном всегда видим точный статус всех подключенных кнопок, реле и т.п.
Вот только пока въехать толком не получается. С ESP_easy как-то полегче…
Если не затруднит, не могли бы вы подправить yaml (ссылка выше) на nodemcu и + добавить две on_press-кнопки, каждая на своё реле?
Там все просто. Чтобы прописать nodemcu, в качестве платы, нужно прописать
board: nodemcuv2
Чтобы добавить реле, в switch добавить данные по вашему, gpio. Тоже самое касается и кнопок — binary_sensor. В документации на esphome.io все подробно описано с примерами. Сейчас нет доступа к ПК, с конфигом пока не помогу. В разделе автоматизаций описаны on_press on_release команды. Если что, спрашивайте
Сделал ))
Только не могу настроить автоматизацию для notify. Шлёт уведомления после каждого нажатия кнопки звонка. Как бы сделать так, чтобы после отправки уведомления о нажатии, задержка была мин 5? Вот конфиг notify:
— alias: Test soobscheniy
trigger:
platform: state
entity_id: binary_sensor.zvonok_button
to: ‘on’
action:
service: notify.mobile_app_imoy
data:
message: Звонят возле лифта
Отлично)
Если я правильно понял про задержку, то это делается простым добавлением delay, в примере для кнопки pi gpio он есть
Если правильно понимаю, то добавив delay для action, мы просто задерживаем отправку сообщения. А нужно чтобы только для повторного нажатия был delay.
Суть в том, что когда кто-то жмёт кнопку дверного звонка, может жать по несколько раз, а уведомления достаточно одного.
Понял. На ум приходит создать таймер обратного отсчёта, например 5мин, и если он ещё идёт, то уведомление не отправится. Но это реализация отправки уведомления на первый звонок. Чтобы на второй, с ходу не соображу. Надо подумать
Может если, допустим, на первое нажатие начинается обратный таймер на 5 мин, уведомление не отправлено. Если в промежутке от 5 до 4 мин идёт повторное нажатие, то отсылается уведомление. Как-нибудь так..
Тогда наверное наоборот, на первое нажатие идёт отправка и начинается обратный отсчет, если в промежутке идут нажатия то отправки нет (через condition?), по прошествии заданного времени, возможна повторная отправка в случае нажатия. Вот только как это «расписать»?
Набросал, подставьте свои значения и проверьте, должен работать
код тут: https://kvvhost.ru/2018/06/06/switch-espeasy-in-homeassistant/#comment-2386
Спасибо! К сожалению смогу проверить только через неделю. Сразу же отпишусь!
Отличная статья! Всё доступно и легко реализуемо даже для таких начинающих «интеграторов» как я.
Повторил — всё работает ))
Прошивка ESP_easy — mega-20200410.
Home Assistant 0.108.6
Единственный косяк — релешки. Взял такие же, как на фото, не протянули и 10 кликов (нагрузка около 1А), «залипли». Было 2 шт. оба в топку. Поставил тоже китайские, но на черной плате и другого производителя. Пока работают.
Спасибо) та, что на фото, отработала полтора года и до сих пор живая, лежит в коробке) поменял все на готовый модуль из одного обзора (rr300w), так как сгорел БП.
Я ещё добавил сюда же DHT22, да и nodeMCU всё же даёт больше возможностей для расширения этой поделки чем rr300w. Опять же, если сгорит бп в rr300, то гемор с его заменой в отличии от раздельного исполнения. Хотя по компактности конечно проигрывает.
Поправляю себя, в rr300w нет БП. Так что он в любом случае хуже чем связка NodeMCU+БП ))
В случае готового модуля его проще запихнуть в подрозетник, а так конечно, nodemcu это тема. Особенно если с esp32)
кстати в rr300w источник питания на 3.3 в (или на 5в?) распаян на плате. И да, если он сгорит это будет тот ещё гемор его сделать.
Не имею сего девайса, но учитывая что питание 5в, значит понижает до 3,3 ну и 5в, наверное, на реле.
Спасибо .
Ваша статья сдвинула с мертвой точки.
Бился с подключением топика ( MQTT брокера) к переключателю на Home Assistant.
У вас увидел объяснение что \name: bedroom_switch\ это не просто имя а объявление переключателя и все заработало.
Только сегодня добрался до компа. Попробовал сделанный вами конфиг — работает!
Что не может не радовать)
Правда пришлось заменить нотифер телеграма на ios push, телеграм почему-то перестал работать, уже и прокси менял, без толку.
«Спасибо большое» кинул на кофе ))
Отлично) благодарю
Подскажите пожалуйста! Есть следующая автоматизация:
При нажатии виртуального переключателя «input_boolean.nik_spat», включается «switch.alisa_rozetka» и затем через 30 мин отключается.
Как сделать, чтобы время отключения задавать в интерфейсе, например слайдером от 5 мин до 60 или каким другим способом?
Здравствуйте, у себя не делал, но, думаю, это можно реализовать через input_number. И в автоматизации указать в delay на него вместо количества минут.
Не сразу понял, как реализовать, но покопавшись разобрался! Спасибо за руководящую и направляющую роль в моём образовании!! :))
Кстати, а насколько проблематична реализация данного кейса на ESPHome?
Кейса с автоматизацией при звонке?
Под «кейсом» я подразумевал данную статью «Переключатель света на EspEasy в Home Assistant».
Т.е. описываемый конечный функционал но вместо EspEasy использовать ESPHome. Всё таки интеграция ESPHome с ХА выглядит привлекательней ).
Конечно, там все просто, вечером постараюсь скинуть код
Вот конфиг для ESPHome:
esphome: name: bedroom_esp platform: ESP8266 board: nodemcuv2 on_boot: priority: 800 # ... then: - output.turn_off: bedroom_light_relay # wifi сеть wifi: ssid: 'HomeWRLS' password: 'password' reboot_timeout: 60min manual_ip: static_ip: 192.168.1.112 gateway: 192.168.1.1 subnet: 255.255.255.0 # Лог logger: # api api: password: 'bedroom_esp' reboot_timeout: 60min # ota ota: password: 'bedroom_esp' # Реле output: - platform: gpio pin: number: D6 inverted: true mode: OUTPUT id: bedroom_light_relay # restore_mode: RESTORE_DEFAULT_OFF # Выключатель света light: - platform: binary name: bedroom_light output: bedroom_light_relay id: bedroom_light # Простой одноклавишный выключатель binary_sensor: - platform: gpio pin: number: D5 inverted: true mode: INPUT_PULLUP name: bedroom_light_button on_press: then: - light.toggle:… Подробнее »
У меня полный швах! ((
Поставил на убунту докер, хотел в него закинуть ha-supevised, а разрабы 10 мая «закрыли лавочку». Теперь ставится ha, в котором нет supervised!! Как его поставить теперь?! Второй день инет рою, ничего не могу найти по теме ((
Читал их блог, писали что где-то в архивах у них должны быть полные инструкции, сам не искал.
а я искал… и продолжаю искать))
пока безуспешно… а столько планов уже настроил на ХА…