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

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

Модератор: immortal

Yashalta
Сообщения: 296
Зарегистрирован: Вс май 20, 2018 9:27 am
Благодарил (а): 147 раз
Поблагодарили: 21 раз

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

Сообщение Yashalta » Пт фев 08, 2019 12:14 am

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

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

Сообщение adzam » Пт фев 08, 2019 7:34 am

нужно выбрать не выключатель а радио
1.png
1.png (25.94 КБ) 2404 просмотра
а дальше кодом примерно так
СпойлерПоказать
//включить Алису
$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");
}

}
За это сообщение автора adzam поблагодарил:
Yashalta (Пт фев 08, 2019 12:04 pm)
Рейтинг: 1.23%
Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
Yashalta
Сообщения: 296
Зарегистрирован: Вс май 20, 2018 9:27 am
Благодарил (а): 147 раз
Поблагодарили: 21 раз

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

Сообщение Yashalta » Пт фев 08, 2019 12:18 pm

adzam писал(а):
Пт фев 08, 2019 7:34 am
...
а дальше кодом примерно так
СпойлерПоказать
//включить Алису
$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
Сообщения: 579
Зарегистрирован: Сб дек 08, 2012 10:28 pm
Откуда: Кишинев
Благодарил (а): 16 раз
Поблагодарили: 130 раз

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

Сообщение adzam » Пт фев 08, 2019 2:46 pm

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

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

Сообщение Yashalta » Пт фев 08, 2019 7:25 pm

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

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

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

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

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

Сообщение adzam » Пт фев 08, 2019 10:22 pm

Проверить очень просто.
Добавляешь в скрипт 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>"; //если прошла команда то пишет вкл
}

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

Если что то могу прислать мои рабочие скрипты а там переделаешь под себя если что не так.
За это сообщение автора adzam поблагодарил:
Yashalta (Пт фев 08, 2019 10:45 pm)
Рейтинг: 1.23%
Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
Аватара пользователя
vitosmaxim80sad145
Сообщения: 106
Зарегистрирован: Сб июл 07, 2018 12:48 am
Откуда: Днепр
Благодарил (а): 68 раз
Поблагодарили: 0

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

Сообщение vitosmaxim80sad145 » Сб сен 14, 2019 11:42 pm

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

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

Сообщение Divan » Ср сен 25, 2019 4:59 pm

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

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

Сообщение vitosmaxim80sad145 » Сб окт 05, 2019 11:57 pm

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

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

Сообщение Divan » Пн окт 07, 2019 7:19 pm

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