Имя: Пароль:
IT
Админ
задача про 3 тригера (тема про умный дом)
0 vde69
 
модератор
28.03.23
10:15
есть 3 тригера

номера 1 и 2 имеют связь только с тригером номер 3 и при каждом своем изменении отправляют ему свой статус
тригер с номером 3 устанавливает свой статус на основании последнего полученого значения и отправляет об этом информацию тригерам 1 и 2
тригеры 1 и 2 получив статус от тригера 2 устанавливают свой статус равным статусу тригера 3
тригеры 1 и 2 получив статус от тригера 3 устанавливают свой статус равным статусу тригера 3


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

по идее нужно ограничить ответ от тригеров 1 и 2 в случае если изменение статуса произошло в результате получения пакета от тригера 3 (а не от внешнего прерывания), но я не вижу варианта технической реализации такой логики.

Кто может предложить другие варианты как гасить "шторм"

ps
шина обмена - zigbbe
протокол - mqqt
тригеры 1 и 2 это выключатели
тригер 3 - это группа mqqt реализованная програмно на контролере home assistance
1 Гена
 
гуру
28.03.23
10:06
(0) "тригеры 1 и 2 получив статус от тригера 2 устанавливают свой статус равным статусу тригера 3"
Здесь точно нет опечатки? Может всё же "от тригера 3(!)"?
2 rphosts
 
28.03.23
10:07
>тригеры 1 и 2 получив статус от тригера 2
видимо от триггера 3.

не знаю эту шину но как-то нужно передавать и источник, возможно нужна прослойка более сложная чем выключатель, типа так:

? -> 2` -> 2
3 ->

причем на 3 поступает (или не поступает) от 2` а не от выключателя 2
3 vde69
 
28.03.23
10:07
(1) ты прав, правильная формулировка:

тригеры 1 и 2 получив статус от тригера 3 устанавливают свой статус равным статусу тригера 3"
4 Гена
 
гуру
28.03.23
10:10
(3) Тогда плохой алгоритм.
Зачем, скажите на милость, трёшке, получившему последний чих от 1 отправлять кроме 2 ещё и обратно 1, лишний раз заставляя того заново щёлкнуться в том же своём значении?
Некомильфо.
5 Волшебник
 
модератор
28.03.23
10:16
(3) исправил
6 vde69
 
28.03.23
10:19
(4) тут я не могу влиять, группа в mqqt работает так

у группы есть идентификатор, и все команды группы идут в сеть широковещательным пакетом по идентификатору группы (а не по идентификатору устройства) а устройства сами определяют принимать или нет ему эти данные (в зависимости от того считает-ли оно себя принадлежащим этой группе).

механизм годный так как при добавления или замене устройства не требуется ничего менять в основной логике, достаточно просто устройство прописать в группу и все.
7 vde69
 
28.03.23
10:20
(5) круто, а нас научишь?
8 Волшебник
 
модератор
28.03.23
10:22
(7) Всему своё время.
9 asady
 
28.03.23
10:42
(0) как вариант завести статусы у тригера 3 приписывать статусу суффикс источника
типа
Триггер 1 отправил статус 101 тригер 3 установил статус 101001
тригер 1 получил статус от тригера 3 101001 установил статус 101001
тригер 2 получил статус от триггера 3 101001 установил статус 101001
10 vde69
 
28.03.23
10:47
(9) идея интересная, правда не уверен, что технически можно реализовать. Вечером попробую.
11 Гена
 
гуру
28.03.23
10:48
(9) Неплохая идея
12 PLUT
 
28.03.23
10:50
(0) ашипки

zigbee*
mqtt*
HA* (Home Assistant)


HA c объектами работает (сучностями)

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

на основе топиков mqtt можно виртуалные сенсоры добавить, затем использовать как сучность (объект)

ну и пейсать в топики тоже не проблема

примеров полно в тырнете, даже в оф.документации по HA

- service: mqtt.publish
        data:
          payload: "{{ message }}"
          topic: home/"{{ target }}"
          retain: true
13 Грю
 
05.04.23
16:33
(0) Можно запоминать статусы всех триггеров в триггере №3, и принимать решение, нужно ли отправлять пакет, в зависимости от их состояния.
Например, если в триггер 3 пришел сигнал "1", и по его информации все остальные триггеры уже находятся в состоянии "1", то отправлять ничего не нужно.
14 Грю
 
05.04.23
16:38
+(13) Запоминать состояние каждого триггера не требуется. Достаточно запомнить состояние "всех" триггеров - одно единственное значение. Оно запоминается только при отправке широковещательного пакета из триггера 3.
Если приходит от другого триггера точно такое же значение, то оно не меняется, обратно ничего не отправляем.
Если приходит противоположное, то считаем что состояние "всех" триггеров изменилось, отправляем новое значение обратно, запоминаем его.
AdBlock убивает бесплатный контент. 1Сергей