Однажды проснувшись утром, увидел вот такую картину на часах - погода за окном отсутствовала =) Самое забавное, что мне всегда казалось, что никогда не смотрю туда, оказывается только казалось. Через пару недель, меня заметно начал напрягать сей факт и прочерк на часах. Пришло осознание того, что погоду то я все-таки поглядывал, хоть и на бессознательном уровне (примерно, как дорожные знаки за рулем автомобиля).
При более детальном изучении датчика, который эксплуатировался более 10 лет за окном, выяснилось, что восстановлению он не подлежит. Перепад температур, воздействие влаги и пыли, сделали своё дело. По временным меркам и судя по отзывам на форумах, мой оказался рекордным долгожителем, кто-то меняет их раз в 2-3 года. К слову сказать, он не то, что бы копеечный, стоимость нового, порядка 1500 рублей, так ещё и поискать нужно. Самостоятельный ремонт и замена кварцевых генераторов на плате, результатов не принесла, более там менять нечего, скорее всего вышла из строя сама микросхема.
В работе оригинального сенсора в периметре квартиры, как всегда, казалось, есть несколько существенных минусов:
- место установки, а именно, сложно выбрать правильное, которое в определенный момент суток, не будет находится под открытым палящим солнцем и датчик не станет показывать все +45 градусов.
- смотреть температуру на солнце малоинформативно, а летом этот период может продолжаться и большую часть дня (не подумайте, что я задрот и смотрю показания температуры каждые 5 минут,
нет-нет, примерно каждые 10, просто градусник, показывающий температуру на солнце в жизни мало кому нужен, если вы не ведущий программы Малахов шоу) - необходимость периодической замены батареек (кстати, аккумуляторная батарейка, не подходит для работы на морозе, парадокс - она замерзает)
- сложность установки датчика за окном, если вы живёте в многоквартирном доме (не все готовы вылезти с дрелью в окно и пробурить дырку под дюбель в нужном месте)
- установка датчика возле окна, опять же выводит на ограничения, в случае его открытия в зимнее время, поток теплого воздуха способен сбить показания градусов на 5-10 зимой + возле фасада многоэтажки, температура всегда выше на 2-3 градуса
Исходя из всех этих условий, сформировались требования:
- датчик, должен располагаться в периметре квартиры, без особого пагубного воздействия окружающей среды
- показания не должны зависеть от места установки, в смысле должны, конечно, температура должна быть передана для текущей локации
- показания должны добываться с проверенного ресурса
- датчик должен питаться от USB и не требовать обслуживания
Исходя из требований, становится понятно, что идея измерять температуру за окном самостоятельно отпадает. Гораздо проще брать показания с публичного ресурса и таких ресурсов благо множество, выбор был сделан в пользу сервиса OpenWeather, т.к. он обладает хорошо документированными, открытыми и главное бесплатными API.
До этого момента имел лишь косвенное представление о работе погодных станций фирмы Oregon. Погрузившись в тематику, понял, что всё, что необходимо для самостоятельного изготовления такого датчика, есть под рукой. А именно, купленный и не нашедший применения, когда-то давно WeMos D1 Mini на базе ESP8266 для работы в Arduino IDE и передатчик на частоте 433 MHz. Т.е. самая простая схема для эмуляции датчика уже имелась и выглядела вот так:
Осталось разобраться в протоколе работы и можно отправлять данные. Во всех версиях протокола используется манчестерское кодирование с разной избыточностью и тактовой частотой 2048Гц, очень детально работа протокола описана вот в этой статье (внешняя ссылка на Habr). Не буду повторять, всё там сказанное, кому интересны глубокие технические детали, может погрузиться в свободное время и самостоятельно найти дополнительную информацию в интернете.
После детального анализа и сборки первого прототипа, выяснилось, что те погодные станции, что есть в моём распоряжении, работают с самым простым датчиком THN132, а готовая библиотека, которую автор статьи подготовил для всеобщего использования, не поддерживает их. Пришлось связаться с ним и совместно, разобраться в работе именно этой модели. Удалось выяснить, что в THN132 немного по другому считается контрольная сумма, огромное спасибо автору, за то, что нашел время разобраться и добавил его поддержку в библиотеку.
Вот так, выглядит готовый собранный вариант устройства (напоминает устройство для активации плитки пластита из фильмов про плохих парней), по размеру, примерно с половину спичечного коробка.
На внешнем ресурсе (onedrive) разместил скетч для среды разработки Arduino IDE. Для работы потребуется модифицировать ваши данные для подключения к WiFi сети и ввести ваш API KEY для сервера OpenWeather, ваши координаты и часовой пояс, т.к. данные о погоде получаются по GMT+0. При желании, можно изменить номер канала, на котором ведется трансляция для погодной станции и тип датчика. Недостающие показания, такие как влажность, можно вытащить из JSON которые получаются с сервера в интернете, все необходимые данные там есть.
Алгоритм работы и ограничения следующие:
- при первичном запуске, датчик подключается к сети и запрашивает данные о погоде с сервера OpenWeather (интервал запроса - раз в 5 минут, можно изменить в скетче (вот эта строчка - postingInterval = find ? 300L * 1000L : 300L * 1000L)
- каждые 40 секунд - происходит трансляция показаний в эфир на частоте 433 Mhz, это необходимый интервал, который требуется для корректной работы станции Oregon, иначе будет иметь место отвал показаний и возможная блокировка датчика со стороны погодной станции
- после первого запуска, обязательно нужно сбросить саму погодную станцию, т.к. именно в момент пуска, станция переходит в режим регистрации и сохраняет ID датчика, который первый поймает в эфире на заданном канале
- не стоит вести трансляцию чаще, чем раз в 40 секунд, т.к. погодная станция может заблокировать датчик. В моём случае так вела себя одна из, другая спокойна проводила обновление показаний, хоть каждую секунду. Если это произошло, то необходимо выполнить сброс (вытащить батарейки), после чего датчик будет заново зарегистрирован
Касательно скетча, кажется, описал все ограничения. Для удобства, добавил возможность обновления по OTA. Какого-то дополнительного функционала, решил не добавлять. Как вариант, можно сделать web-страницу на адресе, по которому работает датчик и отображать там динамику показаний и технические данные работы датчика. Но, что-то мне подсказывает, что вряд ли этим буду пользоваться, решил оставить так как есть. Плюс вижу риск, что дополнительный функционал может повлиять на производительность, при этом интервалы передачи очень критичны для устройств Oregon и могут возникнуть проблемы в работе, например пропуски показаний или блокировка, разбираться с этим не хотелось.
За неимением ничего лучшего, установил датчик в имеющийся кейс от фотопленки, выглядит достаточно эстетично. Запитал датчик, от USB порта тройника в столе и закрепил там же, чтобы подключить один раз и забыть на долгое время. Расположение датчика особо не важно, мощности спокойно хватает, чтобы покрыть всю квартиру:
После нескольких недель мониторинга, каких-то минусов в данной схеме не заметил. Показания температуры, отображаются корректно. Обновление с сервера OpenWeather происходят раз в 5 минут, что более чем достаточно. Вот так выглядит приём показаний со сконструированного датчика, ничем не отличается от оригинального, плюс, всегда актуальная погода с проверенного ресурса:
Вдруг, кто не знает, поэтому побуду ещё немного в роли капитана Очевидность, часы так же умеют синхронизировать время по сигналу точного времени, при условии их нахождения в радиусе приема. Сигнал DCF-77 из Франкфурта добивает в радиусе до 1500 км от местонахождения, т.е. до Москвы этот сигнал как раз доходит и этот сигнал так же можно эмулировать, если вы оказались вне зоны действия, к примеру можно передавать точное время с одного из серверов NTP.