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

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

Метки:
  1. Voik

    Voik Гик

    wbitnowparce.lua
    Код (C++):
    print('answer:\n', answer,'\n\n')
    if answer == "" then
        print('Lost answer!')
    else
        dat.err = string.find(answer,'error')
            if not dat.err then
                wth.tserver = string.match(answer, 'temperature":(%p*%d+%.*%d*),')
                dat.tz=math.floor(string.match(answer,'"utc_offset_seconds":(%p*%d+)')/3600)
                print('Timezone:', dat.tz)
                print('Got Temp:', wth.tserver)
            else
                print('\t\t\tWeatherbit Error!!!')
                dat.err = string.match(answer, '"error:"(.+)"') or 'Error.'
                print('\t\t\tWeatherbit Says:', dat.err )
            end
    end  
    answer = nil
     
    Catbear и ИгорьК нравится это.
  2. ИгорьК

    ИгорьК Гуру

    В системе есть данные о текущем номере месяца. Его можно проверять и менять зону. Но я сейчас не на компьютере.
     
  3. Voik

    Voik Гик

    Я тоже думал по ещё какую-то проверку. Но зачем? Просто дать новый параметр этой переменной и всё.
     
  4. ИгорьК

    ИгорьК Гуру

    Можно и так, но если есть данные о зоне от сервера. Не обращал внимания есть они на openweathermap или нет.
    Если нет - правим ТЗ проверкой номера месяца.
     
  5. Voik

    Voik Гик

    Тоже вариант!
    У меня сначала была идея брать ТЗ с https://www.timeapi.io/swagger/index.html
    Но потом наткнулся на open-weather. Я пока посижу на нём - хочу посмотреть, что за сервис, стабилен ли.
     
    Последнее редактирование: 23 дек 2022
    ИгорьК нравится это.
  6. Catbear

    Catbear Гик

    Видимо у меня памяти не хватает :-(
    dat.askw 0
    ask sensor d69543

    Print Narod table:
    d69543 -2.6
    Got Narod Min: -2.6
    Narod: -2.6 OpenWeather: nil

    Set Now: -2.6
    data, sep -026 .

    192.168.1.65 255.255.255.0 192.168.1.254
    12960
    data, sep -026 .



    dat.askw 1
    E:M 2064
    not enough memory
    stack traceback:
    [C]: in function 'dofile'
    setglobfn.lua:67: in function <setglobfn.lua:67>
    data, sep -026 .

    ets Jan 8 2013,rst cause:1, boot mode:(3,5)

    load 0x40100000, len 28252, room 16
    tail 12
    chksum 0xf1
    ho 0 tail 12 room 4
    load 0x3ffe8000, len 2696, room 12
    tail 12
    chksum 0x1f
    ho 0 tail 12 room 4
    load 0x3ffe8a88, len 8, room 12
    tail 8
    chksum 0xc5
    csum 0xc5
    Ћ{‚Ы›oм’l„ђ„

    PS еще:
    PANIC: unprotected error in call to Lua API (_getnow.lua:39: attempt to index global 'wth' (a nil value))
     
  7. ИгорьК

    ИгорьК Гуру

    По сравнению с тем что выкладывал, окончательная версия значительно изменена.

    Устройство надо полностью отформатировать, уточнить ваши данные, загрузить файлы и запустить.

    Сейчас по-отдельности файлы запроса к серверам не запускаются. Только все вместе.

    До выкладывания кода он проработал в железе 5 дней. В общем, внимательнее.
     
  8. Catbear

    Catbear Гик

    Чистил модуль "бланком", затем залил "новый" bin (с архива). Данные уточнил, может, конечно просто "дергал" файлы поодиночке. Попробую запустить согласно сообщению #486.
     
  9. ИгорьК

    ИгорьК Гуру

    Улыбнуло. Это какая-то древняя ашипка. Передаётся от юзера к юзеру под большим секретом. :)

    https://github.com/marcelstoer/nodemcu-pyflasher

    Заливать bin этим, при заливке есть опция "Erase..." Вот её надо выбрать и железка будет с новым bin и вычищена.
     
  10. Catbear

    Catbear Гик

    Я не буду с Вами спорить, но обычно пользуюсь Flash Download Tools (по привычке), так там erase, пишут, не отрабатывает. Попробую и pyflasher.
     
  11. fortk1979

    fortk1979 Нерд

    Добрый день. Пользуюсь проектом несколько лет, крайне удобные лаконичные часы, спасибо. Пытаюсь перейти на последнюю версию 12_22.
    NodeMCU-PyFlasher, с включённой опцией erase, заливаю свежую прошивку nodemcu-release-17-modules-2022-12-21-06-21-53-float.bin
    В распакованных файлах версии 12_22 правлю файлы _getdayandnight.lua _getnow.lua - прописываю у них ключ openweathermap и город
    В файлах _narodask.lua и narodparce.lua прописываю uuid, api_key и сенсоры, как это было и раньше.
    Добавляю в эту папку файл wifi.lua со своими настройками и заливаю файлы в esp'шку.
    Запускаю _renameinit.lua и получаю следующее:


    dat.askw 0
    ask sensor d4162

    Print Narod table:
    d4162 -13.94
    Got Narod Min: -13.94
    Narod: -13.9 OpenWeather: nil

    Set Now: -13.9
    data, sep 1458 :
    14056
    data, sep -139 .



    dat.askw 1
    E:M 2064
    not enough memory
    stack traceback:
    [C]: in function 'dofile'
    setglobfn.lua:67: in function <setglobfn.lua:67>
    data, sep 1458 :

    и дальше модуль в ребут уходит.
    Получается памяти не хватает.
    После ребута по питанию всё тоже самое.

    Мне не понятно, в архиве с последней версией 12_22 содержатся все необходимые файлы или это апдейт и надо копировать и затирать файлы в предыдущей версии ? пробовал затирать - тоже ошибки сыпятся при запуске:

    Try Run setglobals.lua
    > Client: nil
    error loading module '_max7219' from file '_max7219.lc':
    _max7219.lc: bad constant in precompiled chunk
    stack traceback:
    [C]: ?
    [C]: in function 'require'
    setglobals.lua:19: in main chunk
    [C]: in function 'dofile'
    init.lua:17: in function <init.lua:15>
     
    Последнее редактирование: 8 янв 2023
  12. ИгорьК

    ИгорьК Гуру

    Не переживайте, на неделе выложу ещё одну версию, где проблем с памятью точно не будет.

    Что касается последней, то она самостоятельная, и ни один файл от предыдущих не подходит.

    Пожалуйста, обновите прошивку с чисткой памяти и повторите все заново новыми файлами. Где-то вы все-таки допускаете ошибку.
     
  13. fortk1979

    fortk1979 Нерд

    Если она самостоятельная, куда в ней прописывать настройки wifi ?

    Чищу с помощью NodeMCU-PyFlasher установкой галки erase, верно ?

    Попробовал ещё раз с нуля. NodeMCU-PyFlasher прошил последнюю прошивку с опцией erase, скачал архив последней версии 12_22, поправил файлы для народа и openweathermap, залил - ничего не работает, т.к. настроек вайфай нет. Докидываю файл _wifi.lua от предыдущей версии, начинает работать так же как выше, с ошибкой нехватки памяти.
     
    Последнее редактирование: 8 янв 2023
  14. ИгорьК

    ИгорьК Гуру

    Ну, подождите чуть. Может завтра, но, скорее, во-вторник.

    Понимаете, вот перед вами минимум два товарища интересовались этой версией, но потерялись. Обратной связи нет.

    То есть, возможно дело все таки в вашем железе или вашей ошибке.

    wifi.lua - этот файл устанавливает подключение, он годится для любой версии и для любого проекта вообще. Запускается всего один раз. Потом надо перегрузить модуль и забыть о нем.

    В общем, потерпите чуть. В новой версии не будет проблем с памятью и заносить в неё данные будет проще, из одного файла. Эта версия будет переходной к варианту, когда часы можно будет дарить - настройки будут в веб-интерфейсе.
     
    Voik и fortk1979 нравится это.
  15. ИгорьК

    ИгорьК Гуру

    @Voik , у вас последняя версия работает или нет? чего молчите :)
     
  16. Voik

    Voik Гик

    Не прошил я на последнюю версию - сижу на старой.
     
  17. ИгорьК

    ИгорьК Гуру

    Нынче версия.

    1. Обновляем прошивку через Pyflasher.
    upload_2023-1-9_13-39-18.png

    Отключаем модуль физически от шнурка и снова включаем.

    2. Правим через sublimetext/notepad++/etc. единственный файл "_setuser.lua"
    Там все понятно, надеюсь.

    3. Закидываем все файлы через ESPlorer в модуль.
    upload_2023-1-9_13-45-58.png

    upload_2023-1-9_13-46-42.png

    4. Reload:

    upload_2023-1-9_13-47-33.png


    5. Один раз жмем __init.lua:

    upload_2023-1-9_13-48-45.png

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

    upload_2023-1-9_13-50-32.png

    7. Жмем еще раз __init.lua:

    upload_2023-1-9_13-51-36.png

    upload_2023-1-9_13-51-50.png

    ... и потихонечку оно заведется.
    upload_2023-1-9_13-53-13.png

    8. Коль все завелось, давим "_renameinit.lua", ждем перезагрузки и оно будет запускаться само. Можно втыкать в блок питания.
    ---------

    Если что-то не так, есть файлы, с названием _test....lua (из названия файла ясно его предназначение), их тоже можно жмякать не запуская всю железку, но (1.) только после того, как выполнен п. 6. и (2) вы внесли в них те данные, которые нужны для проверки.

    ПыСы. Файл проверки MQTT с ашипкой. Он проверяет подключение и в случае успеха - вылетает :) Исправленный. Вот он:

    Код (Lua):
    brk = '192.168.0.190'   -- Брокер
    port = 1883             -- Порт
    clnt = 'Clock/work'     -- Имя этих часов для подписки
    mqttemp = 'narod/28B1AED5040000A1' -- Температура на улице
    ban = 'sauna/temp'      -- Температура в сауне


    if not dat then dat = {} end
    if not wth then wth = {} end

    dat.brk = brk
    dat.port = port
    dat.clnt = clnt
    dat.mqttemp = mqttemp
    dat.ban = ban
    askfl = function(f)
        node.task.post(function() dofile(f) end)
    end
    local fi=node.LFS.get
    pcall(fi and fi'_init')
    dofile'mqttset.lua'
     

    Вложения:

    • Amperka.zip
      Размер файла:
      469,9 КБ
      Просмотров:
      47
    Последнее редактирование: 9 янв 2023
    Voik нравится это.
  18. ИгорьК

    ИгорьК Гуру

    Дело вот в чем. На ответ от любого сервера по распорядку работы кода я закладываю максимум 2 секунды. За это время ответ должен быть обработан и запущен сборщик мусора. По тому как валится ваше устройство видно, что на ответ от народного мониторинга накладывается запрос к погодному серверу. Памяти, соответственно не хватает.

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

    На старой версии памяти оставалось больше и эти накладки проходили. В новой, видимо, они не допустимы.
    С этим можно справиться, но лучше попробуйте сегодняшнюю версию. Там памяти очень много остается, полагаю все будет работать нормально.
     
  19. Voik

    Voik Гик

    Спасибо! Обязательно протестирую при возможности.
     
  20. fortk1979

    fortk1979 Нерд

    Всё сразу заработало, спасибо !
    Анимация стала намного быстрее отрабатывать.
    Подскажите, как сейчас с количеством запросов у openweathermap и Narodmon ? можно с одинаковыми ключами в 2 или более часов заливать ? Или всё же лучше для каждых часов завести отдельные аккаунты и ключи ?
     
    Voik и ИгорьК нравится это.