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

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm

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

Сообщение 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');
}
Вложения
20190907_195347.jpg
20190907_195347.jpg (255.14 КБ) 3215 просмотров
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Jilber
Сообщения: 719
Зарегистрирован: Ср май 03, 2017 7:41 pm

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

Сообщение 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.
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm

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

Сообщение 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'));
}
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
SmoKE_xDDD
Сообщения: 816
Зарегистрирован: Ср апр 17, 2019 5:00 pm
Откуда: Нижний Новгород

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

Сообщение 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');
}
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm

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

Сообщение Divan »

Я все в blockly собираю :oops:, вот он такой код и предоставляет. По поводу очистки таймера я учту :D .
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Jilber
Сообщения: 719
Зарегистрирован: Ср май 03, 2017 7:41 pm

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

Сообщение 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 КБ) 3157 просмотров
Всё, понял. Эту строку надо было вставить внутрь таймера:

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

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);
 }
Всем спс за помощь. :-)
fandaymon
Сообщения: 1576
Зарегистрирован: Сб янв 13, 2018 5:00 pm

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

Сообщение 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;
}
Jilber
Сообщения: 719
Зарегистрирован: Ср май 03, 2017 7:41 pm

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

Сообщение Jilber »

Т.е. строка clearTimeOut("KitchenLightOffTimer"); лишняя ?
Аватара пользователя
SmoKE_xDDD
Сообщения: 816
Зарегистрирован: Ср апр 17, 2019 5:00 pm
Откуда: Нижний Новгород

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

Сообщение SmoKE_xDDD »

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