а нет сцены новостей
Как реализовать 3 состояния для одного выключателя?
Модератор: immortal
- vitosmaxim80sad145
- Сообщения: 148
- Зарегистрирован: Сб июл 07, 2018 12:48 am
- Откуда: Днепр
- Благодарил (а): 100 раз
- Поблагодарили: 1 раз
-
- Сообщения: 686
- Зарегистрирован: Ср май 03, 2017 7:41 pm
- Благодарил (а): 113 раз
- Поблагодарили: 107 раз
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Как реализовать 3 состояния для одного выключателя?
Это я и без вас знаю, что внизу привязывается свойство Ночной режим, но тут все иначе, в радиобоксе нам нужно, чтобы при переключении "По времени" или "На Закат" или наоборот, при установке времени значения вписывались в эти объекты
По времени
ThisComputer.NightModeStart
ThisComputer.NightModeEnd
Восход и закат солнца
ThisComputer.SunSetTime
ThisComputer.SunRiseTime
СпойлерПоказать
ThisComputer.NightModeStart
ThisComputer.NightModeEnd
Восход и закат солнца
ThisComputer.SunSetTime
ThisComputer.SunRiseTime
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Как реализовать 3 состояния для одного выключателя?
Выкладываю инструкцию, как настроить новости. Сам готовый объект Weather можете скачать здесь, вот так он будет выглядеть, тут есть и ночной режим. Пока я с ним разбираюсь, хочу понять как нужно настроить Ночной режим, чтобы можно было переключать по закату или по времени. Как разберусь, выложу инструкцию.
СпойлерПоказать
СпойлерПоказать
Код: Выделить всё
http://www.vesti.md/rss/news.xml
СпойлерПоказать
Код: Выделить всё
$Msn=(gg("Mainsity.Say_news"));
if ($Msn=='свежие новости') {
$data=SQLSelectOne("SELECT * FROM rss_items ORDER BY ADDED DESC LIMIT 1");
//вариант с фильтром по каналу: $data=SQLSelectOne("SELECT * FROM rss_items WHERE CHANNEL_ID=5 ORDER BY ADDED DESC LIMIT 1"); //вместо 5 нужный ID канала
$news_text=$data['BODY']; // текст новости
$news_header=$data['TITLE']; // заголовок
setGlobal('Mainsity.eventsTitle',$news_header);
setGlobal('Mainsity.eventsNews',$news_text);
$status="";
$tm=(gg("Mainsity.Say_news_text"));
if ($tm=='Заголовок') {
$status.=(''.$news_header.' ');
} elseif ($tm=='Новость') {
$status.=(''.$news_text.' ');
} else{
$status.=(''.$news_header.'. '.$news_text.'. ');
}
say($status,5);
}
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Как реализовать 3 состояния для одного выключателя?
Вроде бы разобрался, сделал так и не много переделал меню, чтобы в боковом меню было красиво. Теперь если выбирать "по закату", то ночной режим включится по закату, если выбираем "по времени", то включится по указанному времени. Но почему-то если я выберу по закату, то ночной режим по времени все равно сработает, что я делаю не так? Вот ниже мои действия.
Создаем в подобъекте "NightMode" свойство "mode", где будут значения 1 или 2
Значение=1 - по времени
Значение=2 - по закату
В "Меню управления" настраиваем меню "Ночного режима" и привязываем к свойству "mode" подобъекта "NightMode"
В методе "modeChanged" подобъекта "DarknessMode" мы добавляем код, который при активации проверит код и если значение=2, то сработает сценарии
Вариант кода в блокли
Вариант кода в PHP
Осталось сделать сценарии "Вычисляем восход и заход солнца" и в CRON настроить на запуск сценария раз в сутки в 00:00. Данный сценарии позволит вычислить восход и заход солнца, который внесет данные в ThisComputer.SunSetTime и ThisComputer.SunRiseTime
Код для сценария "Вычисляем восход и заход солнца"
СпойлерПоказать
Значение=1 - по времени
Значение=2 - по закату
СпойлерПоказать
СпойлерПоказать
СпойлерПоказать
СпойлерПоказать
Код: Выделить всё
if (getGlobal("DarknessMode.active") == 1 && getGlobal('NightMode.mode') == 2) {
callMethod('NightMode.activate');
} else if (getGlobal("DarknessMode.active") == 0 && getGlobal('NightMode.mode') == 2) {
callMethod('NightMode.deactivate');
}
СпойлерПоказать
Код: Выделить всё
$sun_info = date_sun_info(time(), 46.984, 28.8358);
foreach ($sun_info as $key => $val) {
if ($key == 'sunrise') {
$sunrise = $val;
setGlobal('ThisComputer.SunRiseTime',date("H:i", $sunrise));
}
if ($key == 'sunset') {
$sunset = $val;
$day_length = $sunset - $sunrise;
setGlobal('ThisComputer.SunSetTime',date("H:i", $sunset));}}
Последний раз редактировалось Divan Пн окт 14, 2019 12:30 am, всего редактировалось 1 раз.
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
-
- Сообщения: 1557
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: Как реализовать 3 состояния для одного выключателя?
Очень странный способ включать Ночной режим при включение Тёмного времени суток...Divan писал(а): ↑Вс окт 13, 2019 11:23 pm
Вариант кода в PHPКод: Выделить всё
if (getGlobal("DarknessMode.active") == 1 && getGlobal('NightMode.mode') == 2) { callMethod('NightMode.activate'); } else if (getGlobal("DarknessMode.active") == 0 && getGlobal('NightMode.mode') == 2) { callMethod('NightMode.deactivate'); }
Правильный способ - зайти в onNewMinute объекта ClockChime, найти там код, который включает/выключает Ночной режим по времени и там вместо TimeIs('20:00') поставить условие если режим По времени, то TimeIs(наше время), если По закату, то TimeIs(gg('SunRiseTime'))
Аналогично для выключения - вместо TimeIs('08:00') своё время или время рассвета
Время, которое выбирается в меню, тоже надо где-то хранить
Если из всего массива нужны только sunset и sunrise, то можно не перебирать все элементы массива, а ссылаться на них сразуDivan писал(а): ↑Вс окт 13, 2019 11:23 pmОсталось сделать сценарии "Вычисляем восход и заход солнца" и в CRON настроить на запуск сценария раз в сутки в 00:00. Данный сценарии позволит вычислить восход и заход солнца, который внесет данные в ThisComputer.SunSetTime и ThisComputer.SunRiseTimeКод для сценария "Вычисляем восход и заход солнца"СпойлерПоказать06 - восход и заход солнца.JPG
03 - создаем сценарии Вычисляем восход и заход солнца.JPGКод: Выделить всё
$sun_info = date_sun_info(time(), 46.984, 28.8358); foreach ($sun_info as $key => $val) { if ($key == 'sunrise') { $sunrise = $val; setGlobal('ThisComputer.SunRiseTime',date("H:i", $sunrise)); } if ($key == 'sunset') { $sunset = $val; $day_length = $sunset - $sunrise; setGlobal('ThisComputer.SunSetTime',date("H:i", $sunset));}}
$sun_info['sunset']
Но это ладно - а вот координаты Кишинёва вам посчитают совершенно неправильное время заката/рассвета
-
- Сообщения: 2088
- Зарегистрирован: Пт апр 07, 2017 12:20 pm
- Благодарил (а): 313 раз
- Поблагодарили: 459 раз
Re: Как реализовать 3 состояния для одного выключателя?
это ты еще никого нет в блокли не смотрел
в курилке все гадаем когда жинка автора скалкой приголубит
в курилке все гадаем когда жинка автора скалкой приголубит
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
- Divan
- Сообщения: 859
- Зарегистрирован: Пн июл 08, 2019 5:04 pm
- Благодарил (а): 117 раз
- Поблагодарили: 280 раз
Re: Как реализовать 3 состояния для одного выключателя?
про Кишинёв , мой косяк. Можете, если не трудно написать правильный код для заката и восхода солнца? Если я в методе onNewMinute в коде ночного режима пропишу правило, чтобы срабатывал, если у night mode стоит значение 1, это будет работать?
"logrus", когда жинка автора скалкой приголубит - иной раз мне вас не понять, может вам понятно, но мне лично не ясно что вы этим хотите сказать. Потом здесь на форуме новичкам никто подробно не разжевывает, а я стараюсь разобраться, понять и помочь таким же новичкам, как и я. Вы так и не ответили на мой вопрос, как решать проблему в одну строку, даже не ответили мне в личку. Игнор!?
"logrus", когда жинка автора скалкой приголубит - иной раз мне вас не понять, может вам понятно, но мне лично не ясно что вы этим хотите сказать. Потом здесь на форуме новичкам никто подробно не разжевывает, а я стараюсь разобраться, понять и помочь таким же новичкам, как и я. Вы так и не ответили на мой вопрос, как решать проблему в одну строку, даже не ответили мне в личку. Игнор!?
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
-
- Сообщения: 1557
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 574 раза
Re: Как реализовать 3 состояния для одного выключателя?
В onNewMinute вместо того что есть сейчас прописывается примерно такой код:
Код: Выделить всё
if (timeIs(gg('NightModeStart'))) {
callMethod('NightMode.activate');
} elseif (timeIs(gg('NightModeEnd'))) {
callMethod('NightMode.deactivate');
}
Далее нам надо заполнить эти 2 свойства
В сценарий Hourly (он выполняется каждый час) пишем следующее
Код: Выделить всё
$h=(int)date('G',time());
if ($h==3) {
$sun_info = date_sun_info(time(), 55.75, 37.62); //Примерно координаты Москвы
setGlobal('SunRiseTime',date("H:i", $sun_info['sunrise']));
setGlobal('SunSetTime',date("H:i", $sun_info['sunset']));
if (gg('NightMode.mode')==2) {
setGlobal('NightModeEnd',date("H:i", $sun_info['sunrise']));
setGlobal('NightModeStart ',date("H:i", $sun_info['sunset']));
}
}
Ну и там, где редактируется Режим, надо привязать свойства NightModeStart и NightModeEnd к нашим часикам
На самом деле новичкам подробно разжевывают и не один раз... Просто каждый новичок (почти каждый) считает что его проблема уникальна, поэтому даже не пытается поискать решение на форуме, а сразу открывает новую тему со своей проблемой и форум загромождается постоянными повторами одного и того же... А люди все занятые, повторять одно и тоже не особо интересно, в конце концов если человек ленится потратить своё время на поиск, то почему ты должен тратить своё время и писать одно и тоже? Но это так - не претензия лично к вам, просто мысли вслухDivan писал(а): ↑Пн окт 14, 2019 2:42 am"logrus", когда жинка автора скалкой приголубит - иной раз мне вас не понять, может вам понятно, но мне лично не ясно что вы этим хотите сказать. Потом здесь на форуме новичкам никто подробно не разжевывает, а я стараюсь разобраться, понять и помочь таким же новичкам, как и я. Вы так и не ответили на мой вопрос, как решать проблему в одну строку, даже не ответили мне в личку. Игнор!?
- Рейтинг: 1.16%
- vitosmaxim80sad145
- Сообщения: 148
- Зарегистрирован: Сб июл 07, 2018 12:48 am
- Откуда: Днепр
- Благодарил (а): 100 раз
- Поблагодарили: 1 раз
Re: Как реализовать 3 состояния для одного выключателя?
СПАСИБО ЗА ПОМОЩЬ
Последний раз редактировалось vitosmaxim80sad145 Чт апр 02, 2020 11:09 pm, всего редактировалось 1 раз.