[Сценарий] Функция Рабочий/Выходной день
Re: [Сценарий] Функция Рабочий/Выходной день
xor, у меня тоже один в один вопрос, управлять будильником для начала.
подскажи свой метод как в итоге ты это реализовал.
спасибо.
подскажи свой метод как в итоге ты это реализовал.
спасибо.
Re: [Сценарий] Функция Рабочий/Выходной день
у меня компиляция ряда постов:usolie писал(а): Пн апр 29, 2019 2:22 pm xor, у меня тоже один в один вопрос, управлять будильником для начала.
подскажи свой метод как в итоге ты это реализовал.
спасибо.
сделал свою функцию weekDay, которая возвращает 0 - выходной,1 - рабочий
она - на основе производственного календаря, похожая есть в app_calendar, но там мне не нравится совершенно не читаемое Перенесенный рабочий день, кмк, совершенно не информативное
SPOILERSPOILER_SHOW
Код: Выделить всё
//0 - выходной,1 - рабочий
function weekDay($date = null) {
if(!isset($date)) $date = time();
$this_year = (int) date('Y', $date);
//debmes(' >>>date '.date('Y-m-d',$date));
//Загружаем если год меняется
$calend = gg('productionCalendar.value');
$order = array("\r\n", "\n", "\r", "<",">" );
$newstr = str_replace($order, " ", $calend);
$pos = strpos( $newstr, 'calendar year='.'"'.$this_year.'"');
if($pos===false){
//Загружаем производственный календарь
$productionCalendar = @file_get_contents('http://xmlcalendar.ru/data/ru/' . $this_year . '/calendar.xml');
}
if ($productionCalendar) { //Если прочитали без ошибок
sg('productionCalendar.value', $productionCalendar); //Запишем на всякий случай))
} else { //Если не прочиталось
$productionCalendar = gg('productionCalendar.value'); // Возьмем ранее загруженный календарь
}
//Проверяем сегодняшний день по производственному календарю (рабочий или нет)
$weekDay = -1;
$this_date = date('m.d', $date);
$calend = new SimpleXMLElement($productionCalendar);
foreach ($calend->days->day as $day) {
$type = $day->attributes()->t; //тип дня: 1 - выходной день, 2 - короткий день, 3 - рабочий день (суббота/воскресен)
$CalDate = $day->attributes()->d; //дата
if ($this_date == $CalDate) {
//debmes(' >>>'.$this_date.' type of day='.$type);
if ($type == 1) { //выходной
$weekDay = 0;
} elseif ($type == 2) {//Короткий день
$weekDay = 1;
} elseif ($type == 3) { //Перенесенный рабочий
$weekDay = 1;
}
}
}
//Если в производственном календаре ничего не нашлось
if ($weekDay == -1) {
if (date('w', $date) == 0 || date('w', $date) == 6) {
$weekDay = 0;
} else {
$weekDay = 1;
}
}
return $weekDay;
} Будильник у меня - класс, в нём есть объект AlarmWork -- будильник для будней, у него есть метод Action
SPOILERSPOILER_SHOW
Код: Выделить всё
if (gg('ThisComputer.WorkDay')){
$vl=gg('ThisComputer.VolumeLevel'); // запомним текущий уровень громкости
callMethod("ThisComputer.VolumeLevelChanged",array("VALUE"=>100)); //временно увеличим громкость до максимума
playSound('[all-Sounds.ru]ku-ka-re-ku-petuha'); //алярм
if(gg('AlarmWork.message')){
$msg = gg('AlarmWork.message');
}else{
$msg = 'Это будильник рабочих будней!';
}
setTimeOut('tAlarmWork',"say('".$msg."',5);",3); // произнесем фразу побудки
setTimeOut('tAlarmWork1',"cm('ThisComputer.VolumeLevelChanged',array('VALUE'=>".$vl."));",10); //вернем уровень громкости
brLinkCommand('pro_ch_plus');//тв вкл
setTimeOut('tAlarmWork2','brLinkCommand("pro_vol_mute");brLinkCommand("pro_sel_hdmi1");',10);//без звука, камера на крыльце
}ps/ поправил код функции weekDay
Код: Выделить всё
} elseif ($type == 3) { // рабочий сб/вс
$weekDay = 1;
}
Последний раз редактировалось xor Вт май 07, 2019 10:30 pm, всего редактировалось 2 раза.
win10 connect https://connect.smartliving.ru/profile/303
Re: [Сценарий] Функция Рабочий/Выходной день
А в чём не информативность?! Все дни в календаре делятся на 4 категорииxor писал(а): Пн апр 29, 2019 10:45 pm
сделал свою функцию weekDay, которая возвращает 0 - выходной,1 - рабочий
она - на основе производственного календаря, похожая есть в app_calendar, но там мне не нравится совершенно не читаемое Перенесенный рабочий день, кмк, совершенно не информативное
1. Рабочие - пн/пт
2. Выходные - сб/вс
3. Празничные, выпадающие на рабочие и соответственно делающие рабочий день выходным
4. Перенесенный рабочий, делающий выходной день рабочим
Re: [Сценарий] Функция Рабочий/Выходной день
посмотрите 8 мая и 11 июня - они у меня в календаре отображаются как Перенесенный рабочий день((fandaymon писал(а): Вт май 07, 2019 8:51 pmА в чём не информативность?! Все дни в календаре делятся на 4 категорииxor писал(а): Пн апр 29, 2019 10:45 pm
сделал свою функцию weekDay, которая возвращает 0 - выходной,1 - рабочий
она - на основе производственного календаря, похожая есть в app_calendar, но там мне не нравится совершенно не читаемое Перенесенный рабочий день, кмк, совершенно не информативное
1. Рабочие - пн/пт
2. Выходные - сб/вс
3. Празничные, выпадающие на рабочие и соответственно делающие рабочий день выходным
4. Перенесенный рабочий, делающий выходной день рабочим
в первом случае - рабочий,
во втором - выходной.
с точки зрения будильника как на это смотреть?
ps. глупость написал - 11 июня - рабочий день(
вот с сайта календаря
Получается, что и сокращенный и перенесенный рабочий день -- в штатном календаре называются одинаково Перенесенный рабочий день, мне это не понравилосьt - тип дня: 1 - выходной день, 2 - рабочий и сокращенный (может быть использован для любого дня недели), 3 - рабочий день (суббота/воскресенье)
суббота и воскресенье считаются выходными, если нет тегов day с атрибутом t=2 и t=3 за этот день
win10 connect https://connect.smartliving.ru/profile/303
Re: [Сценарий] Функция Рабочий/Выходной день
В штатном это в смысле в модуле МДМ? Странно, я вроде специально этот случай разбирал... Так-то у меня календарь другой, но вроде Максим (webms) не жаловался. Я посмотрюxor писал(а): Вт май 07, 2019 9:07 pm
Получается, что и сокращенный и перенесенный рабочий день -- в штатном календаре называются одинаково Перенесенный рабочий день, мне это не понравилось
Re: [Сценарий] Функция Рабочий/Выходной день
я жаловался и это так из первоисточника подтягиваетfandaymon писал(а): Вт май 07, 2019 10:51 pmВ штатном это в смысле в модуле МДМ? Странно, я вроде специально этот случай разбирал... Так-то у меня календарь другой, но вроде Максим (webms) не жаловался. Я посмотрюxor писал(а): Вт май 07, 2019 9:07 pm
Получается, что и сокращенный и перенесенный рабочий день -- в штатном календаре называются одинаково Перенесенный рабочий день, мне это не понравилось
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Re: [Сценарий] Функция Рабочий/Выходной день
Похоже за это время поменялся тип перенесенных дней. Т.е. в этом году не отрабатываете на выходных?Logrus писал(а): Ср май 08, 2019 12:08 amя жаловался и это так из первоисточника подтягиваетfandaymon писал(а): Вт май 07, 2019 10:51 pmВ штатном это в смысле в модуле МДМ? Странно, я вроде специально этот случай разбирал... Так-то у меня календарь другой, но вроде Максим (webms) не жаловался. Я посмотрюxor писал(а): Вт май 07, 2019 9:07 pm
Получается, что и сокращенный и перенесенный рабочий день -- в штатном календаре называются одинаково Перенесенный рабочий день, мне это не понравилось
Сделал pull request с исправлением
Re: [Сценарий] Функция Рабочий/Выходной день
там, кмк, с 13 года формат не менялся(fandaymon писал(а): Ср май 08, 2019 12:50 pmПохоже за это время поменялся тип перенесенных дней. Т.е. в этом году не отрабатываете на выходных?Logrus писал(а): Ср май 08, 2019 12:08 amя жаловался и это так из первоисточника подтягиваетfandaymon писал(а): Вт май 07, 2019 10:51 pmВ штатном это в смысле в модуле МДМ? Странно, я вроде специально этот случай разбирал... Так-то у меня календарь другой, но вроде Максим (webms) не жаловался. Я посмотрюxor писал(а): Вт май 07, 2019 9:07 pm
Получается, что и сокращенный и перенесенный рабочий день -- в штатном календаре называются одинаково Перенесенный рабочий день, мне это не понравилось
Сделал pull request с исправлением
win10 connect https://connect.smartliving.ru/profile/303
Re: [Сценарий] Функция Рабочий/Выходной день
Я смотрю, что здесь сценарии отрабатывают только выходные, это суббота и воскресенье, а что делать, если плавающий график, сутки через трое, 2/2, 2/2/3, вахтовый метод? Я пока нарисовал план сценария, привязка будет к телефону или к брелку iTag через bluetooth, система видит, что я дома или меня нет дома.
1) Создать свойство выходной или рабочий день в объекте владельца телефона или брелка.
2) Если меня нет после определенного времени, допустим укажем интервал времени с того момента, как вы ушли на работу. Тут все индивидуально, кто-то на работу уходит в 5-10 утра, кто-то в ночь уходит, но суть такова, ушли на работу, если через от 30 до 60 минут вас нет дома, значит вы ушли на работу, тогда это рабочий день, если через час вы дома, значит выходной день.
3) Если выходной, то в свойстве "Выходной день" оъекта пользователя будет стоять 1, если рабочий день, то в свойстве "Рабочий день" объекта пользователя будет стоять 1, а в свойстве "Выходной день" объекта пользователя установится 0 или наоборот.
4) В модуле Мои блоки для Blockly создать два метода Выходной день и Рабочий день, таким образом, при создании сценария через blockly, там будут блоки Выходной день и Рабочий день.
5) Создаем свой сценарии для сменного графика работы
1) Создать свойство выходной или рабочий день в объекте владельца телефона или брелка.
2) Если меня нет после определенного времени, допустим укажем интервал времени с того момента, как вы ушли на работу. Тут все индивидуально, кто-то на работу уходит в 5-10 утра, кто-то в ночь уходит, но суть такова, ушли на работу, если через от 30 до 60 минут вас нет дома, значит вы ушли на работу, тогда это рабочий день, если через час вы дома, значит выходной день.
3) Если выходной, то в свойстве "Выходной день" оъекта пользователя будет стоять 1, если рабочий день, то в свойстве "Рабочий день" объекта пользователя будет стоять 1, а в свойстве "Выходной день" объекта пользователя установится 0 или наоборот.
4) В модуле Мои блоки для Blockly создать два метода Выходной день и Рабочий день, таким образом, при создании сценария через blockly, там будут блоки Выходной день и Рабочий день.
5) Создаем свой сценарии для сменного графика работы
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Re: [Сценарий] Функция Рабочий/Выходной день
Вот только тут есть одно но, а если в выходной я не дома, уехал на дачу или у меня отпуск и я улетел, то при таком сценарии система будет считать, что я на работе. Как тогда быть?
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB