Araris / VersatileTimer

15 stars 9 forks source link

таймер #4

Closed VolodyaVolodya closed 1 month ago

VolodyaVolodya commented 7 months ago

в логике таймера нашел проблему . при отключения сети, работает не корректно

Araris commented 7 months ago

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

VolodyaVolodya commented 7 months ago

Здравствуйте. Таймер отлично работает, когда подключен к интернету. Если пропадает связь начинаются проблемы. Через час после исчезновения сети, устройство перезагружается(я так думаю, это мое мнение) и каждые десять минут включает и отключает канал. Если устройство включить в ручную, канал работает и без сети. Настраивал два задания вкл и выкл и один канал. Проблему можно увидеть если отключить сеть на час и более.

Araris commented 7 months ago

Спасибо большое, теперь гораздо проще искать, буду разбираться.

Araris commented 7 months ago

Итак, освежил в памяти код:

  1. "Через час после исчезновения сети, устройство перезагружается(я так думаю, это мое мнение)..." Явных причин для этого в коде я не вижу, буду на "железе" экспериментировать. Возможно Watchdog где-то в библиотечной функции обращения к NTP-серверу срабатывает, не знаю.

  2. "...и каждые десять минут включает и отключает канал." После старта/рестарта устройство в течение десяти минут пытается подключиться к сети с SSID, прописанным в EEPROM. При неуспехе устройство перезагружается в режиме точки доступа и в течение десяти минут ожидает подключения к себе. Затем устройство перезагружается назад в режим станции опять десять минут пытается подключиться к сети с SSID, прописанным в EEPROM, опять перезагружается в режиме точки доступа, далее по кругу. "Дёрганье" канала в момент старта/рестарта, связано с тем, что в setup() вызов функции установки состояний каналов (строка 3636 read_channellist_from_EEPROM_and_switch_channels()) делается не сразу и только в режиме станции.

Впрочем, всё это излишние подробности, Ваша проблема в том, что прошивка изначально писалась для устройств:

Поэтому, если Вам нужен таймер, стабильно работающий при нестабильном Wi-Fi (Интернете), то наилучший вариант - подключить к ESP модуль RTC и брать время/дату с него. Ваш уровень в С++ мне, естественно, неизвестен, поэтому совет риторический.

С пунктом 1. я поработаю, самому интересно.

VolodyaVolodya commented 7 months ago

Ваш проект мне понравился, мое почтение. Да, я, подумывал прикрутить часы реального времени, если бы написали комментарии на русском языке основной программы и цикла, я бы смог, опыт программирования на си есть. Чужой код сложноват для разбора. С комментариями бы разобрался. Если комментарии возможны это было бы чудесно. Вы и так проделали много работы., просить об этом мне неловко.

Araris commented 7 months ago

Да нет, переводить комментарии на русский - вряд ли. Загоните текст скетча в онлайн-переводчик, откройте в отдельном окне, да поглядывайте в непонятных местах исходника, всего то. Я так иногда с китайскими кодами разбираюсь, временами бывает даже весело читать )).

VolodyaVolodya commented 7 months ago

Жаль, что проблема не решена. Проблема явно в обработке заданий, потому что если включить "вручную", перезагрузка не происходит. Возможно проблема в переполнения ОЗУ (это мое мнение). В описании устройства вы пишите - временное пропадание WiFi/Internet на работу не влияет. Хотелось бы чтоб это соответствовало. Предлагаю свою помощь в качестве тестера.

Araris commented 7 months ago

Прошу прощения за долгую паузу - на работе горячий период (ещё не закончился), возможностей поєкспериментировать нет.

Сразу вопрос - видите ли Вы в логах "Перезагрузка программным сторожевым таймером/Restart after software watch dog reset" после того, как "Через час после исчезновения сети, устройство перезагружается(я так думаю, это мое мнение)..." ?

Дальше попробуем помощь в качестве тестера, отработаем версию с NTP :

  1. Если выставить в строке #define NTP_POLLING_INTERVAL 3600000UL (сейчас стоит один час, 3600000UL = 60 мин 60 сек 1000 мсек) меньший интервал, изменится ли промежуток времени до перезагрузки после пропадания сети ?
  2. Если в начале функции void ntpGetTime() перед строкой time_t GMT0epochtime; поставить if ( !statusWiFi ) { return; } , изменится ли что-либо ?
VolodyaVolodya commented 7 months ago

NTP_POLLING_INTERVAL - да этот интервал влияет на перезагрузку. Установил 10 минут и начал экспериментировать.

Логи журнала. В 9.48 была отключена сеть. Через 10 минут устройство перезагрузилось. 37  6.12.2023 09:59:23  Подача питания была отключена 36  6.12.2023 09:59:26  **_Перезагрузка программным сторожевым таймером_** 35  6.12.2023 09:59:26  Старт (состояния каналов: 1) 34  6.12.2023 09:59:26  Синхронизация времени успешна (RTCMEM) 33  6.12.2023 09:48:44  **_Подключение к Wi-Fi отсутствует_** 32  6.12.2023 09:48:22  Синхронизация времени успешна (NTP) 31  6.12.2023 09:48:21  Подключено к Wi-Fi 30  6.12.2023 09:48:05  Начало работы (подача питания) 29  6.12.2023 09:48:05  Старт (состояния каналов: 1)
Логи и монитор порта при #define DEBUG 1, 09:48:04.708 -> 09:48:04.708 -> Versatile timer started 09:48:04.708 -> LittleFS: OK 09:48:05.196 -> Reading and switching channels 09:48:05.243 -> Reading tasks 09:48:05.243 -> Sorting tasks 09:48:05.243 -> Read RTCMEM: 09:48:05.276 -> Reading last channels states : 1 0 09:48:05.310 -> Last reset reason code = 0 09:48:05.353 -> Connecting to wiFi...............................OK 09:48:21.946 -> Connected to wiFi 09:48:21.946 -> MAC address 80:7D:3A:58:8B:CB 09:48:21.981 -> IP address 192.168.137.192 09:48:22.014 -> Gateway address 192.168.137.1 09:48:22.048 -> DNS address 192.168.137.1 09:48:22.081 -> Subnet mask 255.255.255.0 09:48:22.119 -> MDNS access http://VT.local 09:59:22.817 -> 09:59:22.817 -> User exception (panic/abort/assert) 09:59:22.884 -> --------------- CUT HERE FOR EXCEPTION DECODER --------------- 09:59:22.923 -> 09:59:22.923 -> Panic core_esp8266_main.cpp:191 __yield 09:59:22.957 -> 09:59:22.957 -> >>>stack>>> 09:59:22.957 -> 09:59:22.990 -> ctx: cont 09:59:22.990 -> sp: 3ffff0b0 end: 4022360d offset: 0010 09:59:23.023 -> 3ffff0c0: 656fe38b 00000000 00015180 4022334d 09:59:23.090 -> 3ffff0d0: 657045fb 00000000 3ffe8638 40212c63 09:59:23.123 -> 3ffff0e0: 657045fb 00000000 00015180 3fff0d28 09:59:23.190 -> 3ffff0f0: 3ffefebc 3ffefed8 3ffe8638 402130ef 09:59:23.223 -> 3ffff100: 3ffefebc 3ffefed8 3ffefed4 40210137 09:59:23.290 -> 3ffff110: 00000000 32b7f1c5 feefeffe feefeffe 09:59:23.357 -> 3ffff120: 89cca609 22fd8000 000022fd 00008000 09:59:23.390 -> 3ffff130: 0000a8c0 32b822fd 00000000 feefeffe 09:59:23.457 -> 3ffff140: 40105c81 0caffd4c feefeffe 0000f424 09:59:23.490 -> 3ffff150: 40105d2e 3ffef2f8 0caffd4c 00000000 09:59:23.557 -> 3ffff160: 40105f05 0caffd4c 3fff0d00 00000000 09:59:23.590 -> 3ffff170: 3ffefa00 3fff0d00 3ffe864c 3fff0d00 09:59:23.657 -> 3ffff180: 00000000 000a64e4 9f7ced91 0c04a858 09:59:23.690 -> 3ffff190: 000a64e3 3fff0d00 00000001 00000001 09:59:23.757 -> 3ffff1a0: 00000020 00000000 00000000 00000000 09:59:23.823 -> 3ffff1b0: 00000000 000a64e3 99999999 0c04a729 09:59:23.857 -> 3ffff1c0: 00000000 000a64e4 a28f5c29 0c04a85c 09:59:23.923 -> 3ffff1d0: 3ffefebc 3fff0d28 4022332a 3fff0d28 09:59:23.957 -> 3ffff1e0: 3ffefebc 3ffefed8 3ffefed4 40212d6c 09:59:24.023 -> 3ffff1f0: 656fe38b 00000000 00015180 3fff0d28 09:59:24.057 -> 3ffff200: 3ffefebc 3ffefed8 3ffe8638 402130ef 09:59:24.123 -> 3ffff210: 3ffefebc 3ffefed8 3ffefed4 40210137 09:59:24.190 -> 3ffff220: 00000000 32b7f1c5 feefeffe feefeffe 09:59:24.223 -> 3ffff230: 89cc9da0 22fd8000 000022fd 00008000 09:59:24.290 -> 3ffff240: 0000a8c0 32b822fd 00000000 feefeffe 09:59:24.323 -> 3ffff250: 40105c81 0caffaab feefeffe 0000f424 09:59:24.390 -> 3ffff260: 40105d2e 3ffef2f8 0caffaab 00000000 09:59:24.423 -> 3ffff270: 40105f05 0caffaab 3fff0d00 00000000 09:59:24.490 -> 3ffff280: 3ffefa0 09:59:24.490 -> --------------- CUT HERE FOR EXCEPTION DECODER --------------- 09:59:24.557 -> 09:59:24.590 -> Panic core_esp8266_main.cpp:191 __yield 09:59:24.623 -> 09:59:24.623 -> >>>stack>>> 09:59:24.623 -> 09:59:24.623 -> ctx: sys 09:59:24.657 -> sp: 3fffedd0 end: 3fffffb0 offset: 0010 09:59:24.690 -> 3fffede0: 00000000 00000000 00000000 401031ba 09:59:24.723 -> 3fffedf0: 40103231 00000031 40302063 00000000 09:59:24.790 -> 3fffee00: 00000000 00000000 00000000 00000004 09:59:24.857 -> 3fffee10: 40003b50 2c9f0300 4000050c 3fffc278 09:59:24.890 -> 3fffee20: 401031d4 3fffc200 00000022 3ffe83c4 09:59:24.957 -> 3fffee30: 40003b53 00000030 00000010 ffffffff 09:59:24.990 -> 3fffee40: 40001ddc 00000030 00018000 00000000 09:59:25.057 -> 3fffee50: 00ff0000 5ffffe00 5ffffe00 00000000 09:59:25.090 -> 3fffee60: 00018000 00000000 3fffee23 3fffef53 09:59:25.157 -> 3fffee70: 00000020 0000003c 4022360d 00000030 09:59:25.223 -> 3fffee80: 0000003c 3ffe83c4 000000a0 4022b6c9 09:59:25.257 -> 3fffee90: 3fffef71 40105527 0000006e ffff0208 09:59:25.323 -> 3fffeea0: 3fffef40 0000009f 00000020 3ffff060 09:59:25.357 -> 3fffeeb0: 4022360d 3ffe83c4 000000a0 4022b6c9 09:59:25.423 -> 3fffeec0: 3fffef98 40101bda 00000077 ffff0208 09:59:25.457 -> 3fffeed0: 3fffef70 0000009f 40003b53 00000000 09:59:25.523 -> 3fffeee0: 00000000 00000000 00000000 401031ba 09:59:25.557 -> 3fffeef0: 40103231 00000080 00000000 3fffefd2 09:59:25.623 -> 3fffef00: 3ffeb0bc 00000020 3fffef40 4022b705 09:59:25.690 -> 3fffef10: 3ffff000 3fffeff0 00000004 3fffc278 09:59:25.723 -> 3fffef20: 401031d4 3fffc200 00000022 4022b705 09:59:25.790 -> 3fffef30: 4022360d 00000010 3fffef70 40223600 09:59:25.823 -> 3fffef40: 66666633 30383266 3320203a 66656666 09:59:25.890 -> 3fffef50: 20303061 66666633 30306430 66663320 09:59:25.923 -> 3fffef60: 34363865 66332063 64306666 20203030 09:59:25.990 -> 3fffef70: 203a000a 66666633 30623066 646e6520 09:59:26.057 -> 3fffef80: 3034203a 36333232 6f206430 65736666 09:59:26.090 -> 3fffef90: 30203a74 0a303130 3fffef00 4022b705 09:59:26.157 -> 3fffefa0: 3ffff090 3ffff080 00000004 00000000 09:59:26.190 -> 3fffefb0: 656fe38b 00000000 00015180 00000000 09:59:26.257 -> 3fffefc0: 4022360d 00000000 00000000 40223600 09:59:26.290 -> 3fffefd0: 6573550a 78652072 74706563 206e6f69 09:59:26.357 -> 3fffefe0: 3ffff000 3fffeff0 00000004 7373612f 09:59:26.390 -> 3fffeff0: 29747265 3ffff280 3ffefa00 3fff0d00 09:59:26.457 -> 3ffff000: 3ffe864c 3fff0d00 00000004 feefeffe 09:59:26.523 -> 3ffff010: 3ffff030 3ffff020 3ffff290 4022365a 09:59:26.557 -> 3ffff020: 00000020 3ffff0b0 4022360d 00000010 09:59:26.623 -> 3ffff030: 5ffffe00 5ffffe00 0000000f 3ffff060 09:59:26.657 -> 3ffff040: 4022360d 00000010 3ffff0c0 402238fa 09:59:26.723 -> 3ffff050: feefeffe feefeffe feefeffe 00000000 09:59:26.757 -> 3ffff060: 000000fe 00000000 00000000 00000000 09:59:26.823 -> 3ffff070: 00000000 00000000 00000000 3fff0d28 09:59:26.890 -> 3ffff080: 3fffefd0 000000fe 4026817d 3fff0d70 09:59:26.923 -> 3ffff090: 00000009 00097dec 00000009 3fff0d28 09:59:26.990 -> 3ffff0a0: 3ffefebc 3ffefed8 3ffe864c 4022396a 09:59:27.023 -> 3ffff0b0: 3ffefebc 3ffefed8 00000001 402239d7 09:59:27.090 -> 3ffff0c0: 656fe38b 00000000 00015180 4022334d 09:59:27.123 -> 3ffff0d0: 657045fb 00000000 3ffe8638 40212c63 09:59:27.191 -> 3ffff0e0: 657045fb 00000000 00015180 3fff0d28 09:59:27.223 -> 3ffff0f0: 3ffefebc 3ffefed8 3ffe8638 402130ef 09:59:27.290 -> 3ffff100: 3ffefebc 3ffefed8 3ffefed4 40210137 09:59:27.357 -> 3ffff110: 00000000 32b7f1c5 feefeffe feefeffe 09:59:27.390 -> 3ffff120: 89cca609 22fd8000 000022fd 00008000 09:59:27.457 -> 3ffff130: 0000a8c0 32b822fd 00000000 feefeffe 09:59:27.490 -> 3ffff140: 40105c81 0caffd4c feefeffe 0000f424 09:59:27.557 -> 3ffff150: 40105d2e 3ffef2f8 0caffd4c 00000000 09:59:27.590 -> 3ffff160: 40105f05 0caffd4c 3fff0d00 00000000 09:59:27.657 -> 3ffff170: 3ffefa00 3fff0d00 3ffe864c 3fff0d00 09:59:27.723 -> 3ffff180: 00000000 000a64e4 9f7ced91 0c04a858 09:59:27.757 -> 3ffff190: 000a64e3 3fff0d00 00000001 00000001 09:59:27.823 -> 3ffff1a0: 00000020 00000000 00000000 00000000 09:59:27.857 -> 3ffff1b0: 00000000 000a64e3 99999999 0c04a729 09:59:27.923 -> 3ffff1c0: 00000000 000a64e4 a28f5c29 0c04a85c 09:59:27.957 -> 3ffff1d0: 3ffefebc 3fff0d28 4022332a 3fff0d28 09:59:28.023 -> 3ffff1e0: 3ffefebc 3ffefed8 3ffefed4 40212d6c 09:59:28.057 -> 3ffff1f0: 656fe38b 00000000 00015180 3fff0d28 09:59:28.123 -> 3ffff200: 3ffefebc 3ffefed8 3ffe8638 402130ef 09:59:28.190 -> 3ffff210: 3ffefebc 3ffefed8 3ffefed4 40210137 09:59:28.223 -> 3ffff220: 00000000 32b7f1c5 feefeffe feefeffe 09:59:28.290 -> 3ffff230: 89cc9da0 22fd8000 000022fd 00008000 09:59:28.323 -> 3ffff240: 0000a8c0 32b822fd 00000000 feefeffe 09:59:28.390 -> 3ffff250: 40105c81 0caffaab feefeffe 0000f424 09:59:28.423 -> 3ffff260: 40105d2e 3ffef2f8 0caffaab 00000000 09:59:28.490 -> 3ffff270: 40105f05 0caffaab 3fff0d00 00000000 09:59:28.557 -> 3ffff280: 3ffefa00 3fff0d00 3ffe864c 3fff0d00 09:59:28.590 -> 3ffff290: 00000000 000a64e2 7810624d 0c04a5da 09:59:28.657 -> 3ffff2a0: 000a64e1 3fff0d00 00000001 00000001 09:59:28.690 -> 3ffff2b0: 00000020 00000000 00000000 00000000 09:59:28.757 -> 3ffff2c0: 00000000 000a64e1 726e978d 0c04a4ac 09:59:28.790 -> 3ffff2d0: 00000000 000a64e2 7b645a1c 0c04a5de 09:59:28.857 -> 3ffff2e0: 3ffefebc 3fff0d28 4022332a 3fff0d28 09:59:28.890 -> 3ffff2f0: 3ffefebc 3ffefed8 3ffefed4 40212d6c 09:59:28.957 -> 3ffff300: 656fe38b 00000000 00015180 3fff0d28 09:59:29.023 -> 3ffff310: 3ffefebc 3ffefed8 3ffe8638 402130ef 09:59:29.057 -> 3ffff320: 3ffefebc 3ffefed8 3ffefed4 40210137 09:59:29.123 -> 3ffff330: 00000000 32b7f1c5 feefeffe feefeffe 09:59:29.157 -> 3ffff340: 89cc9369 22fd8000 000022fd 00008000 09:59:29.223 -> 3ffff350: 0000a8c0 32b822fd 00000000 feefeffe 09:59:29.257 -> 3ffff360: a8c00000 00000000 feefeffe 0000f424 09:59:29.323 -> 3ffff370: 0000656f f4240000 00000000 00000000 09:59:29.390 -> 3ffff380: 40105f05 0caff77a 3fff0d00 00000000 09:59:29.423 -> 3ffff390: 3ffefa00 3fff0d00 3ffe864c 3fff0d00 09:59:29.490 -> 3ffff3a0: 00000000 000a64e0 50e56041 0c04a35d 09:59:29.523 -> 3ffff3b0: 000a64de 3fff0d00 00000001 00000001 09:59:29.590 -> 3ffff3c0: 00000020 00000000 00000000 00000000 09:59:29.623 -> 3ffff3d0: 00000000 000a64de d4fdf3b6 0c04a1a6 09:59:29.690 -> 3ffff3e0: 00000000 000a64e0 53f7ced9 0c04a361 09:59:29.723 -> 3ffff3f0: 3ffefebc 3fff0d28 4022332a 3fff0d28 09:59:29.790 -> 3ffff400: 3ffefebc 3ffefed8 3ffefed4 40212d6c 09:59:29.857 -> 3ffff410: 656fe38b 00000000 00015180 3fff0d28 09:59:29.890 -> 3ffff420: 3ffefebc 3ffefed8 3ffe8638 402130ef 09:59:29.957 -> 3ffff430: 3ffefebc 3ffefed8 3ffefed4 40210137 09:59:29.990 -> 3ffff440: 00000000 32b7f1c5 feefeffe feefeffe 09:59:30.057 -> 3ffff450: 89cc8b00 22fd8000 000022fd 00008000 09:59:30.090 -> 3ffff460: 0000a8c0 32b822fd 00000000 feefeffe 09:59:30.157 -> 3ffff470: 40105c81 0caff4d9 feefeffe 0000f424 09:59:30.223 -> 3ffff480: 40105d2e 3ffef9d8 0caff4d9 00000000 09:59:30.257 -> 3ffff490: 40105f05 0caff4d9 3fff0d00 00000000 09:59:30.323 -> 3ffff4a0: 3ffefa00 3fff0d00 3ffe864c 3fff0d00 09:59:30.357 -> 3ffff4b0: 00000000 000a64dd b374bc6a 0c04a057 09:59:30.423 -> 3ffff4c0: 000a64dc 3fff0d00 00000001 00000001 09:59:30.457 -> 3ffff4d0: 00000020 00000000 00000000 00000000 09:59:30.523 -> 3ffff4e0: 00000000 000a64dc add2f1aa 0c049f29 09:59:30.557 -> 3ffff4f0: 00000000 000a64dd b6c8b439 0c04a05b 09:59:30.623 -> 3ffff500: 3ffefebc 3fff0d28 4022332a 3fff0d28 09:59:30.690 -> 3ffff510: 3ffefebc 3ffefed8 3ffefed4 40212d6c 09:59:30.723 -> 3ffff520: 656fe38b 00000000 00015180 3fff0d28 09:59:30.790 -> 3ffff530: 3ffefebc 3ffefed8 3ffe8638 402130ef 09:59:30.823 -> 3ffff540: 3ffefebc 3ffefed8 3ffefed4 40210137 09:59:30.890 -> 3ffff550: 00000000 32b7f1c5 feefeffe feefeffe 09:59:30.922 -> 3ffff560: 89cc8296 22fdF)�����@H�������IIz 09:59:34.079 -> Versatile timer started 09:59:34.079 -> LittleFS: OK 09:59:34.583 -> Reading and switching channels 09:59:34.615 -> Reading tasks 09:59:34.615 -> Sorting tasks 09:59:34.615 -> Read RTCMEM: 09:59:34.650 -> CRC OK, set datetime from RTCMEM 09:59:34.682 -> Reading last channels states : 1 0 09:59:34.761 -> Last reset reason code = 3 09:59:34.920 -> Connecting to wiFi..............

строчка if ( !statusWiFi ) { return; } - исправляет ситуацию, устройство не перезагружается за заданный интервал опроса NTP. Но как только девайс подключается к сети, сразу идет перезагрузка с такими же логами, см.выше.

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

Araris commented 7 months ago

"_NTP_POLLINGINTERVAL - да этот интервал влияет на перезагрузку. " - отлично, мы на верном пути. "строчка if ( !statusWiFi ) { return; } - исправляет ситуацию" - то есть, когда нет коннекта с Wi-Fi мы за временем не ходим. "Но как только девайс подключается к сети, сразу идет перезагрузка с такими же логами" - напоминает ситуацию, когда Wi-Fi уже есть, а Интернета в нём ещё нет. И в момент попытки связаться с недоступным NTP-сервером срабатывает watchdog. ОК, пока что общие рассуждения, позже посмотрю подробнее код. Благодарю Вас, информация полная и качественная ))