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

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

Модератор: immortal

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

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

Сообщение Divan » Сб сен 07, 2019 7:54 pm

Набросал код, попробуйте этот вариант
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 КБ) 2768 просмотров
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Jilber
Сообщения: 686
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 113 раз
Поблагодарили: 107 раз

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

Сообщение Jilber » Сб сен 07, 2019 8:03 pm

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

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
Благодарил (а): 117 раз
Поблагодарили: 280 раз

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

Сообщение 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'));
}
За это сообщение автора Divan поблагодарили (всего 2):
SmoKE_xDDD (Сб сен 07, 2019 8:37 pm) • Jilber (Сб сен 07, 2019 9:54 pm)
Рейтинг: 2.33%
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
SmoKE_xDDD
Сообщения: 816
Зарегистрирован: Ср апр 17, 2019 5:00 pm
Откуда: Нижний Новгород
Благодарил (а): 110 раз
Поблагодарили: 899 раз

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

Сообщение SmoKE_xDDD » Сб сен 07, 2019 8:36 pm

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');
}
За это сообщение автора SmoKE_xDDD поблагодарил:
Jilber (Сб сен 07, 2019 9:54 pm)
Рейтинг: 1.16%
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm
Благодарил (а): 117 раз
Поблагодарили: 280 раз

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

Сообщение Divan » Сб сен 07, 2019 8:44 pm

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

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

Сообщение Jilber » Сб сен 07, 2019 9:28 pm

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

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

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);
 }
Всем спс за помощь. :-)
За это сообщение автора Jilber поблагодарил:
Divan (Сб сен 07, 2019 10:38 pm)
Рейтинг: 1.16%
fandaymon
Сообщения: 1554
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

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

Сообщение fandaymon » Сб сен 07, 2019 11:52 pm

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;
}
За это сообщение автора fandaymon поблагодарил:
Jilber (Вт сен 10, 2019 6:30 pm)
Рейтинг: 1.16%
Jilber
Сообщения: 686
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 113 раз
Поблагодарили: 107 раз

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

Сообщение Jilber » Вс сен 08, 2019 1:15 am

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

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

Сообщение SmoKE_xDDD » Вс сен 08, 2019 1:58 pm

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