Умное реле в качестве FLEX-выключателя при недоступности Home Assistant

Сейчас у меня в квартире 9 основных источников света. Все они построены на умных лампочках. 8 источников могут менять яркость и температуру, один, в дополнение к этому, разноцветный. Цветной источник света подключен по WiFi, два — Zigbee, остальные 6 — Bluetooth Mesh.

Но так было не всегда. Когда я начинал играться в умный дом, сначала устанавливал умные выключатели и реле, оставляя интеллект самих источников света на прежнем уровне. Умными они стали заметно позже. Я не стал демонтировать умные реле с нулём из труднодоступных мест, настроив их на самостоятельное автоматическое включение при подаче электропитания. Просто заменил лампочки с традиционным интеллектом на умные.

Относительно недавно я понял, как их можно использовать, если вдруг с сервером умного дома случится внезапная неработоспособность. Так получилось, что через эти реле подключены лампочки, работающие по технологии Bluetooth Mesh и поддерживающие работу с FLEX-выключателями (встречается также другое название: SLISAON — Smart Lighting IS Always ON).

Теория

Итак, что нужно сделать, чтобы задействовать умное реле в качестве FLEX-выключателя при недоступности Home Assistant?

  1. Собственно, само реле с локальной логикой.
  2. Источник света, поддерживающий работу с FLEX-выключателем.
  3. Обычный (глупый) выключатель.
  4. Придумать и реализовать триггеры, срабатывающие, когда Home Assistant становится недоступным и наоборот.
  5. Прописать автоматизацию в Home Assistant, переключающую свет в штатном режиме.

Оборудование

В труднодоступных местах у меня Sonoff Mini[1] и Sonoff Basic R3. Код я буду приводить только для Sonoff Mini, этого вполне достаточно для понимания принципа работы. Лампочки, подключенные к ним — Xiaomi Mesh Bulb (MJDP09YL).

Реле у меня прошиты в Tasmota. Конкретно Sonoff Mini и Sonoff Basic R3 можно прошить не разбирая их, используя штатный режим DIY.

Нам ещё понадобится обычный глупый выключатель, который нужно подключить к контактам S1-S2 Sonoff Mini.

Настройка

У вас уже должно быть настроено в Home Assistant:
- интеграция MQTT
- интеграция Tasmota
- интеграция, прокидывающая источник света, поддерживающий работу с FLEX-выключателем, в Home Assistant (у меня это компонент Xiaomi Gateway 3)

Настраиваем режим FLEX у источника света. Тут всё просто:

Прошиваем реле в Tasmota и настраиваем его на работу с вашим MQTT-брокером (можно посмотреть здесь). Подключаем глупый выключатель, к контактам S1-S2 Sonoff Mini. Само реле Sonoff Mini, разумеется, нужно подключить к сети электропитания.

ВНИМАНИЕ! Если у вас нет навыков подключения реле к сети электропитания, не рискуйте подключать его самостоятельно, лучше попросите сделать это специально обученного человека. Поверьте, ваша жизнь дороже!

По умолчанию, при замыкании/размыкании контактов S1-S2 Sonoff Mini происходит переключение состояния реле. Для наших нужд это не нужно. Поэтому выставляем соответствующую настройку в консоли. Напомню, консоль открывается по ссылке http://<tasmota-ip-address>/cs:

SetOption114 1

Теперь, при замыкании/размыкании контактов S1-S2, реле не будет менять своё состояние, а отправит {"Switch1":{"Action":"TOGGLE"}} в соответствующий топик на MQTT-брокер. Мы будем отлавливать это в автоматизации Home Assistant (см. ниже).

Теперь пропишем немного локальной логики:

Rule1 ON Switch1#State=2 DO Backlog Power1 0; Power1 1 ENDON
Rule2 ON Mqtt#Connected DO Rule1 0 ENDON ON Mqtt#Disconnected DO Rule1 1 ENDON

В Rule1 говорится, что при изменении состояния глупого выключателя, нужно разомкнуть контакты реле на короткий промежуток времени и замкнуть их вновь. По умолчанию, промежуток между командами в Backlog — 200 мс. Этого достаточно для наших нужд. По сути, мы эмулируем то, что происходит при нажатии на кнопку FLEX-выключателя.

В Rule2 деактивируется Rule1 при подключении к MQTT-брокеру и активируеся при отключении. У меня Home Assistant установлен методом Home Assistant Operating System в виртуальной машине, а MQTT-брокер — официальный add-on Mosquitto broker. Поэтому в данном случае я для себя решил считать Home Assistant живым, когда жив MQTT-брокер. Если это для вас не подходит, нужно придумать подходящие вам триггеры для Rule2 вместо Mqtt#Connected и Mqtt#Disconnected.

Rule1 0
Rule2 1

После конфигурации правил, выставляем их состояние при работе в штатном режиме (Home Assistant «жив»). Если хочется более глубоко понять как работают команды, у Tasmota есть подробная документация.

И, наконец, прописываем автоматизацию в Home Assistant:

alias: Light Toggle Example
description: ''
trigger:
  - platform: mqtt
    topic: stat/sonoff_mini/RESULT
    payload: '{"Switch1":{"Action":"TOGGLE"}}'
condition: []
action:
  - service: light.toggle
    entity_id: light.sample_lightbulb
mode: queued
max: 10

Итоги

Мы сделали так, что в штатном режиме (Home Assistant работает) переключение глупого выключателя отлавливается в Home Assistant и его средствами включается/выключается источник света light.sample_lightbulb. Если же Home Assistant «отваливается», переключение глупого выключателя кратковременно размыкает электрическую цепь, питающую источник света, что приводит к смене его состояния с выкл. на вкл. и наоборот.

Да, можно было просто установить FLEX-выключатель, но мне было лень разбирать уже имеющуюся конструкцию.

Да, можно настроить так, что при переключении глупого выключателя всегда будет кратковременно размыкаться электрическая цепь, но это дополнительные щелчки и просто дольше по времени, чем отловить MQTT-сообщение.

Традиционно, никого ни к чему не призываю, ничего не навязываю. Просто делюсь тем, как реализовал у себя. Если есть желание поделиться своими решениями или появились вопросы, заходите обсудить.

Vladimir Turekhanov ・ July 4, 2021

вернуться


  1. Насколько я понимаю, Sonoff Mini уже снято с производства. Вместо него теперь Sonoff Mini R2, незначительно отличающееся от предшественника.  ↩