DivanX10

<<< Back

Блог чайника. Блокировка ночного режима.

Блог чайника для чайника. Уверен на 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 - блокировка ночного режима включена

На этом настройка закончена.

Discuss (0) (0)

See also:
2019-10-27 Пылесос Xiaomi Mi Robot Vacuum
2019-10-21 Блог чайника. Простое устройство. Выключатель.
2019-10-12 Blockly. Вариант 2 - Адаптивный "Ночной режим"
2019-10-12 Blockly. Вариант 1 - Если я ушел из дома, а "Ночной режим" еще не выключен
2019-10-11 Blockly. Режим "Кто-то дома" | "Дома никого нет" | "Дома спят"
2019-10-08 Blockly. Рабочий/выходной/отпуск - немного укоротил сборку кода в блоках
2019-10-07 Blockly. Создаем сценарии рабочий/выходной/отпуск для нестандартного рабочего графика
2019-10-12 Blockly. Мои блоки - месяц
2019-10-12 Blockly. Мои блоки - дни недели

Москва, Россия