а нет сцены новостей
Как реализовать 3 состояния для одного выключателя?
Модератор: immortal
- vitosmaxim80sad145
- Сообщения: 148
- Зарегистрирован: Сб июл 07, 2018 12:48 am
- Откуда: Днепр
Re: Как реализовать 3 состояния для одного выключателя?
Re: Как реализовать 3 состояния для одного выключателя?
Там же ниже привязывается нужное свойство.Divan писал(а): Вс окт 13, 2019 1:25 pm Нужна помощь, как сделать, чтобы при выборе функции, можно было выставлять время для Ночного режима или для заката?SPOILERSPOILER_SHOWПоле выбора radio.JPG
Re: Как реализовать 3 состояния для одного выключателя?
Это я и без вас знаю, что внизу привязывается свойство Ночной режим, но тут все иначе, в радиобоксе нам нужно, чтобы при переключении "По времени" или "На Закат" или наоборот, при установке времени значения вписывались в эти объекты
По времени
ThisComputer.NightModeStart
ThisComputer.NightModeEnd
Восход и закат солнца
ThisComputer.SunSetTime
ThisComputer.SunRiseTime
SPOILERSPOILER_SHOW
ThisComputer.NightModeStart
ThisComputer.NightModeEnd
Восход и закат солнца
ThisComputer.SunSetTime
ThisComputer.SunRiseTime
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Re: Как реализовать 3 состояния для одного выключателя?
Выкладываю инструкцию, как настроить новости. Сам готовый объект Weather можете скачать здесь, вот так он будет выглядеть, тут есть и ночной режим. Пока я с ним разбираюсь, хочу понять как нужно настроить Ночной режим, чтобы можно было переключать по закату или по времени. Как разберусь, выложу инструкцию.
SPOILERSPOILER_SHOW
SPOILERSPOILER_SHOW
Код: Выделить всё
http://www.vesti.md/rss/news.xml
SPOILERSPOILER_SHOW
Код: Выделить всё
$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
Re: Как реализовать 3 состояния для одного выключателя?
Вроде бы разобрался, сделал так и не много переделал меню, чтобы в боковом меню было красиво. Теперь если выбирать "по закату", то ночной режим включится по закату, если выбираем "по времени", то включится по указанному времени. Но почему-то если я выберу по закату, то ночной режим по времени все равно сработает, что я делаю не так? Вот ниже мои действия.
Создаем в подобъекте "NightMode" свойство "mode", где будут значения 1 или 2
Значение=1 - по времени
Значение=2 - по закату
В "Меню управления" настраиваем меню "Ночного режима" и привязываем к свойству "mode" подобъекта "NightMode"
В методе "modeChanged" подобъекта "DarknessMode" мы добавляем код, который при активации проверит код и если значение=2, то сработает сценарии
Вариант кода в блокли
Вариант кода в PHP
Осталось сделать сценарии "Вычисляем восход и заход солнца" и в CRON настроить на запуск сценария раз в сутки в 00:00. Данный сценарии позволит вычислить восход и заход солнца, который внесет данные в ThisComputer.SunSetTime и ThisComputer.SunRiseTime
Код для сценария "Вычисляем восход и заход солнца"
SPOILERSPOILER_SHOW
Значение=1 - по времени
Значение=2 - по закату
SPOILERSPOILER_SHOW
SPOILERSPOILER_SHOW
SPOILERSPOILER_SHOW
SPOILERSPOILER_SHOW
Код: Выделить всё
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');
}
SPOILERSPOILER_SHOW
Код: Выделить всё
$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
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Код для сценария "Вычисляем восход и заход солнца"SPOILERSPOILER_SHOW06 - восход и заход солнца.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']
Но это ладно - а вот координаты Кишинёва вам посчитают совершенно неправильное время заката/рассвета
Re: Как реализовать 3 состояния для одного выключателя?
в курилке все гадаем когда жинка автора скалкой приголубит
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Re: Как реализовать 3 состояния для одного выключателя?
про Кишинёв
, мой косяк. Можете, если не трудно написать правильный код для заката и восхода солнца? Если я в методе onNewMinute в коде ночного режима пропишу правило, чтобы срабатывал, если у night mode стоит значение 1, это будет работать?
"logrus", когда жинка автора скалкой приголубит - иной раз мне вас не понять, может вам понятно, но мне лично не ясно что вы этим хотите сказать. Потом здесь на форуме новичкам никто подробно не разжевывает, а я стараюсь разобраться, понять и помочь таким же новичкам, как и я. Вы так и не ответили на мой вопрос, как решать проблему в одну строку, даже не ответили мне в личку. Игнор!?
"logrus", когда жинка автора скалкой приголубит - иной раз мне вас не понять, может вам понятно, но мне лично не ясно что вы этим хотите сказать. Потом здесь на форуме новичкам никто подробно не разжевывает, а я стараюсь разобраться, понять и помочь таким же новичкам, как и я. Вы так и не ответили на мой вопрос, как решать проблему в одну строку, даже не ответили мне в личку. Игнор!?
Xpenology DSM 6.2.2 + Ubuntu Server 18.10 + Majordomo + MariaDB
Re: Как реализовать 3 состояния для одного выключателя?
В onNewMinute вместо того что есть сейчас прописывается примерно такой код:Divan писал(а): Пн окт 14, 2019 2:42 am про Кишинёв, мой косяк. Можете, если не трудно написать правильный код для заката и восхода солнца? Если я в методе onNewMinute в коде ночного режима пропишу правило, чтобы срабатывал, если у night mode стоит значение 1, это будет работать?
Код: Выделить всё
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", когда жинка автора скалкой приголубит - иной раз мне вас не понять, может вам понятно, но мне лично не ясно что вы этим хотите сказать. Потом здесь на форуме новичкам никто подробно не разжевывает, а я стараюсь разобраться, понять и помочь таким же новичкам, как и я. Вы так и не ответили на мой вопрос, как решать проблему в одну строку, даже не ответили мне в личку. Игнор!?
- vitosmaxim80sad145
- Сообщения: 148
- Зарегистрирован: Сб июл 07, 2018 12:48 am
- Откуда: Днепр
Re: Как реализовать 3 состояния для одного выключателя?
СПАСИБО ЗА ПОМОЩЬ
Последний раз редактировалось vitosmaxim80sad145 Чт апр 02, 2020 11:09 pm, всего редактировалось 1 раз.