Управление поливом по расписанию

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

Модератор: immortal

Forth
Сообщения: 48
Зарегистрирован: Вс янв 13, 2019 4:37 pm
Благодарил (а): 39 раз
Поблагодарили: 0

Управление поливом по расписанию

Сообщение Forth » Пн фев 04, 2019 9:03 pm

Планирую для теплицы на даче применить капельный полив и орашение. Будет 3 крана с эл приводами включение и отображение состояния на сцене. Вопрос в следующем, как на сцене вывести информацию времени включения полива на день и как настроить, чтоб на сцене просто менять время включения? Допустим кран 1 включается каждый день в 06:00 и в 21:00 на 10 мин, кран 2 через день в 20:30 на 15 мин, а кран 3 каждую ночь через 2 часа на 5 минут с 22:00 до 05:00.
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Управление поливом по расписанию

Сообщение Chainik » Пн фев 04, 2019 10:28 pm

Forth писал(а):
Пн фев 04, 2019 9:03 pm
Планирую для теплицы на даче применить капельный полив и орашение. Будет 3 крана с эл приводами включение и отображение состояния на сцене. Вопрос в следующем, как на сцене вывести информацию времени включения полива на день и как настроить, чтоб на сцене просто менять время включения? Допустим кран 1 включается каждый день в 06:00 и в 21:00 на 10 мин, кран 2 через день в 20:30 на 15 мин, а кран 3 каждую ночь через 2 часа на 5 минут с 22:00 до 05:00.
С точки зрения логики код будет примерно такой (для простоты можно все "запихнуть" в "OnNewMinute"):

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

$day_num=(int)date('w');
//Для крана 1
if (timeIs('06:00') || timeIs('21:00')) {
cm('Кран_1.turnOn');
setTimeOut('myTimer_ Кран_1','cm("Кран_1.turnOff");',60*10);
}

//Для крана 2
if (Тут надо придумать условие, при котором кран включается через день, с ходу не придумал) {
//такое "не прокатывает", т.к. на следующей неделе дни недели будут уже четные   if ($day_num == "1" || $day_num == "3" || $day_num == "5" || $day_num == "0") {
if (timeIs('20:30')) {
cm('Кран_2.turnOn');
setTimeOut('myTimer_ Кран_2','cm("Кран_2.turnOff");',60*15);
}
}

//Для крана 3
if (timeIs('22:00') || timeIs('00:00') || timeIs('02:00') || timeIs('04:00')) {
cm('Кран_3.turnOn');
setTimeOut('myTimer_ Кран_3','cm("Кран_3.turnOff");',60*5);
}
Вместо "жесткого" прописанного времени должна быть переменная, которая получает свое значение из свойства. А свойство, в свою очередь, должно получать свое значение из соответствующего интерфейсного элемента.

По поводу интерфейса недавно человек похожую задачу решал (viewtopic.php?f=24&t=6071&start=15).
За это сообщение автора Chainik поблагодарил:
Forth (Вт фев 05, 2019 5:58 am)
Рейтинг: 1.16%
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Управление поливом по расписанию

Сообщение Logrus » Вт фев 05, 2019 12:23 am

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

$j = date('j', time());

if ($j%2 == 0) {
 //четные дни
} else {
 //не четные дни
}
За это сообщение автора Logrus поблагодарил:
Forth (Вт фев 05, 2019 5:58 am)
Рейтинг: 1.16%
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: Управление поливом по расписанию

Сообщение xor » Вт фев 05, 2019 7:53 am

Logrus писал(а):

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

$j = date('j', time());

if ($j%2 == 0) {
 //четные дни
} else {
 //не четные дни
}
С 31 на 1 будет два подряд нечётных((

Отправлено с моего Redmi 4X через Tapatalk

За это сообщение автора xor поблагодарил:
Forth (Вт фев 05, 2019 6:36 pm)
Рейтинг: 1.16%
JackOfShadows
Сообщения: 104
Зарегистрирован: Ср янв 09, 2019 8:37 pm
Благодарил (а): 23 раза
Поблагодарили: 26 раз

Re: Управление поливом по расписанию

Сообщение JackOfShadows » Вт фев 05, 2019 8:53 am

Функция мажордомо time() - время в timestamp.
Функция php strtotime - пересчёт в Unix timestamp (количество секунд с 1 января 1970 года)

То есть типа:

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

	unsigned long secsSince1900 = strtotime( time() );

	// Unix time starts on Jan 1 1970. In seconds, that's 2208988800:
	const unsigned long seventyYears = 2208988800UL;
	// subtract seventy years:
	unsigned long epoch = secsSince1900 - seventyYears;
	/// корректировка часового пояса
	epoch = epoch + GMT * 3600;

	uint32_t unix = epoch;
	uint32_t seconds = unix % 60;  /* Get seconds from unix */
	unix /= 60;                 /* Go to minutes */
	uint32_t minutes = unix % 60;  /* Get minutes */
	unix /= 60;                 /* Go to hours */
	uint32_t hours = unix % 24;    /* Get hours */
	unix /= 24;                 /* Go to days */
И анализируем unix на чёт/нечет.
За это сообщение автора JackOfShadows поблагодарил:
Forth (Вт фев 05, 2019 6:36 pm)
Рейтинг: 1.16%
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Управление поливом по расписанию

Сообщение Chainik » Вт фев 05, 2019 9:09 am

Еще можно попробовать, например, брать четные дни в четных неделях с начала года и нечетные -- в нечетных.

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

$week_num = date('W',strtotime(date("d.m.Y")));
if(($week_num % 2) == 0) {
if ($day_num == "2" || $day_num == "4" || $day_num == "6") {
if (timeIs('20:30')) {
//Команда на выполнение действия
}
} else {
if ($day_num == "1" || $day_num == "3" || $day_num == "5" || $day_num == "0") {
if (timeIs('20:30')) {
//Команда на выполнение действия
}
}
}
}
Думаю, идея понятна, но синтаксис надо проверять.
За это сообщение автора Chainik поблагодарил:
Forth (Вт фев 05, 2019 6:36 pm)
Рейтинг: 1.16%
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: Управление поливом по расписанию

Сообщение xor » Вт фев 05, 2019 9:31 am

А ещё можно смотреть, вчера поливали - сегодня не надо, и наоборот

Отправлено с моего Redmi 4X через Tapatalk

За это сообщение автора xor поблагодарил:
Forth (Вт фев 05, 2019 6:36 pm)
Рейтинг: 1.16%
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: Управление поливом по расписанию

Сообщение Logrus » Вт фев 05, 2019 8:18 pm

xor писал(а):
Вт фев 05, 2019 7:53 am
Logrus писал(а):

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

$j = date('j', time());

if ($j%2 == 0) {
 //четные дни
} else {
 //не четные дни
}
С 31 на 1 будет два подряд нечётных((

Отправлено с моего Redmi 4X через Tapatalk
ок ;)
а так, в ивенте в секундах 2-е суток
https://connect.smartliving.ru/profile/ ... -koda.html
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Forth
Сообщения: 48
Зарегистрирован: Вс янв 13, 2019 4:37 pm
Благодарил (а): 39 раз
Поблагодарили: 0

Re: Управление поливом по расписанию

Сообщение Forth » Вс фев 10, 2019 10:16 am

Всем спасибо за помощь.
Есть еще вопрос, как через чекбоксы задать переменные прям со сцены? Подозреваю, что это можно реализовать мою задумку.
Буду очень благодарен, если направите на пример реализации.
Прилагаю сцену, красным выделено, что мне нужно реализовать.
http://ipic.su/img/img7/fs/teplica04.1549782935.jpg
Аватара пользователя
Strangeman
Сообщения: 208
Зарегистрирован: Ср янв 16, 2013 6:35 pm
Откуда: Золотарево
Благодарил (а): 101 раз
Поблагодарили: 19 раз
Контактная информация:

Re: Управление поливом по расписанию

Сообщение Strangeman » Вс фев 10, 2019 8:19 pm

Forth писал(а):
Пн фев 04, 2019 9:03 pm
Планирую для теплицы на даче применить капельный полив и орашение.
Грунт?
Основной: Z99Le, Debian 10, модули на ESP-12F с собственной логикой. С сервером связаны, но работоспособны и без него.
Тестовый: Cubieboard2, Armbian Buster (сейчас Bionic) 5.4.y
Ответить