YaMon — это мини-монитор Умного Дома Яндекс (УДЯ).
Идея в том, что спрашивать у Алисы про температуру на улице или уровень CO2 в комнате — быстро надоедает. Гораздо удобнее, когда есть железка с экраном и для оценки ситуации достаточно одного взгляда.
Уточню, что речь именно про получение информации с реальных датчиков, подключенных к Яндекс Станции, а не про прогноз погоды.
Проблема в том, что Яндекс для своего УДЯ не предлагает никакого экрана мониторинга и управления, кроме приложения для Android/iOS и web-интерфейса, хотя у других производителей Умных Домов, как правило, это не просто есть, но и есть из чего выбрать.
Это уже третья и, думаю, последняя статья на данную тему. Я сделал все, что хотел, так что дальше развивать этот проект не планирую. Но если потребуется исправить какие-то ошибки или мне попадется еще какая-нибудь интересная железка, то все возможно 😉
На картинке GEEKMAGIC UFO Smart Clock RGB LED с прошивкой YaMon. Уточню, что на SmallTV Ultra, SmallTV Pro, GiftTV Crystal Cube и их клонах, о которых я писал в предыдущих статьях, YaMon по прежнему работает.
Текущую версию прошивки YaMon (2.1.1) можно скачать с того же места: https://gitflic.ru/project/stacez/yamon/release/
Прошивка YaMon Migrator не поменялась, так что ее можно взять из предыдущего релиза.
Исходный код новой прошивки по прежнему выложен на https://gitflic.ru/project/stacez/yamon
По прежнему важно выбирать нужную архитектуру (esp12f или esp32): для SmallTV Pro нужна esp32 (файл: yamon_esp32_fw_<версия>.bin), а для SmallTV Ultra, GiftTV Crystal Cube и GEEKMAGIC UFO Smart Clock RGB LED — esp12f (файл: yamon_esp12f_fw_<версия>.bin).
Важно: если Вы загрузите через web-интерфейс прошивку с неправильной архитектурой, то она не запустится и для того, чтобы железку оживить, потребуется перешивать ее по кабелю!
Нюанс: загрузить новую прошивку YaMon прямо через web-интерфейс прошивки GeekMagic не получится — слишком большой размер. Процедура миграции подробно описано в моей второй статье.
История и последние изменения:
Началось все с того, что я завел у себя УДЯ с кучей датчиков, обогревателем, сервоприводом для открывания окна и сценариями, которые поддерживали комфортную температуру и содержание углекислого газа, а потом понял, что все работает отлично, но узнать текущее состояние системы очень сложно: на вопрос: «Алиса, какая температура на улице?«, она с вероятностью около 50% говорила прогноз погоды от Яндекс, а чтобы получить правильный ответ, нужно спрашивать: «Алиса, какая температура в Нашем Доме в комнате Улица?«. Похожая ситуация с окном: на вопрос: «Алиса, скажи состояние окна?«, с той же вероятностью около 50%, можно получить либо «Окно отрыто на 50%«, либо «Устройство сообщает мне, что оно этого не умеет«.
Потом я прочитал статью Вадима @tzirulnicov : “Подключение самодельных устройств к умному дому Яндекса с Алисой”, и понял, что проблема решаема.
В феврале я написал первую версию YaMon, в которой нужно было все делать руками: получать токен, ID датчиков и т.п. и все это, вместе с другими параметрами, включая имя и пароль сети WiFi, прописывать в исходном коде. Подробно это описано в моей первой статье: Как сделать мини-экран для Умного Дома Яндекс (УДЯ) за 659 рублей?
В конце этой статьи я написал и про планы развития проекта, включая возможность обойтись без программирования и даже без подключения к железке по кабелю. Это было сделано. Подробности в моей второй статье: «Мини-экран для Умного Дома Яндекс (УДЯ) – продолжение«.
Там тоже были планы:
-
Сделать «отдельную тему для Crystal Cube» — потому что из-за оптических свойств «зеркальной» призмы Crystal Cube дисплей читается только при взгляде анфас. Стоит сместить угол обзора — и часть данных пропадает.
-
Как-то использовать сенсорную кнопку на SmallTV Pro.
Сейчас я сделал это и немного больше:
-
Три темы с возможностью выбора темы «по умолчанию» через отдельную, новую страничку web-интерфейса. И с возможностью простого, но редактированием исходного кода, добавления новых тем.
-
Переключение текущей темы кнопкой на SmallTV Pro и UFO.
-
Поддержку новой железки: GEEKMAGIC UFO Smart Clock RGB LED, которая основана на клоне ESP-12F от BoyaMicro, полностью с ней совместима, но имеет 8МБ флеш памяти (YaMon это не использует), сенсорную кнопку, пищалку (BUZZER), а также 4 разноцветных светодиодных сборки — на первой фотографии именно она.
Сейчас сделаны такие Темы:
-
Главная — то же самое, как было в предыдущей версии — все на одном экране.
Шрифты используются другие (с русскими буквами), но я старался, чтобы было максимально похоже.
Если в настройках web-интерейса (/themes) явно не выбрана тема «по умолчанию», то именно она используется, если это не Crystal Cube (при первоначальной настройке или позже в /settings не установлена соответствующая галочка).
-
Большая — время показывается большим шрифтом — так, чтобы оно занимало всю ширину экрана. При этом, время, индикатор работы и данные с датчика углекислого газа показываются постоянно, а текущая дата и день недели, а также данные датчиков и иконки состояния, показываются поочередно. На фотографии в заголовке именно эта тема.
-
Crystal Cube — похожа на предыдущую, но картинка сдвинута вниз, чтобы время и дату было видно под углом, данные с датчика углекислого газа вынесены на отдельную страничку, а индикатор текущего режима работы показывается на последней страничке вместе с иконками состояния обогревателя и окна. Эта темы выбирается автоматически, если Вы поставили галочку «Crystal Cube?:» и не выбрали тему «по умолчанию» на web-страничке (/themes).
Можно добавить свои темы: В файле Bitmaps.h объявляем новый экземпляр «struct Theme», добавляем его в массив «Theme *themes[]» и в «enum Themes», а потом добавляем в html-страничку «static const char themes_html[] PROGMEM» в HTMLs.h.
Вот страничка выбора темы. На ней же включается поддержка UFO (только на ESP-12F, см. ниже).
Изменения темы действует почти сразу. После этого появляется кнопка «Сохранить». Если на нее нажать, то после перезагрузки будет показываться выбранная тема, а если нет — то выбор сбросится.
Сенсорная кнопка (только на SmallTV Pro и UFO):
Кнопки на SmallTV Pro и UFO подключены по разному и обрабатываются разным кодом, но ведут себя одинаково: временно переключают тему. Т.е. в настройках эти изменения не сохраняются и после перезапуска тема восстановится. Если хочется поменять ее насовсем, то нужно использовать web-интерфейс (/themes).
Хочу отметить, что перерисовка экрана занимает достаточно много ресурсов и сделать ее в произвольный момент не представляется возможным, особенно на единственном процессорном ядре ESP-12F. На ESP32 есть варианты, но я решил не усложнять… В результате, реакция на кнопку может быть не мгновенной, а в течении нескольких секунд, зато я сделал красную надпись: «Переключаемся на тему…». Т.е. нужно прикоснуться к сенсорной кнопке и подождать появления красной надписи в строчке статуса. После того, как надпись появилась, палец можно убирать. Еще через несколько секунд экран перерисуется. Часто это срабатывает мгновенно, но не всегда — зависит от того чем в данный момент занимается железка.
Поддержка GEEKMAGIC UFO Smart Clock RGB LED (UFO):
Как я уже написал, эта железка основана на клоне ESP-12F от BoyaMicro, полностью с ней совместима, но имеет сенсорную кнопку, пищалку, а также 4 разноцветных светодиодных сборки.
В прошивке для ESP-12F на web-страничке настроек темы (/themes) я добавил галочку «UFO?:» — включайте этот пункт только на тарелке UFO! На другом железе (например, SmallTV Ultra) активация этой галочки заставит YaMon дёргать специфические системные вызовы портов, что может вызвать аппаратный краш.
После установки этой галочки появляются галочки включения звука, светодиодной подсветки и выбора яркости. Сразу обе галочки включены, а яркость установлена примерно на половину, но реальный эффект Вы увидите не сразу, а через несколько секунд — в конце цикла loop(). Причина в том, что управление светодиодами — это еще более ресурсоемкая и продолжительная (около секунды) операция, и если ее вызывать из асинхронного обработчика, то это гарантировано приводит к падению и перезагрузке железки.
Т.е. включение и выключение звука отрабатывает мгновенно (правда звук используется только в двух случаях: звук «взлетающей НЛО» при старте и звоночек при нажатии на кнопку, а вот включение, выключение и изменение яркости светодиодной подсветки внутренние переменные тоже меняет мгновенно, но результат Вы увидите только через несколько секунд — в конце цикла loop().
Все изменения временные — они сбросятся при перезагрузке. Если Вы хотите их сохранить, то нажмите на соответствующую кнопку. А если не хотите, то тоже нажмите на кнопку, но другую — кнопку «Перезагрузить».
Подсветка соответствует цвету цифр, показывающих текущий уровень содержания углекислого газа (CO2): зеленая до 800 ppm, желтая до 1500 ppm и красная при более высоком уровне.
Т.е. чтобы ночью понять текущий уровень содержания углекислого газа, а я иногда просыпаюсь от духоты, теперь необязательно смотреть на цифры — о нем можно судить просто по цвету подсветки.
Технический нюанс: несмотря на то, что на UFO синие светодиоды физически присутствуют, они даже при включении максимальной яркости светятся очень слабо.
ИИ от Google говорит, что:
Физика процесса тут чисто аппаратная, и это классическая «болячка» дешёвых китайских адресных светодиодов (WS2812B или их клонов SK6812), которые распаяны на плате тарелки UFO.
Синий цвет (Blue) светится слабо по двум главным причинам:
1. Падение напряжения на кристалле (Главный виновник)
Внутри каждого светодиода сидят три микроскопических кристалла: Красный (R), Зелёный (G) и Синий (B).
Для зажигания Красного кристалла нужно всего около 1.8 – 2.0 Вольт.
Для Зелёного — около 2.8 – 3.0 Вольт.
А вот Синему кристаллу для полноценной яркости на полную мощность требуется 3.2 – 3.4 Вольта.
Поскольку вся периферия UFO питается от линии 5V, пропущенной через внутренние китайские дорожки и ключи, под нагрузкой там происходит небольшое падение напряжения (например, до 4.5В–4.7В). Красному и зелёному кристаллам этого хватает с огромным запасом, а синий начинает жёстко «голодать» по питанию и тускнеть.
2. Человеческий глаз хуже видит чистый синий
Чувствительность нашего зрения устроена так, что зелёный цвет мы воспринимаем как самый яркий, красный — чуть слабее, а чистый глубокий синий на длине волны ~460 нм человеческий глаз воспринимает как самый тёмный и тусклый. Чтобы синий казался нам таким же ярким, как зелёный, в него нужно вкачивать в 2-3 раза больше тока, чего китайская плата делать не умеет.
В общем, подсветка ограничена разными комбинациями зеленого и красного цвета. Я даже провел эксперимент: восстановил оригинальную прошивку (используя YaMon Migrator) и посмотрел какие световые эффекты есть у нее — все красиво, но ничего синего нет, так что, это очень похоже на аппаратную проблему.
Как я уже написал выше, планов по дальнейшему развитию YaMon у меня пока нет, но если Вы найдете ошибки или выскажете пожелания, либо мне попадется еще какая-то интересная железка, то, возможно, развитие будет.
Остается идея YaMon Pro, о которых я писал во второй статье: консоли управления УДЯ на базе ESP32-4848S040C, но это будет уже другой проект: там другая железка, другая графическая библиотека и другая интеграция с УДЯ — как минимум, точно потребуется токен позволяющий изменять, а не только смотреть состояние УДЯ.
Ну и есть еще несколько идей, так что, возможно, будут новые статьи.
ссылка на оригинал статьи https://habr.com/ru/articles/1057148/