Hero Image

Автоматизация

Инвертированная Машина Состояний или ПушОк Автоматизация - наш подход к автоматизации в системе умного дома

Имея более 10 лет опыта в области домашней автоматизации, мы пришли к выводу, что большинство пользователей не используют сложные и действительно полезные сценарии автоматизации. Как правило, все ограничивается простейшими правилами типа "если случилось это, то сделай то". Например: если сработал датчик протечки, то закрой кран; если открылась дверь, то включи свет и т.д. Но этого недостаточно для создания действительно удобного и надежного умного дома.

Какие еще возможности существуют?
Вот примеры более сложных сценариев:

  • Управляйте реле теплого пола в ванной, чтобы поддерживать желаемую температуру. Если ванной не пользуются и повышается влажность, увеличьте нагрев пола, пока влажность не снизится.
  • Включайте вытяжной вентилятор в туалете после его использования или при повышении влажности, но только тогда, когда там никого нет.
  • Если пропадает магистральное водоснабжение, перекройте входной кран, затем включите резервную емкость. Когда магистральное водоснабжение восстановится, закройте резервную емкость, откройте магистральный кран и наполните резервуар до верха.

Мы утверждаем, что реализовать такие сценарии с помощью стандартного подхода "если случилось это, то сделай то" невозможно. Причина в том, что быстро возникают перекрестные зависимости и необходимость учитывать последовательность действий (например, когда один кран закрыт, другой должен быть открыт). Поэтому следующий шаг — это использование языка программирования. Однако и здесь могут возникнуть сложности, даже с учетом возможностей современных умных ассистентов.

Наш подход к автоматизации

Мы разработали специальную методологию, которую называем "Инвертированная Машина Состояний" или "ПушОк Автоматизация". Основные преимущества нашего подхода — это системность и простота. Главное правило — забудьте о подходе "если случилось это, то сделай то" и сформулируйте, как должно быть в конечном итоге. Определите желаемое состояние и опишите его в правилах, которые можно проверять в любой момент времени.

Например, вместо правила "сработал датчик протечки — закрой кран" следует использовать правило "кран должен быть закрыт, если есть протечка". Такой подход позволяет сосредоточиться на желаемом результате, а не на событиях, которые к нему приводят.

Этапы разработки автоматизации

  1. Определите состояния, с которыми будет работать автоматизация.
    В случае с протечкой, например, у нас есть датчик и кран. Это кажется простым, но четкое определение состояний существенно упрощает дальнейшую разработку. Помимо состояний, связанных с сенсорами, можно также использовать локальные состояния, такие как заданная температура.

  2. Определите процессы, задействованные в автоматизации.
    Процесс — это действие, продолжающееся во времени. Например, протечка — это процесс. Процессы важны для выполнения действий, связанных с течением времени, а также для отправки уведомлений.

  3. Определите правила и триггеры.
    Триггеры вызывают проверку правил автоматизации. Они автоматически включают изменения всех заданных состояний. Это логично: если состояние изменилось, правила должны быть проверены снова. Отдельные триггеры нужны для ссылок на них в правилах или использования временных триггеров.

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

Пример автоматизации АкваСтоп

В стандартном подходе сценарий выглядит так: "если сработал датчик протечки — закрой кран". Даже в таком простом случае возникает вопрос: что делать, если кран не закрылся сразу из-за проблем со связью или отсутствия электричества (интернета для облачных систем)? Чтобы решить эти вопросы, потребуется добавить еще несколько правил "если случилось это, то сделай то".

С нашими же методами автоматизация выглядит так:

  • Состояния: Датчик (сигнал протечки), Кран (состояние: открыт или закрыт).
  • Процессы: Протечка (с уведомлением на старте), Движение.
  • Правила:
    1. Запустить процесс "Протечка", когда датчик активен.
    2. Кран закрыт, когда активен процесс "Протечка".
    3. Запустить процесс "Движение" на 10 секунд, если состояние крана не соответствует его фактическому статусу.

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

Пример автоматизации переключения водоснабжения с резервного на основное

  • Состояния: Водопровод (датчик давления), КранВодопровода, СтатусВодопровода, КранРезерва, СтатусРезерва, КранЗаполнения, СтатусЗаполнения, Резерв (датчик уровня).
  • Процессы: РаботаРезерва, Движение.
  • Правила:
    1. Запустить процесс "РаботаРезерва", когда водопровод не активен.
    2. Остановить процесс "РаботаРезерва", когда водопровод активен.
    3. Открыть КранВодопровода, если не активен процесс "РаботаРезерва" и СтатусРезерва — закрыт.
    4. Закрыть КранВодопровода, если активен процесс "РаботаРезерва".
    5. Открыть КранРезерва, если активен процесс "РаботаРезерва" и СтатусВодопровода — закрыт.
    6. Закрыть КранРезерва, если не активен процесс "РаботаРезерва".
    7. Открыть КранЗаполнения, если не активен процесс "РаботаРезерва" и резервуар не полон.
    8. Запустить процесс "Движение" на 10 секунд, если состояние любого из кранов не соответствует их статусам.

Эти правила четко определяют поведение системы, повышают надежность и исключают одновременное открытие кранов водопровода и резерва.

Пример использования триггера времени для полива

  • Состояния: ВлажностьПочвы, КранПолива, СтатусКранаПолива, СтатусКранаПодпитки, КранПодпитки, УровеньБочки, ТемператураБочки.
  • Процессы: ОкноПолива, Полив, Подпитка.
  • Триггеры: Утро (7 утра).
  • Правила:
    1. Запустить процесс "ОкноПолива" на 2 часа в 7 утра.
    2. Запустить процесс "Полив" на час, если активен "ОкноПолива", температура воды в бочке выше 20°C, влажность почвы ниже 35%, и бочка полна.
    3. Остановить процесс "Полив", если влажность почвы выше 40%.
    4. Открыть КранПолива, если активен процесс "Полив" и СтатусКранПодпитки — закрыт.
    5. Закрыть КранПолива, если не активен процесс "Полив".
    6. Открыть КранПодпитки, если уровень воды в бочке не полный и СтатусКранаПолива — закрыт.

Эта автоматизация будет включать полив утром с 7 до 9 часов при наличии теплой воды в бочке и сухой почве. Полив будет длиться не более часа или до достижения влажности почвы в 40%. После этого включится подпитка для наполнения бочки.

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

Разбираемся на примерах: