Как реализовать 3 состояния для одного выключателя?
Модератор: immortal
- vitosmaxim80sad145
- Сообщения: 148
- Зарегистрирован: Сб июл 07, 2018 12:48 am
- Откуда: Днепр
- Благодарил (а): 100 раз
- Поблагодарили: 1 раз
Re: Как реализовать 3 состояния для одного выключателя?
В 3 часа ночи мы вычисляем время заката и восхода, записываем его в свойства ВремяЗаката и ВремяВосхода, а если режим Ночного времени=2, то и в свойства ВремяНачалаНочногоРежима и ВремяКонцаНочногоРежима
я в панели управления ночной режым Связанный объект: NightMode и Свойство active теперь в в свойстве
NightMode.active пишет не 0 и 1 а По закату или По времени ,Я так понимаю сценарий Hourly несработает так как не =2 или я что то не так сделал
я в панели управления ночной режым Связанный объект: NightMode и Свойство active теперь в в свойстве
NightMode.active пишет не 0 и 1 а По закату или По времени ,Я так понимаю сценарий Hourly несработает так как не =2 или я что то не так сделал
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Как реализовать 3 состояния для одного выключателя?
NightMode.active работает только, если стоят значения 0 или 1. 0 - выключен, 1 - включен. Видимо в меню управления, в radiobox у вас сделано так
по времени
по закату
и привязано к свойству NightMode.active. Поэтому нажимая на по времени, то в свойство NightMode.active в значении стоит по времени. К этому свойству не нужно привязывать.
Надо так и привязать к свойству NightMode.mode
1|по времени
2|по закату
Посмотрите мои скриншоты выше и сам код, что написал fandaymon.
по времени
по закату
и привязано к свойству 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 состояния для одного выключателя?
Divan писал(а): ↑Вт окт 15, 2019 11:07 amNightMode.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 состояния для одного выключателя?
Для такого варианта мы делаем следующее, все это привязываем к свойству NightMode.mode и к методу(например создадим метод NightMode.status).
0|Выкл
1|По времени
2|По закату
3|Вкл
Нужно, чтобы в методе (например NightMode.status) была логика только для значении 0 и 3, если не знаете как писать код в PHP, то код можете собрать с помощью blockly такой логикой
если NightMode.mode имеет значение 0, то запускаем метод NightMode.deactivate - деактивируем ночной режим
иначе если NightMode.mode имеет значение 3 то запускаем метод NightMode.activate - активируем ночной режим
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 состояния для одного выключателя?
Зачем и к свойству привязывать и к методу? Вы можете сказать в таком случае, какая будет последовательность действий? не правильней привязать элемент управления к свойству, к которому привязан метод при изменении?
ps/ по поводу метод NightMode.status - обычно метод обозначают глаголом, чтоб не путаться. типа NightMode.setStatus
win10 connect https://connect.smartliving.ru/profile/303
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Как реализовать 3 состояния для одного выключателя?
1) В свойствах объекта меняется значение, а метод запускает возложенную функцию для объекта. При каждой нажатии на кнопку выкл/по времени/по закату/вкл, меняется значение в свойствах + запускается метод, который в свою очередь сверяет значения в свойствах. Если условия истинные, то функция сработает.
2) "не правильней привязать элемент управления к свойству, к которому привязан метод при изменении? - каким образом это сделать?"
Я пока не знаю как это сделать, чтобы при изменении в свойствах значение запускался метод. Можете привести примеры как это сделать?
3) про глаголы учту
2) "не правильней привязать элемент управления к свойству, к которому привязан метод при изменении? - каким образом это сделать?"
Я пока не знаю как это сделать, чтобы при изменении в свойствах значение запускался метод. Можете привести примеры как это сделать?
3) про глаголы учту
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
- xor
- Сообщения: 2039
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 286 раз
- Поблагодарили: 629 раз
Re: Как реализовать 3 состояния для одного выключателя?
1) зависит от реализации. я обычно в выключателях меню, управляющих связанной релюхой, привязываюсь к методу свитч, а к свойству статус - только в режиме чтения - для отображения реального положения вещей. если поменяется реализация, мне всё равно, последовательность действий и логика остается одна и та же.Divan писал(а): ↑Вт окт 15, 2019 10:53 pm1) В свойствах объекта меняется значение, а метод запускает возложенную функцию для объекта. При каждой нажатии на кнопку выкл/по времени/по закату/вкл, меняется значение в свойствах + запускается метод, который в свою очередь сверяет значения в свойствах. Если условия истинные, то функция сработает.
2) "не правильней привязать элемент управления к свойству, к которому привязан метод при изменении? - каким образом это сделать?"
Я пока не знаю как это сделать, чтобы при изменении в свойствах значение запускался метод. Можете привести примеры как это сделать?
3) про глаголы учту
2) привязка метода к изменению свойства делается в свойстве класса, там есть такой пункт Запускать метод при изменении. при этом в привязанном методе доступны параметры $params['OLD_VALUE'] и $params['NEW_VALUE'], содержащие старое значение и новое значение свойства.
- Рейтинг: 1.16%
win10 connect https://connect.smartliving.ru/profile/303
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Как реализовать 3 состояния для одного выключателя?
Спасибо, теперь я понял как это работает).
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Как реализовать 3 состояния для одного выключателя?
Выражаю всем участникам данной темы огромное спасибо . Если бы не вы, то я не додумался бы до такого. Все началось с того, что интересно было узнать как можно было реализовать это (см.ниже), потом мне сказали, что это странный способ и я это не отрицаю, ведь действительно это странный способ включать ночной режим по закату, но мне это, нужно было понять. Также понял как запускается метод при изменении значении в свойствах, как работает вычисление заката и восход солнца. Это пополнило мою копилку знании. На основе всего этого, мне в голову пришла мысль, а что если сделать блокировку ночного режима? - в итоге сделал это.
Сейчас это работает так:
1) Если я дома до включения "ночного режима" - "ночной режим" включается по заданному времени и переводит систему в режим "Дома спят"
2) Если я дома (н-р время 01:00) после указанного времени (23:00) на включение Ночного режима - при активации "Кто-то дома" снимается блокировка "ночного режима", включается "ночной режим" и переводит систему в режим "Дома спят"
3) Если я дома после окончания "ночного режима" - "ночной режим" выключается по заданному времени и переводит систему в режим "Я дома"
4) Если меня дома нет, то включается блокировка "ночного режима" и при наступлении ночного режима (начало или конец) - ночной режим не включится, система по прежнему будет находиться в режиме "Дома никого нет"
5) Если я ушел до того, как выключится ночной режим - "ночной режим" выключается и включается блокировка "ночного режима", таким образом при выключении "ночного режима" система не переведет из режима "Дома никого нет" в режим "Я дома". Система будет по прежнему находиться в режиме "Дома никого нет". Установленное время для "Ночного режима" не сбрасывается и остается таким, каким я его задал.
С удовольствием выслушаю критику в мой адрес.
Началось с этого
Потом дошло до этого
Теперь сделал блокировку Ночного режима
Сейчас это работает так:
1) Если я дома до включения "ночного режима" - "ночной режим" включается по заданному времени и переводит систему в режим "Дома спят"
2) Если я дома (н-р время 01:00) после указанного времени (23:00) на включение Ночного режима - при активации "Кто-то дома" снимается блокировка "ночного режима", включается "ночной режим" и переводит систему в режим "Дома спят"
3) Если я дома после окончания "ночного режима" - "ночной режим" выключается по заданному времени и переводит систему в режим "Я дома"
4) Если меня дома нет, то включается блокировка "ночного режима" и при наступлении ночного режима (начало или конец) - ночной режим не включится, система по прежнему будет находиться в режиме "Дома никого нет"
5) Если я ушел до того, как выключится ночной режим - "ночной режим" выключается и включается блокировка "ночного режима", таким образом при выключении "ночного режима" система не переведет из режима "Дома никого нет" в режим "Я дома". Система будет по прежнему находиться в режиме "Дома никого нет". Установленное время для "Ночного режима" не сбрасывается и остается таким, каким я его задал.
С удовольствием выслушаю критику в мой адрес.
Началось с этого
СпойлерПоказать
СпойлерПоказать
СпойлерПоказать
Блокировка выключена - ночной режим работает
Блокировка включена - ночной режим не работает
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB