Это случилось обычным воскресным вечером, лет 15 назад. Завтра - понедельник, на работу, значит пора ложиться спать. По всей квартире горит свет, надо идти выключать, но лень! Хочу чтобы одной кнопкой все выключалось! Знакомая ситуация, не правда ли?
На тот момент о программировании я знал немного, об электронике чуть меньше, а про умные дома - вообще ничего. Но сегодня я смело могу сказать, что теперь я кое-что знаю об этом. За это время мы вместе с моим жилищем прошли огромный путь из проб и ошибок, многому научились и осенью прошлого года совместно решили, что пора показать себя людям.
Это был долгий путь, все начиналось с изучения базовой схемотехники, основ языка C и микроконтроллера STM32F100, к которому, при помощи развешанной по всей квартире витой пары, были подключены 1-Wire устройства, способные кое-как управлять друг другом, по жестко запрограммированной схеме. Позже F100 был заменен на F4 c ethernet и первым неуклюжим web-интерфейсом, позволявшим жутко неудобно настраивать логику поведения устройств. В конечном итоге я пришел к выводу, что центральное устройство умного дома на микроконтроллере - это слишком сложно. Так на свет появился HOMEd.
Что же такое HOMEd?
Это, в первую очередь, программный комплекс для умного дома. Он состоит из отдельных небольших приложений, каждое из которых выполняет свою конкретную функцию. Все приложения написаны на C++ с использованием фреймворка Qt5 для работы под Linux/OpenWRT, распространяются в виде apt и opkg пакетов для большинства популярных архитектур, а также в виде docker-образов. Исходный код приложений я публикую на github. Приложения общаются друг с другом посредством MQTT-брокера, что ощутимо упрощает интеграцию с другими сервисами.
Почему Qt?
Hidden text
Ведь это же фреймворк для GUI-приложений, скажете вы. А я отвечу - это не мешает ему быть шикарным кроссплатформенным фреймворком и для "консольных" приложений. Тем более, я довольно хорошо изучил его на текущем месте работы и активно использую в своем коде многие фичи, такие как мета-объекты и сигналы/слоты.
А теперь давайте по порядку. Сильно вдаваться в детали не буду, вместо этого постараюсь донести самую нужную информацию. Поехали!
HOMEd ZigBee
Думаю, из названия понятно что это - программный шлюз для работы с ZigBee-сетью. Зачем, ведь есть же Zigbee2MQTT? Да, есть. Но я не очень люблю интерпретируемые языки программирования и огромных монстров, написанных на этих языках. Тем более, на момент, когда я узнал о существовании ZigBee, у меня уже была сформирована некая идеология и Zigbee2MQTT в нее никак не вписывался.
HOMEd ZigBee на данный момент умеет работать с адаптерами (координаторами) на базе чипов Texas Instruments CC2530/2531/2538/1352/2652 с прошивками Z-Stack, Silicon Labs EFR32MG1/MG2 с прошивками EZSP v8+ и NXP JN5168/5169 с прошивками ZiGate. Как через локальный порт, так и по сети, через RAW-сокет.
Примерно полгода назад по многочисленным просьбам немногочисленных пользователей была реализована функция Home Assistant MQTT Discovery, благодаря которой устройства автоматически "залетают" в HA.
Библиотека поддерживаемых устройств сейчас, навскидку, содержит около 300 моделей, в основном это популярные устройства от Aqara/Xiaomi и TUYA, доступные в массмаркетах РФ и на Aliexpress. Сама по себе библиотека - это псевдо-декларативное описание устройств в формате JSON, позволяющее, в большинстве случаев, добавлять новые устройства без перекомпиляции кода приложения. Вот пример описания среднестатистического датчика температуры:
{
"description": "Sonoff Temperature and Humidity Sensor SNZB-02",
"modelNames": ["TH01"],
"properties": ["batteryPercentage", "temperature", "humidity"],
"bindings": ["battery", "temperature", "humidity"],
"reportings": ["batteryPercentage", "temperature", "humidity"],
"exposes": ["battery", "temperature", "humidity"]
}
Кроме библиотеки устройств в HOMEd ZigBee реализован механизм автоматического "распознавания" для неизвестных устройств. Этот механизм создает функциональные элементы на основании списка ZigBee-кластеров устройства, как если бы оно было описано в библиотеке. Да, эта фича работает не безупречно и не в состоянии "распознать" какой-нибудь навороченный термостат, но простая лампочка или датчик температуры почти наверняка "заведутся" без проблем.
HOMEd Modbus
Это небольшое приложение для работы с Modbus RTU устройствами через локальные (в перспективе - и через удаленные) последовательные порты. Приложение пока находится в стадии тестирования и официально не опубликовано, но это ненадолго. В текущий момент реализована поддержка совсем небольшого количества устройств, а именно - счетчиков электроэнергии Wiren Board WB-MAP и устройств собственной разработки. Как и в HOMEd ZigBee, настройки и данные устройств "прокидываются" в Home Assistant посредством функции MQTT Discovery.
Что касается устройств собственной разработки - это шлюзы и контроллеры для установки на din-рейку (в основном), но о них я лучше напишу отдельную статью.
HOMEd Automation
Наверное, тут тоже понятно из названия, что это - приложение для автоматизаций. Оно совсем молодое и пока немного неуклюжее, но кое-что уже умеет. Автоматизации работают по классической схеме "триггеры - условия - действия". Не буду далеко ходить, просто напишу список доступных на данный момент элементов автоматизаций.
Триггеры:
изменение состояние устройства (например, кнопка была нажата или показания датчика вошли в заданный диапазон)
telegram-сообщение (пока работает только конкретный текст, например, "включить свет в гараже")
mqtt-сообещние (так же как в предыдущем пункте, конкретное сообщение в конкретный топик)
рассвет/закат (с вознеможностью корректировки, например, за полчаса до рассвета)
время суток (включаем кофеварку в 7 утра)
Условия:
текущее состояние устройства (включаем кофеварку, только если в берлоге прохладно)
конкретная дата или диапазон дат
конкретное время суток или диапазон времени суток
определенные дни недели
Действия:
изменить состояние устройства (включить реле, открыть шторы и т.д.)
отправить telegram-сообщение
отправить mqtt-сообщение
выполнить shell-команду
HOMEd Web
Одно кольцо, чтобы править всеми. Это приложение является самостоятельным http-сервером и позволяет настраивать автоматизации, добавлять/удалять устройства и управлять ими прямо в браузере.
Почему это отдельное приложение? Да потому что так проще, не нужно настраивать отдельные порты для каждого приложения, а с учетом того, что обмен данными осуществляется через MQTT, каждое приложение может работать вообще на отдельном контроллере, нужен лишь общий брокер.
Заключение
Наверняка вы хотите спросить, а зачем мне все это? Ведь есть популярные решения: Zigbee2MQTT, Home Assistant, OpenHAB и прочие! Я отвечу коротко - да просто так, потому что могу. Мои приложения самобытные, шустрые и могут работать на "слабом" оборудовании.
Если же я смог заинтересовать вас, то самое время попробовать все это в деле. У меня есть вики с документацией, которую я очень стараюсь держать в актуальном состоянии, хотя не всегда получается, а так же telegram-чат, где можно задавать любые вопросы по теме (и не по теме).
Все и ничего вознеможно!
Комментарии (40)
kirovilya
12.09.2023 11:21+3Yet Another софт для автоматизации... чем лучше? чем хуже других?
Кто потенциальный пользователь, кроме автора?
Чем стимулируется развитие?lenz1986
12.09.2023 11:21+6Прокомментирую со своей точки зрения, самое главное отличие : нет докеров , нпм и огромных бибилиотек. А просто несколько бинарников, и работает на железе с 64мб рам.
Iron_Butterfly
12.09.2023 11:21Тоже прослойка в виде mqtt, как у zigbee2mqtt? Следовательно, в скорости уступает тому же ZHA?
lenz1986
12.09.2023 11:21Вот кстати нет. Прям достойный конкурент zha.
Iron_Butterfly
12.09.2023 11:21За счет чего?
lenz1986
12.09.2023 11:21скорость передачи по mqtt тут мизерная, и нет медленной обработки как в Z2M. Z2m не из-за mqtt тормоз... а сам по себе )
lenz1986
12.09.2023 11:21рекомендую попробовать. Z2M я выкинул давно, остался ZHA и HOMEd
Iron_Butterfly
12.09.2023 11:21Переезжать с z2m с 50+ устройствами будет очень больно. Да и далеко не уверен, что все они будут с HOMEd работать.
lenz1986
12.09.2023 11:21+1HOMEd для попробовать можно для примера на perenio peacg01 развернуть. По цене примерно как стик.
Iron_Butterfly
12.09.2023 11:21Не могу придумать причину, для чего мне это может понадобиться. В z2m все устраивает :)
mihmig
12.09.2023 11:21+1Меня например в Z2M не устраивает лаг:
После нажатия кнопки на zigbee-пульте лампочка загорается (иногда!) секунды через 2.
Я не знаю что происходит в "кишках" у этого nodejs-монстра, но повлиять на это я никак не могу...
sirota
12.09.2023 11:21+3С большей вероятностью почти все заведется, что не заведется - быстро фиксится.
Переезд - да он будет не прост, но это в очередной раз пересмотреть автоматизации в целях их упрощения. Это мой 2-й переезд (первый был внутри z2m когда я понял что не переименовывать идентификаторы устройств была очень глупая идея) и я очень много что пересмотрел в сторону упрощения (к примеру вместо таймера на выключение освещения с ДП я просто увеличил таймер отключения сенсора присутствия на самих ДП).
А так совсем другая концепция открывается. У меня 4 зигби сети. 2 уже целиком переехали на homed. Что же я получил в замен? Локальную работу. На каждом шлюзе (в моем случае это homed pico + есть в наличии те же перешитые шлюзы перенио, но пока они только бриджами в z2m) установлен homed zigbee, homed automation, homed web и mqtt брокер. Весь софт завернут в локальный брокер, на брокере поднят бридж в сторону центрального mqtt брокера на который уже натравлен ХA. Это дало возможность часть автоматизаций не требующих чего-то сверхъестественного перенести целиком на шлюз (например переключение освещения (в том числе и групп и логика работы с группами) с зигби "кнопок" или по датчикам присутствия или движения). Т.е. выход центрального узла умного дома (сервера и любой его составляющей) позволяет пользоваться благами УД, пусть и в ограниченном объеме. Можно усложнить бриджи у брокера и тогда и работа между сетями будет возможна, но я пока этим не занимался.
voznemozhno Автор
12.09.2023 11:21+1если не перегружать брокер мегабайтными сообщениями 200 раз в секунду, он работает быстрее, чем та же ZigBee-сеть :)
vvzvlad
12.09.2023 11:21И какую же ужасную задержку вносит mqtt?
Iron_Butterfly
12.09.2023 11:21Сравнение было с зха. Там нет этой задержки, потому что нет прослойки мкутт.
Iv38
12.09.2023 11:21Ну или по какой-то ещё причине. Потому что это две совершенно разные системы. Я сомневаюсь, что брокер вносит сколь-либо заметную задержку. Особенно, если обмен данными полностью локальный.
a9d
12.09.2023 11:21-1Для автоматизации жилых помещений лучше не использовать ZigBee. Лучше BLE Mesh. Тогда будет решена проблема с подключением мобильников/планшетов/пк. Также разработка и установка будет проходить проще, можно с мобильником походить по помещению, и проверить уровень сигнала.
sirota
12.09.2023 11:21А какая проблема у зигби с подключением мобильников и прочего?
a9d
12.09.2023 11:21много мобильников знаешь с интерфейсом zigbee ? Без посредника не обойтись. А в случае BLE все проходит без костылей.
sirota
12.09.2023 11:21А зачем мне на мобильнике зигби? Если вы о том чтобы проверить уровень сигнала, так это просто не нужно делать. Первое что обычно автоматизируется - это освещение, а значит как минимум 1 роутер в каждом помещении у вас будет.
a9d
12.09.2023 11:21роутер это деньги. Лишний BLE чип это деньги. Если сразу делать все на BLE, то это будет дешевле и удобней. К тому же у тебя всегда в кармане есть мобильник с помощью которого можно всем управлять. ZigBee это весело, но не для автоматизации жилых помещений.
sirota
12.09.2023 11:21+2"Все" зигби устройства питающиеся не от батарейки - роутеры.
И у меня уже скоро 2 года как уд на зигби и он управляет сам собой, мне мобильник для этого не нужен.
ColdSUN
12.09.2023 11:21+2Проблема BLE в том, что там стандартов никаких нет. С ними там ещё хуже чем в Zigbee. Куча производителей и каждый делает что-то своё. Поэтому собирать всё в единую точку всё значительно сложнее. А без единой точки не будет единых автоматизаций, где можно учитывать все параметры.
Нафига мне управление светом только через приложение на мобильнике. А так же отдельно приложение для штор, и отдельное для отопления.
В этом большое преимущество Zigbee. Да приходится иметь какой-то центральный хаб, но так он мне в любом случае нужен, где-то же должны крутиться автоматизации. И лучше бы этот хаб был у меня дома, а не где-то в китайском облаке.
Iv38
12.09.2023 11:21Нипанятна! Шлюз-то всё равно понадобится, иначе как устройства будут взаимодействовать с контроллером автоматизаци? А при наличии шлюза зачем подключаться мобильником куда-то?
Устройств BLE Mesh крайне мало.
shaggyone
12.09.2023 11:21Это когда выбор и доступность устройств будет сравним с тем что уже есть на zigbee, можно будет обсуждать.
Le0Wolf
12.09.2023 11:21+2Дла автоматизации не нужны мобильники/планшеты/пк. Они нужны для ручного управления отслеживания параметров. Но для этих целей Zigbee шлюз обычно подключается к WiFi сети и имеет либо Веб интерфейс, либо приложение. При этом, Zigbee устройства +/- совместимы между собой и поэтому не привязаны к приложению вендора и могут между собой взаимодействовать (т. е. можно настроить полноценную автоматизацию почти всего, после чего она будет работать без каких либо приложений) , в отличии от устройств Bluetooth, которые хорошо, если хотя бы в рамках одного вендора смогут взаимодействовать (но скорее всего, самый максимум - это настройка расписания для каждого устройства в отдельности и управление им через приложение, а-ля пульт от телевизора)
dr_Sergeus
12.09.2023 11:21+1Идея - хорошая, реализация - хорошая. Но в том же Z2M овер 350 сontributors. ZHA - немногим меньше. А в этом деле - один в поле не воин.
voznemozhno Автор
12.09.2023 11:21+1Как говорится - Москва не сразу строилась :)
dr_Sergeus
12.09.2023 11:21Я уже задавал вам вопрос, аналогичный тому, что задал kirovilya выше более полугода назад. :)
voznemozhno Автор
12.09.2023 11:21+8Мне, если честно, совершенно непоняен смысл таких вопросов. Это некий призыв бросить страдать фигней и начать пользоваться «правильными» решениями с 350+ контрибьюторами? Или что? Я уже нашел своих двух с половиной пользователей, да и сам, как не сложно догадаться, успешно пользуюсь своими поделками. Если пользователей станет немного больше, это будет прикольно, а нет - так нет, мой мир от этого не рухнет. Не вижу смысла дальше развивать тему.
pOmelchenko
А matter будет?
lenz1986
Я бы тоже не отказался. Как раз на efr мультипротокольном
voznemozhno Автор
хотелось бы, да все руки не доходят :)