Как реализовать 3 состояния для одного выключателя?

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Аватара пользователя
vitosmaxim80sad145
Сообщения: 148
Зарегистрирован: Сб июл 07, 2018 12:48 am
Откуда: Днепр
Благодарил (а): 100 раз
Поблагодарили: 1 раз

Re: Как реализовать 3 состояния для одного выключателя?

Сообщение vitosmaxim80sad145 » Вт окт 15, 2019 9:38 am

В 3 часа ночи мы вычисляем время заката и восхода, записываем его в свойства ВремяЗаката и ВремяВосхода, а если режим Ночного времени=2, то и в свойства ВремяНачалаНочногоРежима и ВремяКонцаНочногоРежима

я в панели управления ночной режым Связанный объект: NightMode и Свойство active теперь в в свойстве
NightMode.active пишет не 0 и 1 а По закату или По времени ,Я так понимаю сценарий Hourly несработает так как не =2 или я что то не так сделал
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

Re: Как реализовать 3 состояния для одного выключателя?

Сообщение Divan » Вт окт 15, 2019 11:07 am

NightMode.active работает только, если стоят значения 0 или 1. 0 - выключен, 1 - включен. Видимо в меню управления, в radiobox у вас сделано так

по времени
по закату

и привязано к свойству NightMode.active. Поэтому нажимая на по времени, то в свойство NightMode.active в значении стоит по времени. К этому свойству не нужно привязывать.

Надо так и привязать к свойству NightMode.mode
1|по времени
2|по закату

Посмотрите мои скриншоты выше и сам код, что написал fandaymon.
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
vitosmaxim80sad145
Сообщения: 148
Зарегистрирован: Сб июл 07, 2018 12:48 am
Откуда: Днепр
Благодарил (а): 100 раз
Поблагодарили: 1 раз

Re: Как реализовать 3 состояния для одного выключателя?

Сообщение vitosmaxim80sad145 » Вт окт 15, 2019 12:32 pm

Divan писал(а):
Вт окт 15, 2019 11:07 am
NightMode.active работает только, если стоят значения 0 или 1. 0 - выключен, 1 - включен. Видимо в меню управления, в radiobox у вас сделано так

по времени
по закату

и привязано к свойству NightMode.active. Поэтому нажимая на по времени, то в свойство NightMode.active в значении стоит по времени. К этому свойству не нужно привязывать.

Надо так и привязать к свойству NightMode.mode
1|по времени
2|по закату

Посмотрите мои скриншоты выше и сам код, что написал fandaymon.
[/quote

да но тогда добавляется лишний переключятель Красивей как было изначяльно и наверное правельней было бы если ривязаное свойство как у тебя а методом менять свойство активити отк на 0 вкл на 1 но как правельно написать метод
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

Re: Как реализовать 3 состояния для одного выключателя?

Сообщение Divan » Вт окт 15, 2019 1:52 pm

Для такого варианта мы делаем следующее, все это привязываем к свойству NightMode.mode и к методу(например создадим метод NightMode.status).

0|Выкл
1|По времени
2|По закату
3|Вкл

Нужно, чтобы в методе (например NightMode.status) была логика только для значении 0 и 3, если не знаете как писать код в PHP, то код можете собрать с помощью blockly такой логикой
если NightMode.mode имеет значение 0, то запускаем метод NightMode.deactivate - деактивируем ночной режим
иначе если NightMode.mode имеет значение 3 то запускаем метод NightMode.activate - активируем ночной режим
За это сообщение автора Divan поблагодарил:
vitosmaxim80sad145 (Вт окт 15, 2019 6:24 pm)
Рейтинг: 1.16%
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: Как реализовать 3 состояния для одного выключателя?

Сообщение xor » Вт окт 15, 2019 10:25 pm

Divan писал(а):
Вт окт 15, 2019 1:52 pm
Для такого варианта мы делаем следующее, все это привязываем к свойству NightMode.mode и к методу(например создадим метод NightMode.status).
Зачем и к свойству привязывать и к методу? Вы можете сказать в таком случае, какая будет последовательность действий? не правильней привязать элемент управления к свойству, к которому привязан метод при изменении?
ps/ по поводу метод NightMode.status - обычно метод обозначают глаголом, чтоб не путаться. типа NightMode.setStatus
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

Re: Как реализовать 3 состояния для одного выключателя?

Сообщение Divan » Вт окт 15, 2019 10:53 pm

1) В свойствах объекта меняется значение, а метод запускает возложенную функцию для объекта. При каждой нажатии на кнопку выкл/по времени/по закату/вкл, меняется значение в свойствах + запускается метод, который в свою очередь сверяет значения в свойствах. Если условия истинные, то функция сработает.


2) "не правильней привязать элемент управления к свойству, к которому привязан метод при изменении? - каким образом это сделать?"

Я пока не знаю как это сделать, чтобы при изменении в свойствах значение запускался метод. Можете привести примеры как это сделать?

3) про глаголы учту
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: Как реализовать 3 состояния для одного выключателя?

Сообщение xor » Вт окт 15, 2019 11:40 pm

Divan писал(а):
Вт окт 15, 2019 10:53 pm
1) В свойствах объекта меняется значение, а метод запускает возложенную функцию для объекта. При каждой нажатии на кнопку выкл/по времени/по закату/вкл, меняется значение в свойствах + запускается метод, который в свою очередь сверяет значения в свойствах. Если условия истинные, то функция сработает.


2) "не правильней привязать элемент управления к свойству, к которому привязан метод при изменении? - каким образом это сделать?"

Я пока не знаю как это сделать, чтобы при изменении в свойствах значение запускался метод. Можете привести примеры как это сделать?

3) про глаголы учту
1) зависит от реализации. я обычно в выключателях меню, управляющих связанной релюхой, привязываюсь к методу свитч, а к свойству статус - только в режиме чтения - для отображения реального положения вещей. если поменяется реализация, мне всё равно, последовательность действий и логика остается одна и та же.

2) привязка метода к изменению свойства делается в свойстве класса, там есть такой пункт Запускать метод при изменении. при этом в привязанном методе доступны параметры $params['OLD_VALUE'] и $params['NEW_VALUE'], содержащие старое значение и новое значение свойства.
2019-10-15_23-39-45.png
2019-10-15_23-39-45.png (14.48 КБ) 3311 просмотров
За это сообщение автора xor поблагодарил:
Divan (Ср окт 16, 2019 12:10 am)
Рейтинг: 1.16%
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

Re: Как реализовать 3 состояния для одного выключателя?

Сообщение Divan » Ср окт 16, 2019 12:10 am

Спасибо, теперь я понял как это работает).
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

Re: Как реализовать 3 состояния для одного выключателя?

Сообщение Divan » Ср окт 16, 2019 6:03 pm

Выражаю всем участникам данной темы огромное спасибо :D. Если бы не вы, то я не додумался бы до такого. Все началось с того, что интересно было узнать как можно было реализовать это (см.ниже), потом мне сказали, что это странный способ :lol: и я это не отрицаю, ведь действительно это странный способ включать ночной режим по закату, но мне это, нужно было понять. Также понял как запускается метод при изменении значении в свойствах, как работает вычисление заката и восход солнца. Это пополнило мою копилку знании. На основе всего этого, мне в голову пришла мысль, а что если сделать блокировку ночного режима? - в итоге сделал это.

Сейчас это работает так:
1) Если я дома до включения "ночного режима" - "ночной режим" включается по заданному времени и переводит систему в режим "Дома спят"
2) Если я дома (н-р время 01:00) после указанного времени (23:00) на включение Ночного режима - при активации "Кто-то дома" снимается блокировка "ночного режима", включается "ночной режим" и переводит систему в режим "Дома спят"
3) Если я дома после окончания "ночного режима" - "ночной режим" выключается по заданному времени и переводит систему в режим "Я дома"
4) Если меня дома нет, то включается блокировка "ночного режима" и при наступлении ночного режима (начало или конец) - ночной режим не включится, система по прежнему будет находиться в режиме "Дома никого нет"
5) Если я ушел до того, как выключится ночной режим - "ночной режим" выключается и включается блокировка "ночного режима", таким образом при выключении "ночного режима" система не переведет из режима "Дома никого нет" в режим "Я дома". Система будет по прежнему находиться в режиме "Дома никого нет". Установленное время для "Ночного режима" не сбрасывается и остается таким, каким я его задал.

С удовольствием выслушаю критику в мой адрес.

Началось с этого
СпойлерПоказать
5.JPG
5.JPG (26.82 КБ) 3277 просмотров
Потом дошло до этого
СпойлерПоказать
01 - Общий вид меню ночного режима в формате html.JPG
01 - Общий вид меню ночного режима в формате html.JPG (59.22 КБ) 3277 просмотров
01-2 - Общий вид меню ночного режима в формате html.JPG
01-2 - Общий вид меню ночного режима в формате html.JPG (33.36 КБ) 3277 просмотров
Теперь сделал блокировку Ночного режима
СпойлерПоказать
Блокировка выключена - ночной режим работает
01 - общий вид - блокировка выключена.JPG
01 - общий вид - блокировка выключена.JPG (26.47 КБ) 3277 просмотров
Блокировка включена - ночной режим не работает
02 - общий вид - блокировка включена.JPG
02 - общий вид - блокировка включена.JPG (26.3 КБ) 3277 просмотров
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Ответить