DivanX10

<<< Назад

Blockly. Создаем сценарии рабочий/выходной/отпуск для нестандартного рабочего графика

Статья расчитана для новичков и для тех, кто не знает код PHP, но хочет научиться. Blockly может помочь вам это реализовать. Здесь я расскажу, как создать в Blockly сценарии для нестандартного рабочего графика, таких графиков работы, как 1/3 или 2/2/3.

Возникла настроить систему под нестандартный график работы. У меня график 2/2/3. В планировщике и в Cron это реализовать нельзя, а хочется, чтобы система понимала какой у вас сегодня день рабочий\выходной или отпуск\больничный. Это нужно, если хотите чтобы ваши устройства в рабочие дние не включались или наоборот включались, все настраивается на ваше усмотрение. У меня, как пример, реализовано так, в рабочие дни шторы открываются за 30 минут до моего пробуждения, а в выходные дни шторы не открываются, только если включу компьютер. Также, если выходной день, то при выключении компьютера, сетевой фильтр не выключается, а в рабочие дни сетевой фильтр выключается, включается только USB для зарядки телефона. Итак, настройку системы под свой график я реализовал через Blockly. Что нужно сделать?

1) Создаем подобъект Day в объекте Timer
Day

2) Создаем в подобъекте Day свойства: Понедельник\Вторник\Среда\Четверг\Пятница\Суббота\Воскресенье
Свойства Day

3) В объекте Timer создаем метод onNewDay (если его нет)

4) В методе onNewDay, подобъекта Day вставляем код, он будет смотреть на объект ThisComputer и его свойство DayOfWeekTXT (после обновлении MD это свойство может поменяться)

 if (getGlobal('ThisComputer.DayOfWeekTXT') == 'Monday') {
  setGlobal('Day.Понедельник', '1');
} else if (getGlobal('ThisComputer.DayOfWeekTXT') != 'Monday') {
  setGlobal('Day.Понедельник', '0');
}
if (getGlobal('ThisComputer.DayOfWeekTXT') == 'Tuesday') {
  setGlobal('Day.Вторник', '1');
} else if (getGlobal('ThisComputer.DayOfWeekTXT') != 'Tuesday') {
  setGlobal('Day.Вторник', '0');
}
if (getGlobal('ThisComputer.DayOfWeekTXT') == 'Wednesday') {
  setGlobal('Day.Среда', '1');
} else if (getGlobal('ThisComputer.DayOfWeekTXT') != 'Wednesday') {
  setGlobal('Day.Среда', '0');
}
if (getGlobal('ThisComputer.DayOfWeekTXT') == 'Thursday') {
  setGlobal('Day.Четверг', '1');
} else if (getGlobal('ThisComputer.DayOfWeekTXT') != 'Thursday') {
  setGlobal('Day.Четверг', '0');
}
if (getGlobal('ThisComputer.DayOfWeekTXT') == 'Friday') {
  setGlobal('Day.Пятница', '1');
} else if (getGlobal('ThisComputer.DayOfWeekTXT') != 'Friday') {
  setGlobal('Day.Пятница', '0');
}
if (getGlobal('ThisComputer.DayOfWeekTXT') == 'Saturday') {
  setGlobal('Day.Суббота', '1');
} else if (getGlobal('ThisComputer.DayOfWeekTXT') != 'Saturday') {
  setGlobal('Day.Суббота', '0');
}
if (getGlobal('ThisComputer.DayOfWeekTXT') == 'Sunday') {
  setGlobal('Day.Воскресенье', '1');
} else if (getGlobal('ThisComputer.DayOfWeekTXT') != 'Sunday') {
  setGlobal('Day.Воскресенье', '0');
}

5) Создаем подобъект User(указываем свое имя) в объекте Users
Подобъект User объекта Users

6) Создаем в подобъекте User(выбираем свое имя) свойства WorkingDay\WeekendDay\Week
Свойства объекта Users

7) Устанавливаем модуль CRON если не стоит
8) В Cron создаем задачу Week 0 или 1 и прописываем код, чтобы раз в неделю он менял в свойстве Week значение с 0 на 1 или наоборот с 0 на 1, а если будет стоять значение 2, то запуск кода не будет работать
Cron - задача Week
Cron - задача Week 2

Код

if (getGlobal("Divan.Week") == 0 || getGlobal("Divan.Week") == 1) {
  if (getGlobal("Divan.Week") == 0) {
    setGlobal('Divan.Week', '1');
  } else if (getGlobal("Divan.Week") == 1) {
    setGlobal('Divan.Week', '0');
  }
}

9) В Мои блоки создаем дни недели и неделю

10) В сценариях, в blockly это будет выглядеть так

11) Создаем сценарии, я его назвал "Мой график 2/2/3" и поставил галочку "Выполнять периодически", по вашему желанию такой сценарии можно запускать в Crone.
08 - создаем сценарии для гибкого графика

12) Blockly - начальная и общая схема блоков с описанием

13) Blockly - создаем первый блок для первой недели

14) Blockly - дублируем блоки

15) Blockly - схема блоков первой недели. В блоках выполнить, где WorkingDay\WeekendDay проставляете значения 1 или 0 в зависимости вашего графика

16) Blockly - схема блоков второй недели. В блоках выполнить, где WorkingDay\WeekendDay проставляете значения 1 или 0 в зависимости вашего графика

17) Blockly - схема блоков отпуск\больничный. В блоках выполнить, где WorkingDay\WeekendDay, в WorkingDay проставляете значение 0, а в WeekendDay проставляете значение 1

18) В итоге у нас получится вот такая длинная схема блоков

19) Если настроено все верно, то в подобъекте User объекта Users значения свойств должны меняться

20) Создаем меню (тут каждый делает по своему), это нужно для того, чтобы остановить цикл Week 0 или 1 если уходите в отпуск или заболели, тогда будет работать сценарии по типу отпуск\выходной.


Обсуждение (2) (2)

Смотрите так же:
26.03.2020 Дизайн сцена "Вид на землю"
26.03.2020 Дизайн сцена "Оранжевый бриз"
14.03.2020 Дизайн сцена для управления кондиционером
01.03.2020 Создаем сцену для пылесоса Xiaomi Mi Robot Vacuum
27.10.2019 Пылесос Xiaomi Mi Robot Vacuum
21.10.2019 Блог чайника. Простое устройство. Выключатель.
21.10.2019 Блог чайника. Блокировка ночного режима.
12.10.2019 Blockly. Вариант 2 - Адаптивный "Ночной режим"
12.10.2019 Blockly. Вариант 1 - Если я ушел из дома, а "Ночной режим" еще не выключен
11.10.2019 Blockly. Режим "Кто-то дома" | "Дома никого нет" | "Дома спят"
08.10.2019 Blockly. Рабочий/выходной/отпуск - немного укоротил сборку кода в блоках
12.10.2019 Blockly. Мои блоки - месяц
12.10.2019 Blockly. Мои блоки - дни недели

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