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

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

Метки:
  1. Voik

    Voik Гик

    Отловлена ошибка:
    28.1.25.PNG
    В текстовой файле также лог прилагаю.
    _onebrella.lua прилагаю:
    Код (C++):

    print('\n***************\nРаботает _onebrella.lua\n')
    --[[
    dofile '_onebrella.lua'

    Для того чтобы эти параметры были доступны в тултипах и графиках, в скрипте установите:
    .module Declare
    Attr Double ZTEMP "Температура"
    Attr Double ZCO "CO-2"
    Attr Double ZHUM "Влажность"
    Attr Integer V "Температура на улице"
    Attr Integer H "heap"

    добавить на сервис объект. протокол appHttp, osmand.
    --]]

    -- Функция передачи данных по
    functionSendData()
       localpart="198.244.179.168"

       localurl="/?id="..node.chipid() .."&altitude=" ..node.heap() -- инфа о чипе и памяти

       ifdat.latthenurl=url.."&lat=" ..dat.latend
       ifdat.lonthenurl=url.."&lon=" ..dat.lonend
       ifwth.humi_scd30thenurl=url.."&hum=" ..wth.humi_scd30end
       ifwth.temp_scd30thenurl=url.."&temp=" ..wth.temp_scd30end
       ifwth.co2_scd30thenurl=url.."&co="..wth.co2_scd30end
        ifwth.tempOMthenurl=url.."&temp0="..wth.tempOMend-- для проверки open-meteo
        ifdat.bat>0thenurl=url.."&bat="..dat.batend-- для проверки перезагрузок
        ifdat.bat==100ordat.bat==70ordat.bat==40ordat.bat==10thenurl=url.."&ip="..dat.ipend-- IP adres

        -- Создаем TCP-сокет
        localconn=net.createConnection(net.TCP, 0)

        conn:on("receive", function(conn, str)
            print("Ответ от " ..part..":\n" ..str)
            conn:close() -- Закрываем соединение
        end)

        conn:on("connection", function(conn)
            -- Отправляем HTTP-запрос
            conn:send("GET http://" ..part..url.." HTTP/1.1\r\n" ..
                      "Host: " ..part.."\r\n" ..
                      "Connection: close\r\n\r\n")
        end)

        -- Устанавливаем соединение с сервером
        conn:connect(7729, part)
    end

    if not pcall(SendData) then return end
     
    Если я не ошибаюсь, то ошибка возникает при отсутствии соединения.
     

    Вложения:

    • 28.1.25.txt
      Размер файла:
      6,5 КБ
      Просмотров:
      3
    Последнее редактирование: 28 янв 2025 в 06:59
    ИгорьК нравится это.
  2. ИгорьК

    ИгорьК Гуру

    Таки стало спокойнее :)

    Но... здесь же явные ошибки. Пожалуйста, аккуратнее проверьте что выложили:

    upload_2025-1-28_8-5-14.png

    И "do" в самом начале явно не хватает.
     
    Voik нравится это.
  3. ИгорьК

    ИгорьК Гуру

    И несколько общих соображений.

    Поскольку это ваше соединение, то я не смогу проверить что там происходит с ним.
    Вы затолкали в одну функцию создание данных для соединения, само соединение и еще вызываете его через pcall.

    ИМХО, все в куче. Разложите на последовательность.

    1. Проверьте wifi и наличие соединения с сетью.
    2. Если да - отдельно подготовьте данные.
    3. Создайте нет-соединение с готовыми данными.
    4. Создайте таймер на 2-3 секунды для уничтожения соединения.

    Не нужен там pcall - он, зачастую, сам по себе несет проблемы в NodeMCU.

    Мы же уже опрашиваем погодный сервер - в чем логическая разница то? Все одинаково. Обратите внимание как это происходит.
     
    Последнее редактирование: 28 янв 2025 в 09:31
    Voik нравится это.
  4. Voik

    Voik Гик

    Интересно, что всё это работало и потом повисло.
    Спасибо за советы! Сделаю, но уже не сегодня.
     
    ИгорьК нравится это.
  5. ИгорьК

    ИгорьК Гуру

    Не подвисло, а опять перестало погоду показывать на всех часах. Вот ведь... Только хотел другими делами заняться.

    Буду разбираться.
     
    Voik нравится это.
  6. Voik

    Voik Гик

    У меня всё хорошо с погодой.
    А то, что перезагружается иногда, то это не беда: ведь никто, кроме меня не замечает того.
     
    ИгорьК нравится это.
  7. ИгорьК

    ИгорьК Гуру

    Угу. Есть часы за пределами моей локации, где с погодой тоже хорошо. А здесь - нет.
    Беру текст сформированного запроса и вставляю в строку браузера - ответ есть. С микроконтроллера - просто нет ответа от сервера. "Звезда в шоке."
     
    Voik нравится это.
  8. ИгорьК

    ИгорьК Гуру

    (Пока) Вижу такое решение. Делать запрос погоды из Node Red, парсить, вешать топик на MQTT брокер и забирать часами данные о погоде с него.

    Но это у кого есть Node Red и брокер...
     
    Voik нравится это.
  9. ИгорьК

    ИгорьК Гуру

    Волшебство... Дома работает.

    upload_2025-1-29_17-38-16.png

    Мегавон Мегафон под подозрением...

    Тем не менее, быстро накидал Node Red / MQTT / Home Assistant ребус:

    upload_2025-1-29_17-41-17.png

    На выходе Home Assistant:

    upload_2025-1-29_17-42-40.png
     
    Последнее редактирование: 29 янв 2025 в 18:43
  10. ИгорьК

    ИгорьК Гуру

    Исправляйте. Это несложно. Спрашивайте, если надо еще что-то.
     
    Voik нравится это.
  11. Voik

    Voik Гик

    Как так? ОпСоС провайдер разве может фильтровать запрос от МК, а от ПК пропускать?
     
  12. ИгорьК

    ИгорьК Гуру

    Не знаю как это, но это факт. Кстати, api.openWeatherMap.org вполне доступен через браузер, но мк перестал его обрабатывать - нет ответа:

    upload_2025-1-29_19-36-57.png

    Потому от него и ушел. В соседней теме от Ивана то же самое.