Инвертированная Машина Состояний или ПушОк Автоматизация - наш подход к автоматизации в системе умного дома
Имея более 10 лет опыта в области домашней автоматизации, мы пришли к выводу, что большинство пользователей не используют сложные и действительно полезные сценарии автоматизации. Как правило, все ограничивается простейшими правилами типа "если случилось это, то сделай то". Например: если сработал датчик протечки, то закрой кран; если открылась дверь, то включи свет и т.д. Но этого недостаточно для создания действительно удобного и надежного умного дома.
Какие еще возможности существуют?
Вот примеры более сложных сценариев:
- Управляйте реле теплого пола в ванной, чтобы поддерживать желаемую температуру. Если ванной не пользуются и повышается влажность, увеличьте нагрев пола, пока влажность не снизится.
- Включайте вытяжной вентилятор в туалете после его использования или при повышении влажности, но только тогда, когда там никого нет.
- Если пропадает магистральное водоснабжение, перекройте входной кран, затем включите резервную емкость. Когда магистральное водоснабжение восстановится, закройте резервную емкость, откройте магистральный кран и наполните резервуар до верха.
Мы утверждаем, что реализовать такие сценарии с помощью стандартного подхода "если случилось это, то сделай то" невозможно. Причина в том, что быстро возникают перекрестные зависимости и необходимость учитывать последовательность действий (например, когда один кран закрыт, другой должен быть открыт). Поэтому следующий шаг — это использование языка программирования. Однако и здесь могут возникнуть сложности, даже с учетом возможностей современных умных ассистентов.
Наш подход к автоматизации
Мы разработали специальную методологию, которую называем "Инвертированная Машина Состояний" или "ПушОк Автоматизация". Основные преимущества нашего подхода — это системность и простота. Главное правило — забудьте о подходе "если случилось это, то сделай то" и сформулируйте, как должно быть в конечном итоге. Определите желаемое состояние и опишите его в правилах, которые можно проверять в любой момент времени.
Например, вместо правила "сработал датчик протечки — закрой кран" следует использовать правило "кран должен быть закрыт, если есть протечка". Такой подход позволяет сосредоточиться на желаемом результате, а не на событиях, которые к нему приводят.
Этапы разработки автоматизации
-
Определите состояния, с которыми будет работать автоматизация.
В случае с протечкой, например, у нас есть датчик и кран. Это кажется простым, но четкое определение состояний существенно упрощает дальнейшую разработку. Помимо состояний, связанных с сенсорами, можно также использовать локальные состояния, такие как заданная температура. -
Определите процессы, задействованные в автоматизации.
Процесс — это действие, продолжающееся во времени. Например, протечка — это процесс. Процессы важны для выполнения действий, связанных с течением времени, а также для отправки уведомлений. -
Определите правила и триггеры.
Триггеры вызывают проверку правил автоматизации. Они автоматически включают изменения всех заданных состояний. Это логично: если состояние изменилось, правила должны быть проверены снова. Отдельные триггеры нужны для ссылок на них в правилах или использования временных триггеров.
Таким образом, чтобы создать "ПушОк Автоматизацию", определите состояния, процессы, триггеры и правила.
Пример автоматизации АкваСтоп
В стандартном подходе сценарий выглядит так: "если сработал датчик протечки — закрой кран". Даже в таком простом случае возникает вопрос: что делать, если кран не закрылся сразу из-за проблем со связью или отсутствия электричества (интернета для облачных систем)? Чтобы решить эти вопросы, потребуется добавить еще несколько правил "если случилось это, то сделай то".
С нашими же методами автоматизация выглядит так:
- Состояния: Датчик (сигнал протечки), Кран (состояние: открыт или закрыт).
- Процессы: Протечка (с уведомлением на старте), Движение.
- Правила:
- Запустить процесс "Протечка", когда датчик активен.
- Кран закрыт, когда активен процесс "Протечка".
- Запустить процесс "Движение" на 10 секунд, если состояние крана не соответствует его фактическому статусу.
Этот сценарий с высокой вероятностью обеспечит закрытие крана при протечке. В более сложных случаях может показаться, что данный подход сложнее стандартных, но он повышает надежность и четко определяет поведение системы.
Пример автоматизации переключения водоснабжения с резервного на основное
- Состояния: Водопровод (датчик давления), КранВодопровода, СтатусВодопровода, КранРезерва, СтатусРезерва, КранЗаполнения, СтатусЗаполнения, Резерв (датчик уровня).
- Процессы: РаботаРезерва, Движение.
- Правила:
- Запустить процесс "РаботаРезерва", когда водопровод не активен.
- Остановить процесс "РаботаРезерва", когда водопровод активен.
- Открыть КранВодопровода, если не активен процесс "РаботаРезерва" и СтатусРезерва — закрыт.
- Закрыть КранВодопровода, если активен процесс "РаботаРезерва".
- Открыть КранРезерва, если активен процесс "РаботаРезерва" и СтатусВодопровода — закрыт.
- Закрыть КранРезерва, если не активен процесс "РаботаРезерва".
- Открыть КранЗаполнения, если не активен процесс "РаботаРезерва" и резервуар не полон.
- Запустить процесс "Движение" на 10 секунд, если состояние любого из кранов не соответствует их статусам.
Эти правила четко определяют поведение системы, повышают надежность и исключают одновременное открытие кранов водопровода и резерва.
Пример использования триггера времени для полива
- Состояния: ВлажностьПочвы, КранПолива, СтатусКранаПолива, СтатусКранаПодпитки, КранПодпитки, УровеньБочки, ТемператураБочки.
- Процессы: ОкноПолива, Полив, Подпитка.
- Триггеры: Утро (7 утра).
- Правила:
- Запустить процесс "ОкноПолива" на 2 часа в 7 утра.
- Запустить процесс "Полив" на час, если активен "ОкноПолива", температура воды в бочке выше 20°C, влажность почвы ниже 35%, и бочка полна.
- Остановить процесс "Полив", если влажность почвы выше 40%.
- Открыть КранПолива, если активен процесс "Полив" и СтатусКранПодпитки — закрыт.
- Закрыть КранПолива, если не активен процесс "Полив".
- Открыть КранПодпитки, если уровень воды в бочке не полный и СтатусКранаПолива — закрыт.
Эта автоматизация будет включать полив утром с 7 до 9 часов при наличии теплой воды в бочке и сухой почве. Полив будет длиться не более часа или до достижения влажности почвы в 40%. После этого включится подпитка для наполнения бочки.
Мы надеемся, что подход "ПушОк Автоматизация" стал более понятным. В нашем блоге мы продолжим публиковать примеры автоматизаций, разбирая их детали и нюансы.
Разбираемся на примерах: