Страница 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 собираю

, вот он такой код и предоставляет. По поводу очистки таймера я учту

.
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'); срабатывает не после таймера, а сразу. Так и должно быть ?

- История.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"); лишняя ?
Да