Группы и фоновые задачи¶
Группа — программный прибор: у неё своя карточка, выключатель и статус, а для приложения и Алисы она — одно устройство. Создаётся на панели, как обычное устройство.
Группа пригодится в двух случаях:
собрать несколько устройств в одно — «Баня» из печи, парогенераторов и света, «Люстра» из реле и клавиш на стене;
обернуть одно устройство программой — «Вентиляция»: включили — вентилятор сам работает циклом, пока его не выключат. Сценарий становится прибором с кнопкой и понятным статусом вместо набора ручных команд.
Что группа делает, задаётся в её редакторе тремя частями:
логика группы отвечает на команду, на вопрос о состоянии и на нажатие клавиши на стене;
фоновые задачи ведут процесс, пока прибор включён: сеанс, цикл, поддержание температуры;
регистры хранят настройки и фазы: «сколько парить», «подготовка».
Логика группы¶
Пока логика не описана, выключена или вкладка пуста, группа повторяет присланное: что записали в её адрес, то и станет её состоянием, а на вопрос она отвечает тем, что записано. Логику описывают, когда нужно другое: проверить или пересчитать команду, передать её реальным устройствам, узнать о нажатии клавиши на стене. В карточке группы нажмите «Описать логику» — правит её только владелец локации.
Вкладки¶
Логика группы — три вкладки: «Запись», «Чтение» и «Событие устройства». На каждой — блоки «Если … Тогда …». Пустая вкладка предлагает кнопку «Описать запись» или «Описать чтение», на вкладке событий устройство добавляет кнопка «Добавить источник».
Запись — что делает группа, когда её просят изменить значения: панель, Алиса или другая
автоматизация. Блоки видят команду целиком и проверяются сверху вниз до первого подошедшего. Нужный регистр выбирают условием:
например, «brightness — свойство есть в сообщении». Шаги — те же, что у автоматизации по
событию устройства: «Действие», «Регистр группы», «Пауза», «Ожидание» (в том числе с запросом
статуса устройства), «Ветвление», «Сообщение».
Ни один блок не подошёл — группа сразу записывает присланное и отвечает новым состоянием.
Блок подошёл — сначала выполняются его шаги, а потом группа записывает присланное и отвечает. Регистр, который записал шаг «Регистр группы», присланное не перетирает. Чтобы регистр не записался вовсе, запишите его шагом «Регистр группы» его же текущим значением — из раздела «Регистры» списка значений.
Шаги не доработали — ожидание кончилось отменой или шаг не удался, — и присланное не записывается: группа отвечает тем состоянием, что есть.
Новая команда группе прерывает шаги прошлой и выполняется сама: последнее слово за тем, кто нажал последним. В истории запусков прерванная строка подписана «Прервано: заменён новой командой». Команда переключить выключатель приходит в шаги уже конкретной: «вкл» или «выкл».
Чтение — что делает группа, прежде чем сообщить своё состояние. Блок у «Чтения» один и без условия: его шаги «Перед ответом:» готовят ответ — например, опрашивают реальное устройство, чтобы записать его свежее состояние в регистры. Группа отвечает состоянием сама, после последнего шага, чем бы шаги ни кончились. Если логика в этот момент занята, группа отвечает сразу.
Событие устройства — что делает группа, когда устройство сообщает свой статус, например клавишу нажали на стене. Нет событий — статусы устройств группу не меняют. Блок срабатывает сразу, даже когда группа выключена: запишите регистры группы так, чтобы они совпали с устройством. Командовать этому устройству отсюда нельзя — команда вернулась бы эхом. События всех устройств проверяются по порядку блоков, поэтому у устройств с вложенными адресами первым отвечает блок, стоящий выше.
Шаги должны быть быстрыми¶
Ответ группы уходит после шагов «Записи» и «Чтения», а панель ждёт его всего несколько секунд. Долгое — прогрев, циклы, ожидание на минуты — переносите в фоновую задачу группы. Редактор не запрещает длинные шаги, но панель, не дождавшись ответа, покажет «Потеря связи».
Пока идут шаги «Чтения», панель показывает прошлое значение группы, а новое приходит с ответом. Каждый опрос группы снова запускает эти шаги.
Алиса, когда спрашивает состояние, «Чтение» не запускает: она получает то, что уже записано в регистрах.
Какие значения группа принимает¶
Значения проверяются по правилам регистра — одинаково для панели, Алисы, другой автоматизации и команды снаружи. Яркость вне диапазона, режим не из списка, значение не того типа отбрасываются, остальная команда выполняется. Если не подошло ничего, группа просто отвечает текущим состоянием. Алиса в таком случае говорит, что не смогла выполнить именно эту часть команды.
Шаг «Регистр группы» подчиняется тем же правилам: значение вне границ регистра он не запишет.
Рецепт: запись с каскадом на реле¶
Группа «Люстра» включается и выключается вместе с реле:
На вкладке «Запись» нажмите «Описать запись».
Условие первого блока —
stateгруппы равноON. В «Тогда» добавьте «Ожидание» реле: «Сначала отправить прибору» — «Отдать команду устройству» с командой{"state":"ON"}, условие —stateреле равноON. Срок новое ожидание здесь получает 2 секунды: панель ждёт ответа группы 3 секунды, и весь прогон должен в них уложиться.Второй блок — то же для
OFF.Регистры группы шаги не трогают: присланное группа запишет сама после шага. Реле не ответило и ожидание настроено закончить прогон — группа останется в прежнем состоянии.
Чтобы клавиша на стене тоже меняла группу, на вкладке «Событие устройства» нажмите
«Добавить источник», выберите реле и запишите state группы по его статусу.
Примечание
Ожидать саму группу в её «Записи» и «Чтении» нельзя: ответ группы уходит только после всего прогона, и такое ожидание досидело бы до конца срока. Ждите приборы, от которых зависит её ответ.
Рецепт: чтение с опросом реле¶
Чтобы группа отвечала свежим состоянием реле, а не последним запомненным:
На вкладке «Чтение» нажмите «Описать чтение».
В «Перед ответом:» добавьте «Ожидание» реле: «Сначала отправить прибору» — «Запросить статус устройства», условие пустое, срок — 2 секунды.
Следующим шагом «Регистр группы» запишите
stateзначением из статуса, который прислало реле.
Группа ответит после последнего шага. Реле не ответило — группа ответит тем, что знала.
Регистры¶
Регистр — именованное значение прибора: state, brightness, температура, фаза сеанса.
Шаги и условия логики выбирают регистр из списка — читают его значение или записывают новое, —
поэтому каждый регистр объявлен заранее: незнакомое имя редактор не сохранит.
Умения и датчики заводит редактор устройства: их поведение задаёт словарь, и в разделе «Регистры» логики их нет. Все остальные регистры объявляют здесь: имя (ключ в статусе и в шагах, латиницей; переименовать потом нельзя), подпись, описание, тип с границами и значение.
Доступ решает, что регистр значит снаружи прибора, — одна из четырёх ступеней:
«Только внутри устройства» — рабочее состояние логики: фаза сеанса, счётчик кругов. Наружу не уходит — ни в статус, ни на карточку, ни в Алису.
«Показывать в статусе» — такое же состояние, но его видно в статусе и на карточке. Снаружи его не меняют: команду с этим ключом прибор пропускает.
«Принимает команды» — настройка: её меняют на карточке и командой снаружи в любой момент.
«Спрашивать при запуске» — настройка, значение которой спрашивают перед включением прибора (Параметры и запуск).
Шаги и условия читают и записывают регистр на любой ступени. У последней есть ещё значение, введённое при запуске: в списках вставки оно лежит в разделе «Параметры», а текущее значение любого регистра — в разделе «Регистры».
Две нижние ступени делают регистр состоянием: поле «Текущее значение» записывает его при сохранении, и шаг работающего прибора, который читает регистр, возьмёт уже новое значение. Две верхние — настройкой: поле «Начальное значение» задаёт умолчание, а у списка и числа можно включить «Голос Алисы».
Ступень можно сменить в любой момент. Исключение одно: пока шаги подставляют значение, введённое при запуске, регистр не опустить ниже «Спрашивать при запуске» — замените подстановку значением из раздела «Регистры» или уберите её.
Когда прибор включают не из панели¶
Голосом, командой снаружи или шагом другой автоматизации — спросить значения не у кого, и сеанс берёт текущую настройку прибора. Чтобы поменять её заранее, правьте «Начальное значение» в редакторе логики группы: у выключенного прибора меняется и текущее значение, у работающего — только умолчание, идущий сеанс не обрывается.
Если шаг автоматизации сам передаёт настройку в сообщении, на этот запуск действует его значение. Чтобы запуск по расписанию брал «Начальное значение», оставьте в шаге только включение.
Настройку можно показать голосом¶
У настройки с перечнем значений или числовой есть поле «Голос Алисы»: перечень станет режимом, число — диапазоном. Для режима выберите, как Алиса назовёт каждое значение. После этого настройку можно задать голосом до включения прибора.
Список названий у Алисы закрытый, и продолжительность в её протоколе не выражается: «сколько парить» голосом не задать — выставьте длительность заранее и включите прибор голосом.
Фоновые задачи¶
Задача — это цепочка шагов, которая повторяется, пока прибор включён: «включить вентилятор, подождать три минуты, выключить». Задач у прибора может быть несколько, добавляются кнопкой «Добавить задачу».
Задача идёт, пока включён выключатель группы. Выключили группу или саму задачу — круг обрывается.
Как читается тело задачи¶
Блоки задачи означают не «если», а «Пока верно». Каждый круг задача берёт первый блок, чьё условие верно, и выполняет его шаги. Перестали быть верными все условия — сеанс закончился.
Новый круг начинается каждую минуту или сразу за предыдущим, если тот шёл дольше. Более редкий цикл делается паузой внутри самой цепочки.
Блок без шагов законен и означает «держись, ничего не делай».
Настройки блока и шагов¶
«Проверять» у блока: перед кругом — как обычно; после первого круга — блок обязательно отработает один раз, а условие спросят потом. Так пишется «в конце обязательно продуть»: свой круг блок получит, даже если первый достался соседу.
«Если не вышло» у шага: что делать, когда шаг не удался — команда не ушла, регистр не записался. Закончить и погасить или идти дальше. Цена отказа у шагов разная: не включилась печь — сеанса нет; не зажёгся свет — париться это не мешает.
«При остановке» — команды, которые выполняются, когда задача закончилась: сама дошла до конца, перестали быть верными все условия, выключили группу или выключили задачу. Только команды: пауза или ожидание сделали бы остановку зависающей.
Оставите ветку пустой — нагрузка останется в том состоянии, в котором её застала остановка.
Что видно снаружи¶
В карточке задачи есть «История кругов»: у долгого сеанса в журнале остаются смены исхода — «выполнен», «ошибка», «отложен», «ничего не потребовалось», «сеанс закончен».
Идущую задачу сначала выключите и дождитесь остановки — только тогда её можно удалить.
Регулятор и плавная мощность¶
Готовый контур одной кнопкой¶
Пока в теле новой задачи ничего нет, под списком шагов стоит «Собрать контур». Первым делом она спрашивает, как держим значение — и это главный выбор:
«Включаем и выключаем, с зазором» — двухпозиционное поддержание. Задача сама решает раз в минуту: показание ушло ниже нижнего порога — включить, выше верхнего — выключить, между порогами — не трогать. Зазор между порогами и есть та самая «нечувствительность», из-за которой реле не дёргается от шума датчика. Промежуточной мощности здесь нет: нагрузка либо включена, либо выключена. Это то, что нужно обогревателю на реле и большинству бытовых случаев.
«Плавно: регулятор и ШИМ» — регулятор считает мощность, а две команды с паузами превращают её в долю времени под нагрузкой. Нужен там, где важна именно средняя мощность: тёплый пол, электронная нагрузка, медленный процесс.
Дальше спрашивается общее для обоих видов — датчик и его показание, значение, которое держим, и нагрузка, — плюс главная настройка выбранного вида: зазор у двухпозиционного, полоса у плавного.
У двухпозиционного вида есть ещё вопрос «Куда работает нагрузка» — греет она или охлаждает: от этого зависит, какой порог включает. А в каждую ветку заготовка кладёт проверку, жив ли датчик: датчик, который отвечает на опрос, спросят о статусе, остальным разрешат молчать не дольше пятнадцати минут. Не ответил или замолчал — задача заканчивается и выключает нагрузку, выключатель группы гаснет. Включить обратно придётся руками — это нарочно.
У плавного вида свой вопрос — «Что стоит на нагрузке»: реле получает период включения 15 минут, чтобы реже щёлкать, электронная нагрузка — 10 секунд.
Собранное — это обычные шаги: их можно править, переставлять и удалять. Кнопка пропадает, как только в задаче появляется настроенный шаг: заготовка заменяет цепочку целиком.
Шаг «Регулятор»¶
«Регулятор» считает мощность по показанию датчика и уставке и кладёт её в переменную круга. В строке задачи он показан одной сводкой — «Термометр · Парилка · temperature → 90 · power»; поля открываются нажатием на неё.
В диалоге «Главное» — всё, без чего шаг не имеет смысла:
Датчик и Показание — что мерим. Показание выбирается из списка того, что прибор реально присылает; имя, набранное руками, регулятор может не найти и будет держать безопасное значение.
Уставка — к чему стремимся. Либо число, либо регистр группы: во втором случае это ручка на карточке прибора, и задача подхватит новое значение следующим тактом.
Направление — греем или охлаждаем.
«Полный выход при отклонении» — полоса: насколько показание должно отойти от уставки, чтобы регулятор дал выход целиком. Она в единицах вашего показания (панель подписывает её «°C», «%»), и чем меньше полоса, тем резче регулятор. Это и есть главная ручка «характера».
«Смещение» — выход, когда показание ровно на уставке; полоса считается от него до потолка.
Остальное сложено в «Тонкую настройку». Она свёрнута, и значения в ней уже рабочие: чтобы регулятор заработал, открывать её не нужно. Внутри — окно свежести показания, времена, пределы и поведение выхода:
времена выбирают закон сами: одна полоса — П, вместе с временем интегрирования — ПИ, со всеми — ПИД. Начинать стоит с одной полосы. Чем медленнее контур, тем больше время интегрирования: порядок 900 секунд для радиатора и 6000 для тёплого пола;
«Не быстрее» ограничивает, насколько мощность меняется за минуту, — самый простой способ сделать управление плавным, не трогая коэффициенты;
«Безопасное значение» публикуется, когда датчик замолчал дольше разрешённого, — иначе нагреватель не гаснет;
«Зеркалить выход в регистр» кладёт мощность в регистр прибора — и тем делает её видимой на карточке и доступной другим задачам. Если целью выбран датчик, мощность появляется на карточке обычным показанием, рядом с температурой и фазой.
Мощность как число: прибор, который умеет плавно¶
Диммеру, клапану или вентилятору с регулировкой мощность отдаётся значением. Для этого она
должна лежать в регистре — включите у регулятора «Зеркалить выход в регистр», — а следующим шагом
поставьте обычное «Действие» и выберите в поле значения нужного умения регистр из секции
«Регистры» — в поле ляжет {{expose:имя}}:
Регулятор термометр · temperature → 90 · зеркало → power
Действие диммер · Яркость = значение прибора «power»
Так подача живёт в одной цепочке: регулятор посчитал — шаг отдал. Пределы выхода регулятора стоит задать сразу в единицах прибора (диммер обычно принимает 0…254, а не 0…100), иначе полная мощность окажется меньше, чем кажется.
Значение берётся в момент отправки, то есть каждый круг задачи. Если регистра нет (опечатка в имени или его ещё не объявили), шаг не выполняется — команда с неподставленным значением прибору не уходит.
Мощность становится длиной включения¶
Пауза в режиме «Переменная» берёт свою длину из переменной регулятора или из регистра группы и растягивает её на заданный отрезок секунд: «значение от…до» отображается в «секунд от…до». Под полями показано, что получится: «Половина мощности (50) даст 30 с».
Для медленного ШИМ таких пауз нужно две: первая — сколько греем, вторая — сколько ждём, со встречной шкалой. Пять минут греем, пятнадцать ждём — это они и есть. Нулевая мощность даёт паузу короче секунды, и такой отрезок пропускается целиком, вместе с командой, которая его открывает, — поэтому «мощности нет» и означает «не включать».
Настройки у обоих шагов подробные, и тонкая часть — работа наладчика. Полное описание полей — в спецификации языка автоматизаций.
Примеры: баня и вентиляция¶
Баня — несколько устройств в одном приборе. Печь, каменка, парогенераторы, свет и термометр собраны в группу с одним выключателем. Логики у неё нет: «сколько парить» — регистр со ступенью «Спрашивать при запуске», а сеанс ведёт фоновая задача — проверяет, что печь на связи, греет до нужной температуры, подаёт пар, включает свет и отсчитывает время парения. Ветка остановки гасит всё разом — и когда сеанс дошёл до конца, и когда баню выключили руками. Снаружи это один прибор со статусом «ожидание», «подготовка», «парение».
Вентиляция — программа над одним устройством. В группе один вентилятор и одна задача: включить его, подождать две минуты, выключить, подождать три — и так по кругу, пока группа включена. Статус показывает «работает», «При остановке» выключает вентилятор. Без группы это пришлось бы делать командами вручную; с ней сценарий стал прибором, который включают кнопкой, голосом или другой автоматизацией.
См. также
Нашли ошибку на странице или не получилось? Напишите нам: rocket-home-ru@yandex.ru или в Telegram-группу https://t.me/RocketHome — укажите адрес страницы и что пошло не так.