AlexxIT Smart Home
7.92K subscribers
321 photos
27 videos
289 links
Заметки про развитие моего умного дома
Все полезные ссылки тут:
https://github.com/AlexxIT
Download Telegram
Друзья, я вами очень недоволен!

Как некоторые из вас уже заметили, на Home Assistant версии 0.118 поломалась интеграция Yandex Smart Home (напоминаю, её делал не я).

И что вы сделали? Пошли ругаться на Дмитрия (автора). Кто-то даже влепил ему несколько дизлайков.

Дмитрий объяснил, что он тут не при чём, и вы пошли ругаться на авторов Home Assistant. Где вежливо ответили, что и они тут не при чём. И вообще они за всякие кастомы не отвечают.

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

А произошло там следующее. С новой версией Home Assistant обновилась и главная библиотека, отвечающая за web запросы и ответы - aiohttp.

Я довольно долго пытался понять, что же именно там поменялось.

А поменялись там настройки сжатия текстовых данных. Я не специалист по этой части, но и старое и новое сжатие вполне соответствуют всем спецификациям. Там нет ошибки.

Но не по мнению серверов Яндекса. По неведомым причинам запрос получения токена при авторизации - Яндекс не может прочитать. Я проверял, с ответом всё нормально. Допотопные утилиты перехвата трафика могут его расшифровать. А вот сервера Яндекса - нет.

Так что перестаньте терроризировать Дмитрия и разработчиков Home Assistant. Качайте от меня фикс, отключающий в Home Assistant сжатие 🙈 и живите долго и счастливо!

https://github.com/AlexxIT/yandex_smart_home_fix

PS. Спасибо @Vasilchuk вот описание про сжатие. Там сложная история войны стандартов. Раньше всё было неправильно, но все уважаемые языки программирования и утилиты научились поддерживать как правильную версию, так и неправильную. А вот Ruby не научился. Думаете, в Яндексе программируют на Руби? 🤔

https://github.com/aio-libs/aiohttp/issues/4506
А как ответить в intents именно с той Яндекс.Станции, с которой пришёл запрос?

Один из очень частых вопросов. Дело в том, что технически невозможно в этом подходе определить станцию-источник.

Для решения этой задачи я создал компонент YandexDialogs. Он работает со всеми колонками, и работает с мобильными приложениями Яндекса и Яндекс.Браузером.

Он чуть более сложен в настройке и его главный недостаток - необходимость добавлять имя навыка к каждой вашей фразе к Алисе. Такой вот костыль.

Но! Если все ваши колонки локальные, я могу предложить вам другой костыль для ответа на intents. Это определение последней активной колонки и отправка ответа именно на неё. Вот пример как это сделать:

https://gist.github.com/AlexxIT/6a3a1a5ba4c4ebe1fabbec639542d446


PS. Ребята из чата Яндекс.Диалогов очень переживают, что вы затерроризируете поддержку Яндекса по поводу ошибки со сжатием. Действительно, не надо докучать поддержке, пусть занимаются более важными вопросами. Адекватные люди уже давно всё передали напрямую разработчикам Яндекс.Диалогов и сказали спасибо за подробное описание проблемы. За что могу сказать им своё спасибо в ответ.

Для тех, кто не понял написанное в прошлом посте, я объясню менее техническим языком.

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

Теперь вот Home Assistant начал использовать новую версию как основную и сервер Яндекса с ней не справился. Конечно это не ошибка программистов Яндекса. Например, разработчики языка Ruby вообще не признают новую спецификацию сжатия.


PS2. Я обновил fix. Теперь он отключает сжатие только для запроса токена. Если Дмитрий встроит фикс в свой компонент, то вы вообще не заметите, что что-то поменялось. А команда Яндекса сможет уделить время более важным задачам развития своей платформы.
Выпустил обновление компонента YandexStation.

С недавнего времени в рамках борьбы с потенциальными вредителями, неустанно желающими добраться до ваших приватных данных (здравствуйте, служба безопасности Сбербанка), Яндекс ввел строгое ограничение на допустимые символы в фразах к Алисе.

Последняя версия компонента избавится от таких символов за вас. А ещё сама обрежет текст, если он выходит за разрешённые 100 символов. Так что ваша фраза в любом случае дойдёт до колонки без ошибок.

Заодно починил проигрывание плейлистов на локальных станциях.

А также перелопатил документацию. Поправил что устарело. И разобрал толпу issue на GitHub. Если про кого-то забыл, пишите. Проектов много. В Яндексе более 10 тысяч сотрудников, а я тут один и тащу не только Яндекс 😅

https://github.com/AlexxIT/YandexStation/releases/tag/v2.3.1
Новый рекорд доставки. За 5 дней из Китая. Никогда не понимал статус "подготовлено к отправке"...

А приехало новое двухканальное реле Yeelight с поддержкой Wi-Fi и BLE.

Очень хотел проверить, работает ли оно с Xiaomi Gateway 3 по BLE и ответ - не работает. Похоже, BLE в устройствах Yeelight используется только для первой настройки и для подключения к фирменным пультам. Протокол этих пультов пока никто не расшифровал.

Жаль, этих пультов всего два. Мне они не очень нравятся, хотя отличный вариант для отказоустойчивого управления светом.

В Home Assistant такое реле ещё не научились поддерживать. Но я без проблем уже нашёл и опробовал команды API.

А ещё в реле есть функция interlock. В приложении Mi Home её нет, но через API включается и работает.

Вообще наличие gw3 очень помогает в получении API команд Xiaomi устройств. Ведь они сохраняются в формате локальных автоматизаций прям на вашем шлюзе.

Думаю, надо добавить в компонент возможность получения исходного кода автоматизаций.
Очень частым вопросом по Xiaomi Gateway 3 звучит: как создать автоматизацию кнопки?

1. Им посвящен отдельный раздел документации и снято видео

2. Состояние кнопки выведено в сенсор, как это делает zigbee2mqtt и компонент для второго (старого) шлюза

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

4. Я даже повторил события кнопок старого компонента Gateway 2, потому что мигрирующие пользователи почему-то думали, что и они должны работать. Теперь они и вправду работают

Но вопросы появлялись в чатах снова и снова.

В новой версии компонента появятся GUI-автоматизации кнопок!

Они уже есть в мастер-версии, кому не терпится, могут себе её установить.

Важный момент - не каждая кнопка поддерживает все варианты нажатий. Что умеет именно ваша кнопка - можете посмотреть в атрибутах её сенсора Action.
Я знаю, что там Яндекс навыпускал всякого, но сейчас пост не про это. Мне вообще пока мультирум не завезли, хотя у других пользователей уже работает. Надо просто сказать "включи музыку везде".

В последней мастер версии Xiaomi Gateway 3 начал поддерживать Aqara-термостат. Первое Zigbee устройство, которое пока даже zigbee2mqtt не умеет, а в Home Assistant уже работает.

Шлёт кучу всего непонятного, я даже не ожидал, что с первого раза заведётся. Но грамотно построенная система логирования позволяет удалённым пользователям, как отлаживать причины ошибок в работе компонента, так и снабжать меня всем необходимым для добавления новых устройств.

Пишут "works like a charm!". Как часто я такое слышу 😅
На Хабре вышла большая статья про разработку новой колонки во всех технических подробностях.

Разрешение пиксельного экрана 25×16. Исключительно белые светодиоды с 256 градаций яркости. 50 кадров в секунду.

Жаль, в старой стации почти нет места под похожий экранчик. Можно было бы придумать какой-нибудь DIY. Место есть лишь в нижней части примерно на 20 пикселей (чтоб просвечивались через пластмассовую сетку). По сравнению с 400 пикселями Яндекса это конечно большая разница.

https://habr.com/ru/company/yandex/blog/529770/
Не только транснациональные компании с многотысячным штатом способны удивлять и восхищать своими разработками.

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

Один из таких проектов собирал и я - знаменитая Огненная WiFi лампа, именуемая в народе как Gyver Lamp. Видео моих экспериментов можно найти в истории канала. Я даже написал компонент Home Assistant для оригинальной прошивки.

Но @miruff пошёл ещё дальше и "натянул" идею на ёлку!

https://t.me/homassistant/300956

На оригинальную прошивку к лампе появилось много более продвинутых альтернатив. Вот одна из самых популярных, написанная @Whilser. В ёлке используется именно она.

https://sprut.ai/client/blog/1641

А как вы готовитесь к новогодним праздникам в пандемию?
Ну что. Не устали от всяких прикольных идей, которые я вам подкидываю? Может хватит?

Сегодня мы будем звонить на колонку с Алисой из приложения Home Assistant!

Ну как из Home Assistant. Звонок всё равно будет через приложение Яндекса. Но правильная кнопка будет нажата в Home Assistant.

Эта новая функция пока работает не на всех колонках с Алисой.

А ещё я вас научу делать "тихий" звонок на колонку. На колонке не будет гудка и она сама снимет трубку.

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

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

Развлекайтесь.

https://gist.github.com/AlexxIT/5dd25dbe3306d673ad013f05617a8056
Человек из Магнитогорска, который репостит мои сообщения себе на личный канал. Я конечно понимаю, что на канале почти нет супер критичной информации, но в любом случае он открытый. Лучше скрыть его от посторонних глаз.

Кстати последний диван нормальный. У меня такой. Уже второй взамен старого такого же. Цена позволяет менять их не напрягаясь раз в несколько лет.

PS. Конечно, на сами репосты я не ругаюсь. Количество репостов позволяет понять, что тема интересна.

PS. Канал пропал. Всегда следите за своей приватностью в Интернете!
Так. Я вас дезинформировал. Чтоб позвонить СЕБЕ на колонку с Алисой - опцию "принимать входящие звонки" включать НЕ надо! Себе вы можете позвонить вне зависимости от этой настройки. Эта галка нужна, чтоб вам мог кто-то позвонить. Так что хорошо подумайте, на каких колонках стоит её включать.

Звонить можно из мобильного приложения Яндекс. Для этого нужно войти в Мессенджер (бумажный самолётик сверху справа) и добавить друга, например, по его нику на Яндексе.

Звонок пройдёт на его телефон и на его колонки с включенной опцией "принимать звонки".
Вслед за идеей "тихого звонка на колонку", давайте немного поднимем тему приватности.

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

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

Любое умное устройство с Wi-Fi стоимостью от 300 рублей уже может пустить злоумышленника в ваш дом.

И никакие Apple вас не спасут. Или все забыли историю, как через Facetime можно было провернуть этот самый "тихий звонок" на любой яблочный телефон? А истории про слитые фото Голливудских звёзд или Дзюбы. Думаете, у них был Android?

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

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

Какие-то уязвимости возникают по ошибке, какие-то специально. Самая гениальная дыра в HTTPS существовала более двух лет. Еслиб за такие "закладки" давали нобелевские премии, дыра, несомненно, была достойна такой премии.

Переживаю ли я по поводу камер? Скажем так, я смирился с этим и просто не хожу мимо них без трусов.
Приехала новая кнопка от Sonoff SNZB-01 и... она ужасна. Буд-то инженеры АвтоВАЗ резко поняли, что они делают что-то не то и решили попробовать себя в Zigbee.

К сожалению, в Mi Home, кнопка не работает.

Но! Кнопка поддерживает Zigbee 3, а значит, на ней работает прямой binding. Напоминаю, это настройка прямой связи кнопка => устройство, которая будет работать даже без хаба/стика. И, конечно, я не мог не попробовать её завести на Xiaomi Gateway 3.

Розетка продолжает работать в Mi Home и может управляться с кнопки при выключенном хабе:

https://youtu.be/peRCgClxO0w

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

Например, у кнопки Sonoff одно нажатие - переключает устройство, два нажатия - всегда включает устройство, долгое нажатие - всегда выключает устройство. Всё. Больше вариантов нет.

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

С биндингом так нельзя. Он тупой как валенок. Хоть и позволяет организовать отказоустойчивое управление устройствами.

Ещё конечно бывают пульты-диммеры. Например, Hue, IKEA или Opple. Они могут включать/выключать свет и менять его яркость. Opple даже умеет менять температуру.

Но особой сути это не меняет. Свой Opple на шесть кнопок в режим биндига я не переведу.
Прикупил новую версию iStat Menus. Пользуюсь ими уже много лет, но остановился на 5й версии. Обновление было платным. А сегодня у них скидки в честь Black Friday. Лучше брать версию именно на сайте разработчика, как и любой другой софт для macOS. С одной стороны софт не будет урезан ограничениями App Store. С другой стороны авторы получат порядочно больше денег, чем бы им осталось от злодеев из Купертино.

Пишу про злодеев из Купертино, а сам покупаю софт по скидкам 🙈
Алексей @Rodchenkov из комментариев к инструкции "тихого" звонка предложил вариант, как совершить тихий звонок на колонку с Алисой в один клик через кастомный компонент - button-card (неожиданно).

А я записал по этому поводу демо-видео для тех, кто совсем не разбирается, куда тыкать в интерфейсе.

https://youtu.be/Xp0Z91ndnLg

Идентификатор скрипта можно взять из адресной строки браузера при его редактировании. Это довольно большая цифра.

Чтоб с установкой кастомных карточек не было проблем - нужно пользоваться HACS и никаких mode: yaml в configuration.yaml! При этом возможность настраивать интерфейс в формате yaml не теряется, просто переносится... в интерфейс.
Друзья. Вы уже мне как-то помогли с поиском отличной утилиты для преобразования RTSP в WebRTC. Может, поможете и сейчас.

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

Желательно такие примеры, которые потом можно легко завернуть в аддон Hass.io. Можно какие-нибудь готовые библиотеки.
В компоненте YandexStation пополнение.

Как бы странно это не звучало, но компонент помимо колонок поддерживает Кондиционеры и ИК-пульты, заведённые в Умный дом Яндекса.

Тут важно не путать историю с компонентом Дмитрия. Его компонент прокидывает устройства из Home Assistant в умный дом Яндекса. А компонент YandexStation делает наоборот - из умного дома Яндекса назад в Home Assistant.

Вот тут статья, как потратив 9 баксов и 2 минуты своего времени, можно сделать почти любой старый тупой кондиционер умным:
https://sprut.ai/client/blog/3254

Сегодня я добавил поддержку Телевизоров. Обновления пока не в релизе, а в master-версии. Кому не терпится - могут установить её через HACS.

Мой, довольно старый, телевизор вполне себе умный и отлично управляется по Wi-Fi. Но включить его можно только с пульта. Очень типичная проблема для умных телевизоров и приставок.

Но теперь это больше не проблема. Его будет включать ИК-пульт от Яндекса (Tuya). По команде с Zigbee выключателя Opple.

One more thing...

Чтоб два раза не открывать исходники YandexStation, я добавил поддержку лампочек и выключателей!

Да-да. Теперь можно добавить умную лампочку и умную розетку от Яндекса в Home Assistant. Впрочем, не обязательно от Яндекса. Поддерживаются любые Кондиционеры, Телевизоры, Лампочки и Выключатели, что есть в Яндексе.

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

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

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

PS. Для работы компонента не обязательно иметь колонку от Яндекса!
Так выглядит телевизор, добавленный через ИК-пульт Яндекса (Tuya) в Home Assistant
У меня для вас ещё один лайфхак.

Самым частым вопросом по колонкам Алисы звучит: как спросить температуру в комнате?

Для этого в компоненте YandexStation есть интенты. Правда, для их работы нужна интеграция с умным домом Яндекса, а это значит белый IP и HTTPS. И заводятся они довольно запутанно, не все справляются.

Ещё есть YandexDialogs. Но там тоже нужен белый IP и HTTPS. И постоянно нужно произносить название навыка в каждой фразе.

И вот для владельцев локальных колонок я предлагаю ещё один способ реакции на три любые фразы. Работает полностью локально. К сожалению, фраз может быть только три и работает только с локальными колонками.

Но. Интеграция с умным домом не нужна и можно узнать, с какой именно локальной колонки пришёл запрос!

https://gist.github.com/AlexxIT/d4995839aedde2bbcf822831a71a52c5
Вот и у Xiaomi Gateway 3 пополнение. Спасибо @great_kvazis, добавлена поддержка нового реле Aqara Relay T1 на один канал без нуля.

Пока только в мастер-версии. Надо привести в порядок код. У нового реле API сильно отличаются от всех остальных устройств Xiaomi.

На данный момент на новом API протокола Zigbee 3 работают всего два устройства - новый датчик освещённости и это вот реле.

И тут очень непонятная история. Реле добавляется в Mi Home, но для него нет плагина. Поэтому пользоваться им в приложении нельзя, делать на него автоматизации тоже. Но в Home Assistant реле работает исправно.

Подробнее про реле можно посмотреть в последнем видео Алекса. Лайки, колокольчики, всё как вы умеете:

https://youtu.be/_78BnS8fWTM