Архитектура многоинтерфейсного управления

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
Foxhound
Сообщения: 6
Зарегистрирован: Вс май 27, 2018 9:02 pm
Благодарил (а): 0
Поблагодарили: 0

Архитектура многоинтерфейсного управления

Сообщение Foxhound » Чт июл 15, 2021 9:08 am

Сначала про саму идею.
Хотелось иметь возможность одновременного использования разных интересов для управления объектами умного дома.
Например есть лампочка: ее можно включить через web-интерфейс MJD, можно нажав выключатель в стене, а можно нажав кнопку на винтажной панели управления висящей на стене.

Сам MJD используется только как интерфейс.
В MJD есть объект соответствующей лампочке. У него свойство status и два метода turnOn и turnOff.
Методы не меняют свойство status а только генерируют команду для контроллера.
Зато контроллер при изменение свое состояния меняет свойство status. За счет этого MJD всегда актуальное состояние объекта.

Все бы хорошо, но я прикрутил еще один способ управления Алиса с колонкой от yandexи модуль YandexHome
На этом все сломалось. Дело в том, что YandexHome умеет только менять значение свойства.

Решение в лоб - на изменение свойства генерировать команду для контроллера, но он в ответ формирует изменение свойства....
В общем нужно более изящное решение.... Пока идей нет.
В какую сторону думать?
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Архитектура многоинтерфейсного управления

Сообщение Chainik » Чт июл 15, 2021 10:33 am

Попробуйте отвязать контроллер от свойства "Status", добавить к методам метод "switch" с кодом:

Код: Выделить всё

if ($this->getProperty('Status') == 1) {
$this->setProperty('Status', 0);
} else {
$this->setProperty('Status', 1);
}
И привязать этот метод ко входу контроллера (при этом свойство должно быть "пустым" (незаполненным)).
Любые привязки по выходу контроллера, к которому подключена лампочка (если таковые имеются), тоже надо убрать.
Если у вас контроллер MegaD, то в настройках входа галку напротив поля "Act" придется убрать.
Foxhound
Сообщения: 6
Зарегистрирован: Вс май 27, 2018 9:02 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Архитектура многоинтерфейсного управления

Сообщение Foxhound » Пт июл 16, 2021 2:18 pm

Не совсем идею уловил, что значит switch привязать метод к выходу контроллера?

Сейчас логика примерно следующая:
1. Есть управление из интерфейса MJD. Если на сцене тыкаю в лампочку, она в зависимости от своего состояния зовет метод turnON или turnOFF. Метод меняет значение поля status и выдёт команду на контроллер.
2. Если по каким то причинам из внешнего мира не имеющего отношения к MJD состояние входа контроллера изменилось, то контроллер меняет значение свойства status в MJD

Теперь к этому всему для управления добавилась умная колонка с Алисой.
Она не умеет вызывать методы, умеет только менять значение свойства. Например того же status.
Например можно повесить метод на изменение свойства статус и при его изменение выдавать команду на контроллер. Но контроллер в ответ опять изменить свойство status и опять получим команду на контроллер.... и так по циклу
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Архитектура многоинтерфейсного управления

Сообщение Chainik » Пт июл 16, 2021 3:46 pm

А что за контроллер и, главное, посредством какого механизма контроллер меняет значение свойства status при (независимом от MJD) переключении выхода? Обращаясь к некому модулю MJD или еще как-то?
Foxhound писал(а):
Пт июл 16, 2021 2:18 pm
Не совсем идею уловил, что значит switch привязать метод к выходу контроллера?
Только не к выходу, а ко входу, куда подключен физический выключатель. Например, для контроллеров MegaD в MJD предусмотрен специальный модуль. Вот так выглядит привязка метода к порту (пример):
r2z_mh3ujzkiionbs8pl0j4lp3s.png
r2z_mh3ujzkiionbs8pl0j4lp3s.png (47.46 КБ) 3886 просмотров
Foxhound
Сообщения: 6
Зарегистрирован: Вс май 27, 2018 9:02 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Архитектура многоинтерфейсного управления

Сообщение Foxhound » Сб июл 17, 2021 11:23 am

Контроллеры moxa ioLogik
Там на самом деле много промежуточного софта между MJD и контроллером. В принципе вся автоматика может функционировать без MJD.
MJD используется только как визуальная консоль управления. Ну теперь еще и интерфейс с Алисой.
Для MJD изменения состояния внешнего контроллера выглядит как изменение свойства объекта через внешнее http api
Аватара пользователя
xor
Сообщения: 2036
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 283 раза
Поблагодарили: 628 раз

Re: Архитектура многоинтерфейсного управления

Сообщение xor » Сб июл 17, 2021 1:38 pm

Foxhound писал(а):
Сб июл 17, 2021 11:23 am
Контроллеры moxa ioLogik
Там на самом деле много промежуточного софта между MJD и контроллером. В принципе вся автоматика может функционировать без MJD.
MJD используется только как визуальная консоль управления. Ну теперь еще и интерфейс с Алисой.
Для MJD изменения состояния внешнего контроллера выглядит как изменение свойства объекта через внешнее http api
заведите новое свойство для лампочки, которое будет менять модуль, связанный с яндексом, а при изменении этого свойства наворачивайте логику управления с вызовами методов
Foxhound
Сообщения: 6
Зарегистрирован: Вс май 27, 2018 9:02 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Архитектура многоинтерфейсного управления

Сообщение Foxhound » Вс июл 18, 2021 7:57 am

Ну тут опять замкнутый круг.... Дело в том, что состояние этого дополнительного свойства нужна так же синхронизировать с контроллером. Потому что Алису можно спросить: "Алиса, что со светом в гостиной"
Получается делаем дополнительное свойство: statusA. На его изменение зовем turnOn и trunOff.
Для его синхронизации с контроллером при изменении status синхронизируем его с statusA?
Тогда круг замкнется....
Аватара пользователя
xor
Сообщения: 2036
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 283 раза
Поблагодарили: 628 раз

Re: Архитектура многоинтерфейсного управления

Сообщение xor » Вс июл 18, 2021 2:40 pm

Foxhound писал(а):
Вс июл 18, 2021 7:57 am
Ну тут опять замкнутый круг.... Дело в том, что состояние этого дополнительного свойства нужна так же синхронизировать с контроллером. Потому что Алису можно спросить: "Алиса, что со светом в гостиной"
Получается делаем дополнительное свойство: statusA. На его изменение зовем turnOn и trunOff.
Для его синхронизации с контроллером при изменении status синхронизируем его с statusA?
Тогда круг замкнется....
сейчас жарко, туго соображаю( поэтому расскажу, как у меня сделано - есть реле, управляемое вручную радиовыключателем, сервером мдм и из яндекс.дома.
в случае переключения реле мдм или яндексом управление идет методом, а при ручном переключении меняется только статус с указанием, что переключили вручную. не знаю, поможет ли?
2021-07-18_14-37-44.png
2021-07-18_14-37-44.png (27.69 КБ) 3782 просмотра
Ответить