Category: ,

Простая погодная станция

О том, как можно потратить много усилий впустую и радоваться этому.

Сперва может показаться, что речь пойдет о неудавшемся проекте. Но это не так! Проект был реализован в полном объеме и показал себя великолепно. Почему тогда «впустую»? Станет ясно самом конце.

Итак… Задача: соорудить простую погодную станцию с базовым функционалом для использования в контексте автоматизации различных функций умного дома. В частности, для оптимизации логики системы полива газона и управления светом в помещениях. Ну и, конечно, для информирования мясных мешков о всех тех ужасах, что ждут их снаружи, если они осмелятся покинуть шлюзовую камеру своего жилого модуля на этой негостеприимной планете.

Как всегда, я постараюсь охватить тему немного шире, чем «припаять это к этому, засунуть в корпус, поздравляю«.


Скажем, все имеющиеся сейчас в доме выключатели света имеют на борту сенсоры, определяющие уровень освещенности. К этому уровню (вкупе с датчиком движения) привязана автоматика работы выключателя.

На деле, оценка освещенности помещения с позиций «темно»/»светло» оказалась нетривиальной задачей. Ведь сенсор измеряет уровень освещенности только непосредственно на самом себе. И, например, в пасмурный день, он, в этой своей точке, может посчитать, что стало «темно». Хотя, на самом деле, в целом по помещению достаточно еще света чтобы не включать лампочку. Аналогичная ситуация возникает и вечером, когда в других помещениях дома начинает загораться или гаснуть свет, влияя на некий глобальный фон освещенности во всем доме.

Получается, что такой параметр, как «темно»/»светло» связан не с фактическими показаниями сенсора, а с очень непостоянными субъективными оценками человека.

Я проводил эксперимент. В течение недели, в разное время дня и ночи, с помощью ручного люксометра сохранял в блокнотик значения для освещенности, при который считал что в комнате стало «темно» и будет уместным включить свет.

Эксперимент показал, что одно и то же значение люксометра, в одной и той же точке помещения, может субъективно воспринимается, как «темно» — вечером или как «светло» — утром. Одно и то же значение!

Потому, что люксометр не учитывает громадное количество иных факторов из которых складывается общая картина освещенности для человека.

Однако, проблему можно решить. Для этого достаточно вынести измерения на более глобальный уровень, где условия освещенности более консистентны. Не плодить сложные алгоритмы условий для локальных фотодатчиков помещений, связывая их с временем суток, коэффициентами, поправками, проверкой уровня освещенности в смежной комнате и т.п., а просто «посмотреть», как оно там сейчас на улице.

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

К чему оно это все тут про освещенность? А к тому, что смотреть «как оно там сейчас на улице» — прямая задача погодной станции.


Вот другой пример.

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

Так вот… Погода постоянно требовала вмешательства в расписание полива газона. Потому что поливать траву, когда с неба жарит солнце во все свои 100K lx. — плохая идея. Вся трава «сгорит». Ладно, значит поставим расписание на полив ночью. Проблема решена? Нет.

Потому что — субтропический климат. И у него в определенные сезоны по расписанию на ночь запланирован дождь. Поливать газон во время дождя — плохая идея. Да и день-другой после него — тоже. Ладно, будем вручную следить за сезонами и переключать режим полива на «один раз в три дня», надеясь что наше расписание не совпадет по фазе с расписаниям дождей у погоды. Проблема решена? Нет.

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

Ну и т.п. В итоге, вместо автоматики имеем почти ручное управление системой полива. С неизбежным склерозом на тему когда чего куда надо включить или выключить.

До кучи, древний контроллер очень любил спорадически перезапускаться, сбрасывая свои настройки на «по умолчанию», а «по умолчанию» там у него прописан такой кошмар, что работа поливалок становилась подобной «русской рулетке». Внутренние часы сбрасывались на нули, время полива выставлялось на некие условные «шесть часов вечера» относительно времени сброса, интервалы работы поливалок расставлялись вообще рандомно и т.п.

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

Эта система полива бесила нас годами невероятно!

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

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

О том, как была реализована новая система управления поливом газона — тема отдельной статьи. Но тут было важно все это упомянуть для общего понимания того, почему погодная станция нужна мне именно в таком виде, а не каком-либо еще.


А то что погодная станция нужна лично человекам вне темы автоматизации дома — ясно и без того. Просто, как информационная система.

Кроме того, следует признать, что электричество, интернет и сотовая связь в наших краях — особы весьма непостоянные. Не могу припомнить ни одного урагана, при котором та или иная особа не сдохла бы. А то и все сразу. Они тут давно уже являются предметом постоянных шуток и считаются за «местный колорит»…

Смешного мало в этом, если честно. В последние годы очевидные недостатки в инфраструктуре электричества и связи начали расти, как снежный ком и являются сегодня одной и самых серьезных проблем города. Ее решают. Но медленно.

Оно конечно «Houston strong!», но…

Мы так сильны, что становиться
Сильнее некуда уже.
И все, что нас не убивает,
Не убивает нас. И все.

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

Короче, своя локальная погодная станция на батарейках есть почти в каждом доме и считается обязательным бытовым прибором наравне с микроволновками и утюгами.


До сего момента, в доме мы благополучно обходились старенькой погодной станцией от AcuRite (уж и не могу вспомнить, какой именно модели):

Хрень с пропеллером — стоит на крыше, дисплей с картинками — в доме. Провода не нужны. Батарейки там и там — хватает надолго (на год и более, в зависимости от бренда батареек).

Некоторое время я размышлял на тему того, как перехватывать данные с массива сенсоров на улице и заворачивать их на сервер умного дома. «Из коробки» оно такое не умеет. Что не удивительно — этой модели станции стукнуло без малого дюжина лет. Тогда еще про такие плюшки не думали особо. В интернетах есть несколько интересных решений в среде DIY-щиков и я их неспешно посматривал, не шибко педалируя тему.

Но все решилось внезапно и без моего участия.

В какой-то не особо прекрасный день, я окинул привычным взглядом экран консоли станции на стене и увидел на ней прочерки на месте значений. Признак того, что данные с массива сенсоров не поступают на обработку. Думал, может, батарейка сдохла. Но, нет… Не батарейка…

После непродолжительного путешествия на крышу дома, на бренную землю были возвращены обнаруженные там наверху останки станции:

Накануне приходил Ктулху с грозой и, видимо, этот леденящий ужас из глубин прикончил и без того уже ставшее ветхим устройство. Одно ухо анемометра унесло в Р’льех. Отгрызенное перо флюгера валялось на крыше отдельно, застряв в шингалсах. Внутрь станции, судя по всему, попала вода, устроив полный фхтагн электронике — пластик корпуса стал хрупким, как яичная скорлупа, и покрылся мелкими трещинами, «выродившись» за десятилетие под волнами ультрафиолета.

Грустно, конечно, но станция прожила свой долгий век вполне достойно. Почти 12 лет! Срок немалый для бытового прибора. Так, что претензий у меня к ней никаких нет. Свои сто долларов стоимости она отработала на все эти самые сто! Поэтому с почестями была похоронена в мусорном баке и помянута самыми добрыми словами.

Ну раз так, значит нужно найти ей замену. Сразу уже с учетом всех новых потребностей. Выбор между «купить» и «сделать» склонился в сторону «сделать». Во-первых, стоимость надежных современных станций, умеющих в интеграцию с умным домом, порядка 200-300 долларов. Это много. Во-вторых, на тот момент я уже обладал необходимыми знаниями/возможностями/инструментами/запчастями, чтобы сделать такую станцию самостоятельно, не особо напрягаясь. В-третьих, мне было просто интересно попробовать. В-четвертых, а кто меня остановит?


Условно проект был разбит на два этапа. Первый этап — реализация минимально необходимого функционала. Второй этап — дополнительные плюшки.

Под категорию минимально необходимого функционала попадали: температура, влажность, давление, осадки и освещенность. Этих данных со страшной силой ждала прорва внутренней автоматики дома, повизгивая от нетерпения.

Такие же вещи, как скорость/направление ветра, прогноз погоды до конца голоцена, оповещения от NWS, живой стрим от сурка Фила, показания «погодного камня» и т.п. — было решено считать дополнительными плюшками второго этапа.

На самом деле, погодная станция — штука до смешного простая. Это проект уровня «новичок», который по силам вообще кому угодно, кто хоть сколько бы немного заинтересовался темой.

Для реализации минимальных функций нужно всего несколько уже существующих в природе готовых компонентов:

  • BME280 — хороший надежный модуль для измерения температуры, влажности и атмосферного давления.
  • BH1750 — модуль для измерения уровня освещенности.
  • CPRSDBEX — датчик дождя.

Казалось бы, BME280 можно заменить на более простые и дешевые DHT22 или DHT11. Но последние не слишком пригодны для использования на улице. И у них не очень удобный для нашего климата диапазон рабочих температур — тут они реально будут на пределе своих возможностей существовать. Давление они тоже не показывают — только температуру и влажность. А давление — весьма важный «предсказательный» фактор для работы погодной станции. В общем, BME280 — вполне адекватный выбор, если обеспечить ее надлежащей защитой от внешней среды! (см. ниже)

BH1750 для освещенности, в принципе избыточен. Можно обойтись и простым фоторезистором. Но, в данном случае, я хотел сократить количество проводов от сенсоров к контроллеру. А при таком раскладе, BH1750 может висеть гирляндой на том же самом проводе, что и BME280 т.к. оба они умеют работать с шиной I2C.

Датчик дождя CPRSDBEX от RainBird не умеет в I2C. Он вообще ни во что не умеет. Это просто микрик клац-клац. Внутри есть столбик из пробковых шайбочек на палке. На шайбочки попадает вода, они ее впитывают и разбухают, увеличивая общую длину своего столбика. Столбик давит на микрик и тот клацает в замкнутое состояние. Ура, есть дождь! Высохнув, шайбочки скукоживаются обратно, их столбик сокращается, перестает давить на микрик и тот отклыцывает обратно в разомкнутое состояние. Ура, нет дождя!

Более того, вы можете затягивать и ослаблять внешний колпачок корпуса, регулируя тем самым зазор, в пределах которого распухает пробковый столбик, прежде чем дотянуться до микрика. Т.о. можно довольно точно регулировать при каком количестве осадков сработает детектор. При небольшом количестве осадков столбик не сможет распухнуть настолько, чтобы успеть замкнуть микрик. Автоматика!

Естественно, такой датчик не сможет показать точное количество выпавших осадков во время дождя. Можно будет только сказать , что, например «больше четверти дюйма», но не то, сколько там именно выпало миллиграмм ртутного столба в час… И, конечно, эти шайбочки нужно регулярно менять т.к. со временем они теряют свои распухательные свойства по мере загрязнения и обрастания плесенью. Раз в год-два нужно устанавливать новые.


Ах, да… Чуть не забыл… Конечно, к этому всему нужен микроконтроллер.

Да хоть ардуина любая, если станция планируется автономной, без связи с внешним миром. Существует тонна решений, для которых даже прошивку самому писать не надо. С цветными экранами, пищалками, реле и прочим на борту. Большинство этих решений бесплатно предлагается прямо «под ключ» в любом интернете. В комплекте с моделями корпусов для печати на 3D-принтере. И, зачастую, такие решения дают на порядок более разнообразный функционал, чем был у моей старой погодной станции.

Но мне была нужна связь с другими умными устройствами в доме, а потому самым простым решением было использование микроконтроллера ESP32 в самой своей древней минимальной версии DEV KIT 1.0. Коих у меня все еще целое ведро, которого хватит на несколько умных домов!

Черт дернул когда-то купить их оптом на распродаже в алибабае по доллару за штуку. Уже который год не могу избавить от них свои загашники, хотя и тыкаю в каждый утюг дома. Уже скоро в роутере все адреса выйдут для их приема, а они все не кончаются и не кончаются… И, ведь, работают, как швейцарские часы, зараза! Ни малейших поводов не дают, чтобы не пользоваться ими, списав в утиль. Самому старому компоненту в доме уже больше пяти лет стукнуло (выключатель света на полках в гостинной, сентябрь 2019 года), а он и не думает помирать. Уже три варианта серверов умного дома сменилось, а оно в себе только прошивки иногда меняет. На удивление неубиваемую хрень китайцы породить умудрились.

Итак, для реализации первого этапа проекта все есть практически уже готовое. Осталось только собрать эти компоненты вместе и засунуть в корпус.


Изучив в этой связи весь зоопарк разновидностей «экрана Стивенсона«, выбрал для своей станции популярную в среде DIY-щиков конфигурацию «говно блюдца на палке»… Мнэ… Ну, когда оно в виде перевернутых блюдечек одно над другим, напяленное на общий стержень. Типа такого:

Народ такую конструкцию любит, потому, что ее просто сделать из чего угодно. Часто используются подходящего размера поддоны от небольших цветочных горшков. Но и пластиковыми контейнерами для еды тоже не брезгуют. Что угодно блюдце- миско-образное подойдет, что можно самому резать на коленке. Ну, а уж, если есть доступ к 3D-принтеру… У меня — есть!

Вырисовывалась конструкция такого рода:

  1. Кумпол модуля уровня освещенности
  2. Блюдца экрана (5 шт.)
  3. Крепления палки (2 шт.)
  4. Крепление модулей (BH1750 — сверху, BME280 — снизу)
  5. Модифицированное блюдце экрана с креплением CPRSDBEX (датчик дождя)
  6. Палка (обрезок ПВХ-трубы)

Очень короткий, но очень важный предварительный этап перед началом всей сборки: в несколько проходов густо залить «электрическим» лаком (Electrical Lacquer Sealer) все модули.

Это критически важно! Иначе ваше изделие долго не проживет на улице. Даже если нет прямого попадания влаги на электронные компоненты, то всегда есть конденсат. Открытые полупроводники на платах таких модулей не рассчитаны на работу в уличных условиях.

Лично я использую EL2000 от Spraylon. Еще ни разу не подводил. Обработанные им модули можно хоть из шланга водой поливать — выживут. Разумеется, лаком лить надо с умом, заклеив маскировочной лентой предварительно критически важные места. У фотосенсора — окошко фотосенсора, у температурного датчика — дырочку для вентиляции. Маскировочную ленту потом не забыть снять. Но все остальное — залить! В три-четыре слоя. Дать высохнуть. Потом повторить.


Блюдца экранов — все одинаковые. Рисовались так, чтобы могли между собой собираться в стопку и имели возможность размещать внутри себя крепления для модулей и палки:

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

Кумпол на самом первом блюдце — стеклянный. Не акрил, не плексиглас. Натуральное стекло:

Исходно, это чисто декоративная какая-то шняга. Типа, на полочку или стол кладется какая-то фитюлька красивая и, чтобы она не пылилась, накрывается таким кумполом. У меня их разных размеров нашлось — Жена просила для своей коллекции сувенирчиков на полке. Нашел на амазоне, там это добра — завались! Любых размеров:

Подошло и для моих целей.

Одна из фитюлек на полке случайно осталась без колпачка. Кот, наверняка, заиграл! Правда-правда…

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

Сенсоры собираются на своем креплении и так же вешаются на самое верхнее блюдце:

BME280 прикручен не напрямую, а через высокую стойку. Таким образом он оказывается приблизительно в середине общей высоты бутерброда из шести блюдец, что позволяет «экрану Стивенсона» в полном объеме выполнять свою работу:

Для всех креплений использовались винтики из нержавейки. Настоящие, а не китайские. Они на самом деле из нержавейки.

К одному из блюдец присобачен детектор дождя:

Это единственное «нестандартное» блюдце с креплением под CPRSDBEX. В будущем его планировалось заменить, когда потребуется в общий массив добавить анемометр, флюгер и осадкомер. В теории, это блюдце должно быть перепечатано с добавлением креплений под эти приборы. Но, пока, для минимальной конфигурации первого этапа проекта, достаточно и того, что есть.


В итоге, осталось только насадить все это говно… «экран Стивенсона» на палку, получив желаемое:

И водрузить на стену дома выше среза крыши веранды, чтобы водой из гатерсов не заливало:

Погодная станция готова!


Ах, да… Опять забыл про контроллер…

Внутрь оного надо залить стандартную, уже готовую прошивку ESPHome, сконфигурировав ее под имеющиеся на борту сенсоры. И все. Все дальнейшие манипуляции, если таковые нужны, можно уже производить удаленно «по воздуху» через центральный сервер.

Поэтому контроллер можно просто запихнуть в водостойкую коробку и, вместе с блоком питания… :

… повесить на стену рядом со станцией:

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

Ящик, конечно, для контроллера явно великоват, но у меня была идея засунуть туда же и систему управления поливом газона. Но это было темой уже другого проекта и все предстояло еще много раз как следует продумать.


Подводя итоги проекта и возвращаясь к самому началу статьи…

Самопальная погодная станция зарекомендовала себя блестяще! Автоматика дома подхватила ее без проблем и начала работать с ее данными, как и планировалось. Подоспевшая вскоре после этого система полива, так же была счастлива симбиозу.

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

Дело шло уже ко второму этапу, когда погодная станция должна была обзавестись прочими своими приборами. Но произошло непредвиденное…


Когда-то я прекратил вести блог и публиковать на нем новые материалы. Вот эта самая статья про погодную станцию писалась уже сильно после тех событий и лежала в виде черновика на локальной версии блога, внутри домашнего сервера, где ее никто не видел. Среди множества себе подобных.

Как следствие, у моих друзей не было возможности следить за развитием хода болезни под названием «умный дом Джима». Единственное, что им было доступно — мой вишлист на амазоне, куда я когда-то в угаре запихнул «до лучших времен» навороченную погодную станцию, которую мог бы теоретически использовать для своих целей, но «пока чойто слишкам дораха». Это было еще до того, как подохла старая станция, а свою я еще и не планировал строить. Просто попалось, подумалось, отложилось «на память» и забылось. Так потом там в вишлисте и болталось долгое время. Штука дорогая. В поисках спонтанных подарков, люди такие пункты вишлиста обычно проматывают… Но не в этот раз!

Однажды, под Рождество я обнаружил на крыльце коробку с наилучшими пожеланиями от друзей продолжать и дальше болеть умным домом. А, чтобы эта чума в голове не утихала, на тебе, дескать, Джим, вот эту заразу от всей нашей необъятной души!

Да, представте себе… Чудеса на Рождество — не миф! Фильмы не врут — они случаются! В особенности, когда их не ждёшь.

В коробке оказалась ахрененная по тем временам Ambient Weather WS-2000, со всем чем только можно представить на своем борту в контексте погодной станции и ее интеграции в умный дом:

Ну и уж какой тут теперь «второй этап», нафиг? Он полностью потерял свой смысл.

Всего то теперь и нужно было, что новый агрегат на крышу взгромоздить:

И очередной телевизор на стену повесить:

Некоторое время обе станции жили параллельно. К тому времени, я много какой автоматики успел завести на свою станцию. И работало все настолько хорошо, что не хотелось рисковать, переключая все одним махом на новую. Особенно, в части тех данных, что касаются дождя. Нужны были «полевые испытания», чтобы можно было начать доверять управление расходом воды новым сенсорам.

Постепенно, где-то в течение месяца, новая станция перетащила на себя все функции. На уровне сервера, ее данные объединяются с данными из интернета, удовлетворяя не только «человеческий фактор», но и открывая новые возможности для автоматизации:

Так же это дало возможность сравнить показания датчиков, общих для обеих станций. Разница была, конечно. Но очень незначительная. Порядка 1%, что вполне укладывается в номинальные погрешности недорогих модулей. Хотя, тут сложно сказать, которая из «черепашек звиздит»… Но с уверенностью можно сказать, что на «пользовательском» уровне, применительно к данной ситуации, это не имеет никакого значения.

Заметка из будущего:
Самопальная станция все еще стоит на крыше, но теперь уже как просто эксперимент. Данные от нее игнорируются системой, но я хочу опытным путем выяснить:

  1. Как долго еще проживет электроника покрытая лаком в наших климатических условиях?
  2. Как долго будет «вырождаться» пластик экрана под нашим солнцем (PLA+)?

Прошло уже больше года. Электроника продолжает работать. Пластик слегка запылился и подвергся атаке плесени с одного бока, но структурной целостности не потерял и остается кипельно-белым (если начнет желтеть — значит скоро хана). Эксперимент продолжается.

Соответственно, как вторичный вывод из проекта: если кто-то хочет построить свою погодную станцию из простых компонентов — стройте, не сомневайтесь. Оно не будет хуже того, что вы найдете на рынке готовым. Уж точно она будет раза в три дешевле. Второстепенный функционал будет беднее — да. Но, как погодная станция «пользовательского» уровня — вполне себе.

Лично я ни о чем не жалею. Ни о времени потраченном на свою поделку, ни о появлении новой станции. Удовольствие от создания чего-то стоящего своими руками — ни за какие деньги не купить! Впрочем, так же, как и чудеса на Рождество 🙂

Такие дела…