Как реализовать 3 состояния для одного выключателя?

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

Модератор: immortal

Yashalta
Сообщения: 318
Зарегистрирован: Вс май 20, 2018 9:27 am

Как реализовать 3 состояния для одного выключателя?

Сообщение Yashalta »

Подскажите как реализовать как на картинке я про Вкл. Выкл. Авто?
Может где код или инструкция есть?
Вложения
Вопрос.png
Вопрос.png (58.68 КБ) 6949 просмотров
Аватара пользователя
adzam
Сообщения: 607
Зарегистрирован: Сб дек 08, 2012 10:28 pm
Откуда: Кишинев

Re: Как реализовать 3 состояния для одного выключателя?

Сообщение adzam »

нужно выбрать не выключатель а радио
1.png
1.png (25.94 КБ) 6937 просмотров
а дальше кодом примерно так
SPOILERSPOILER_SHOW
//включить Алису
$stm=gg("Mainsity.Alise");
$msn=gg("Mainsity.Say_news");

if ($stm=='откл'){
say('Я отключаюсь.',"1");
SQLExec("DELETE FROM safe_execs WHERE COMMAND LIKE '%sapi%' OR COMMAND LIKE'%play%'");//очищает очередь команд
getURL('http://127.0.0.1/rc/?command=vlc_close',"0");
// setGlobal("RadioSetting.On","0");
setGlobal("ThisComputer.minMsgLevel","10");
setGlobal("Mainsity.Alise_Led","0");
setGlobal('Mainsity.Say_time_led',"0");
setGlobal('Mainsity.Say_news_led',"0");
setGlobal('Mainsity.Say_weather_led',"0");
setGlobal('Mainsity.Say_news_led',"0");

} elseif ($stm=='авто'){
setGlobal("ThisComputer.minMsgLevel","5");
setGlobal("Mainsity.Alise_Led","1");
say('Включен автоматический режим сообщений.',"1");
callMethod("Mainsity.Alisa_auto");
if (gg("Mainsity.Say_time")!="откл"){
setGlobal('Mainsity.Say_time_led',"1");
}
if (($msn!="откл")||($msn!="свежие новости")){
setGlobal('Mainsity.Say_news_led',"1");
}
if (gg("Mainsity.Say_weather")!="откл"){
setGlobal('Mainsity.Say_weather_led',"1");
}
if (gg("Mainsity.Say_news")!="откл"){
setGlobal('Mainsity.Say_news_led',"1");
}

} elseif ($stm=='вкл'){
setGlobal("ThisComputer.minMsgLevel","0");
setGlobal("Mainsity.Alise_Led","2");
say('Я опять с Вами.',"1");
if (gg("Mainsity.Say_time")!="откл"){
setGlobal('Mainsity.Say_time_led',"1");
}
if (gg("Mainsity.Say_news")!="откл"){
setGlobal('Mainsity.Say_news_led',"1");
}
if (gg("Mainsity.Say_weather")!="откл"){
setGlobal('Mainsity.Say_weather_led',"1");
}
if (($msn!="откл")||($msn!="свежие новости")){
setGlobal('Mainsity.Say_news_led',"1");
}

}
Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
Yashalta
Сообщения: 318
Зарегистрирован: Вс май 20, 2018 9:27 am

Re: Как реализовать 3 состояния для одного выключателя?

Сообщение Yashalta »

adzam писал(а): Пт фев 08, 2019 7:34 am ...
а дальше кодом примерно так
SPOILERSPOILER_SHOW
//включить Алису
$stm=gg("Mainsity.Alise");
$msn=gg("Mainsity.Say_news");

if ($stm=='откл'){
say('Я отключаюсь.',"1");
SQLExec("DELETE FROM safe_execs WHERE COMMAND LIKE '%sapi%' OR COMMAND LIKE'%play%'");//очищает очередь команд
getURL('http://127.0.0.1/rc/?command=vlc_close',"0");
// setGlobal("RadioSetting.On","0");
setGlobal("ThisComputer.minMsgLevel","10");
setGlobal("Mainsity.Alise_Led","0");
setGlobal('Mainsity.Say_time_led',"0");
setGlobal('Mainsity.Say_news_led',"0");
setGlobal('Mainsity.Say_weather_led',"0");
setGlobal('Mainsity.Say_news_led',"0");

} elseif ($stm=='авто'){
setGlobal("ThisComputer.minMsgLevel","5");
setGlobal("Mainsity.Alise_Led","1");
say('Включен автоматический режим сообщений.',"1");
callMethod("Mainsity.Alisa_auto");
if (gg("Mainsity.Say_time")!="откл"){
setGlobal('Mainsity.Say_time_led',"1");
}
if (($msn!="откл")||($msn!="свежие новости")){
setGlobal('Mainsity.Say_news_led',"1");
}
if (gg("Mainsity.Say_weather")!="откл"){
setGlobal('Mainsity.Say_weather_led',"1");
}
if (gg("Mainsity.Say_news")!="откл"){
setGlobal('Mainsity.Say_news_led',"1");
}

} elseif ($stm=='вкл'){
setGlobal("ThisComputer.minMsgLevel","0");
setGlobal("Mainsity.Alise_Led","2");
say('Я опять с Вами.',"1");
if (gg("Mainsity.Say_time")!="откл"){
setGlobal('Mainsity.Say_time_led',"1");
}
if (gg("Mainsity.Say_news")!="откл"){
setGlobal('Mainsity.Say_news_led',"1");
}
if (gg("Mainsity.Say_weather")!="откл"){
setGlobal('Mainsity.Say_weather_led',"1");
}
if (($msn!="откл")||($msn!="свежие новости")){
setGlobal('Mainsity.Say_news_led',"1");
}

}
Я "привязался" к солнцу и включаю и выключаю свет во дворе в зависимости от того во сколько оно встало/село. И все прекрасно работает в автоматическом режиме! НО, хочу так же в ручном режиме иметь возможность отключение/включение света во дворе.
Я попробовал сделать код на подобие вашего но, в результате у меня ни чего не работает!
Не работает т.к. раньше свойство "Switch2.status" имело значение либо "1" или "0" а сейчас стало "Вклю.","Откл." и "Авто". Для ручного режима я создал новое свойство "Switch2.status_On_Off" которое имеет значение либо "1" или "0". Но, что то я делаю не правильно!

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

//Свет во дворе
$stm=gg("Switch2.status");

if ($stm=='откл'){
say('Свет во дворе отключен в ручном режиме!',"2");
setGlobal('Switch2.status_On_Off',"0");
} elseif ($stm=='авто'){
say('Свет во дворе в автоматическом режиме!.',"2");
 setGlobal('Switch2.status_On_Off',"Авто");
 if (timeIs(getGlobal('ThisComputer.Chicivil_beginTime'))) {
  // Начало утренних сумерек Через 20 минут выклется свет во дворе!
  SetTimeOut("lightOnTimer1","setGlobal('ThisComputer.svet_vo_dvore',0);",1200); // Устанавливает свойство ThisComputer.svet_vo_dvore с задержкой в 20 минут
  setTimeOut('myTimer2','runScript("Test_svet_vo_dvore");',1210); //скрипт включает/выключает уличное освещение в зависимости от свойства ThisComputer.svet_vo_dvore
  }
 if (timeIs(getGlobal('SunSetTime'))) {
  //Солнце заходит, начало сумерек. Через 20 минут вклется свет во дворе!
  SetTimeOut("lightOnTimer2","setGlobal('ThisComputer.svet_vo_dvore',1);",1200); // Устанавливает свойство ThisComputer.svet_vo_dvore с задержкой в 20 минут
  setTimeOut('myTimer4','runScript("Test_svet_vo_dvore");',1210); //скрипт включает/выключает уличное освещение в зависимости от свойства ThisComputer.svet_vo_dvore
  }
} elseif ($stm=='вкл'){
say('Свет во дворе включен в ручном режиме!',"1");
setGlobal('Switch2.status_On_Off',"1");
}
Аватара пользователя
adzam
Сообщения: 607
Зарегистрирован: Сб дек 08, 2012 10:28 pm
Откуда: Кишинев

Re: Как реализовать 3 состояния для одного выключателя?

Сообщение adzam »

У меня это сделано так и нормально работает
Безымянный.png
Безымянный.png (13.27 КБ) 6905 просмотров
По времени задаешь время, по закату берет из погоды рассвет и закат, либо в ручном режиме принудительно включаешь.
Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
Yashalta
Сообщения: 318
Зарегистрирован: Вс май 20, 2018 9:27 am

Re: Как реализовать 3 состояния для одного выключателя?

Сообщение Yashalta »

adzam писал(а): Пт фев 08, 2019 2:46 pm У меня это сделано так и нормально работает
Безымянный.png
По времени задаешь время, по закату берет из погоды рассвет и закат, либо в ручном режиме принудительно включаешь.
Спасибо за идею!
Но, я не понимаю почему у меня не работает этот простой скрипт!?!?!

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

//Свет во дворе
$stm=gg("Switch2.status");

if ($stm=='откл'){
say('Свет во дворе отключен в ручном режиме!',"2");
} elseif ($stm=='авто'){
say('Свет во дворе в автоматическом режиме!.',"2");
 } elseif ($stm=='вкл'){
say('Свет во дворе включен в ручном режиме!',"2");
}
Аватара пользователя
adzam
Сообщения: 607
Зарегистрирован: Сб дек 08, 2012 10:28 pm
Откуда: Кишинев

Re: Как реализовать 3 состояния для одного выключателя?

Сообщение adzam »

Проверить очень просто.
Добавляешь в скрипт esho и проверяешь построчно как отрабатывает скрипт

//Свет во дворе
$stm=gg("Switch2.status");
echo "<br>";echo "<br>";echo "<br>";echo "<br>";echo $stm;echo "<br>";//проверяешь если загрузилась переменная

if ($stm=='откл'){
say('Свет во дворе отключен в ручном режиме!',"2");
echo "откл";echo "<br>"; //если прошла команда то пишет откл
} elseif ($stm=='авто'){
say('Свет во дворе в автоматическом режиме!.',"2");
echo "авто";echo "<br>"; //если прошла команда то пишет авто
} elseif ($stm=='вкл'){
say('Свет во дворе включен в ручном режиме!',"2");
echo "вкл";echo "<br>"; //если прошла команда то пишет вкл
}

И сразу видишь где косяк.
Иногда не работает потому что в данных переключателя появляется пробел или до вкл или после вкл его не видно а скрипт не работает поэтому проверь .

Если что то могу прислать мои рабочие скрипты а там переделаешь под себя если что не так.
Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
Аватара пользователя
vitosmaxim80sad145
Сообщения: 148
Зарегистрирован: Сб июл 07, 2018 12:48 am
Откуда: Днепр

Re: Как реализовать 3 состояния для одного выключателя?

Сообщение vitosmaxim80sad145 »

А неподскажеш как сделать 3кнопки проговаривания нахождения пользователей в какой они локации говорить -неговорить и говорить только днём
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm

Re: Как реализовать 3 состояния для одного выключателя?

Сообщение Divan »

adzam писал(а): Пт фев 08, 2019 2:46 pm У меня это сделано так и нормально работает
Безымянный.png
По времени задаешь время, по закату берет из погоды рассвет и закат, либо в ручном режиме принудительно включаешь.
У вас к этим строкам все привязано? Как вы настроили свое меню по настройке ночного времени? Покажите настойки на скриншотах как вы настроили меню управления для ночного режима.
SPOILERSPOILER_SHOW
Установка времени.JPG
Установка времени.JPG (19.79 КБ) 6003 просмотра
Закат-рассвет.JPG
Закат-рассвет.JPG (16.88 КБ) 6003 просмотра
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Аватара пользователя
vitosmaxim80sad145
Сообщения: 148
Зарегистрирован: Сб июл 07, 2018 12:48 am
Откуда: Днепр

Re: Как реализовать 3 состояния для одного выключателя?

Сообщение vitosmaxim80sad145 »

adzam писал(а): Пт фев 08, 2019 2:46 pm У меня это сделано так и нормально работает
Безымянный.png
По времени задаешь время, по закату берет из погоды рассвет и закат, либо в ручном режиме принудительно включаешь.
А как себе такое сделать ? Не поделетесь
Аватара пользователя
Divan
Сообщения: 859
Зарегистрирован: Пн июл 08, 2019 5:04 pm

Re: Как реализовать 3 состояния для одного выключателя?

Сообщение Divan »

Я смотрю, что участник форума adzam тут уже не сидит, его страница в connect удалена, а жаль. Как сделать менюшку по закату и рассвету мне понятно, но как он, это сделал в HTML, было бы интересно знать.
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Ответить