Управление поливом по расписанию
Модератор: immortal
Управление поливом по расписанию
Планирую для теплицы на даче применить капельный полив и орашение. Будет 3 крана с эл приводами включение и отображение состояния на сцене. Вопрос в следующем, как на сцене вывести информацию времени включения полива на день и как настроить, чтоб на сцене просто менять время включения? Допустим кран 1 включается каждый день в 06:00 и в 21:00 на 10 мин, кран 2 через день в 20:30 на 15 мин, а кран 3 каждую ночь через 2 часа на 5 минут с 22:00 до 05:00.
Re: Управление поливом по расписанию
С точки зрения логики код будет примерно такой (для простоты можно все "запихнуть" в "OnNewMinute"):Forth писал(а): Пн фев 04, 2019 9:03 pm Планирую для теплицы на даче применить капельный полив и орашение. Будет 3 крана с эл приводами включение и отображение состояния на сцене. Вопрос в следующем, как на сцене вывести информацию времени включения полива на день и как настроить, чтоб на сцене просто менять время включения? Допустим кран 1 включается каждый день в 06:00 и в 21:00 на 10 мин, кран 2 через день в 20:30 на 15 мин, а кран 3 каждую ночь через 2 часа на 5 минут с 22:00 до 05:00.
Код: Выделить всё
$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).
Re: Управление поливом по расписанию
Код: Выделить всё
$j = date('j', time());
if ($j%2 == 0) {
//четные дни
} else {
//не четные дни
}
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Re: Управление поливом по расписанию
С 31 на 1 будет два подряд нечётных((Logrus писал(а):Код: Выделить всё
$j = date('j', time()); if ($j%2 == 0) { //четные дни } else { //не четные дни }
Отправлено с моего Redmi 4X через Tapatalk
win10 connect https://connect.smartliving.ru/profile/303
-
JackOfShadows
- Сообщения: 109
- Зарегистрирован: Ср янв 09, 2019 8:37 pm
Re: Управление поливом по расписанию
Функция мажордомо time() - время в timestamp.
Функция php strtotime - пересчёт в Unix timestamp (количество секунд с 1 января 1970 года)
То есть типа:
И анализируем unix на чёт/нечет.
Функция 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 */
Re: Управление поливом по расписанию
Еще можно попробовать, например, брать четные дни в четных неделях с начала года и нечетные -- в нечетных.
Думаю, идея понятна, но синтаксис надо проверять.
Код: Выделить всё
$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')) {
//Команда на выполнение действия
}
}
}
}
Re: Управление поливом по расписанию
А ещё можно смотреть, вчера поливали - сегодня не надо, и наоборот
Отправлено с моего Redmi 4X через Tapatalk
Отправлено с моего Redmi 4X через Tapatalk
win10 connect https://connect.smartliving.ru/profile/303
Re: Управление поливом по расписанию
окxor писал(а): Вт фев 05, 2019 7:53 amС 31 на 1 будет два подряд нечётных((Logrus писал(а):Код: Выделить всё
$j = date('j', time()); if ($j%2 == 0) { //четные дни } else { //не четные дни }
Отправлено с моего Redmi 4X через Tapatalk
а так, в ивенте в секундах 2-е суток
https://connect.smartliving.ru/profile/ ... -koda.html
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Re: Управление поливом по расписанию
Всем спасибо за помощь.
Есть еще вопрос, как через чекбоксы задать переменные прям со сцены? Подозреваю, что это можно реализовать мою задумку.
Буду очень благодарен, если направите на пример реализации.
Прилагаю сцену, красным выделено, что мне нужно реализовать.
http://ipic.su/img/img7/fs/teplica04.1549782935.jpg
Есть еще вопрос, как через чекбоксы задать переменные прям со сцены? Подозреваю, что это можно реализовать мою задумку.
Буду очень благодарен, если направите на пример реализации.
Прилагаю сцену, красным выделено, что мне нужно реализовать.
http://ipic.su/img/img7/fs/teplica04.1549782935.jpg
- Strangeman
- Сообщения: 209
- Зарегистрирован: Ср янв 16, 2013 6:35 pm
- Откуда: Золотарево
- Контактная информация:
Re: Управление поливом по расписанию
Грунт?Forth писал(а): Пн фев 04, 2019 9:03 pm Планирую для теплицы на даче применить капельный полив и орашение.
Основной: Z99Le, Debian 10, модули на ESP-12F с собственной логикой. С сервером связаны, но работоспособны и без него.
Тестовый: Cubieboard2, Armbian Buster (сейчас Bionic) 5.4.y
Тестовый: Cubieboard2, Armbian Buster (сейчас Bionic) 5.4.y