0
Beantwoord
Выполнение команды в определенное время
Добрый день!
Как правильно написать код, чтобы команда выполнялась в определенное время на сервере?
На какой тэг нужно подисаться?
Customer support service by UserEcho
Каждую минуту запускать скрипт проверки даты и времени?
На сервере есть специальная сущность "расписания":https://dev.iridi.com/Editor_Server_Tools#Schedule._%D0%A0%D0%B0%D1%81%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F
А через скрипт разве нельзя?
Все есть в документации: https://dev.iridi.com/Demo_schedule_edit
Благодарю!
А есть попроще команда, например планировщику "Shedule 1" поменять время старта и время финиша? Такая схема рабочая: IR.GetScheduler("Schedule 1").Start = "XX.XX.XX"; ?
В демопроекте использованы команды для корректировки времени расписания. Не совсем понятен Ваш вопрос про упрощение, уточните пожалуйста.
В демопроекте дан хороший пример. Но хотелось бы еще примеры или мануал, например, поменять время старта Шедулера без использования панели. Грубо говоря задача следующая: Говорим "Алиса, заведи будильник на 7 утра". Как обрабатывать команды от Алисы, уже знаю, а как менять командами время Шедулера, не понятно.
Т.е. имеем Шедулер, например, для будильников, но нужно просто менять его время срабатывания
Дмитрий, за изменение времени в серверном проекте отвечает этот кусок кода:
"Забирайте" время из своей переменной и выставляйте как вам удобно, без использования панели.
С какими затруднениями вы столкнулись при этом?
Александр, я в курсе, что этот кусок изменяет время, но он не будет работать, если его вставить в код как есть, т.к. он выдран из функции. Вы можете рабочий вариант попросить к ваших программистов?
Schedule_edit_time.sirpz
IR.AddListener(IR.EVENT_START, 0 , function() {
eventEditName = "Air conditioner switching"; // variable to write the name of the schedule being changed
newTimeStart = "09:00:00"; // variable to record the start time of the schedule change
newTimeFinish = "16:00:00"; // variable to record the finish time of the schedule change
schedule = IR.GetScheduler("Schedule 1");
events = schedule.GetEvents();
for(i in events) {
name = events[i].Name; // event name
startTime = new Date(events[i].Start *1000); // event start date-time
finishTime = new Date(events[i].End * 1000); // event finish date-time
IR.Log("name event = " + name);
IR.Log("start time event = " + startTime);
IR.Log("finish time event = " + finishTime);
//setting the start time of the schedule
stringStartTime = startTime.toString();
oldTimeStart = stringStartTime.split(" ");
oldTimeStart[4] = newTimeStart;
newFulTimeStart = new Date(oldTimeStart.join(" "));
//setting the finish time of the schedule
stringFinishTime = finishTime.toString();
oldTimeFinish = stringStartTime.split(" ");
oldTimeFinish[4] = newTimeFinish;
newFulTimeFinish = new Date(oldTimeFinish.join(" "));
if (eventEditName == events[i].Name) {
events[i].Start = Math.floor(new Date(newFulTimeStart) / 1000);// event new start date-time
events[i].Finish = Math.floor(new Date(newTimeFinish) / 1000);// event new finish date-time
}
}
});
Благодарю! Это то, что нужно!
Подскажите, а можно сразу работать с нужным расписанием по имени, а не по индексу, чтобы не перебирать их все?
И дайте немного подробностей о .GetScheduler и .GetEvents()
Добрый день.
GetScheduler принимает только имя.
GetEvents ничего не принимает. Работать с ним так:
var sheduler = IR.GetScheduler("...");
var events = sheduler.GetEvents();
Спасибо за ответ!
Но уже разобралась, просто в скобки GetEvents() можно подставить имя и получить доступ к нужному расписанию.
Рады, что всё получилось.
Оставим ссылку с примером для тех, кто с таким же вопросом найдёт это обсуждение.