Блог чайника для чайника. Уверен на 100%, что опытные и мудрые мажороводы сделали это по своему, но нет такой статьи, как вариант "Блокировка ночного режима" или что-то подобное. Блокировка ночного режима для меня оказалась очень удобной фишкой. Она позволяет мне не менять временной промежуток ночного режима и блокировать ночной режим, если я не попадаю во временной промежуток.
Мне в голову пришла такая идея "Блокировка ночного режима" и спонтанно, все благодаря этой теме Как реализовать 3 состояния для одного выключателя.... Казалось бы, что это легко настроить, да и вообще странный метод, но оказалось не так и все легко, но зато я для себя узнал много интересного. Узнал как настраивать восход и закат солнца, как работает вызов метода при изменении свойства объекта. Для меня это опыт и знание в копилку. Итак, расскажу о своем варианте и как он настраивается.
Как это работает?
1) Если я дома до включения "ночного режима" - "ночной режим" включается по заданному времени и переводит систему в режим "Дома спят"
2) Если я дома (н-р время 01:00) после указанного времени (допустим установил время 23:00 или 00:00) на включение Ночного режима - после активации "Кто-то дома" снимается блокировка "ночного режима", включается "ночной режим" и переводит систему в режим "Дома спят"
3) Если я дома после окончания "ночного режима" - "ночной режим" выключается по заданному времени и переводит систему в режим "Я дома"
4) Если меня дома нет, то включается блокировка "ночного режима" и при наступлении ночного режима (начало или конец) - ночной режим не включится, система по прежнему будет находиться в режиме "Дома никого нет"
5) Если я ушел до того, как выключится ночной режим - "ночной режим" выключается и включается блокировка "ночного режима", таким образом при выключении "ночного режима" система не переведет из режима "Дома никого нет" в режим "Я дома". Система будет по прежнему находиться в режиме "Дома никого нет". Установленное время для "Ночного режима" не сбрасывается и остается таким, каким я его задал.
Общий вид меню
Настройка объекта BLE_GalaxyS7
В роли смарт ключа у меня выступает телефон, сделал привязку по bluetooth
В методе Found, объекта BLE_GalaxyS7 я собрал такой код, который активирует DivanHomeMode и снимет блокировку ночного режима
В методе Lost, объекта BLE_GalaxyS7 я собрал такой код, который деактивирует DivanHomeMode и ставит блокировку ночного режима
Ниже я создал привязку метода к свойству, это пример для понимания как работает привязка метода к свойству и как это настраивается.
Создал метод setOnline в классе BluetoothDevices, здесь создается привязка метода к свойству. Так при изменении значения в свойстве запускается метод. set это глагол для метода чтобы не было путаницы со свойством объекта Online, в итоге получается
1) Online - свойство
2) setOnline - метод
В настройках свойства Online я привязал метод setOnline к свойству Online
В методе setOnline (использую глагол set для метода setOnline, свойства Online), объекта BLE_GalaxyS7 я настроил запуск методов Found и Lost при изменении в свойстве BLE_GalaxyS7.online значения 1 или 0
Настройка объекта NightMode
Создал свойство Mode в объекте NightMode, где
1) Значение 2 - если я дома и время ночного режима истекло, то блокировка ночного режима выключена
2) Значение 3 - если я не дома, то блокировка ночного режима включена
Я использую эти методы в объекте NightMode
В методе activate, объекта NightMode добавил код, который запустит метод activate если у свойства NightMode.Mode стоит значение 2 (Значение 2 означает, что блокировка ночного режима выключена). Запуск метода activate переведет DivanHomeMode в статус Divan спит и сообщит мне, что ночной режим включен.
В методе deactivate, объекта NightMode добавил код, который разрешает запускать метод deactivate, если в свойстве Mode стоит значение 2.
1) Если я еще дома, а время ночного режима истекло, то включится режим Я дома и сообщит, что ночной режим выключен
2) Если я ушел из дома до истечения ночного режима, то ночной режим выключится и заблокируется, установится значение 3 и метод deactivate не запустится, что не позволит повторно запустить метод deactivate, когда истечет время ночного режима.
Настройка объекта DivanHomeMode
Я использую эти методы в объекте DivanHomeMode.
В методе activate, объекта DivanHomeMode добавил код, который активирует ночной режим, если я пришел в промежутке времени с 00:00 до 09:00.
В методе deactivate, объекта DivanHomeMode добавил код, который, при уходе из дома, запустит метод deactivate ночного режима.
В методе modeChanged, объекта DivanHomeMode добавил код, который, при изменении значении в свойстве active, сообщает: Я дома\Не дома\Я сплю.
Настройка Ночного режима в Меню управления
Общий вид настройки Ночного режима в Меню управления.
1) Создал блок выключатель ночного режима, там будут значения 0 и 1.
2) Создал блок radiobox и назвал "Блокировка ночного режима" и привязал к свойству Mode. Здесь будут значения 2 и 3.
Значение 2 - разблокировка ночного режима выключена
Значение 3 - блокировка ночного режима включена
На этом настройка закончена.
Москва, Россия