Часы на NodeMCU Lua + MAX7219 минус все лишнее.

Тема в разделе "Глядите, что я сделал", создана пользователем ИгорьК, 4 сен 2018.

Метки:
  1. ИгорьК

    ИгорьК Гуру

    Тут вопрос, скорее, к @serg3295 - он куда круче волочет в этом. Насколько мне помнится, для версии 5.3 Lua, которая здесь трудится, такое поведение collectgarbage вполне обычно. Как видно из графика, нисходящего тренда нет, память не течет.

    Мне кажется, в оригинальной версии в целом куча побольше была, видимо вы туда еще что-то добавили ;) И это радует. Хотя, возможно это код с каптив-порталом, там я глубоко кучей не занимался и код не чистил.

    Часы работают? Как часы? :)
     
    Voik нравится это.
  2. Voik

    Voik Гик

    Понял. Спасибо!
    Прекрасно работают. Одна из версий показывает и дату и микроклимат, и прогноз. И шлёт инфу куда надо :D
     
    ИгорьК нравится это.
  3. serg3295

    serg3295 Гуру

    Если всё работает, значит нормально.

    В Lua 5.3 сборка мусора так действует по умолчанию.
    Если вам для отладки понадобится агрессивная сборка мусора, то выполните команду
    collectgarbage("setpause", 0); collectgarbage("step", 100)

    График изменится радикальным образом. ;)
     
    ИгорьК и Voik нравится это.
  4. Voik

    Voik Гик

    Добавил вчера свои переменные: kaunter, kuup, bukva в таблицу dat, и разброс стал меньше.
    Работает также стабильно.
    chart (heap0).png

    З.Ы.
    Хотя нет. Это был просто ночной режим. Сейчас картина прежняя. Ну да ладно. Главное - работает!
     
    Последнее редактирование: 27 дек 2024
    ИгорьК нравится это.
  5. Voik

    Voik Гик

    Вчера-таки зависли часы.

    Иногда мой рутер теряет интернет, но вайфай раздает.
    Сегодня сделал эксперимент.

    При наличии вайфай без выхода в интеренет выдаёт ошибку:
    Снимок28.12.24.PNG
    Делал так: на смарте поднял точку.
    Затем отключил смарт от интернета, точка осталась.
    Затем старт МК.

    Можно ли как-то отловить это и не дать зависнуть?
     
    Последнее редактирование: 28 дек 2024
  6. ИгорьК

    ИгорьК Гуру

    Вам посчастливилось словить ошибку "Guru meditation error". Это имеет отношение скорее к прошивке, чем к кодингу. Вернусь из отпуска - посмотрю. Но с точки зрения этих часов ошибка не имеет особого значения - часы в фоне перегрузятся вы и не заметите.
     
    Последнее редактирование: 28 дек 2024
    Voik нравится это.
  7. serg3295

    serg3295 Гуру

    @Voik Если у вас есть возможность подключиться к устройству программой idf.py monitor то тогда в backtrace вы увидите имя функции, которая вызвала ошибку.
    В Линуксе это просто, надо набрать в корне каталога nodemcu-firmware команду make monitor. В Windows даже не подскажу.
     
    ИгорьК и Voik нравится это.
  8. Voik

    Voik Гик

    Хочу уточнить, что это для версии с порталом:
    lua.PNG

    Предыдущая версия зависает при переходе на ночной пежим во время показа не времени (температура дома, например).
    Нашёл пока такое решение:
    в bright.lua добавил dat.notime = false
    Было:
    Код (Text):

    -- -- Определяем день сейчас или ночь
    if tm.hour >= dat.morn and tm.hour < dat.even then
        dat.night = false
    else
        dat.night = true
    end
     
    Стало:
    Код (C++):

    -- -- Определяем день сейчас или ночь
    if tm.hour >= dat.morn and tm.hour < dat.even then
        dat.night = false
    else
        dat.night = true
       dat.notime = false
    end
     
     
    Последнее редактирование: 30 дек 2024
    ИгорьК нравится это.
  9. ИгорьК

    ИгорьК Гуру

    Её ещё тестировать и тестировать. Сейчас она уже изменилась. Хотя все равно на скорую руку. Спешил к Новому году.

    Замечательно!
     
    Voik нравится это.
  10. Voik

    Voik Гик

    Благодаря работе ув. @ИгорьК добавил веб-интерфейс. Возможности на картинке.
    Screenshot_2025-01-21-06-11-40-563_org.mozilla.rocket-edit.jpg
    Добавил вывод последних цифр айпи адреса на дисплей. После включения через некоторое время (зависит от kaunter) выводиться один раз.
    Делал изменения в коде, архив прикрепляю.
     

    Вложения:

    Последнее редактирование: 21 янв 2025 в 09:05
    ИгорьК нравится это.
  11. ИгорьК

    ИгорьК Гуру

    Хорошая работа!

    Таки, а чего не сделали сохранение и после перезагрузки :)

    Смотрите, где-нибудь в setglobal.lua сделайте такое:
    Код (Lua):
    if file.exists('newsettings.lua') then dofile('newsettings.lua') end
    и пишите в этот файл новые настройки.
     
    Voik нравится это.
  12. Voik

    Voik Гик

    Это, очевидно, верное решение - надо подумать.
    Я, однако, читал, что негоже часто писать - сокращает жизнь МК.
     
    ИгорьК нравится это.
  13. ИгорьК

    ИгорьК Гуру

    Это верно! Не рекомендуется по 50 раз на дню переписывать параметры :) Так МК проживет 1000/50 дней
     
    Voik нравится это.
  14. Voik

    Voik Гик

    Добавил возможность записать изменения, сделанные в веб-интерфейсе, в файл.
    Сделал это в виде ссылки в футере.
    Screenshot_2025-01-24-13-54-24-208_org.mozilla.rocket.png
    Переменные, которые можно изменить в веб-интерфейсе поместил в отельную таблицу, чтобы было проще записать в файл.
    Можно записать только раз в сутки.
    Screenshot_2025-01-24-13-54-36-729_org.mozilla.rocket.png
    В _setuser.lua проверяется при старте часов на наличие файла spasi.lua. И если есть, то данные берутся оттуда.
     

    Вложения:

    ИгорьК нравится это.
  15. ИгорьК

    ИгорьК Гуру

    Смотрите, вместо этого можно поступить так: в 0:00, один раз в сутки, проверить данные на изменение и записать их. В течение дня если что-то меняется - остается в "оперативной памяти". Ну если у вас такое хобби, почему бы не поразвлекаться. ;)
     
    Voik нравится это.
  16. Voik

    Voik Гик

    Такой вариант интересен, спору нет, но мне не подойдёт, потому что у меня часы перегружаются 2-4 раз в сутки.
    Это, видимо, связано с отвалом интернета.
     
    ИгорьК нравится это.
  17. ИгорьК

    ИгорьК Гуру

    Полагаю, часы у вас все еще в стадии тестирования. Выложите, пожалуйста, логи перезагрузки.
     
    Voik нравится это.
  18. ИгорьК

    ИгорьК Гуру

    Даже это можно обойти с помощью модуля rtcmem. И, кажется, он есть в прошивке. Ясный пень, это костыль. Но нам же важно решение ;)
     
    Voik нравится это.
  19. Voik

    Voik Гик

    Часы выполняют свою функцию на стенке.
    Как Вы писали ранее перезагрузку крайне сложно заметить. Я, однако, для этого использую переменную, которая при загрузке равна 100, и уменьшается на 1 через каждые пять минут. Эти данные идут на сервер, а тот настроен отправлять на мыло, если 100.
    Но за совет благодарю! Поставлю ночью на тест.
    Интересно. Но туда я пока не полезу.
     
    ИгорьК нравится это.
  20. ИгорьК

    ИгорьК Гуру

    Есть более интересный вариант. Какова логика его использования.

    При старте часов в первый момент их время находится в 1970 году. В файле main.lua вы можете заметить, что это время игнорируется, но как только часы получают время отличное от 1970 года, вы можете однократно забрать данные node.bootreason(), прикрутить к ним текущее время, поднять флаг и куда-то их отправить.

    --------------------------
    Такая проверка осуществляется и в файле setglobal.lua. Там ее цель - предотвратить изменение данных на дисплее в момент незапланированной перезагрузки. Именно поэтому она и происходит незаметно для пользователя.

    К сожалению, node.bootreason() не заменит вывод лога. Поэтому, чтобы его словить, надо переименовать файл init.lua на "ручное" использование, запустить часы, присоединенными к терминалу и сделать так, чтобы компьютер не ушел в сон, а выловил перезагрузку и ждал вашего прочтения.

    Все это большой геморрой, но если есть желание разобраться... ;)
     
    Voik нравится это.