0
Answered

Выполнение команды в определенное время

Дмитрий Марков 5 years ago updated by Vladimir Ovchinnikov (expert) 5 years ago 17


Добрый день!

Как правильно написать код, чтобы команда выполнялась в определенное время на сервере?

На какой тэг нужно подисаться?

GOOD, I'M SATISFIED
Satisfaction mark by Дмитрий Марков 5 years ago

Каждую минуту запускать скрипт проверки даты и времени?

Answered

На сервере есть специальная сущность "расписания":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

А через скрипт разве нельзя?

А есть попроще команда, например планировщику "Shedule 1" поменять время старта и время финиша? Такая схема рабочая: IR.GetScheduler("Schedule 1").Start = "XX.XX.XX"; ?

В демопроекте использованы команды для корректировки времени расписания. Не совсем понятен Ваш вопрос про упрощение, уточните пожалуйста.

В демопроекте дан хороший пример. Но хотелось бы еще примеры или мануал, например, поменять время старта Шедулера без использования панели. Грубо говоря задача следующая: Говорим "Алиса, заведи будильник на 7 утра". Как обрабатывать команды от Алисы, уже знаю, а как менять командами время Шедулера, не понятно.

Т.е. имеем Шедулер, например, для будильников, но нужно просто менять его время срабатывания

Дмитрий, за изменение времени в серверном проекте отвечает этот кусок кода:

  this.Read = function(in_schedule, in_NewData) { 
    EventEdit = in_schedule.GetEvent(in_NewData[1]);
    EventEdit.Start = Math.floor(new Date(in_NewData[0]) / 1000);
    EventEdit.End = Math.floor(new Date(in_NewData[2]) / 1000);
    EventEdit.Enabled = (in_NewData[3] == 1);
    EventEdit.Done();  // event update
  } 

"Забирайте" время из своей переменной и выставляйте как вам удобно, без использования панели.

С какими затруднениями вы столкнулись при этом?

Александр, я в курсе, что этот кусок изменяет время, но он не будет работать, если его вставить в код как есть, т.к. он выдран из функции. Вы можете рабочий вариант попросить к ваших программистов?

+1

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() можно подставить имя и получить доступ к нужному расписанию.

Рады, что всё получилось.

Оставим ссылку с примером для тех, кто с таким же вопросом найдёт это обсуждение.