[Сценарий] Функция Рабочий/Выходной день
Re: [Сценарий] Функция Рабочий/Выходной день
xor, у меня тоже один в один вопрос, управлять будильником для начала.
подскажи свой метод как в итоге ты это реализовал.
спасибо.
подскажи свой метод как в итоге ты это реализовал.
спасибо.
- xor
- Сообщения: 2041
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 286 раз
- Поблагодарили: 629 раз
Re: [Сценарий] Функция Рабочий/Выходной день
у меня компиляция ряда постов:
сделал свою функцию weekDay, которая возвращает 0 - выходной,1 - рабочий
она - на основе производственного календаря, похожая есть в app_calendar, но там мне не нравится совершенно не читаемое Перенесенный рабочий день, кмк, совершенно не информативное
СпойлерПоказать
Код: Выделить всё
//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
СпойлерПоказать
Код: Выделить всё
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 раза.
- Рейтинг: 2.33%
win10 connect https://connect.smartliving.ru/profile/303
-
- Сообщения: 1555
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: [Сценарий] Функция Рабочий/Выходной день
А в чём не информативность?! Все дни в календаре делятся на 4 категории
1. Рабочие - пн/пт
2. Выходные - сб/вс
3. Празничные, выпадающие на рабочие и соответственно делающие рабочий день выходным
4. Перенесенный рабочий, делающий выходной день рабочим
- xor
- Сообщения: 2041
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 286 раз
- Поблагодарили: 629 раз
Re: [Сценарий] Функция Рабочий/Выходной день
посмотрите 8 мая и 11 июня - они у меня в календаре отображаются как Перенесенный рабочий день((
в первом случае - рабочий,
во втором - выходной.
с точки зрения будильника как на это смотреть?
ps. глупость написал - 11 июня - рабочий день(
вот с сайта календаря
Получается, что и сокращенный и перенесенный рабочий день -- в штатном календаре называются одинаково Перенесенный рабочий день, мне это не понравилосьt - тип дня: 1 - выходной день, 2 - рабочий и сокращенный (может быть использован для любого дня недели), 3 - рабочий день (суббота/воскресенье)
суббота и воскресенье считаются выходными, если нет тегов day с атрибутом t=2 и t=3 за этот день
win10 connect https://connect.smartliving.ru/profile/303
-
- Сообщения: 1555
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: [Сценарий] Функция Рабочий/Выходной день
В штатном это в смысле в модуле МДМ? Странно, я вроде специально этот случай разбирал... Так-то у меня календарь другой, но вроде Максим (webms) не жаловался. Я посмотрю
-
- Сообщения: 2087
- Зарегистрирован: Пт апр 07, 2017 12:20 pm
- Благодарил (а): 313 раз
- Поблагодарили: 458 раз
Re: [Сценарий] Функция Рабочий/Выходной день
я жаловался и это так из первоисточника подтягивает
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
-
- Сообщения: 1555
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: [Сценарий] Функция Рабочий/Выходной день
Похоже за это время поменялся тип перенесенных дней. Т.е. в этом году не отрабатываете на выходных?Logrus писал(а): ↑Ср май 08, 2019 12:08 amя жаловался и это так из первоисточника подтягивает
Сделал pull request с исправлением
- xor
- Сообщения: 2041
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 286 раз
- Поблагодарили: 629 раз
Re: [Сценарий] Функция Рабочий/Выходной день
там, кмк, с 13 года формат не менялся(fandaymon писал(а): ↑Ср май 08, 2019 12:50 pmПохоже за это время поменялся тип перенесенных дней. Т.е. в этом году не отрабатываете на выходных?Logrus писал(а): ↑Ср май 08, 2019 12:08 amя жаловался и это так из первоисточника подтягивает
Сделал pull request с исправлением
win10 connect https://connect.smartliving.ru/profile/303
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
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
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: [Сценарий] Функция Рабочий/Выходной день
Вот только тут есть одно но, а если в выходной я не дома, уехал на дачу или у меня отпуск и я улетел, то при таком сценарии система будет считать, что я на работе. Как тогда быть?
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB