[Сценарий] Функция Рабочий/Выходной день

Не требует установки программ или изменения файлов

Модераторы: immortal, newz20

usolie
Сообщения: 2
Зарегистрирован: Пн апр 29, 2019 2:16 pm
Благодарил (а): 0
Поблагодарили: 0

Re: [Сценарий] Функция Рабочий/Выходной день

Сообщение usolie » Пн апр 29, 2019 2:22 pm

xor, у меня тоже один в один вопрос, управлять будильником для начала.
подскажи свой метод как в итоге ты это реализовал.
спасибо.
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: [Сценарий] Функция Рабочий/Выходной день

Сообщение xor » Пн апр 29, 2019 10:45 pm

usolie писал(а):
Пн апр 29, 2019 2:22 pm
xor, у меня тоже один в один вопрос, управлять будильником для начала.
подскажи свой метод как в итоге ты это реализовал.
спасибо.
у меня компиляция ряда постов:
сделал свою функцию 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;
} 
функция вызывается в методе onNewDay и заполняет свойство ThisComputer.WorkDay

Будильник у меня - класс, в нём есть объект 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 раза.
За это сообщение автора xor поблагодарили (всего 2):
lanket (Ср май 08, 2019 12:13 am) • IrisKo (Вс мар 08, 2020 3:43 pm)
Рейтинг: 2.33%
fandaymon
Сообщения: 1554
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: [Сценарий] Функция Рабочий/Выходной день

Сообщение fandaymon » Вт май 07, 2019 8:51 pm

xor писал(а):
Пн апр 29, 2019 10:45 pm

сделал свою функцию weekDay, которая возвращает 0 - выходной,1 - рабочий
она - на основе производственного календаря, похожая есть в app_calendar, но там мне не нравится совершенно не читаемое Перенесенный рабочий день, кмк, совершенно не информативное
А в чём не информативность?! Все дни в календаре делятся на 4 категории

1. Рабочие - пн/пт
2. Выходные - сб/вс
3. Празничные, выпадающие на рабочие и соответственно делающие рабочий день выходным
4. Перенесенный рабочий, делающий выходной день рабочим
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: [Сценарий] Функция Рабочий/Выходной день

Сообщение xor » Вт май 07, 2019 9:07 pm

fandaymon писал(а):
Вт май 07, 2019 8:51 pm
xor писал(а):
Пн апр 29, 2019 10:45 pm

сделал свою функцию weekDay, которая возвращает 0 - выходной,1 - рабочий
она - на основе производственного календаря, похожая есть в app_calendar, но там мне не нравится совершенно не читаемое Перенесенный рабочий день, кмк, совершенно не информативное
А в чём не информативность?! Все дни в календаре делятся на 4 категории

1. Рабочие - пн/пт
2. Выходные - сб/вс
3. Празничные, выпадающие на рабочие и соответственно делающие рабочий день выходным
4. Перенесенный рабочий, делающий выходной день рабочим
посмотрите 8 мая и 11 июня - они у меня в календаре отображаются как Перенесенный рабочий день((
в первом случае - рабочий,
во втором - выходной.
с точки зрения будильника как на это смотреть?

ps. глупость написал - 11 июня - рабочий день(
вот с сайта календаря
t - тип дня: 1 - выходной день, 2 - рабочий и сокращенный (может быть использован для любого дня недели), 3 - рабочий день (суббота/воскресенье)
суббота и воскресенье считаются выходными, если нет тегов day с атрибутом t=2 и t=3 за этот день
Получается, что и сокращенный и перенесенный рабочий день -- в штатном календаре называются одинаково Перенесенный рабочий день, мне это не понравилось
fandaymon
Сообщения: 1554
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: [Сценарий] Функция Рабочий/Выходной день

Сообщение fandaymon » Вт май 07, 2019 10:51 pm

xor писал(а):
Вт май 07, 2019 9:07 pm

Получается, что и сокращенный и перенесенный рабочий день -- в штатном календаре называются одинаково Перенесенный рабочий день, мне это не понравилось
В штатном это в смысле в модуле МДМ? Странно, я вроде специально этот случай разбирал... Так-то у меня календарь другой, но вроде Максим (webms) не жаловался. Я посмотрю
Logrus
Сообщения: 2084
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: [Сценарий] Функция Рабочий/Выходной день

Сообщение Logrus » Ср май 08, 2019 12:08 am

fandaymon писал(а):
Вт май 07, 2019 10:51 pm
xor писал(а):
Вт май 07, 2019 9:07 pm

Получается, что и сокращенный и перенесенный рабочий день -- в штатном календаре называются одинаково Перенесенный рабочий день, мне это не понравилось
В штатном это в смысле в модуле МДМ? Странно, я вроде специально этот случай разбирал... Так-то у меня календарь другой, но вроде Максим (webms) не жаловался. Я посмотрю
я жаловался и это так из первоисточника подтягивает
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
fandaymon
Сообщения: 1554
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: [Сценарий] Функция Рабочий/Выходной день

Сообщение fandaymon » Ср май 08, 2019 12:50 pm

Logrus писал(а):
Ср май 08, 2019 12:08 am
fandaymon писал(а):
Вт май 07, 2019 10:51 pm
xor писал(а):
Вт май 07, 2019 9:07 pm

Получается, что и сокращенный и перенесенный рабочий день -- в штатном календаре называются одинаково Перенесенный рабочий день, мне это не понравилось
В штатном это в смысле в модуле МДМ? Странно, я вроде специально этот случай разбирал... Так-то у меня календарь другой, но вроде Максим (webms) не жаловался. Я посмотрю
я жаловался и это так из первоисточника подтягивает
Похоже за это время поменялся тип перенесенных дней. Т.е. в этом году не отрабатываете на выходных?

Сделал pull request с исправлением
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: [Сценарий] Функция Рабочий/Выходной день

Сообщение xor » Ср май 08, 2019 1:50 pm

fandaymon писал(а):
Ср май 08, 2019 12:50 pm
Logrus писал(а):
Ср май 08, 2019 12:08 am
fandaymon писал(а):
Вт май 07, 2019 10:51 pm
xor писал(а):
Вт май 07, 2019 9:07 pm

Получается, что и сокращенный и перенесенный рабочий день -- в штатном календаре называются одинаково Перенесенный рабочий день, мне это не понравилось
В штатном это в смысле в модуле МДМ? Странно, я вроде специально этот случай разбирал... Так-то у меня календарь другой, но вроде Максим (webms) не жаловался. Я посмотрю
я жаловался и это так из первоисточника подтягивает
Похоже за это время поменялся тип перенесенных дней. Т.е. в этом году не отрабатываете на выходных?

Сделал pull request с исправлением
там, кмк, с 13 года формат не менялся(
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

Re: [Сценарий] Функция Рабочий/Выходной день

Сообщение Divan » Ср сен 25, 2019 11:28 am

Я смотрю, что здесь сценарии отрабатывают только выходные, это суббота и воскресенье, а что делать, если плавающий график, сутки через трое, 2/2, 2/2/3, вахтовый метод? Я пока нарисовал план сценария, привязка будет к телефону или к брелку iTag через bluetooth, система видит, что я дома или меня нет дома.

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: [Сценарий] Функция Рабочий/Выходной день

Сообщение Divan » Ср сен 25, 2019 1:35 pm

Вот только тут есть одно но, а если в выходной я не дома, уехал на дачу или у меня отпуск и я улетел, то при таком сценарии система будет считать, что я на работе. Как тогда быть?
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Ответить