Универсальный многоканальный недельный и/или суточный программируемый таймер

Araris
Offline
Зарегистрирован: 09.11.2012
Протестирован на ESP8266 в исполнении ESP-01 и NodeMCU.
 
Всё управление - через веб-интерфейс.
 
Точное время получает из Интернета (NTP), после первой синхронизации временное пропадание WiFi/Internet на работу не влияет.
 
Возможности устройства:
 
Произвольное (1-12) количество каналов управления (вкл/выкл), настраивается в веб-интерфейсе.
Для каждого канала настраивается "включен/отключен", GPIO, прямое/инвертированное управление.
 
Произвольное (1-100) количество заданий(таймеров), настраивается в веб-интерфейсе.
Для каждого задания настраивается канал, действие (вкл/выкл/задание отключено), условие по времени суток и дню, или группе дней недели.
Точность установки условия по времени - секунда.
 
Управление каналами возможно по заданиям, вручную до следующего задания, только вручную;
  - вручную до следующего задания и только вручную - после пропадания питания восстанавливается последнее состояние канала;
  - по заданиям - после пропадания питания устанавливается состояние, в котором канал должен находиться согласно настройкам заданий для текущего дня недели и времени суток;
 
Ведение журналов событий за указанное количество дней. 
 
Возможность сохранения / восстановления всех настроек в файлы на ESP8266, загрузка / выгрузка файлов через веб-интерфейс.
 
Выбор языка (английский / русский) в веб-интерфейсе.
 
Логин и пароль авторизации (admin и admin по умолчанию) настраиваются в веб-интерфейсе (от https я отказался по причине медленной отрисовки веб-интерфейса и отсутствия особой необходимости).
 
Индикация количества заданий для канала.
 
Индикация текущего активного и следующего заданий для канала.
 
Индикация дублирующих и конфликтующих заданий.
 
Индикация дублирующих и конфликтующих каналов.
 
Настройка сервера синхронизации времени, часового пояса и автоперехода на летнее-зимнее время через веб-интерфейс.
 
Выбор точки доступа WiFi для подключения и режима получения IP адресов (DHCP/фиксированные) через веб-интерфейс.
 
При загрузке в рабочем режиме, в случае невозможности подключиться к WiFi в течение тридцати секунд, устройство перезагружается в режим точки доступа. 
В режиме точки доступа, в случае отсутствия подключений к http://192.168.4.1, через 10 минут устройство перезагружается в рабочий режим.
 
Загрузка прошивки через веб-интерфейс.
 
Перезагрузка в режим точки доступа (SSID: VT_SETUP , PASS: 319319319 , URL: http://192.168.4.1) через веб-интерфейс.
 
Перезагрузка через веб-интерфейс.
 
При наличии Multicast DNS (mDNS) доступен как хост vt.local.
 
Актуальная версия скетча на https://github.com/Araris/VersatileTimer
 
Схемы подключения более чем просты, для ESP-01 (один канал) :
(да, там Омроновский пятивольтовый SSR модуль, и да, он работает на трёх вольтах)
Для NodeMCU (несколько каналов) :
 
Веб-интерфейс :
 
 
 
 
 
 

 

b707
Онлайн
Зарегистрирован: 26.05.2017

вторая схема не вполне понятна - не ясно, соединяются ли пересекающиеся линии питания под правым углом НодеМКУ. По смыслу вроде там должно быть соединение, но его не видно. Я бы чуть перерисовал это место. сделал тут какой-то изгиб линий. чтобы соединение было более очевидным.

Araris
Offline
Зарегистрирован: 09.11.2012

Спасибо, подправил.

Fenicksnet
Offline
Зарегистрирован: 25.03.2019

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

 

и почему-то esp-01 отказывается работать с твердотельным реле . со светодиодом нормально отрабатывает, а вот реле(OMRON 1565E G3MB-202P)  или с оптопарой ( 817) не работает. не запускается совсем, если же подключить после загрузки то все работает.

Araris
Offline
Зарегистрирован: 09.11.2012

Скетч у Вас актуальный, (13-го сентября 11:51) я полагаю.

Fenicksnet пишет:

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

Спасибо на добром слове, у меня пропуски заданий однажды начались после активных игр с настройками, зачистил флеш - заработало как надо, причину так и не нашел. Поставлю-ка тестовую ЕСП с десятком-другим заданий, понаблюдаю.

Как раз заканчиваю журналирование (логи) работы, вот одно другому и поможет. Как до ума логи доведу - выложу на ГитХаб и сюда отпишусь.

Fenicksnet пишет:

 и почему-то esp-01 отказывается работать с твердотельным реле . со светодиодом нормально отрабатывает, а вот реле(OMRON 1565E G3MB-202P)  или с оптопарой ( 817) не работает. не запускается совсем, если же подключить после загрузки то все работает.

G3MB-202P по паспорту пятивольтовое, у меня от трёх работает, может повезло просто.

PC817 я, честно говоря, и не пробовал от трёх Вольт запускать.

Araris
Offline
Зарегистрирован: 09.11.2012

Обновил шапку темы, на Github обновил скетч и добавил картинки с видами интерфейса.

Изменён алгоритм управления каналами на более надёжный и универсальный.

Режимы "по заданиям/вручную" теперь устанавливаются индивидуально для каждого канала.

Добавлено журналирование и сброс на "заводские установки".

Fenicksnet
Offline
Зарегистрирован: 25.03.2019

Теперь если включить/ выключить в ручную, то по заданиям этот канал больше работать не будет (пока не вкл. "по задания"), соответственно если будет активное задание будет выключить, то и выход выключится. Вероятно более надёжно, но менее универсально( ИМХО).

А можно добавить ручную установку IP адреса и NTP сервера в веб-интерфейсе?

Странно, но с оптопарой работает только если последовательно подключить красный светодиод (с резистором не стартует есп). SSR тоже не хочет работать. Ну и при включении питания или перезагрузки импульс на выходе.

Araris
Offline
Зарегистрирован: 09.11.2012

Fenicksnet пишет:

Теперь если включить/ выключить в ручную, то по заданиям этот канал больше работать не будет (пока не вкл. "по задания"), соответственно если будет активное задание выключить, то и выход выключится.

Если переключить вручную, то никакие задания не учитываются до нажатия кнопки "по заданиям".

Fenicksnet пишет:

А можно добавить ручную установку IP адреса и NTP сервера в веб-интерфейсе?

Отчего бы и нет, подумаю над этим.

Fenicksnet
Offline
Зарегистрирован: 25.03.2019

Araris пишет:

Fenicksnet пишет:

Теперь если включить/ выключить в ручную, то по заданиям этот канал больше работать не будет (пока не вкл. "по задания"), соответственно если будет активное задание выключить, то и выход выключится.

Если переключить вручную, то никакие задания не учитываются до нажатия кнопки "по заданиям".

очень жаль. 

Araris
Offline
Зарегистрирован: 09.11.2012

Над этим тоже подумаю ))) Может быть стоит добавить что-то типа кнопки "до следующего задания", так ещё универсальнее будет.

Fenicksnet пишет:

Странно, но с оптопарой работает только если последовательно подключить красный светодиод (с резистором не стартует есп). SSR тоже не хочет работать. Ну и при включении питания или перезагрузки импульс на выходе.

SSR трёхвольтовый ?

Импульс на выходе, там вроде что-то связано с инициализацией GPIO при старте, сразу не припомню.

P.S. Не это ли ? https://esp8266.ru/forum/threads/sostojanie-gpio-pri-starte.3551/

Araris
Offline
Зарегистрирован: 09.11.2012

Обновил шапку темы, на Github скетч и картинки с видами интерфейса.
Добавлен режим "вручную до следующего задания".
Добавлено сохранение / восстановление всех настроек в файлы на ESP8266, удаление / переименование / загрузка / выгрузка их через веб-интерфейс.

smart_pic
Offline
Зарегистрирован: 17.04.2016

Интересно по цене комплектации на сколько тянет?

У нас немного по сложнее комбайн вышел. Помимо таймера еще куча функционала . А из управления розетками еще едть ДМХ512 управление светом и DALI  управление с конфигурированием сети через веб.

Принтскрин настройки таймера

 

Fenicksnet
Offline
Зарегистрирован: 25.03.2019

нормально отработал с 16 по 25, с 26 уже не захотел.

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

Под какой версией ядра компилировалось?

Fenicksnet
Offline
Зарегистрирован: 25.03.2019

ua6em пишет:

Под какой версией ядра компилировалось?

Этого мы уже не узнаем , скорее всего 3.0.х ...

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

Fenicksnet пишет:

ua6em пишет:

Под какой версией ядра компилировалось?

Этого мы уже не узнаем , скорее всего 3.0.х ...

а что там узнавать открыл менеджер управления платами да посмотрел, под 2.7.4 не компилируется...

Fenicksnet
Offline
Зарегистрирован: 25.03.2019

ua6em пишет:

Fenicksnet пишет:

ua6em пишет:

Под какой версией ядра компилировалось?

Этого мы уже не узнаем , скорее всего 3.0.х ...

а что там узнавать открыл менеджер управления платами да посмотрел, под 2.7.4 не компилируется...

3 дня назад пришлось установить 2.7.4. 

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

Компилируется?

Fenicksnet
Offline
Зарегистрирован: 25.03.2019

ua6em пишет:

Компилируется?

да какая разница, если с 2.7.4 и не скомпилируется, то было точно 3.0.0 или выше. ПК на работе, таймер пока дома. печалит то, что неизвестно, отработает он или нет. хорошо если он в выключенном состоянии  перестанет работать.

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

сам же и отвечу, под ядром 3.0.2 - компилируется

Большой проект! Есть некоторые непонятки, надо поразбираться

Araris
Offline
Зарегистрирован: 09.11.2012

Не спешите пока, я выложу свежие доделки-переделки на неделе и сюда отпишусь.

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

Araris пишет:

Не спешите пока, я выложу свежие доделки-переделки на неделе и сюда отпишусь.

Хорошо!

Araris
Offline
Зарегистрирован: 09.11.2012

Обновил шапку темы, на Github скетч и картинки с видами интерфейса. 

Расширены настройки синхронизации времени.

Добавлены настройки подключения к WiFi и режим точки доступа.

vladimirk68
Offline
Зарегистрирован: 30.10.2015

Заинтересовал проект.

Загрузил в ESP-12F, вроде работает, выводами пока не игрался.

IDE 1.8.18, board 3.0.2

Компилируется и загружается нормально.

версия 21.11.28

Ошибка NTP синхронизации времени

Пробовал другие сервера - то же самое.

vladimirk68
Offline
Зарегистрирован: 30.10.2015

Повесил с/диоды на GPIO 4,5,12,13,14 - управляются.

Araris
Offline
Зарегистрирован: 09.11.2012

А синхронизация времени так и не происходит ?

Странно, с библиотекой NTPClient проблем не было. Загрузите

https://github.com/arduino-libraries/NTPClient/blob/master/examples/Basic/Basic.ino

проверьте, работает ли синхронизация как таковая.

vladimirk68
Offline
Зарегистрирован: 30.10.2015

Еще добавлю - время в вебке правильное

Время: 0:12:19Пятница Ошибка NTP синхронизации времени Время работы: 8с  Прошивка загружена: Dec 23 2021

vladimirk68
Offline
Зарегистрирован: 30.10.2015

То есть время откуда-то берется?

Araris
Offline
Зарегистрирован: 09.11.2012

А в журнале строки Ошибка синхронизации времени есть ? 

vladimirk68
Offline
Зарегистрирован: 30.10.2015
Загрузил
 
00:21:47.860 -> 19:21:48
00:21:48.851 -> 19:21:49
00:21:49.878 -> 19:21:50
00:21:50.869 -> 19:21:51
00:21:51.864 -> 19:21:52
 
Araris
Offline
Зарегистрирован: 09.11.2012

Ага, тут всё хорошо

vladimirk68
Offline
Зарегистрирован: 30.10.2015
17  24.12.2021 00:25:41 Ошибка синхронизации времени
16  24.12.2021 00:25:41  Синхронизация времени прошла успешно
15  24.12.2021 00:25:41  Подключено к Wi-Fi
14 24.12.2021 00:25:41 Начало работы
13  24.12.2021 00:25:41  Прошивка обновлена
12  24.12.2021 00:12:12 Ошибка синхронизации времени
11  24.12.2021 00:12:12  Синхронизация времени прошла успешно
10  24.12.2021 00:12:12  Подключено к Wi-Fi
9 24.12.2021 00:12:12 Начало работы
8  24.12.2021 00:01:59 Переключение вручную   6  ВЫКЛ
7  24.12.2021 00:01:39 Переключение вручную   6  ВКЛ
6  24.12.2021 00:00:55 Переключение вручную   5  ВЫКЛ
5  24.12.2021 00:00:47 Переключение вручную   5  ВКЛ
4  24.12.2021 00:00:09 Ошибка синхронизации времени
3  24.12.2021 00:00:09  Синхронизация времени прошла успешно
2  24.12.2021 00:00:09  Подключено к Wi-Fi
1 24.12.2021 00:00:09 Начало работы

 

Araris
Offline
Зарегистрирован: 09.11.2012

А тут всё странно

У меня рестарт всегда выглядит как

16  23.12.2021 21:31:30  Time synchronization successful
15  23.12.2021 21:31:30  Connected to Wi-Fi
14 23.12.2021 21:31:30 Start
13  23.12.2021 21:31:23  Doing manual restart

поэтому пока даже не представляю себе, как повторить Вашу ситуацию, чтобы искать причину.

ОК, буду думать.

Araris
Offline
Зарегистрирован: 09.11.2012

Ну, даже не знаю, как помочь, не могу у себя воспроизвести ситуацию, когда после рестарта идут подряд успешная синхронизация и ошибка.

У меня достаточно давно работают два устройства (на ESP-01 и NodeMCU), и на них время от времени наблюдаю что-то типа

Date&time Event Task  Channel  New state
10  24.12.2021 21:00:00 Switching by task 2 1  OFF
9  24.12.2021 09:01:39  Time synchronization successful
8  24.12.2021 09:01:36  Time synchronization error
7  24.12.2021 07:31:37  Time synchronization successful
6  24.12.2021 07:31:33  Time synchronization error
5  24.12.2021 07:00:00 Switching by task 1 1  ON
4  24.12.2021 06:31:34  Time synchronization successful
3  24.12.2021 06:31:32  Time synchronization error
2  24.12.2021 00:01:32  Time synchronization successful
1  24.12.2021 00:01:30  Time synchronization error

Интервалы обычно от секунды до десяти секунд, но вот именно после рестарта - всегда так, как в предыдущем посте показывал.

vladimirk68
Offline
Зарегистрирован: 30.10.2015

Может оно и не страшно. 

На даче Интернета пока нет. Можно временно подключаться, например, через телефон.

После синхронизации времени таймер может работать без Интернета?

Есть бесхозный роутер TP-Link WR841nd, на нем сделаю пока дачную сеть, когда появится Интернет - подключу ее туда.

Есть еще модуль точных часов для Ардуино на DS3231 (I2C) - может его к ESP-12 прикрутить?

Araris
Offline
Зарегистрирован: 09.11.2012

vladimirk68 пишет:

После синхронизации времени таймер может работать без Интернета?

Может, но точность отсчёта времени будет неподобающая (там привязка к millis()).

vladimirk68 пишет:

Есть еще модуль точных часов для Ардуино на DS3231 (I2C) - может его к ESP-12 прикрутить?

Лучшее решение в данном случае.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Все это конечно хорошо, только готовое подобное устройство у китайцев стоит ~ 500р

https://a.aliexpress.com/_AKSK7c

vladimirk68
Offline
Зарегистрирован: 30.10.2015

Это не пойдет.

Мне нужно то, что я смогу сконфигурировать сам, под свои задачи.

Одна из них - управление поливом 3-х грядок в теплице.

Дома лежат 3 ESP-12F и DS3231 без дела.

Вопрос к автору - в случае использования DS3231 потребуется большая переделка скетча?

Araris
Offline
Зарегистрирован: 09.11.2012

vladimirk68 пишет:

Вопрос к автору - в случае использования DS3231 потребуется большая переделка скетча?

Думаю, достаточно большая (хотя убирать ведь всегда проще, чем добавлять), всё от уровня програмирующего зависит.

Можно выбросить из скетча все упоминания  timeClient и переменных ntp*,

разобраться с ntpDaylight*,

timeSyncOK, timeSyncNTPOK, previoustimeSyncNTPOK и timeSyncInitially тоже будут не нужны,

переписать механизм получения даты\времени в curEpochTime,

разобраться с установкой\коррекцией даты\времени в DS3231,

это так, навскидку.

Fenicksnet
Offline
Зарегистрирован: 25.03.2019

А возможно из esp и 3231 сделать точку доступа с сервером ntp ?

Araris
Offline
Зарегистрирован: 09.11.2012

Гугл говорит, что возможно. https://www.instructables.com/ESP8266-Wireless-NTP-Stratum1-Server/

Был у меня случай, когда точное время необходимо, Интернета в месте расположения нет, GSM модуль ставить не хочется.

Обошелся простейшим GPS модулем, ему и SIM карта не нужна, и время всегда точное.

vladimirk68
Offline
Зарегистрирован: 30.10.2015

Переделать скетч будет непросто.

А можно добавить условие - нет ntp - брать время с DS3231, есть ntp - работать, как обычно?

Araris
Offline
Зарегистрирован: 09.11.2012

Вопрос общий - ответ общий : конечно можно.

Или всегда брать с DS3231, а, получив время от NTP, корректировать DS3231.

vladimirk68
Offline
Зарегистрирован: 30.10.2015

То есть сложность переделки не уменьшится, похоже?

Araris
Offline
Зарегистрирован: 09.11.2012

Araris пишет:

Или всегда брать с DS3231, а, получив время от NTP, корректировать DS3231.

Мне кажется, при таком подходе будет проще.

vladimirk68
Offline
Зарегистрирован: 30.10.2015

Решил не усложнять. Поскольку Интернет на даче все равно нужен, купил gsm модем, роутер tp-link mr3020 (залил прошивку OpenWrt) и симку с раздачей Интернета. Через vpnki.ru организовал доступ к устройствам дачной wi-fi из любого места.

Так что таймер все время будет подключен к Интернету.

Вопрос - за сутки без Интернета насколько может уйти время?
(секунды, минуты) ?

ua6em
ua6em аватар
Онлайн
Зарегистрирован: 17.08.2016

а можно побороть эффект остановки таймеров пока находишься в вэб конфигураторе?

Araris
Offline
Зарегистрирован: 09.11.2012

ua6em пишет:

а можно побороть эффект остановки таймеров пока находишься в вэб конфигураторе?

Если имеется в виду режим точки доступа, то он функционально ограничен, вот начало loop() :

void loop()
{
yield(); delay(0);
if ( AccessPointMode ) 
  {
  server.handleClient();
  MDNS.update();
  if ( millis() - AccessPointModeTimer > ACCESS_POINT_MODE_TIMER_INTERVAL ) { ServerSendMessageAndReboot(); }
  return; // в начало loop()
  } 
 
// и т.д. 

Побороть "эффект остановки таймеров" достаточно сложно, поскольку таймеров в традиционном "ардуинском" понимании там нет.

Есть функция check_previous_tasks(), которая периодически запускаается из loop().
Функция проверяет по списку каналов, нет ли для канала задания, которое должно выполняться в данный день недели, час, минуту и секунду. Если таковое найдено и состояние канала ему не соответствует, то канал переключается (это упрощенное описание).
Такой подход выручает, когда по какой-либо причине (например, запускались в режиме точки доступа, или питание отключалось) мы пропустили время выполнения задания. В этом случае "просроченное" задание будет запущено\остановлено с опозданием.

 

 

vema
Offline
Зарегистрирован: 18.01.2022

Привет пытаюсь компелировать и не проходит выдает ошибку

 
sketch_jan18a:21:10: fatal error: Secrets.h: No such file or directory
   21 | #include "Secrets.h"
      |          ^~~~~~~~~~~
compilation terminated.
exit status 1
Secrets.h: No such file or directory
подскажи куда копать дальше
 
BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

"Secrets.h: No such file or directory" -> translate.google.com -> РЕЗУЛЬТАТ

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

vema пишет:
Secrets.h: No such file or directory

Это Secrets.h, бро.