Еще одной уникальной особенностью прошивки является возможность работы сетевых сценариев.
Когда перед пользователем встаёт задача обрабатывать события возникающие в рамках сети в целом, то для этого в системе автоматизации присутствует механизм общения устройств между собой. Если элементу системы присвоить флаг global, см. Конфигуратор, то тут же события этого элемента по mqtt начнут получать все остальные устройства в сети. Например возьмём элемент сенсора температуры с id temp. После того, как мы включим в этом элементе флаг global, то каждый интервал int времени температура этого сенсора будет отправляться другим устройствам и на других устройствах в условиях можно будет использовать id этого устройства.
Мы можем писать условия вида:
if temp > 30 then rel = 1
Где temp это id элемента находящегося на другом удалённом устройстве.
Особенностью такого условия является то что id temp не присутствует на данном устройстве, а прилетает на него по сети. Поэтому в некоторых случаях необходимо знать находится ли отправляющее устройство в сети или нет (online offline).
Для этого внутри системы предусмотрен специальный механизм таймеров, которые не видны пользователю, но являются средством определения наличия другого устройства в сети.
Устройство с элементом temp отправляет свое значение каждый интервал int, другие устройства при получении этого значения запускают таймер ожидания следующего выхода на связь устройства с элементом temp. И если данное устройство по истечению таймера на связь не вышло и не прислало новые данные, то следует считать что оно не в сети.
Для обработки этого события нужно использовать макрос temp_onError
Тогда наш сценарий примет вид:
if temp_onError then telegram(«датчик не в сети»)
if temp > 30 then rel = 1
Последнее условие просто не выполнится в случае ошибки, а пользователь получит уведомление (строка 1) о том, что необходимо его вмешательство в процесс работы системы.
В рамках одного устройства (когда элемент находится на этом же устройстве) макрос onError работает иначе.
if pressure_onError then telegram «ошибка датчика давления»
В таком случае макрос onError указывает на внутреннюю ошибку датчика, если данный функционал был заложен автором модуля данного датчика
Простой пример создания работы по сети:
Cоздайте
- на esp1 датчик temp и в нем параметр global должен быть равен 1.
- на esp2 реле relay
Влючите на обоих esp «Прием событий с других устройств». Подробнее об этом посмотрите здесь.
Подключите esp1 и esp2 к одному mqtt брокеру, если этого не сделано.
Напишите на esp2 сценарий:
if temp > 20 then relay = 1;
if temp < 20 then relay = 0;
и все будет работать по сети