Страница 2 из 2

Re: Настройка элемента Radiobox

Добавлено: Сб сен 07, 2019 7:54 pm
Divan
Набросал код, попробуйте этот вариант
if (getGlobal('DarknessMode'.'.'.'active') == '1' && getGlobal('Lamp_Kitchen'.'.'.'status') == '2') {
callMethod('Lamp_Kitchen'.'.'.'turnOn');
$timerCode=<<<EOT
callMethod('Lamp_Kitchen'.'.'.'turnOff');
EOT;
setTimeOut('KitchenLightOffTimer', $timerCode, (int)('60'));
} else if (getGlobal('Lamp_Kitchen'.'.'.'status') == '0') {
setGlobal('Lamp_Kitchen'.'.'.'status', '2');
}

Re: Настройка элемента Radiobox

Добавлено: Сб сен 07, 2019 8:03 pm
Jilber

Код: Выделить всё

else if (getGlobal('Lamp_Kitchen'.'.'.'status') == '0') {
 setGlobal('Lamp_Kitchen'.'.'.'status', '2');
 }
Это здесь лишнее. Если условие (getGlobal('DarknessMode'.'.'.'active') == '1' && getGlobal('Lamp_Kitchen'.'.'.'status') == '2') не срабатывает, то ничего делать не нужно. А если оно срабатывает, то после таймера нужно просто вернуть "Lamp_Kitchen.status" в 2.

Re: Настройка элемента Radiobox

Добавлено: Сб сен 07, 2019 8:24 pm
Divan
Если это лишнее, то делаем так, в таймер вставляем код, который поменяет статус авто на 2

Код: Выделить всё

if (getGlobal('DarknessMode'.'.'.'active') == '1' && getGlobal('Lamp_Kitchen'.'.'.'status') == '2') {
  callMethod('Lamp_Kitchen'.'.'.'turnOn');
  $timerCode=<<<EOT
    callMethod('Lamp_Kitchen'.'.'.'turnOff');
    setGlobal('Lamp_Kitchen'.'.'.'status', '2');
EOT;
  setTimeOut('KitchenLightOffTimer', $timerCode, (int)('60'));
}

Re: Настройка элемента Radiobox

Добавлено: Сб сен 07, 2019 8:36 pm
SmoKE_xDDD
Divan писал(а): Сб сен 07, 2019 8:24 pm Если это лишнее, то делаем так, в таймер вставляем код, который поменяет статус авто на 2

Код: Выделить всё

if (getGlobal('DarknessMode'.'.'.'active') == '1' && getGlobal('Lamp_Kitchen'.'.'.'status') == '2') {
  callMethod('Lamp_Kitchen'.'.'.'turnOn');
  $timerCode=<<<EOT
    callMethod('Lamp_Kitchen'.'.'.'turnOff');
    setGlobal('Lamp_Kitchen'.'.'.'status', '2');
EOT;
  setTimeOut('KitchenLightOffTimer', $timerCode, (int)('60'));
}
Круто, что помогаешь, но лучше не учить других плохому коду =)
Таймеры лучше чистить, а бы что.
(int) совсем не обязателен, функция все равно проверит, что там.

Код: Выделить всё

if(gg('DarknessMode.active') == '1' && gg('Lamp_Kitchen.status') == '2') {
  callMethod('Lamp_Kitchen.turnOn');
  ClearTimeOut("KitchenLightOffTimer");
  setTimeOut('KitchenLightOffTimer', "callMethod('Lamp_Kitchen.turnOff');", '60');
  ClearTimeOut("KitchenLightOffTimer_status");
  setTimeOut('KitchenLightOffTimer_status', "sg('Lamp_Kitchen.status', '2');", '60');
}

Re: Настройка элемента Radiobox

Добавлено: Сб сен 07, 2019 8:44 pm
Divan
Я все в blockly собираю :oops:, вот он такой код и предоставляет. По поводу очистки таймера я учту :D .

Re: Настройка элемента Radiobox

Добавлено: Сб сен 07, 2019 9:28 pm
Jilber
SmoKE_xDDD писал(а): Сб сен 07, 2019 8:36 pm

Код: Выделить всё

if(gg('DarknessMode.active') == '1' && gg('Lamp_Kitchen.status') == '2') {
  callMethod('Lamp_Kitchen.turnOn');
  ClearTimeOut("KitchenLightOffTimer");
  setTimeOut('KitchenLightOffTimer', "callMethod('Lamp_Kitchen.turnOff');", '60');
  ClearTimeOut("KitchenLightOffTimer_status");
  setTimeOut('KitchenLightOffTimer_status', "sg('Lamp_Kitchen.status', '2');", '60');
}
Второй таймер ('KitchenLightOffTimer_status') мне не нужен, нужно просто выставить 'Lamp_Kitchen.status' в 2.
Вот что у меня сейчас:

Код: Выделить всё

if(gg('DarknessMode.active') == '1' && gg('Lamp_Kitchen.status') == '2') {
 callMethod('Lamp_Kitchen.turnOn');
 clearTimeOut("KitchenLightOffTimer");
 SetTimeOut("KitchenLightOffTimer","callMethod('Lamp_Kitchen.turnOff');",60);
 sg('Lamp_Kitchen.status', '2');  //эта строка не срабатывает
 }
Сейчас посмотрел историю. Что-то у меня складывается впечатление, что строка sg('Lamp_Kitchen.status', '2'); срабатывает не после таймера, а сразу. Так и должно быть ?
SPOILERSPOILER_SHOW
История.jpg
История.jpg (140.1 КБ) 3153 просмотра
Всё, понял. Эту строку надо было вставить внутрь таймера:

Код: Выделить всё

if(gg('DarknessMode.active') == '1' && gg('Lamp_Kitchen.status') == '2') {
 callMethod('Lamp_Kitchen.turnOn');
 clearTimeOut("KitchenLightOffTimer");
 SetTimeOut("KitchenLightOffTimer","callMethod('Lamp_Kitchen.turnOff');sg('Lamp_Kitchen.status', '2');",60);
 }
Всем спс за помощь. :-)

Re: Настройка элемента Radiobox

Добавлено: Сб сен 07, 2019 11:52 pm
fandaymon
SmoKE_xDDD писал(а): Сб сен 07, 2019 8:36 pm Круто, что помогаешь, но лучше не учить других плохому коду =)
Таймеры лучше чистить, а бы что.
Не надо их чистить, так как в методе установки таймера и так стоит очистить таймер. Делать 2 раза одно и тоже действие это как раз и есть плохой код...

Код: Выделить всё

function setTimeOut($title, $commands, $timeout)
{
    startMeasure('setTimeout');
    clearTimeOut($title);
    $res = addScheduledJob($title, $commands, time() + $timeout);
    endMeasure('setTimeout');
    return $res;
}

Re: Настройка элемента Radiobox

Добавлено: Вс сен 08, 2019 1:15 am
Jilber
Т.е. строка clearTimeOut("KitchenLightOffTimer"); лишняя ?

Re: Настройка элемента Radiobox

Добавлено: Вс сен 08, 2019 1:58 pm
SmoKE_xDDD
Jilber писал(а): Вс сен 08, 2019 1:15 am Т.е. строка clearTimeOut("KitchenLightOffTimer"); лишняя ?
Да