Прошивка Tasmota в реле Sonoff Basic и интеграция в Home Assistant с помощью MQTT
Во время ремонта в ванной планировалось установить зеркало с подсветкой, для этого в месте установки сразу был выведен провод. Зеркало планировалось со своей кнопкой включения по этой и еще нескольким причинам провод и коробка для выключателя заранее не закладывались. После изучения ассортимента зеркал для ванной с подсветкой, требованиям: понравилось - качество - цена - размер, соответствует только зеркало из Икеи, но подсветка в нем не имеет своего выключателя. В качестве размыкателя цепи решено было поставить реле Sonoff Basic, а управлять этим реле через одноклавишный беспроводной выключатель или беспроводную кнопку от компании Xiaomi и системой автоматизации Home Assistant.
Sonoff Basic - реле с одной управляемой линией, подключаемое к сети Wi-Fi. Из коробки управление происходит на телефоне в программе eWeLink через китайское облако. Мне пришло устройство второго поколения Sonoff R2 Power, которое управляется чипом ESP8285.

Работать Home Assistant с реле будет по протоколу MQTT, для этого реле необходимо перепрошить. В качестве управляющего программного обеспечения в реле, выбрана прошивка Tasmota.
Прошивка устройства
Скачиваем программу прошивки устройства: Tasmotizer
Скачиваем последнюю прошивку: tasmota.bin
ВНИМАНИЕ! Автор статьи не несет никакой ответственности за последствия, которые могут произойти при выполнении действий, описанных в данной статье! Всё что вы делаете, вы делаете только на свой страх и риск!
Отключаем питание 220V от реле!!! Попытка прошить реле с подключенным питанием 220V может привести к поражению электрическим током, выходу из строя реле и подключенного к нему оборудования!!!
Прошивка реле осуществляется через USB-to-TTL адаптер, для подключения на плате реле имеются соответствующие технические контакты. Что бы не припаивать к технической площадке провода удобнее один раз впаять штыревую вилку на четыре контакта.

Маркировка контактов на обратной стороне платы.

Подключаем USB2TTL к реле: GND -> GND, RX -> TX, TX -> RX, 3.3V -> 3.3V. Провод 5V не подключать! Подключение 5V сразу выведет реле из строя!
| USB-to-TTL | ESP8285 |
|---|---|
| GND | GND |
| RX | TX |
| TX | RX |
| 3.3V | 3.3V or VCC |
Зажимаем единственную кнопку на реле, подключаем USB2TTL адаптер в компьютер, отпускаем кнопку. Запускаем программу Tasmotizer, выбираем COM порт на который подключился адаптер, выбираем скачанную прошивку tasmota.bin. Если прошивка осуществляется в первый раз, то необходимо выбрать Save original firmware и Flash size 1MB, т.к. впоследствии восстановить оригинальную прошивку возможно только из сохраненной существующей. Жмем кнопку Tasmotize!

После перепрошивки отключаем USB-to-TTL адаптер от реле и собираем реле обратно в корпус.
Настройка MQTT
На момент написания статьи версия прошивки была 8.5.1.
Подключаем реле к сети 220V. На телефоне или компьютере ищем Wi-Fi сеть с именем tasmota_XXXXXX, при подключении к этой сети появится окно для ввода настроек подключения реле к сети Wi-Fi. После ввода и сохранения настроек, реле должно перезагрузиться и подключиться к Wi-Fi.
Внимание! В реле установлен модуль Wi-Fi только на 2.4GHz.
Открываем на компьютере браузер и в адресную строку вводим: http://RELAY_IP_ADDRESS. Где RELAY_IP_ADDRESS - адрес вашего реле в локальной сети. Попадаем в меню настроек реле.

В меню Configuration -> Configure Module проверяем, если отличается, то выставляем, в поле Module type значение Sonoff Basic.

Переходим Configuration -> Configure MQTT. Вносим настройки:
- Host - IP адрес вашего MQTT сервера
- Port - Порт на котором доступен MQTT сервер, по умолчанию 1883
- User - Имя пользователя для авторизации на MQTT сервере, если такой имеется
- Password - Пароль для авторизации на MQTT сервере, если такой имеется
Остальные настройки по умолчанию. Кнопка Save.

Переходим Configuration -> Configure Other. Вносим настройки:
- Включаем Web Admin Password и вводим пароль для доступа к Web интерфейсу с настройками реле.
- Включаем MQTT Enable
Остальные настройки по умолчанию. Кнопка Save. После сохранения настроек при доступе к Web интерфейсу будет запрашиваться логин и пароль:
- Пользователь: admin
- Пароль: Ваш введенный пароль

Подключаемся к MQTT серверу (например, программой MQTT Explorer), проверяем подключение реле, в топике tasmota/discovery/ должен появиться MAC адрес устройства, так же устройство должно появиться в топике tele с именем tasmota_XXXXXX.

Настройка Home Assistant
Проверяем работу реле, в Home Assistant переходим Developer Tools -> Services, в поле Service выбираем mqtt.publish, в поле Service Data (YAML, optional) пишем:
topic: cmnd/tasmota_XXXXXX/POWER payload: ON
После нажатия кнопки CALL SERVICE реле должно включиться.
В файл configuration.yaml прописываем устройство:
switch:
- platform: mqtt
unique_id: <strong>sonoff_relay_light</strong>
name: "<strong>sonoff_relay_light</strong>"
state_topic: "stat/<strong>tasmota_XXXXXX</strong>/RESULT"
value_template: "{{ value_json.POWER }}"
command_topic: "cmnd/<strong>tasmota_XXXXXX</strong>/POWER"
payload_on: "ON"
payload_off: "OFF"
availability_topic: "tele/<strong>tasmota_XXXXXX</strong>/LWT"
payload_available: "Online"
payload_not_available: "Offline"
qos: 1
retain: false
unique_id и name не обязательно должны быть одинаковыми, tasmota_XXXXXX - ваше устройство.
Проверяем конфигурацию Configuration -> Server Controls -> Check configuration, если ошибок нет, то перезагружаем сервис Home Assistant.
После перезагрузки проверяем наше устройство в Configuration -> Entities. По необходимости добавляем кнопку включения реле на панель Lovelace.
Автоматизация
Как уже говорилось в начале статьи, реле используется для включения подсветки зеркала в ванной комнате и пока нет отдельной беспроводной кнопки для включения решил использовать одноклавишный выключатель основного освещения от компании Xiaomi. Поскольку у инженеров и программистов в Xiaomi туго с фантазией на действия в одноклавишных выключателях, то пришлось использовать такую схему:
- Если выключено основное освещение и подсветка, то включается основное освещение.
- Если основное освещение включено и выключена подсветка, то включается подсветка
- Если включено освещение и подсветка, то выключается основное освещение
- Если основное освещение выключено и включена подсветка, то выключается подсветка
Для начала выключатель необходимо перевести в режим программной кнопки. При подключении выключателя через шлюз Xiaomi это делается в настройках выключателя в программе MiHome. Если выключатель подключен по протоколу MQTT, то в топик zigbee2mqtt/SWITH_FRIENDLY_NAME/system/set необходимо отослать сообщение:
{
"operation_mode": {
"button": "single",
"state": "decoupled"
}
}
SWITH_FRIENDLY_NAME - имя выключателя назначенное пользователем, которое прописано в файле zigbee2mqtt/data/configuration.yaml. Сообщение можно отослать с помощью, выше упомянутого MQTT Explorer'а.
В файле automation.yaml или в мастере создания автоматизаций создаем четыре новых автоматизации:
- id: 'bathroom_up_light_on'
alias: Bathroom - Up Light ON
trigger:
- platform: device
domain: mqtt
device_id: 911a80f8ddce42bb942261d6e27d3835
type: click
subtype: single
discovery_id: 0x00158d00034d45c0 click_single
condition:
- condition: state
entity_id: switch.xiaomi_switch_bathroom_switch
state: 'off'
- condition: and
conditions:
- condition: state
entity_id: switch.sonoff_relay_bathroom
state: 'off'
action:
- service: switch.turn_on
data: {}
entity_id: switch.xiaomi_switch_bathroom_switch
mode: single
- id: 'bathroom_mirror_light_on'
alias: Bathroom - Mirror Light ON
trigger:
- platform: device
domain: mqtt
device_id: 911a80f8ddce42bb942261d6e27d3835
type: click
subtype: single
discovery_id: 0x00158d00034d45c0 click_single
condition:
- condition: state
entity_id: switch.xiaomi_switch_bathroom_switch
state: 'on'
- condition: state
entity_id: switch.sonoff_relay_bathroom
state: 'off'
action:
- service: switch.turn_on
data: {}
entity_id: switch.sonoff_relay_bathroom
mode: single
- id: 'bathroom_up_light_on'
alias: Bathroom - Up Light OFF
trigger:
- platform: device
domain: mqtt
device_id: 911a80f8ddce42bb942261d6e27d3835
type: click
subtype: single
discovery_id: 0x00158d00034d45c0 click_single
condition:
- condition: state
entity_id: switch.xiaomi_switch_bathroom_switch
state: 'on'
- condition: and
conditions:
- condition: state
entity_id: switch.sonoff_relay_bathroom
state: 'on'
action:
- service: switch.turn_off
data: {}
entity_id: switch.xiaomi_switch_bathroom_switch
mode: single
- id: 'bathroom_mirror_light_off'
alias: Bathroom - Mirror Light OFF
trigger:
- platform: device
domain: mqtt
device_id: 911a80f8ddce42bb942261d6e27d3835
type: click
subtype: single
discovery_id: 0x00158d00034d45c0 click_single
condition:
- condition: state
entity_id: switch.xiaomi_switch_bathroom_switch
state: 'off'
- condition: and
conditions:
- condition: state
entity_id: switch.sonoff_relay_bathroom
state: 'on'
action:
- service: switch.turn_off
data: {}
entity_id: switch.sonoff_relay_bathroom
mode: single
Что бы не мучиться с device_id и discovery_id лучше использовать мастер автоматизации Configure -> Automation -> +, для любителей погрызть кактус данные значения можно посмотреть в файле .homeassistant/.storage/core.device_registry.