Сетевые сценарии

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


Когда перед пользователем встаёт задача обрабатывать события возникающие в рамках сети в целом, то для этого в системе автоматизации присутствует механизм общения устройств между собой. Если элементу системы присвоить флаг 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;

и все будет работать по сети

Поддержал проект — спас молодого самодельщика! А мы принимаем подарки...

X