ЭЛЕКТРОННЫЕ ЧАСЫ С СИНХРОНИЗАЦИЕЙ
ShIoTiny: часы без пружины или реальное время и как с ним работать
О чем эта статья
Продолжаем цикл статей о ShIoTiny — визуально программируемом контроллере на базе чипа ESP8266.
В этот статье рассказано о часах реального времени в контроллере ShIoTiny, синхронизации времени и использовании узлов работы с часами.
Сайт проекта ShIoTiny
Предыдущие статьи серии.
ShIoTiny: малая автоматизация, интернет вещей или «за полгода до отпуска»
ShIoTiny: узлы, связи и события или особенности рисования программ
ShIoTiny: вентиляция влажного помещения (проект-пример)
ShIoTiny и окружающий мир: подключение датчиков к бинарным входам, дребезг контактов и другие вопросы
ShIoTiny и окружающий мир: аналоговые датчики или АЦП для самых маленьких
Бинарные прошивки, схема контроллера и документация
Вступление
Сегодня мы поговорим о времени. Не о времени, в том смысле, в котором о нем веками спорят философы и конца-края этому спору не видно.
А о том времени, которое мы видим на часах и согласно которому идем на работу, в школу или спешим на свидание.
Вся штука в том, что энергонезависимые часы реального времени в чипе ESP8266 и контроллере ShIoTiny — отсутствуют.
Эта родовая травма контроллера ShIoTiny — целиком и полностью моя вина. Но, что сделано — то сделано.
Как только прошивка увидела свет, возмущенная моим отношением к реальному времени общественность начала тыкать меня носом в этот недостаток.
Так как ошибки надо исправлять, и, на этот раз хотя бы не кровью, то я пошел навстречу все возрастающему числу пользователей моей прошивки и сделал то что смог. А именно — я добавил в прошивку контроллера ShIoTiny узлы, позволяющие более-менее удобно с этим работать с реальным временем.
О часах ShIoTiny
Как уже было сказано, «часов с батарейкой» в ShIoTiny нет. Но в то же время, отсчет секунд, начиная с 1 января 1970 года реализован.
Это то самое время, которое называется UNIX-time, хранится в переменных типа time_t языков С/C++ и которое в 32-битных системах должно закончится 19 января 2038 года.
Но, не бойтесь. Я думаю, что к 2038 году все успеют сделать тип time_t 64-битным и на ближайшие примерно 292 миллиарда лет проблема будет решена. Ну а там еще что-нибудь придумаем.
Заметим, что время в формате time_t называется иногда (и у меня в статье тоже) — timestamp или, по-русски временная метка.Но вернемся к нашему контроллеру. Итак, часы в нем есть, но эти часы сбрасываются в 0 после отключения питания. Отсюда следует тривиальный вывод, что главной проблемой отсчета времени в контроллере ShIoTiny является необходимость синхронизации часов контролера при включении питания. Остальное — чисто технические проблемы
Синхронизация времени
Давным давно устоявшийся способ синхронизации времени в интернете — это NTP-сервера. И первой идеей было сделать узел, который синхронизирует время с заданным NTP-сервером.
Но, немного подышав свежим воздухом и покумекав своей тыковкой я понял, что этот подход идеологически неверный.
Ведь не факт, что пользователь захочет вытащить контролер с прошивкой ShIoTiny в интернет.
И время для синхронизации может присылаться не только с NTP-сервера но и по UDP-multicast или при известном качестве связи — по MQTT.
Поэтому было принято судьбоносное решение — разделить узлы получения времени с NTP-сервера и установки системного времени.
Всего для синхронизации времени было разработано два узла: узел получения времени с NTP-сервера NTP Time
и узел установки системных часов Set Time
Узел получения времени с NTP-сервера в качестве параметров получает имя или IP-адрес NTP-сервера и, через запятую, период запроса времени с NTP-сервера в минутах.
По умолчанию время запрашивается с NTP-сервера каждые 60 минут или 1 час.
На выходе этот узел выставляет 0 до тех пор, пока время не синхронизировано или временную метку — результат последней синхронизации с сервером.
Узел установки системных часов получает на вход временную метку и и устанавливает системные часы в соответствии с этой меткой. Простейшая схема синхронизации системных часов с NTP-сервером приведена на рисунке.
Период синхронизации не задан и по умолчанию равен 60 минут. На рисунке показана временная метка.
Отмечу, что более одного узла получения времени с NTP-сервера и более одного узла установки системного времени на схеме-программе быть не может.
Если вам нужна экзотическая схема синхронизации — то можно использовать UDP-multicast или MQTT. Схемы при этом полностью аналогичны.
Для синхронизации по UDP-multicast, примерно такая, как на рисунке.
А для синхронизации по MQTT (не советую, конечно, но на крайний случай) — такая.
Надеюсь, теперь все понятно с синхронизацией времени системных часов контролера ShIoTIny. Перейдем к узлам получения и обработки времени.
Который час?
Вопрос простой, но ответить на него, порой, не просто. Ведь время в каждой точке Земли — разное. Наша необъятная Родина включает от Калининграда до Камчатки аж 11 часовых поясов.
NTP-сервер, в зависимости от настроек, может возвращать временную метку, привязанную к различным часовым поясам. Как правило, эта временная метка привязана к UTC — всемирному времени.
Но обычно нам нужно местное время того региона где работает наш контроллер. Как тут быть?
А очень просто — для получения временной метки системных часов контролера ShIoTIny был разработан узел Get Time, в котором можно задать часовой пояс в виде смещения времени от -12 часов до +12 часов относительно системных часов контроллера.
Предположим, мы получаем время с сервера pool.ntp.org и синхронизируем системные часы, как в нашем примере ранее. Этот сервер возвращает всемирное время. Нам нужно местное, например Томское, как у меня. Я знаю, что Томск находится в часовом поясе UTC+7. Значит, зададим в узле получение времени смещение +7 или просто 7. Как на рисунке ниже.
А если бы мы жили в Канадской провинции Альберта — то смещение было бы -7 часов. Главное запомните — часовой пояс задается в узле получения времени в часах. И задается он в виде смещения относительно времени системных часов. На выходе узла получения времени выставляется временная метка. Узлов получения времени на схеме может быть несколько.
Сверим часы
Машине очень удобно работать с временем в формате временных меток time_t. Ведь это просто целое число, которое показывает число секунд относительно начальной точки — 1 января 1970 года. В этом формате можно легко находить расстояние между двумя временными точками, отсчитывать периоды и так далее. Это всего лишь сложение и вычитание целых чисел. Но человек — не машина.
Ему гораздо удобнее привычное представление времени в виде года, месяца, числа, часов, минут и секунд. Так уж мы, люди, устроены.
Поэтому были введены узлы перевода временной метки в привычные человеку единицы изменения времени и наоборот — синтеза временной метки из понятных человеку единиц изменения времени.
Называются эти узлы, соответственно, Split Time и Synth Time.
Как все это работает — понятно из рисунка ниже.
Отмечу, что узлы Split Time и Synth Time месяцы (month) и дни недели (wday) отсчитывают с нуля. Для месяцев: 0-январь, 11-декабрь. Для дней недели 0-воскресенье, 6-суббота.
Остальные выходы: день месяца (day), year (год), hour (час), min (минута), sec (секунда) — отсчитываются в привычном виде. Часы, минуты, секунды — от 0 до 59. День месяца — в зависимости от месяца от первого числа до 30го или 31го и, для февраля, до 28 или 29го. Ну а год — он и есть год. 2019й сейчас. Надеюсь, все понятно.
Пример системы
Чтобы не быть голословным, приведу пример использования часов. Разумеется, упрощенный. Предположим, у нас есть влажное помещение, которое мы хотим принудительно вентилировать. Но не всегда, а только когда влажность больше заданного уровня и только ночью.
Ночью — чтобы не мешать людям днем шумом вентиляторов. Ну такие вот мы эстеты и заботимся о людях. Попробуем это реализовать.
Все кусочки схемы нам знакомы. Время синхронизируется с сервера NTP. Пока оно не синхронизировано — узел NTP Time возвращает 0 и реле включения вентилятора — отключено.
За это отвечает верхний по схеме элемент И.
Как только время синхронизировалось, включение-отключение вентилятора определяется текущим временем и уровнем влажности. Как только уровень влажности превысит 70% и время будет от 23:00 до 06:00 — вентилятор включится и не мешая никому проветрит помещение.
Разумеется, константы времени и влажности в реальном проекте лучше заменить на параметры, сохраняемые во FLASH и устанавливаемые, например по MQTT. Да и текущее состояние системы — уровень влажности, текущее, время, состояние вентилятора — тоже не повредит опубликовать в сети, чтобы контролировать систему со смартфона. Но это уже я оставляю простор для вашей фантазии.
Заключение
Вот мы и познакомили поближе наш контроллер с реальным временем.
Хочу выразить благодарность всем, кто присылал мне письма с конструктивной критикой и советами по модернизации программного обеспечения.Спасибо, ребята!
Как обычно — конструктивная критика приветствуется. Кроме этого приветствуются замечания и предложения.
Отправлять всю критику, замечания, предложения можно как обычно в комментарии или на почту: shiotiny@yandex.ru.
Источник: https://habr.com/post/467545/
Время, вперед: современные часы для дома и офиса
Домашние часы — ниша по сути своей достаточно консервативная. Если некоторые наручные часы сегодня подчас представляют собой самый настоящий смартфон, то в сфере комнатных часов прогресс таких вершин ещё не достиг. Особенно это касается таких традиционных вещей, как каминные или напольные часы, рассмотренных нами в предыдущей части.
Дизайн других видов домашних часов сегодня предлагает огромный простор для творческого подхода к оформлению дизайна помещения. Ввиду относительной простоты конструкции, многочисленные производители делают с такими часами все, что хотят: можно найти часы шарообразной формы, или формы деформированного эллипса, со статичной светодиодной проекцией или же мини-доской для рисования маркером.
С помощью домашних часов сегодня можно даже заряжать телефон и слушать музыку — обо всем этом и многом другом и пойдет сегодня речь. И начнем с радиобудильников, они же — радиочасы.
⇡#Настольные часы и радиочасы
FM-радио (а иногда бывает и АМ) — наиболее «технологически антикварная» функция таких устройств, из-за этого они даже свое название получили — «радиочасы». Кто не помнит старых фильмов восьмидесятых, где герои просыпались под внезапно включившееся радио в такой квадратной черной коробочке с ярко-красными цифрами, а то и вовсе с механикой?
Запрограммированный способ пробуждения под радио на самом деле весьма сомнителен, и вообще кажется вариантом еще хуже, чем простой будильник, звонящий противной пронзительной трелью. Радиочасы бывает сегодня еще и с таймером для выключения, и, разумеется, с памятью на определенное количество радиостанций.
Радиочасы Philips с классическим набором функций: радио, часы, радио-будильник
Радио-будильники сегодня в изобилии представлены как в китайских интернет-магазинах, так и на обычных рынках, многие из них снабжены внутренним термометром, показывающим температуру в комнате.
Сложно выделить здесь какие-то отдельные бренды, поскольку именно такой вид домашних полочных часов не делает сегодня только ленивый.
Их можно выделить в отдельный вид настольных часов, о которых речь пойдет далее.
Оригинальной формы настольные часы Oro-bianco понравятся не всем
Простые настольные часы никакого радио не предлагают. Придуманные еще в начале пятнадцатого века, они сегодня могут быть электронными, а могут быть и аналоговыми, особенно если это модели в стиле «ретро». Хотя, встречается самый настоящий мега-современный китч, панк и даже стим-панк.
Часы неизвестного китайского бренда из настоящего жесткого диска
Настольные часы могут быть оснащены как механическим, так кварцевым механизмом, а их корпус может быть как пластиковым, так и металлическим, и деревянным, и стеклянным, и керамическим, да и вообще каким душа пожелает. Все зависит от фантазии дизайнера, и чем буйнее эта фантазия, тем дороже получаются часы. Поэтому и стоить они могут как почти ничего (пару сотен рублей), так и несколько сотен тысяч.
Настольные часы iLive Clock Dock для всех фанатов и обладателей Apple iPhone
Естественно, некоторые настольные часы выполнены с боем, с часовой или получасовой периодичностью, обычно отключаемой, иногда с выбором мелодии. С учетом обилия различных дизайнерских изысков, подобрать часы под определённый интерьер не составляет труда. Главное — не утонуть в океане разнообразных расцветок, форм и моделей.Как в случае с радиочасами, здесь сложно выделить какие-то отдельные бренды: их слишком много, поэтому даже обращать на это внимание не стоит. Подбирайте, что кому нравится внешне, и по функциям, речь о которых пойдет далее.
⇡#И ещё функции
Поскольку «ещё функции» относятся не только к радиобудильникам, их можно уместно вынести в отдельный раздел. К ним относится, например, барометр — прибор, измеряющий атмосферное давление. Встречается он, как ни странно, довольно редко.
Часы «Якорь» российского производства с барометром: для бывших, будущих и диванных моряков
Как, впрочем, и гигрометр (измеритель уровня влажности) или термометр. Гигрометр (как и барометр) больше свойственен погодным станциям, о которых мы поговорим в отдельном материале, но поскольку его иногда добавляют и в часы, упомянуть о нем вполне уместно.
Настенные часы TFA с гигрометром и термометром
Также встречаются часы со встроенным календарём, который обычно показывает текущий день недели, дату и месяц.
Часы с календарем или календарь с часами? Марка Fartech
Питание от батареек в разных группах устройств реализовано по-разному. Современные настенные часы, ак правило, только батарейками и питаются; но настольным, в силу обилия функций, мощности даже девятивольтового «Корунда» порой не хватает, поэтому батарейки в них используются для поддержания функции памяти (дата и время), остальное обеспечивает питание от сети.
Лучше всего покупать часы, которые будут работать от простых батареек или аккумуляторов типа АА или ААА, в крайнем случае — от того же «Корунда».
Часов, которым для питания (для работы или поддержания памяти) нужны маленькие плоские батарейки типа LR44, LR41, CR2032 и т.д.
, лучше избегать, поскольку эти батарейки в разы дороже простых «пальчиковых», менее распространены, и при этом их рабочий ресурс зачастую невелик.
Разумеется, во многих часах присутствует будильник. Обычно он реализован в наиболее противной форме зуммера или писка. В более дорогих моделях может быть монофоническая мелодия, в еще более дорогих — и полифоническая.Одна из наиболее любопытных разработок — бесшумный будильник Silence. Внешне он похож на обычные стильные цифровые настольные часы, только связан Silence по беспроводному каналу с кольцами, надеваемыми на палец или пальцы двух людей. Когда приходит время вставать, кольца вибрируют и ненавязчиво будят владельца.
Бесшумный будильник Silence с кольцами: никаких зуммеров
плеер — показатель более высокотехнологичного устройства. Как правило, воспроизводят такие пластиковые изделия какие-нибудь файлы в формате MP3, записанные в небольшую внутреннюю память, или же компакт-диски на встроенном проигрывателе. Или же на флэш-диск, с которого и считывают.
Китайские часы с CD-аудиоплеером. Все в одном, в общем
Регулировка яркости тоже характерна для некоторых продвинутых моделей современных настольных часов.
Китайские часы марки RCA, с AM/FM-приемником и регулировкой яркости дисплея с помощью ручки
Иногда встречается очень полезная функция синхронизации времени по сигналу DCF-77 со станции во Франкфурте (для Европейской части континента). С этой функцией удобно жить: не надо подводить часы, они делают это сами.
Проектор — весьма модная фишка последних лет.
Все началось на российском рынке много лет назад с первых дорогих часов-проекторов компании Oregon Scientific, но сегодня можно купить неплохие китайские часы-проектор, которые проецируют текущее время на стену или потолок на расстояние 1,5–2 метров с регулируемым углом проекции. Цены на такие модели нынче стартуют от 300-500 рублей, купить и радоваться, особенно по ночам, когда не спится.
Часы марки Electrohome с проектором. Впрочем, марка тут вторична
Кстати, домашними часами можно считать частично и погодные станции, особо полюбившиеся людям в последние годы. Оно и немудрено: китайские дешевы, а брендовые предлагают массу интересных функций, до качественного исполнения которых китайские компании в большинстве своём еще не доросли.
Настольная погодная станция AEG с двумя проекторами
Еще одно веяние последнего времени — часы с площадкой для беспроводной подзарядки смартфонов и планшетов, поддерживающих стандарт QI. Пока таких устройств немного, и к тем, что есть, продают отдельные крышки с поддержкой беспроводной зарядки (например, для iPhone 4/4S или Samsung Galaxy).
Часы-метеостанция Oregon Scientific с проектором и площадкой для беспроводной подзарядки смартфонов
Несмотря на огромное разнообразие моделей настольных часов, на сегодняшний день стоит признать тот факт, что имевшая место ещё десять лет тому назад мощная тенденция по встраиванию в такие модели всяческих дополнительных функций, нынче уступила место обратному процессу – встраиванию часов в любую носимую, портативную и настольную электронику, от игровых консолей и плееров до бумбоксов и телевизоров, и чаще всего эта функция подразумевается сама собой среди огромного списка отображения различной информации. Но для тех, кто ищет необычные аксессуары для оформления своего офиса или дома, всегда найдётся множество невероятных штуковин, среди прочего показывающих время.Если Вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER.
Источник: https://3dnews.ru/821548