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

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

Модератор: immortal

Forth
Сообщения: 48
Зарегистрирован: Вс янв 13, 2019 4:37 pm

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

Сообщение Forth »

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

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

Сообщение Chainik »

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).
Logrus
Сообщения: 2113
Зарегистрирован: Пт апр 07, 2017 12:20 pm

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

Сообщение Logrus »

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

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

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

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

Сообщение xor »

Logrus писал(а):

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

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

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

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

JackOfShadows
Сообщения: 109
Зарегистрирован: Ср янв 09, 2019 8:37 pm

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

Сообщение JackOfShadows »

Функция мажордомо 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 на чёт/нечет.
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am

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

Сообщение Chainik »

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

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

$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')) {
//Команда на выполнение действия
}
}
}
}
Думаю, идея понятна, но синтаксис надо проверять.
Аватара пользователя
xor
Сообщения: 2044
Зарегистрирован: Сб ноя 22, 2014 8:45 pm

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

Сообщение xor »

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

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

Logrus
Сообщения: 2113
Зарегистрирован: Пт апр 07, 2017 12:20 pm

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

Сообщение Logrus »

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

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

Сообщение Forth »

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

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

Сообщение Strangeman »

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