Сами с усами. Или как я пробовал сервер для умного дома с Home Assistant по-русски
Всем привет! Есть у меня такое хобби - разбирать и собирать свой умный дом. Он у меня уже старичок - к проводным системам, проложенным 20 лет назад, подсоединились беспроводные решения. Так как компания за это время сложилась у меня разношерстная, то единовременно у меня стояло до 4 хабов. Я уже пересобирал часть умного дома на визуальной среде Node-RED, пробовал Sprut.hub, даже прости господи, ради интереса в Яндекс дом залез, там тьма) Попался мне на форуме 4pda вопрос про сервер Емелю. Информации не так много, видел только любительский обзор и отзывы на разных платформах, то про сервер, то про интеграцию умного дома.
На сайте обещают интеграцию с любым оборудованием. По факту - предустановленный HA и ещё кое-что о чём дальше.
Заказал на Я.Маркете тот, что 64 ГБ
Комплектация: ПК, блок питания, Zigbee USB Dongle, кабель HDMI, кабель LAN, инструкция
С точки зрения "начинающего", с HA одна проблема - нет универсального гайда, хотя уже много чего написано в интернете, но нужно собирать инфу, разбираться. У Емели на коробке есть код на инструкцию по установке и настройке самого сервера, но не каждого отдельного умного оборудования.
QR-код с инструкцией размещен на коробке
Посмотрим, как происходит первый запуск и настройка
Подключаем центр умного дома к питанию и Ethernet кабель к маршрутизатору (роутер, коммутатор и т.п.). Ждём загрузки. Открываем браузер на телефоне/компьютере/планшете и вводим локальный ip-адрес нашего устройства или http://emelya-pro.local/ Появляется конфигуратор сетевых настроек с HA и Proxmox. Можно установить IP адрес, маски подсети, шлюза по умолчанию, конечно, изменить пароль пользователя. Также на этой странице можно сбросить настройки, перезагрузить систему и перейти на страницу конфигурации Proxmox VE или Home Assistant.
Конфигуратор сетевых настроек
Для первооткрывателей чудесного мира умных домов сделаны подсказочки при наведении курсора. Как мило) Хорошая попытка заботы о новичках, но вопрос, что они будут делать дальше. По итогу настройка может производиться в полуавтоматическом режиме или в режиме ручной настройки через кнопку «Панель управления ...»
Конфигуратор сетевых настроек. Подсказки
Для входа в систему управления умным домом по умолчанию используются креды emelya/emelya.
Вход в систему управления умным домом
Дашборд умного дома
После авторизации появляется главное окно управления центром умного дома Емеля, в котором можно подключать и настраивать устройства, присутствует статистика, карта, история, папка с мультимедиа и др.
Главное окно управления
Планшет
В разделе "Планшет" можно насобирать главные кнопки управления и вывести на главный экран. Отображение панелей настраивается, здесь уже готовы разделы "планшет" и "телефон", но по сути, это только названия, наполнение можно делать самим или силами других умеющих.
Раздел "Планшет"
Помощь
В помощи затерялся рекламный буклет, или варианты сценариев для новеньких. Если нажать на три точки в правом верхнем углу, то можно пообщаться с живой поддержкой. Так что раздел небесполезный, но попробуй догадайся.
Раздел "Помощь"
Карта
На карте нужно выбрать местоположение своего дома, актуально для определения погоды и некоторых сценариев, связанных с приближением к дому или с входом в определённый радиус вокруг дома. То есть могут быть подключены устройства, учитывающие геолокацию. Для новых зон можно зайти в раздел «Настройки»- «Пространства и зоны» - «Зоны».
Условия настройки для определенных сценариев
Настройка
Энергия
Раздел «энергия» нужен если есть устройства, которые отслеживают приход/расход энергии, то есть можно подключить счётчики электроэнергии. Счётчиков у меня пока таких нет, но, как я знаю, на верхах планируют электронно передавать информацию с счетчиков воды и электроэнергии.
Карточка "Энергия"
Журнал событий
Журнал событий для того, чтобы посмотреть, когда твой отпрыск ушел в школу или вернулся домой. Журнал должен показывать все изменения и срабатывания за указанный период, история составит визуальный график этих изменений. А также можно посмотреть, после каких действий или во сколько сломались сценарий или техника.
Журнал событий
История
Далее начинается среда для разработчиков. Плашки эти видны только у Админов, то есть, когда я раздам домашним доступы, у них будут только нужные им кнопочки под сценариями без лишней информации. С HACS устанавливаются дополнения, сценарии, скрипты и темы. Тот же шлюз от сяоми третьей версии можно установить без доп костылей в кастомных репозиториях нужно найти допник от AlexxIT.
HACS
Уже установлен Visual Studio Code, можно редактировать конфигурацию прямо из браузера, открывается полноценный редактор кода.
Visual Studio Code
Еще одно дополнение, которое расширяет основные функциональные возможности Home Assistant - Terminal. Дополнение, которое, на мой взгляд, является одной из первых вещей, которые вам нужно запустить, как только вы установите Home Assistant. Дает возможность удаленного доступа с другого компьютера. Будучи новичком, вполне возможно, что вы допустите ошибку, из-за которой ваш Home Assistant отключится, и поэтому возможность удаленного входа в систему для устранения неполадок крайне важна.
Terminal
Zigbee2MQTT - это дополнение, с которым подключаются устройства Zigbee протоколе без использования сторонних Zigbee-хабов. С этим допом можно легко настроить и управлять устройствами из одного места.
первая активация Zigbee2MQTT
Zigbee2MQTT
Панель разработчика.
Место, где я смогу настроить устройства (свет, термостаты или звуковые системы). Например, я могу настроить, чтобы свет автоматически включался, когда прихожу домой, или чтобы термостат регулировал температуру в определенное время.
Раздел нужен, чтобы выходить за рамки стандартных функций, которые предлагает Home Assistant.
YAML
Состояния
Один из основных инструментов для работы с шаблонами находится в разделе "Панель разработчика" - "Шаблоны". Здесь можно проверить корректность составленного шаблона в онлайн-режиме и оценить его результат.
Шаблоны
И настройка.
В этой панели собраны все настройки Home Assistant.
Панель настроек
Добавьте описание
По итогу, Емеля - умный помощник, но только если сможете настроить. Выбор НА понятен, очень гибкая система, по факту делай, что хочу/могу. Плюс неравнодушные люди постоянно в сеть выкладывают свои накатки для НА и новых устройств. Получилось готовое решение для умного дома со своим сервером. Не нужны дополнительные стики, всё есть в наборе и в самой машине.
Сценарии по автоматизации делаются в графическом интерфейсе. Просто указывается триггер (событие, запускающее сценарий), условия, при которых сценарий будет работать после срабатывания триггера и непосредственно действия, которые надо сделать.
Новая автоматизация
Не подключается робот пылесос от Сяоми в Home Assistant
Доброго времени суток!
Только начал своё знакомство с Home assistant.
Поднял виртуалку HAOS с помощью VirtualBox, создал аккаунт в HA и решил начать с самого лёгкого из имеющегося: подтянуть свой робот пылесос от сяоми. Сделал всё как положено: поставил интеграцию Xiaomi Miio, прилепил в нее свой аккаунт из MI Home ( он оказался в РУ облаке, если это имеет значение), после чего в панель данной интеграции подтянулся мой пылесос ( точнее его название), а вот сама сущность пылесоса не загрузилась см скриншот).
Расстроился, но не очень. Скачал где то приблуду для определения токена и айпи адреса пылесоса и провёл ручную авторизацию в интеграции. Проблему это не решило, добавилась просто еще одна строка с пылесосом.
Включил режим отладки чтобы записать лог. Вот его часть, там в принципе повторяющиеся сегменты:
2023-08-08 22:15:56.713 WARNING (MainThread) [homeassistant.config_entries] Config entry 'кругляш' for xiaomi_miio integration not ready yet; Retrying in background
2023-08-08 22:15:56.732 WARNING (MainThread) [homeassistant.config_entries] Config entry 'rockrobo.vacuum.v1' for xiaomi_miio integration not ready yet; Retrying in background
2023-08-08 22:16:06.783 ERROR (SyncWorker_0) [miio.miioprotocol] Got error when receiving: timed out
2023-08-08 22:16:06.795 ERROR (SyncWorker_4) [miio.miioprotocol] Got error when receiving: timed out
2023-08-08 22:16:16.814 ERROR (SyncWorker_6) [miio.miioprotocol] Got error when receiving: timed out
2023-08-08 22:16:16.844 ERROR (SyncWorker_1) [miio.miioprotocol] Got error when receiving: timed out
2023-08-08 22:16:26.992 ERROR (SyncWorker_0) [miio.miioprotocol] Got error when receiving: timed out
2023-08-08 22:16:26.994 ERROR (SyncWorker_4) [miio.miioprotocol] Got error when receiving: timed out
2023-08-08 22:16:37.029 ERROR (SyncWorker_1) [miio.miioprotocol] Got error when receiving: timed out
2023-08-08 22:16:37.031 ERROR (SyncWorker_6) [miio.miioprotocol] Got error when receiving: timed out
2023-08-08 22:16:37.066 ERROR (SyncWorker_5) [miio.miioprotocol] Got error when receiving: timed out
2023-08-08 22:16:37.179 ERROR (SyncWorker_7) [miio.miioprotocol] Got error when receiving: timed out
2023-08-08 22:16:57.136 ERROR (SyncWorker_5) [miio.miioprotocol] Got error when receiving: timed out
2023-08-08 22:16:57.219 ERROR (SyncWorker_7) [miio.miioprotocol] Got error when receiving: timed out
2023-08-08 22:17:07.116 ERROR (SyncWorker_3) [miio.miioprotocol] Got error when receiving: timed out
2023-08-08 22:17:07.571 ERROR (SyncWorker_8) [miio.miioprotocol] Got error when receiving: timed out
2023-08-08 22:17:27.184 ERROR (SyncWorker_3) [miio.miioprotocol] Got error when receiving: timed out
2023-08-08 22:17:27.621 ERROR (SyncWorker_8) [miio.miioprotocol] Got error when receiving: timed out
2023-08-08 22:17:57.604 ERROR (SyncWorker_4) [miio.miioprotocol] Got error when receiving: timed out
2023-08-08 22:17:57.604 DEBUG (SyncWorker_4) [homeassistant.components.xiaomi_miio] Unable to fetch timers, this may happen on some devices: No response from the device
2023-08-08 22:17:57.605 DEBUG (SyncWorker_4) [miio.click_common] Unknown model, trying autodetection. None None
2023-08-08 22:17:57.605 DEBUG (SyncWorker_4) [miio.miioprotocol] 192.168.31.48:54321 >>: {'id': 305, 'method': 'miIO.info', 'params': []}
2023-08-08 22:17:57.961 ERROR (SyncWorker_6) [miio.miioprotocol] Got error when receiving: timed out
2023-08-08 22:17:57.962 DEBUG (SyncWorker_6) [homeassistant.components.xiaomi_miio] Unable to fetch timers, this may happen on some devices: No response from the device
2023-08-08 22:17:57.963 DEBUG (SyncWorker_6) [miio.click_common] Unknown model, trying autodetection. None None
2023-08-08 22:17:57.965 DEBUG (SyncWorker_6) [miio.miioprotocol] 192.168.31.48:54321 >>: {'id': 305, 'method': 'miIO.info', 'params': []}
2023-08-08 22:18:02.610 DEBUG (SyncWorker_4) [miio.miioprotocol] Retrying with incremented id, retries left: 3
2023-08-08 22:18:02.623 DEBUG (SyncWorker_4) [miio.miioprotocol] Got a response: Container:
data = Container:
data = b'' (total 0)
value = b'' (total 0)
offset1 = 32
offset2 = 32
length = 0
header = Container:
data = b'!1\x00 \x00\x00\x00\x00\x04\xec34d\xd2\x94\xea' (total 16)
value = Container:
length = 32
unknown = 0
device_id = unhexlify('04ec3334')
ts = 2023-08-08 19:18:02
offset1 = 0
offset2 = 16
length = 16
checksum = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' (total 16)
2023-08-08 22:18:02.624 DEBUG (SyncWorker_4) [miio.miioprotocol] Discovered 04ec3334 with ts: 2023-08-08 19:18:02, token: b'ffffffffffffffffffffffffffffffff'
2023-08-08 22:18:02.625 DEBUG (SyncWorker_4) [miio.miioprotocol] 192.168.31.48:54321 >>: {'id': 406, 'method': 'miIO.info', 'params': []}
2023-08-08 22:18:02.971 DEBUG (SyncWorker_6) [miio.miioprotocol] Retrying with incremented id, retries left: 3
2023-08-08 22:18:02.982 DEBUG (SyncWorker_6) [miio.miioprotocol] Got a response: Container:
data = Container:
data = b'' (total 0)
value = b'' (total 0)
offset1 = 32
offset2 = 32
length = 0
header = Container:
data = b'!1\x00 \x00\x00\x00\x00\x04\xec34d\xd2\x94\xea' (total 16)
value = Container:
length = 32
unknown = 0
device_id = unhexlify('04ec3334')
ts = 2023-08-08 19:18:02
offset1 = 0
offset2 = 16
length = 16
checksum = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' (total 16)
2023-08-08 22:18:02.982 DEBUG (SyncWorker_6) [miio.miioprotocol] Discovered 04ec3334 with ts: 2023-08-08 19:18:02, token: b'ffffffffffffffffffffffffffffffff'
2023-08-08 22:18:02.983 DEBUG (SyncWorker_6) [miio.miioprotocol] 192.168.31.48:54321 >>: {'id': 406, 'method': 'miIO.info', 'params': []}
2023-08-08 22:18:07.631 DEBUG (SyncWorker_4) [miio.miioprotocol] Retrying with incremented id, retries left: 2
2023-08-08 22:18:07.637 DEBUG (SyncWorker_4) [miio.miioprotocol] Got a response: Container:
data = Container:
data = b'' (total 0)
value = b'' (total 0)
offset1 = 32
offset2 = 32
length = 0
header = Container:
data = b'!1\x00 \x00\x00\x00\x00\x04\xec34d\xd2\x94\xef' (total 16)
value = Container:
length = 32
unknown = 0
device_id = unhexlify('04ec3334')
ts = 2023-08-08 19:18:07
offset1 = 0
offset2 = 16
length = 16
checksum = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' (total 16)
2023-08-08 22:18:07.638 DEBUG (SyncWorker_4) [miio.miioprotocol] Discovered 04ec3334 with ts: 2023-08-08 19:18:07, token: b'ffffffffffffffffffffffffffffffff'
2023-08-08 22:18:07.639 DEBUG (SyncWorker_4) [miio.miioprotocol] 192.168.31.48:54321 >>: {'id': 507, 'method': 'miIO.info', 'params': []}
2023-08-08 22:18:07.987 DEBUG (SyncWorker_6) [miio.miioprotocol] Retrying with incremented id, retries left: 2
2023-08-08 22:18:07.995 DEBUG (SyncWorker_6) [miio.miioprotocol] Got a response: Container:
data = Container:
data = b'' (total 0)
value = b'' (total 0)
offset1 = 32
offset2 = 32
length = 0
header = Container:
data = b'!1\x00 \x00\x00\x00\x00\x04\xec34d\xd2\x94\xef' (total 16)
value = Container:
length = 32
unknown = 0
device_id = unhexlify('04ec3334')
ts = 2023-08-08 19:18:07
offset1 = 0
offset2 = 16
length = 16
checksum = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' (total 16)
2023-08-08 22:18:07.996 DEBUG (SyncWorker_6) [miio.miioprotocol] Discovered 04ec3334 with ts: 2023-08-08 19:18:07, token: b'ffffffffffffffffffffffffffffffff'
2023-08-08 22:18:07.996 DEBUG (SyncWorker_6) [miio.miioprotocol] 192.168.31.48:54321 >>: {'id': 507, 'method': 'miIO.info', 'params': []}
2023-08-08 22:18:12.644 DEBUG (SyncWorker_4) [miio.miioprotocol] Retrying with incremented id, retries left: 1
2023-08-08 22:18:12.658 DEBUG (SyncWorker_4) [miio.miioprotocol] Got a response: Container:
data = Container:
data = b'' (total 0)
value = b'' (total 0)
offset1 = 32
offset2 = 32
length = 0
header = Container:
data = b'!1\x00 \x00\x00\x00\x00\x04\xec34d\xd2\x94\xf4' (total 16)
value = Container:
length = 32
unknown = 0
device_id = unhexlify('04ec3334')
ts = 2023-08-08 19:18:12
offset1 = 0
offset2 = 16
length = 16
checksum = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' (total 16)
2023-08-08 22:18:12.658 DEBUG (SyncWorker_4) [miio.miioprotocol] Discovered 04ec3334 with ts: 2023-08-08 19:18:12, token: b'ffffffffffffffffffffffffffffffff'
2023-08-08 22:18:12.660 DEBUG (SyncWorker_4) [miio.miioprotocol] 192.168.31.48:54321 >>: {'id': 608, 'method': 'miIO.info', 'params': []}
2023-08-08 22:18:13.002 DEBUG (SyncWorker_6) [miio.miioprotocol] Retrying with incremented id, retries left: 1
2023-08-08 22:18:13.025 DEBUG (SyncWorker_6) [miio.miioprotocol] Got a response: Container:
data = Container:
data = b'' (total 0)
value = b'' (total 0)
offset1 = 32
offset2 = 32
length = 0
header = Container:
data = b'!1\x00 \x00\x00\x00\x00\x04\xec34d\xd2\x94\xf4' (total 16)
value = Container:
length = 32
unknown = 0
device_id = unhexlify('04ec3334')
ts = 2023-08-08 19:18:12
offset1 = 0
offset2 = 16
length = 16
checksum = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' (total 16)
2023-08-08 22:18:13.025 DEBUG (SyncWorker_6) [miio.miioprotocol] Discovered 04ec3334 with ts: 2023-08-08 19:18:12, token: b'ffffffffffffffffffffffffffffffff'
2023-08-08 22:18:13.026 DEBUG (SyncWorker_6) [miio.miioprotocol] 192.168.31.48:54321 >>: {'id': 608, 'method': 'miIO.info', 'params': []}
2023-08-08 22:18:17.664 ERROR (SyncWorker_4) [miio.miioprotocol] Got error when receiving: timed out
2023-08-08 22:18:18.031 ERROR (SyncWorker_6) [miio.miioprotocol] Got error when receiving: timed out
2023-08-08 22:18:53.837 ERROR (MainThread) [frontend.js.latest.202308020] http://homeassistant.local:8123/frontend_latest/15664-mac7RvTTaE0.js:1:78492 Uncaught TypeError: Cannot read properties of null (reading 'removeEventListener')
2023-08-08 22:19:00.888 DEBUG (MainThread) [homeassistant.components.xiaomi_miio] Initializing with host 192.168.31.48 (token 51353...)
2023-08-08 22:19:00.889 DEBUG (SyncWorker_0) [miio.click_common] Unknown model, trying autodetection. None None
2023-08-08 22:19:00.934 DEBUG (SyncWorker_0) [miio.miioprotocol] Got a response: Container:
data = Container:
data = b'' (total 0)
value = b'' (total 0)
offset1 = 32
offset2 = 32
length = 0
header = Container:
data = b'!1\x00 \x00\x00\x00\x00\x04\xec34d\xd2\x95$' (total 16)
value = Container:
length = 32
unknown = 0
device_id = unhexlify('04ec3334')
ts = 2023-08-08 19:19:00
offset1 = 0
offset2 = 16
length = 16
checksum = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' (total 16)
2023-08-08 22:19:00.934 DEBUG (SyncWorker_0) [miio.miioprotocol] Discovered 04ec3334 with ts: 2023-08-08 19:19:00, token: b'ffffffffffffffffffffffffffffffff'
2023-08-08 22:19:00.934 DEBUG (SyncWorker_0) [miio.miioprotocol] 192.168.31.48:54321 >>: {'id': 1, 'method': 'miIO.info', 'params': []}
2023-08-08 22:19:05.940 DEBUG (SyncWorker_0) [miio.miioprotocol] Retrying with incremented id, retries left: 3
2023-08-08 22:19:05.948 DEBUG (SyncWorker_0) [miio.miioprotocol] Got a response: Container:
data = Container:
data = b'' (total 0)
value = b'' (total 0)
offset1 = 32
offset2 = 32
length = 0
header = Container:
data = b'!1\x00 \x00\x00\x00\x00\x04\xec34d\xd2\x95)' (total 16)
value = Container:
length = 32
unknown = 0
device_id = unhexlify('04ec3334')
ts = 2023-08-08 19:19:05
offset1 = 0
offset2 = 16
length = 16
checksum = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' (total 16)
2023-08-08 22:19:05.949 DEBUG (SyncWorker_0) [miio.miioprotocol] Discovered 04ec3334 with ts: 2023-08-08 19:19:05, token: b'ffffffffffffffffffffffffffffffff'
2023-08-08 22:19:05.949 DEBUG (SyncWorker_0) [miio.miioprotocol] 192.168.31.48:54321 >>: {'id': 102, 'method': 'miIO.info', 'params': []}
2023-08-08 22:19:07.822 DEBUG (MainThread) [homeassistant.components.xiaomi_miio] Initializing with host 192.168.31.48 (token 51353...)
2023-08-08 22:19:07.822 DEBUG (SyncWorker_3) [miio.click_common] Unknown model, trying autodetection. None None
2023-08-08 22:19:07.828 DEBUG (SyncWorker_3) [miio.miioprotocol] Got a response: Container:
data = Container:
data = b'' (total 0)
value = b'' (total 0)
offset1 = 32
offset2 = 32
length = 0
header = Container:
data = b'!1\x00 \x00\x00\x00\x00\x04\xec34d\xd2\x95+' (total 16)
value = Container:
length = 32
unknown = 0
device_id = unhexlify('04ec3334')
ts = 2023-08-08 19:19:07
offset1 = 0
offset2 = 16
length = 16
checksum = b'\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff' (total 16)
2023-08-08 22:19:07.829 DEBUG (SyncWorker_3) [miio.miioprotocol] Discovered 04ec3334 with ts: 2023-08-08 19:19:07, token: b'ffffffffffffffffffffffffffffffff'
2023-08-08 22:19:07.830 DEBUG (SyncWorker_3) [miio.miioprotocol] 192.168.31.48:54321 >>: {'id': 1, 'method': 'miIO.info', 'params': []}
2023-08-08 22:19:10.890 DEBUG (MainThread) [homeassistant.components.xiaomi_miio] Finished fetching кругляш data in 10.002 seconds (success: False)
2023-08-08 22:19:10.891 WARNING (MainThread) [homeassistant.config_entries] Config entry 'кругляш' for xiaomi_miio integration not ready yet; Retrying in background
2023-08-08 22:19:10.955 DEBUG (SyncWorker_0) [miio.miioprotocol] Retrying with incremented id, retries left: 2
2023-08-08 22:19:11.706 DEBUG (SyncWorker_0) [miio.miioprotocol] Got a response: Container:
и т.д.
я, конечно, вижу что ошибка в тайм ауте, но я не могу понять чем она вызвана и как это подлечить?
В это же время ( сразу после отказа в интеграции со стороны HAOS) пылесос вполне исправно запускался и через Алису и через МиХоум, то есть связь с пылесосом была.
Прошу подсказать причины и решение
Телеграмм бот для Home Assistant'a
Друзья, в какой-то момент посетила идея сделать универсального телеграмм бота для Home Assist, чтобы не прописывать и не хардкодить все внутри .yaml конфига, и чтобы все было написано на python. Поэтому хочу показать первую (вроде рабочую :) ) версию своего бота.
Чо бот использует:
1) Python версии 3.10 и выше (это важно, поэтому если будете устанавливать на Debian, будьте внимательны, обычно там 3.9)
2) Асинхронную библиотеку aiogram версии 3.0.7b
3) PostgreSQL + SQLalcemy + asyncpg драйвер (т.е. все запросы в БД так же идут асинхронно)
4) Homeassistant-api (В первой версии пока на синхронных запросах, в планах, конечно это переделать, знаю, что там не много нужно переделывать, и, изначально все было в асинхроне, но пока я отлавливал один баг, переделал все на синхронное взаимодействие, а обратно возвращать уже не было времени).
Что бот умеет:
1) В этой версии умеет работать не со всеми сущностями, а только 'binary_sensor', 'sensor', 'button', 'light', 'switch'.
2) Для вывода в сообщениях и на кнопках использует "friendly name" сущностей, которые настраиваются на самом сервере Home Assista.
3) По команде /edit входит в режим создания и редактирования комнат, где из имеющихся сущностей можно собрать некий дашборд. (Команда доступна только тем, кто вписан в .env файл как админ, user этой командой пользоваться не может). В планах добавить БД, чтобы можно было управлять пользователями прямо из бота.
4) По команде /start выводит созданные комнаты. В тексте сообщения выводит информацию с сенсоров, а инлайн-кнопки управляют переключающимися сущностями. Пока что, кнопки умеют только нажиматься, а выключатели переключаться, т.е. диммеры регулировать не удастся.
Ссылка на репозиторий:
ChronoDi/HomeAssistBot (github.com)
Вся инструкция по установке там имеется. Если будут какие-то вопросы, пишите, постараюсь оперативно ответить.
Инструкция как получить токен для HA:
Как получить токен для API Home Assistant (bessarabov.ru)
Не забудьте включить API своего HA, прописав в configuration.yaml
api:
Home Assistant API - Home Assistant (home-assistant.io)
Как это все выглядит:
1) При старте бота он показывает созданные комнаты (если до этого они не создавались, он предлагает пройти в режим создания комнат)
2) В режиме редактирования, по команде /edit он предлагает добавить, удалить или редактировать существующие комнаты.
3) В режиме редактирования комнат выводит уже добавленные сущности, и предлагает добавить сущности из доступных категорий:
4) При выборе готовой комнаты, после команды /start, комната отображается следующим образом (хочу напомнить, что все имена берутся с HA из поля "friendly name" сущности, это настраивается на самом HA):
Прошу не забывать, что это всего лишь альфа версия бота, идей для реализации еще очень много, но все интересные предложения будут рассмотрены и аккуратно записаны для реализации. Буду рад за тест этого бота, код открытый, пользуйтесь на здоровье, надеюсь вам понравится :) Занимаюсь ботом один в свободное время, поэтому прошу прощение, если будут задержки с развитием проекта.
P.S. Знаю, что было бы хорошо все убрать в докер, так как многие сидят на haOS, это есть в планах, но руки пока не дошли.
Как я пилю умный дом ч.2
В продолжении темы вчерашнего поста, делюсь опытом внедрения устройств и граблями, на которые наступал в процессе.
Основными вопросами был:
Какая задача стояла изначально? Сформирую несколько проблем, которые хотелось решить:
На участке находится скважина, не глубокая, в связи с чем, после непродолжительной работы насоса, вода заканчивалась и насос начинал работать в сухую. Приходилось бежать к насосу либо к автоматам и выключать его.
Так же на участке есть несколько емкостей с водой, и бывали случаи, когда забывали выключить насос и вода начинала вытекать.
В межсезонье на даче холодно и приезжать в холодный дом, включать обогреватели и ждать около часа, пока все прогреется не хотелось.
Как наверное в любом СНТ, бывают случаи отключения электричества и если отключение долгое, то нужно что-то решать с холодильником, увозить продукты. Хотелось сделать уведомления в виде смс или телеграмм сообщений.
Ну и в процессе, захотелось автоматически управлять светом, выключать свет в туалете если никого долго нет, включать уличный свет по движению, получать какие-либо другие уведомления, например о движении на участке и т.д.
Почему не использовал Home assistant? (ПО для связывания умных устройств и управления ими)
На самом деле, таких систем великое множество и выбирать есть из чего. У всех есть плюсы и минусы и самым распространенным наверное является Home assistant. Была идея использовать его в качестве основной системы, но на руках был только Raspberry pi zero W. который я купил в 2021 году за 700р. и которому как раз нашлось применение.
У него на борту всего 512 МБ оперативной памяти. И что-то тяжелое он однозначно не потянет. В комментариях писали, что устройств с 1 гб ОЗУ для всего хватает, но почитав тематические форумы понял, что нужно минимум 2 гб, даже если не применять большое количество плагинов.
И напомню, что я еще в процессе работ и не сделал даже половины из намеченного. Возможно в будущем обзаведусь каким-нибудь мини-сервером, желание есть.
Так же были комментарии, что готовые решения вышли бы дешевле. Возможно это так, но у готовых решений ограничен функционал и удовлетворить все хотелки врятли бы вышло.
Теперь обо всем по порядку
Остановились мы на том, что объединили устройства в одну сеть и подключили к MQTT брокеру. Теперь начнем с управления с телефона. Для этого подойдет любое приложение, которое может получать и отправлять MQTT сообщения. У всех них есть плюсы и минусы, можно выбрать любое, которое понравится фукционалом и визуально. Я остановился на IoT MQTT Panel.
После настройки в нем подключения к брокеру, необходимо добавить нужные вам кнопки, графики, индикаторы состояния и т.д.
Первым делом я добавил одно реле, которое будет управлять насосом и уже прошил в Tasmota.
Контроллеры ESP имеют так называемые GPIO, порты ввода/вывода, к которым подключаются датчики, кнопки, реле. Здесь так же не буду углубляться, скажу только что в готовых устройствах само реле привязывается к одному из GPIO и в настройках Tasmota нужно настроить режим его работы как Relay.
Теперь можно управлять этим реле по MQTT по беспроводной связи. Напомню: для общения по MQTT используются топики (Topic - условно тема сообщения) и само сообщение. Для управления реле нам нужно отправить на него MQTT сообщение которое выглядит следующим образом:
cmnd/relay1/POWER ON, где
relay1 это название устройства в настройках Tasmota
POWER это выход устройства relay1. Если на этом устройстве несколько реле можно управлять ими отдельно используя POWER1, POWER2 и т.д.
ON - наше сообщение для включения реле, может быть OFF для отключения или TOGGLE для переключения.
В ответ на эти сообщения Tasmota отправляет брокеру состояние данного выхода в топик stat/relay1/POWER с сообщением ON или OFF
В приложении, в поле Topic пишем cmnd/relay1/POWER
Payload ON - ON
Payload OFF - OFF
Subscribe Topic, это топик, подписываясь на который мы будем получать актуальное состояние нашего реле. В нашем случае stat/relay1/POWER
Ну и дальше на ваше усмотрение можно выбрать разные иконки, цвета. Можно включить запрос перед отправкой сообщения, который защитит от случайных нажатий. В конечном счете у нас появится первая кнопка.
Не знаю, нужно ли так подробно расписывать, но когда делал все это сам, очень долго собирал информацию, потому что совсем не было опыта и информации одновременно много в целом, но мало по конкретным темам. Надеюсь кому-то это пригодится.
Теперь мы можем включать устройства с телефона в домашней сети. Двигаемся дальше.
В процессе поиска системы для автоматизации всего что у меня будет, наткнулся на Node-red. Дальше речь пойдет о нем. Ни разу не пожалел о своем выборе, так как система может построить практически все сценарии, которые могут придти в голову. Оправка и получение данных по MQTT, работа с Telegram ботами, скачивание и отправка в интернет любой информации, интеграция с Алисой, Zigbee, SmartTV (по крайней мере с моим LG на WebOS), работа с почтой, ModBus, SNMP и многое дрегое. А строится все управление путем создания так называемых Нод и их соединения. К тому же абсолютно бесплатна и не требовательна к ресурсам.
И так я начал решать свою первую задачу с насосом. Напомню, что вода в скважине, после непродолжительной работы насоса заканчивается и нужно было сделать периодическое включение/отключение насоса. Но это время всегда разное. В какие-то дни можно качать по 10 минут, а в какие-то вода заканчивалась через 2-3 минуты. То есть нужно оставить возможность регулировки интервалов включения.
Сначала надо настроить приложение чтобы оно отправляло сообщения с разными цифровыми значениями на нужный топик. Для этого в приложении есть виджет Slider (ползунок).
Нужно задать топик для отправки. Его будет считывать Node-red, поэтому мы можем написать все что угодно. Например control/relay1. Payload min и payload max это крайние состояния ползунка. Для себя я сделал от 0 до 10 это мои минуты для управления. Slider step это шаг значений. Factor это наш множитель, который будет применяться к нашему числу для отправки. Unit просто обозначение наших единиц на виджете.
Теперь с помощью приложения мы отправим брокеру сообщение с топиком control/relay1 и значением от 0 до 10. Нужно обработать его в Node-red и отправить на реле. Переходим в Node-red. Его установка подробно описана на сайте, ее описывать не буду. После установки переходим на страницу его настройки по ip-адресу. Web-интерфейс выглядит так
Слева доступные ноды. Они выставляются на рабочую область и соединяются линиями. Есть ноды со входом, есть ноды с выходом, есть ноды у которых есть вход/выход. Немного про ноды
Switch позволяет разделять пути для сообщения, что-то вроде условия IF в языках программирования.
Delay добавляет задержку сообщениям или служить как фильтр выдавая сообщения определенный промежуток времени.
Trigger позволяет отправлять сообщение через определенный промежуток времени если не было "Стоп" сообщения.
Inject запускает внесенное сообщение вручную, служит для отладки. Но так же может отправлять сообщения по расписанию или с определенным интервалом.
Function для обработки сообщений с помощью ЯП JavaScript
Debug выводит сообщение в окно Debug, в правом краю окна. Служит для отладки.
и многие другие, с разными функциями.
Для получения сообщений MQTT используется нода mqtt in, для отправки mqtt out. После добавления ноды mqtt in в ее свойствах указываем параметры брокера. Добавляем нужные ноды и нажимаем Развернуть. Если ноды mqtt настроены правильно, то под ними появится надпись connected или подключен.
Теперь если сменить положение ползунка в приложении на нужное количество минут, насос будет включатся на заданное время и останавливаться на 4 минуты. Этого времени достаточно чтобы вода набралась и можно было включать снова. На самом деле эта функция реле очень облегчила жизнь. И не думаю что готовые решения могли бы предоставить мне такие возможности по такому же бюждету.
В следующих постах расскажу как делал отключение насоса по поплавкам в баках, получал события от камер и планах на будущее.
Установка Home Assistant в Debian 12
Всем привет. Данную инструкцию пишу, в первую очередь, для себя, чтобы в следующий раз не вспоминать мучительно, что и как. На момент написания поста в инете гайдов по установке ХА на Доебана 12 не нашел, так что эксклюзив. Итак:
Ставим доебан 12. Обязательно перед установкой вытаскиваем zigbee-stick. Если этого не сделать, то что-то ломается еще на этапе установки, она не запускается в графическом режиме, а после завершения установки zigbee-stick нормально не определяется.
Из категорий пакетов выбираем Debian desktop environment, GNOME, SSH server, standart system utilities.
После установки доебана и первой нормальной загрузки, топаем в консоль, локально или удаленно по SSH. // - это знаки комментов, их в консоль копировать не надо)
su - //стать нормальным рутом
usermod -aG sudo username //добавить пользователя username в группу sudo
logout, login //- это если подключен по ssh. Если локально через гуя, то проще перезагрузиться, я хз, как это работает.
sudo -i //получить нормальные рутовые привелегии через sudo
apt-get install curl systemd-journal-remote systemd-resolved -y //ставим зависимости
systemctl restart systemd-resolved // чиним DNS после установки systemd-resolved
curl -fsSL get.docker.com | sh //ставим докер
wget https://github.com/home-assistant/os-agent/releases/download... //качаем агента
dpkg -i os-agent_1.5.1_linux_x86_64.deb //ставим агента
wget https://github.com/home-assistant/supervised-installer/relea... //качаем ХА
dpkg -i homeassistant-supervised.deb// ставим ХА
reboot //тут он нужен, потому что на экране написано, что он нужен для чего-то хорошего и умного)
Создать локальный аккаунт HA или восстановиться из бэкапа.
Увидеть ругачку System is currently unhealthy because it does not have privileged access to the docker runtime. Use the link to learn more and how to fix this.
Перезагрузить хост. Именно из ОС, а не из ХА.
Умный чайник Xiaomi Mi Smart Kettle?
После удачного добавления ума обычному домофону (смотри предыдущие посты), решил что можно добавить ума и чайнику.
Поизучав рынок на предмет умных чайников стало понятно, что данный тип устройств нифига не дешёвое удовольствие. Но вот стоимость чайника от Xiaomi вполне удовлетворила мою жабу, и чайник был приобретен.
И вот когда заветный девайс был добавлен в мой умный дом, я был мягко говоря огорчен... - Почему этот "умный" чайник не умеет включаться удалённо? Это просто фиаско... Прожил этот чайник года два и никого не предупредив обиделся и поломался. Гад.
Ладно, подумал я, попробуем его оживить или придумать что-то своё, но теперь я уже понял чего мне надо от чайника. Самое главное - это возможность удалённого включения! И хотелось бы им рулить по Wi-Fi, а не по долбаному блютузу. Ок, полезли в интернет искать замену по хотелкам. И фиг... пара вариантов от Redmond и ценой под 10килло рублей. Значит будем этот оживлять подумал я еще раз.
Разбираем чайник снизу, и видим там плату блока питания с релюхой до самыйх ушей залитых инертным компаундом, который как и ожидается ничем не отдирается, а только крошится в мелкую крошку. Замерив сопротивление спирали, понимаем, что оживить чайник не получится.
Лезем в ручку, там находится плата управления, с блютуз-микроконтроллером. И вот тут я понял чего надо сделать...
Итак идея: Купить новый такой-же чайник, а плату управления сделать свою, на ESP8266. Заказываю новый чайник, и идем в EasyEda делать подменную плату.
Немного поигравшись с линейкой и мультитестером получаем вот такую-вот схему:
Заказываем производство, и ждем. Да, когда я это делал, проблем с заказами еще не было. Потом пайка, нахождение косяков, исправление их в схеме. На картинке выше всё уже исправлено, поэтому фотка плат немного отличается. Но не суть.
От платы со старого чайника сдергиваем мелочёвку в виде светодиодов/кондёров/резисторов, разъёмы подключения и спиральки Touch-сенсора. В итоге получаем подменную плату:
Теперь надо всё это хозяйство прошить. Умный дом у меня на базе Home Assistant и прошивку будем писать на ESPHome.... посидев пару вечеров, и откалибровав показания температурного датчика получаем готовое устройство. Да, тут стоит отметить, что отключение чайника происходит по показаниям температурного датчика, поэтому тут стоит уделить внимание.
По умолчанию у чайника есть две сенсорные кнопки, отвечающие за включение и удержание температуры. Включение оставляем, а вот поддержание температуры мне нафиг не надо. Вместо её я сделал подогрев до указанной температуры.
Втыкаем плату в новый чайник:
И идем в HomeAssistant соединяться с чайником:
И конечно же добавим карточку в lovalace
Остаётся за малым - прокинуть в Умный дом яндекса, для управления через Алису.
Вот таким вот образом, умный чайник Xiaomi Mi Smart Kettle стал и в правду умным.
Цена вопроса - 2500 руб. чайник + 1000 руб. платы и детали. И это дешевле чем Wi-Fi чайник Redmond, плюс своя прошивка без всяких левых аккаунтов производителей.
WiFi для кондиционера Ballu BSDI за 100р
Давно и неспешно погружаюсь в тему умного дома. Имеется Home Assistant с различными интеграциями, в том числе с умной колонкой от Яндекса.
И тут с приходом теплых дней вспомнил я про кондиционеры и про их возможность управления по WiFi.
Поскольку в инструкции в к ним сказано лишь о возможности такой работы без какой-либо конкретики и о существовании какого-то абстрактного WiFi модуля, подключаемого в USB разъем кондиционера, начал гуглить.
Нагуглил вот такие варианты:
Ballu Smart Wi-Fi BEC/WFN-02
Рекомендуется “экспертами” Ballu
Управляется приложением HOMMYN, которое может интегрироваться с Алисой, Марусей и Салютом.
В продаже хрен найдешь ибо уже снят с производства.HOMMYN HDN/WFN-02-01
Универсальный модуль от HOMMYN для HOMMYN
Есть в продаже. Даже разок заказал с Озона, но заказ отменили.
Решил еще раз поизучать вопрос и…HeatStick
И тут я натыкаюсь на статью на хабре, в которой ребята представляют свой модуль для управления техникой Ballu, из которой меня осеняет что, несмотря на то что модули втыкаются в USB разъем, по факту же они взаимодействуют с устройством через UART посредством приема и отправки простейших команд при помощи контроллера esp8266.
Надо сказать, факт работы через UART меня сильно вдохновил. Ведь это означает, что все “мозги” для интеграций по сути находятся в модуле. Достаточно лишь заснифать общение оригинального модуля и можно интегрировать кондиционер с чем угодно посредством той же esp8266.
Но и этого делать мне не пришлось, так как, оказывается, давно уже есть решения на базе esphome. Не меньшим открытием для меня оказалось, что прошивки для midea, aux подходят для огромного множества кондиционеров разных фирм.
Сначала я наткнулся на вот такое решение: https://github.com/GrKoR/esphome_aux_ac_component, у которого в списке есть Ballu, хоть и не моей модели. Но, затем, когда я обнаружил явные расхождения по питанию (в доке везде 12-14В, а у меня 5), понял что это точно не мой вариант.
Обратился к доке на свою модель и обнаружил, что произведена она на заводе midea. И вот уж совпадение, но у esphome работа с ними есть прямо “из коробки”: https://esphome.io/components/climate/midea.html
Дело за малым: берем esp-01, заливаем прошивку, припаиваем usb разъем, втыкаем, добавляем появившуюся интеграцию esphome и радуемся маленькой личной победе и небольшой экономии.
Так это выглядит в настройках интеграции Home Assistant
Так это выглядит в lovelace Home Assistant
А вот так в умном доме от яндекса:
Фотографиями своей неаккуратной пайки, пожалуй, шокировать никого не буду, но схема там простейшая:
Есть небольшой нюанс, что у esp8266 по спеке максимальный вольтаж составляет 3,6В, а от кондея приходит 5В. По хорошему, необходимо этот момент учесть и каким-либо образом снизить напряжение. Однако, на практике же эта микросхема прекрасно живет и на 5 вольтах, что сводит весь набор компонентов лишь к платке с esp8266 (в моем случае, esp-01), разъему USB A male и 4 проводкам.
По ценам на али это тянет рублей на 100 вместо тех же 1500-2000 за решение от HOMMYN.
Полагаю, что для тру-электронщиков я никакого открытия не сделал, однако допускаю, что для начинающих это вполне может быть полезно.
UPD:
Как заметили в комментариях, стоит все же дополнить схему линейным стабилизатором AMS1117-3.3 иначе нет никакой гарантии, что esp в таком режиме проживет хоть сколько-то долго.