Сейчас у меня в квартире 9 основных источников света. Все они построены на умных лампочках. 8 источников могут менять яркость и температуру, один, в дополнение к этому, разноцветный. Цветной источник света подключен по WiFi, два — Zigbee, остальные 6 — Bluetooth Mesh.
Но так было не всегда. Когда я начинал играться в умный дом, сначала устанавливал умные выключатели и реле, оставляя интеллект самих источников света на прежнем уровне. Умными они стали заметно позже. Я не стал демонтировать умные реле с нулём из труднодоступных мест, настроив их на самостоятельное автоматическое включение при подаче электропитания. Просто заменил лампочки с традиционным интеллектом на умные.
Относительно недавно я понял, как их можно использовать, если вдруг с сервером умного дома случится внезапная неработоспособность. Так получилось, что через эти реле подключены лампочки, работающие по технологии Bluetooth Mesh и поддерживающие работу с FLEX-выключателями (встречается также другое название: SLISAON — Smart Lighting IS Always ON).
Итак, что нужно сделать, чтобы задействовать умное реле в качестве FLEX-выключателя при недоступности 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
Насколько я понимаю, Sonoff Mini уже снято с производства. Вместо него теперь Sonoff Mini R2, незначительно отличающееся от предшественника. ↩