[Модуль] Cron (cron)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm

Re: [Модуль] Cron (cron)

Сообщение Divan »

Ну я так и понял, у меня так и будет работать, раз в неделю Week будет менять значение с 1 на 0 или наоборот. Я пока настрочил такой код, но если можно написать короче и грамотнее, то покажите как нужно это написать, буду благодарен.

Код: Выделить всё

if (getGlobal("Divan.Week") == 0) {	//Если Week=0, то запускается сценарий "График работы 2-2-3: 2 выходных и 5 рабочих дней"
  if (getGlobal("Day.Понедельник") == 1) {			//По графику в понедельник у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Вторник") == 1) {		//По графику во вторник у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Среда") == 1) {			//По графику в среду у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Четверг") == 1) {		//По графику в четверг у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Пятница") == 1) {		//По графику в пятницу у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Суббота") == 1) {		//По графику в субботу у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Воскресенье") == 1) {	//По графику в воскресенье у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  }
  runScript('Оповещение, рабочий или выходной день', array());
} else if (getGlobal("Divan.Week") == 1) {	//Если Week=1, то запускается сценарий "График работы 2-2-3: 5 выходных и 2 рабочих дня"
  if (getGlobal("Day.Понедельник") == 1) {			//По графику в понедельник у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Вторник") == 1) {		//По графику во вторник у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Среда") == 1) {			//По графику в среду у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Четверг") == 1) {		//По графику в четверг у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Пятница") == 1) {		//По графику в пятницу у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Суббота") == 1) {		//По графику в субботу у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Воскресенье") == 1) {	//По графику в воскресенье у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0  			
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  }
  runScript('Оповещение, рабочий или выходной день', array());
}
Создал у объекта Divan свойства WeekendDay\WorkingDay\Week
SPOILERSPOILER_SHOW
Безымянный.jpg
Безымянный.jpg (30.04 КБ) 5857 просмотров
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
xor
Сообщения: 2044
Зарегистрирован: Сб ноя 22, 2014 8:45 pm

Re: [Модуль] Cron (cron)

Сообщение xor »

Divan писал(а): Пт окт 04, 2019 12:07 am Ну я так и понял, у меня так и будет работать, раз в неделю Week будет менять значение с 1 на 0 или наоборот. Я пока настрочил такой код, но если можно написать короче и грамотнее, то покажите как нужно это написать, буду благодарен.

Код: Выделить всё

if (getGlobal("Divan.Week") == 0) {	//Если Week=0, то запускается сценарий "График работы 2-2-3: 2 выходных и 5 рабочих дней"
  if (getGlobal("Day.Понедельник") == 1) {			//По графику в понедельник у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Вторник") == 1) {		//По графику во вторник у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Среда") == 1) {			//По графику в среду у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Четверг") == 1) {		//По графику в четверг у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Пятница") == 1) {		//По графику в пятницу у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Суббота") == 1) {		//По графику в субботу у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Воскресенье") == 1) {	//По графику в воскресенье у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  }
  runScript('Оповещение, рабочий или выходной день', array());
} else if (getGlobal("Divan.Week") == 1) {	//Если Week=1, то запускается сценарий "График работы 2-2-3: 5 выходных и 2 рабочих дня"
  if (getGlobal("Day.Понедельник") == 1) {			//По графику в понедельник у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Вторник") == 1) {		//По графику во вторник у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Среда") == 1) {			//По графику в среду у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Четверг") == 1) {		//По графику в четверг у меня рабочий день
    setGlobal('Divan.WorkingDay', '1');				//В рабочий день ставим 1
    setGlobal('Divan.WeekendDay', '0');				//В выходной день ставим 0
  } else if (getGlobal("Day.Пятница") == 1) {		//По графику в пятницу у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Суббота") == 1) {		//По графику в субботу у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  } else if (getGlobal("Day.Воскресенье") == 1) {	//По графику в воскресенье у меня выходной день
    setGlobal('Divan.WorkingDay', '0');				//В рабочий день ставим 0  			
    setGlobal('Divan.WeekendDay', '1');				//В выходной день ставим 1
  }
  runScript('Оповещение, рабочий или выходной день', array());
}
Создал у объекта Divan свойства WeekendDay\WorkingDay\Week
SPOILERSPOILER_SHOW
Безымянный.jpg
при чём тут модуль Крон?
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm

Re: [Модуль] Cron (cron)

Сообщение Divan »

Я хотел чтобы это работало в кроне, думал, что там есть такая возможность разбивать по неделям, а пока ждал ответа, я придумал такой вариант, но мне кажется, что он слишком запутанный, а через крон было бы проще.
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Logrus
Сообщения: 2113
Зарегистрирован: Пт апр 07, 2017 12:20 pm

Re: [Модуль] Cron (cron)

Сообщение Logrus »

xor писал(а): Пт окт 04, 2019 12:16 am при чём тут модуль Крон?
ну эту ветку же еще не заспамили портянками, при решении не относящихся к ней задач, которые решаются в одну строчку кода
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm

Re: [Модуль] Cron (cron)

Сообщение Divan »

а можете показать как написать код в одну строчку для графика 2/2/3? Разумеется это лучше обсудить в соответствующей ветке Функция рабочий/выходной день, я не программист и пишу код как могу.
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm

Re: [Модуль] Cron (cron)

Сообщение Divan »

Можно в крон добавить функцию разделение по неделям? Например запускать 2 или 3 неделю, а потом не запускать или запускать каждую вторую или третью неделю?
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
SmoKE_xDDD
Сообщения: 816
Зарегистрирован: Ср апр 17, 2019 5:00 pm
Откуда: Нижний Новгород

Re: [Модуль] Cron (cron)

Сообщение SmoKE_xDDD »

Divan писал(а): Пт окт 04, 2019 12:28 pm Можно в крон добавить функцию разделение по неделям? Например запускать 2 или 3 неделю, а потом не запускать или запускать каждую вторую или третью неделю?
Покапайтесь тут - https://crontab-generator.org/
Mixman
Сообщения: 16
Зарегистрирован: Чт авг 22, 2019 12:43 am

Re: [Модуль] Cron (cron)

Сообщение Mixman »

А как из метода кодом php можно включать и выключать задачу?
Скажем, в методе NobodyHomeMode.activate я хотел бы добавить код, который отключал бы определённое задание.
Например, по крону у меня каждые 5 минут делается снапшот с камер и распознаётся на наличие людей. Вот когда никого нет дома, то нужно деативировать эту задачу.
Аватара пользователя
Eraser
Сообщения: 1085
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Контактная информация:

Re: [Модуль] Cron (cron)

Сообщение Eraser »

Mixman писал(а): Вт ноя 19, 2019 4:01 pm А как из метода кодом php можно включать и выключать задачу?
Скажем, в методе NobodyHomeMode.activate я хотел бы добавить код, который отключал бы определённое задание.
Например, по крону у меня каждые 5 минут делается снапшот с камер и распознаётся на наличие людей. Вот когда никого нет дома, то нужно деативировать эту задачу.
sg("TaskName.Enable", 0); - выключить
sg("TaskName.Enable", 1); - включить
Connect ---- Telegram
ЮMoney для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
Mixman
Сообщения: 16
Зарегистрирован: Чт авг 22, 2019 12:43 am

Re: [Модуль] Cron (cron)

Сообщение Mixman »

Eraser писал(а): Вт ноя 19, 2019 4:16 pm
Mixman писал(а): Вт ноя 19, 2019 4:01 pm А как из метода кодом php можно включать и выключать задачу?
Скажем, в методе NobodyHomeMode.activate я хотел бы добавить код, который отключал бы определённое задание.
Например, по крону у меня каждые 5 минут делается снапшот с камер и распознаётся на наличие людей. Вот когда никого нет дома, то нужно деативировать эту задачу.
sg("TaskName.Enable", 0); - выключить
sg("TaskName.Enable", 1); - включить
Вместо TaskName можно использовать ID задачи? У меня некоторые имена задач на русском языке.
Ответить