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

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

Метки:
  1. IvanUA

    IvanUA Гуру

    Если не затруднит, с удовольствием выслушаю.
    А что им стоит его завтра снова принять... А вы будете не готовы ;)
     
  2. ИгорьК

    ИгорьК Оракул Модератор

    Как у тебя это реализовано?
     
  3. ИгорьК

    ИгорьК Оракул Модератор

    Я имею в виду общую логику, а не код.
     
  4. SergeiL

    SergeiL Оракул Модератор

    Прикол был :).

    Зимой были в Финляндии, приехали я, жена, дочка, заселились в номер, вечером погуляли по городу.
    Привыкли, что разницы между нашим и Финским временем нет.
    Утром встали на завтрак, завтрак до 10:00, пришли в 9:30, позавтракали. После завтрака жена собирается по магазинам, говорит странно, но ее наручные часы показывают неправильное время.
    Сравнили с нашими телефонами, моими наручными (Смарт часы), часами на телевизоре, все одинаково, а у нее не правильно, ну думаем, дочка крутила их в руках - вот и накрутила.
    Переставили - ушла по магазинам.
    Я собираюсь, ношу вещи в машину, смотрю на часы в машине, и вижу, что время на час отличается.
    Тут до меня дошло, что в Финляндии есть зимнее время, и оно на час отличается. :)

    Вот так! А телефоны, смарт часы, переставили время, мы даже и не заметили.;)
     
  5. IvanUA

    IvanUA Гуру

    Формула не моя - это все есть в примерах и много есть в нете расписано
    Код (C++):
    udp.read(packetBuffer, NTP_PACKET_SIZE);
        unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
        unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
        unsigned long secsSince1900 = highWord << 16 | lowWord;
        const unsigned long seventyYears = 2208988800UL;        // Unix час станом на 1 січня 1970. в секундах, то 2208988800:
        unsigned long epoch = secsSince1900 - seventyYears;
        boolean summerTime;
        if(month < 3 || month > 10) summerTime = false;             // не переходимо на літній час в січні, лютому, листопаді і грудню
        if(month > 3 && month < 10) summerTime = true;              // Sommerzeit лічимо в квіні, травні, червені, липні, серпені, вересені
        if(month==3 && (hour+24*day)>=(3+24*(31-(5*year/4+4)%7))||month==10&&(hour+24*day)<(3+24*(31-(5*year/4+1)%7))) summerTime=true;
        epoch+=(int)(timeZone*3600+(3600*(isDayLightSaving && summerTime)));  
    Смысл прост от NTP сервера получаем количество секунд прошедшее от 1 января 1970 года.
    В переменную summerTime - пишем флаг true если сейчас "летний" период - летнее время и нужно добавить час.
    isDayLightSaving - это флаг вклчения перехода на летнее время, я его меняю в веб морде.
    Ну и собственно если переход разрешен и сейчас летнее время +(3600*(isDayLightSaving && summerTime)) - то добавляем еще один час :)
    Ну тут логика в коде)))
     
    ИгорьК нравится это.
  6. ИгорьК

    ИгорьК Оракул Модератор

    Спасибо! пусть лежит. Для "дорогих гостей" делать не буду, но коль что изменится - обязательно.
     
    IvanUA нравится это.
  7. IvanUA

    IvanUA Гуру

    Удобная штука. Въезжаю в Польшу и телефон четко подтягивает время с сети оператора.
    А въезжаю в Украину то надо править ручками...
     
  8. SergeiL

    SergeiL Оракул Модератор

    Та же фигня была на WinMobile, на яблочных девайсах все работает правильно, даже не замечаю. ;)
     
  9. Mitrandir

    Mitrandir Гуру

    Телефоны могут время брать с сотовой вышки.
     
  10. SergeiL

    SergeiL Оракул Модератор

    Могут, но не все операторы в России передают время. :)
    Много лет прошло, но Мегафон так и не передает время.
    МТС - передает.
     
  11. Mitrandir

    Mitrandir Гуру

    Так у вас в Финляндии дело было
     
  12. SergeiL

    SergeiL Оракул Модератор

    Игорь, а не проще получать информацию о сдвиге времени из OH или Домотикс.
    Тогда в одном месте поправил, и все часы показывают правильно. ;)
     
  13. ИгорьК

    ИгорьК Оракул Модератор

    Конечно проще. Но при двух условиях:
    - если не пытаться осчастливить все человечество, поскольку у всего человечества нет ОН или Домотикз
    - таки оно просто не надо в России :)


    SmartSelect_20190325-231300_Samsung Internet.jpg
     
    Последнее редактирование: 26 мар 2019
    SergeiL нравится это.
  14. SergeiL

    SergeiL Оракул Модератор

    Так кода нужно будет так и сделаем ;)
     
  15. SergeiL

    SergeiL Оракул Модератор

    Я "бывает" езжу в командировку, привык к часам, - проснулся - посмотрел время.
    Поэтому всегда перепрошиваю под часовой пояс. ;)
     
  16. ИгорьК

    ИгорьК Оракул Модератор

    Эти побольше будут. Вряд-ли я их когда потаскаю.

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

    Второй вариант будет иметь другую задачу: собрать всех в баню :)
     
  17. ИгорьК

    ИгорьК Оракул Модератор

    Сервис apixu.com отпускает задаром только 10000 ответов в месяц.
    10000/31 = 322 ответа в день
    322/24 = 13 ответов в час
    60/13 = один запрос в 4,5 минуты.

    А если запросы превышены? Будет так:
    upload_2018-9-10_10-6-35.png

    А как узнать?
    Перейдя по ссылке: http://api.apixu.com/v1/forecast.json?key=ВАШ_КЛЮЧ&q=Moscow

    А потом... Случилось так:
    upload_2018-9-10_14-48-35.png
     
    Последнее редактирование: 10 сен 2018
  18. ИгорьК

    ИгорьК Оракул Модератор

    И еще чуть про apixu. Обнаружил полезную фичу. Ее применение обеспечивает существенную экономию памяти при запросах погоды, а именно:
    upload_2018-9-10_14-53-41.png

    Жмакнув по стрелке, можно определять содержание сообщения сервера на ваш ключ!
    Вот какой ответ мне удалось скомпоновать:

    upload_2018-10-30_9-33-23.png

    Думаю, некоторых товарищей порадует такой поворот дела.
     
    Последнее редактирование: 30 окт 2018
  19. ИгорьК

    ИгорьК Оракул Модератор

    Потеря ключа apixu заставила меня пересмотреть свое поведение. В очередной раз. :)
    Новая версия. Внешне отличается от прежней тем, что если нет каких-то данных - их нет, не отражаются никакие "85" градусов, etc.
    Что есть - то есть, чего нет - того не видно.

    Изменения внутри более существенны.
    • перепродумал некоторые элементы, повышающие стабильность в связи с неожиданными ответами на http запросы;
    • все таки добавлен модуль запроса данных с народного мониторинга. Модуль может обрабатывать до пяти датчиков температуры и усреднять их значение;
    • Модуль apixu при получении кодов ошибки 2006 (недействительный ключ) или 2007 (превышено разрешенное количество запросов) перестает дергать сервер. Коды ошибок и решение по ним выводятся в консоль.
    При других кодах ошибок запросы будут повторяться.
    Выглядит это так:

    upload_2018-9-11_13-40-59.png

    Установка временной зоны теперь в файле setglobals.lua:
    upload_2018-9-12_10-16-58.png

    В дополнение к первому посту придется курить два файла, в связи с Народным Мониторингом:

    upload_2018-9-11_13-43-54.png

    upload_2018-9-11_13-44-40.png

    Версия три и Настройка Народного Мониторинга здесь.

    UPD 26.03.2019 Файл Amperka12_16alltzMos2.zip удален. Версия неактуальна.
     
    Последнее редактирование: 29 апр 2019
    sys нравится это.
  20. IvanUA

    IvanUA Гуру

    А как понять что данных нет?