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

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

Метки:
  1. eevgeniy1957

    eevgeniy1957 Нерд

    Все это вчера делал, но попробую еще раз, спасибо.
     
  2. ИгорьК

    ИгорьК Гуру

    Завтра перепроверю ещё раз. Отпишитесь, пожалуйста, по результату.
     
  3. ИгорьК

    ИгорьК Гуру

    Ох, чую, пора код оптимизировать. Есть там чушь невыловленная :)
     
  4. eevgeniy1957

    eevgeniy1957 Нерд

    Заработало! Спасибо огромное, Игорь!
     
  5. ИгорьК

    ИгорьК Гуру

    После строки или после перепрошивки?
     
  6. eevgeniy1957

    eevgeniy1957 Нерд

    После добавления строки и перепрошивки файла askapixu
     
  7. eevgeniy1957

    eevgeniy1957 Нерд

    Это Вы извините, что морочу Вам голову ночью)) Еще раз большое спасибо!
     
  8. eevgeniy1957

    eevgeniy1957 Нерд

    Интересно, что иногда +85 проскакивает, а потом опять нормально)
     
  9. eevgeniy1957

    eevgeniy1957 Нерд

    Однако чередуется- раз правильно, раз +85. Что-то видно не допилено))
     
  10. mikhail09p

    mikhail09p Гик

    Доброе утро.
    Игорь, точно
    Код (C++):
    dat.maintemp=dat.apixu
    ?
    В askapixu.lua немного не так, как Вы Пишете, там не dat. a wth.
    Код (C++):
    getdata = function ()
        --print('answer:\n\n\n', answer,'\n\n')
        if answer == "" then
            print('Lost answer!')
        else
            dat.err = string.find(answer,'error')
            if not dat.err then
                wth.maxtemp, wth.mintemp  = string.match(answer,'maxtemp_c":(%p*%d+.%d*),.+mintemp_c":(%p*%d+.%d*),"')
                wth.codenow, wth.codef = string.match(answer,'"code":(%d+).+"code":(%d+)')
                wth.apixu = string.match(answer,'temp_c":(%p*%d+.%d*),')
                wth.codef = tonumber(wth.codef) or 0
                print('Got Sky codes:', wth.codenow, wth.codef)
                print('Got Temp:', wth.apixu)
                print('Got Max:', wth.maxtemp,'Min:', wth.mintemp)
            else
                print('\t\t\tApixu Error!!!')
                dat.err = string.match(answer,'"message":"(.+)"') or 'Error.'
                dat.errcode = string.match(answer,'"code":(%d+)') or '0'
                print('\t\t\tApixu Says:', dat.err, dat.errcode)
            end
        end  
    end
     
  11. ИгорьК

    ИгорьК Гуру

    Опс. А вы, случаем, версии не попутали?
    В первой версии таблицы wth нет.
     
  12. mikhail09p

    mikhail09p Гик

    А. Извините, невнимательный. Это 3 версия.
    Между прочим, если позволите, 3 рекомендую вместо 1... :)
    Моё мнение: 3 градуса разницы между реальной и прогнозом - это неправильно. Я показываю реальную температуру на улице.
    Код (C++):
        if min ~= 100 then
            wth.narod = string.format("%.1f", min)
    --        if wth.apixu then
    --            if math.abs(tonumber(wth.apixu) - min) < 3 then
    --                wth.maintemp = string.format("%.1f", min)
    --            else
    --                wth.maintemp = wth.apixu
    --            end
    --        end
        else
            if wth.apixu then wth.maintemp = wth.apixu end
            print('Lost Nrod')
        end
        print('Narod:', wth.narod, 'Apixu:', wth.apixu,'\nNow: ',wth.maintemp)
        exitn()
    end
     
  13. ИгорьК

    ИгорьК Гуру

    Вы хотя бы представляете сколько мне ваша невнимательность стоила времени?
     
    KindMan нравится это.
  14. mikhail09p

    mikhail09p Гик

    Так вроде ж около 20 минут... :oops: Ещё раз извините. Постараюсь быть повнимательней.
     
  15. ИгорьК

    ИгорьК Гуру

    Плюс 1.5 часа "изучения" кода на смартфоне.

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

    Вот передо мной часы - они показывают все правильно.

    Будет время, ещё раз перепроверю.
     
    Последнее редактирование: 26 мар 2019
  16. mikhail09p

    mikhail09p Гик

    Нк что Ви, Игорь, какие могут быть к Вам претензии, что Вы! Вам только благодарность.
     
  17. ИгорьК

    ИгорьК Гуру

    А теперь поразмышляем. Уже не над тем, что я мозг сломал от вашей ошибки и изменения кода, а над вашей логикой.

    Вы живете в городе, где на народе есть всего два датчика, кем-то изготовленные. Всего два! Кто их сделал и как они работают - нам не известно.

    1. 85 - это температура ошибки датчика DS18b20. То есть, когда его неправильно опрашивают или у него плохая проводка - он выдает 85. Итак, например, один из датчиков в вашем городе просто не выдается мониторингом, второй выдает 85. Или оба лажают.

    Причем мониторинг прекрасно знает об этой ошибке, и когда он показывает на сайте некоторую температуру - он показывает последнюю нормальную целые сутки! А по запросу - ВЫДАЕТ ТЕКУЩИЕ ПОКАЗАНИЯ ДАТЧегА. Я уже на этом обжегся. Об этом, кстати, где-то на форуме писал.

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

    В моем коде стоит защита от указанных выше случаев - сравнение с температурой APIXU. Вы ее сняли!
    Но я то об этом не знал!

    Я то знаю, что 85 в коде стоит(стояло) в srtglobals.lua, будучи однажды измененной - 85 нигде больше не возникает, а от получения с народа защищено сравнением. То есть "то 85 то правильно" - просто не может быть!

    Теперь подумайте - могу я задачу решить дистанционно?

    В общем, оставьте, пожалуйста, проверку на APIXU показаний с народа, или придумайте сами способ убеждаться в достоверности показаний с него. Помните, там устройства ваяют такие же ...
     
    Последнее редактирование: 26 мар 2019
    DetSimen нравится это.
  18. mikhail09p

    mikhail09p Гик

    Игорь, это не у меня ошибки (85). Это у eevgeniy1957.
    У меня всё работает. Версия 3. Датчик на народе один мой. На телефоне я его тоже вижу, так, что, если на часах и на телефоне будет разница - будем решать.
     
    ИгорьК нравится это.
  19. ИгорьК

    ИгорьК Гуру

    Ой, ИЗВИНИТЕ! Реально не выспался!
    Но, думаю, и вам будет полезно :)
    Извините!
     
  20. ИгорьК

    ИгорьК Гуру

    У вас первая версия нормально работала?