Русский
Русский
English
Статистика
Реклама

Яндекс алиса

Автоматизируем работу системы отопления в квартире без переделки интерьера умный дом z-wave

10.09.2020 18:21:56 | Автор: admin
Давно у меня стояла задача по автоматизации работы системы отопления в доме. Дано классические термостаты теплого пола ballu с крутилкой покупались в leroymerlin в далеком 2017 году для управления электрическим полом.


Сейчас мне необходимо автоматически включать теплые полы в ванной и на балконе по геолокации, семидневному расписанию или событию. Для своей цели я долго выбирал смарт термостаты и остановился на Heatit Z-TRM3 термостат с Z-Wave чипом 5го поколения на частоте 869mhz.

В комплекте все что нужно инструкция на русском языке, ntc type температурный датчик теплого пола и сам термостат со съемной монтажной рамкой для удобства.

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


Сам термостат есть в черном и белом цвете, он позволяет устанавливать температуру теплого пола не только с телефона или контроллера Z-Wave, но и с дисплея на термостате.


Heatit совместим с apple homekit и яндекс алисой, как и практически любые Z-Wave устройства, сейчас постараюсь рассказать как настраивал управление.

Нужен нам Z-Wave контроллер, я выбирал хаб исходя из некоторых соображений: цена, функционал, стабильность, интеграция с голосовыми помощниками и остановился на контроллере RaZberry. Это хаб с ПО Z-Way с неплохим базовым набором функций, так выглядит web интерфейс /smarthome


Поскольку Z-Wave это радио протокол управления, в хабе можно выбрать нужную частоту контроллера через expert ui интерфейс:


Ну тогда по порядку, снимаем старый термостат, устанавливаем наш Heatit по схеме. Для добавления устройства переводим контроллер в режим добавления, для простоты выберем добавление без шифрования, хотя устройство с чипом Z-Wave 500 серии имеет возможность надежно шифроваться алгоритмом AES-128 для параноиков :) термостат можно и так подключить.


И удерживаем центральную кнопку на термостате, дальше у нас появляется 5 виджетов, ненужные можно скрыть из интерфейса.

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

А вот так выглядит настроенный термостат в стандартном бесплатном мобильном приложении, оно называется Z-Wave.Me, можно скачать с AppStore / PlayMarket.


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

Почему-то нравится HomeKit. И настройка очень простая заходим в интерфейсе в раздел приложения онлайн приложения ищем HomeKit, жмем добавить, называем наш мост умного дома и готово! вводим полученный HomeKit pin в приложении Дом на iPhone/iPad.


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


Управлять в приложении Дом можно как локально так и удаленно если у тебя есть iPad/homepod/apple tv.

Настроил автоматизацию по геолокации я прямо в приложении дом за пару минут:


(Валентина это остановка по пути к дому, после этой локации обычно через 15-20 минут я дома)

И все отлично работает, тут-же можно настроить семидневное расписание, ну или быстрее даже будет в интерфейсе z-way smarthome, заходим в локальные приложения, выбираем расписание, задаем нужный график работы на 7 дней и жмем сохранить:


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

По голосовому управлению Siri не совсем адаптирована под русский язык, тем более у меня есть Яндекс станция, решил и это настроить чтоб можно было сказать Алисе теплый пол 30 градусов не вставая с дивана. Это всегда удобно. Для этого нам надо в приложении Яндекс на iOS/Android зайти в раздел Устройства, добавить устройство другое устройство и ищем в списке производителей Z-Wave.Me. В моем случае надо нажать обновить список устройств, так как хаб уже добавлен в Алису. В конце выйдет окно с настройкой устройства.


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


Кстати, сам термостат Heatit поддерживает достаточно много классов команд, можно посмотреть в интерфейсе контроллера:


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

А еще в этом термостате есть интересная функция SmartStart, я могу отсканировать QR-коды всех устройств мобильным приложением, подсоединить контроллер к интернету и включить питание каждого гаджета, дальше произойдет магия QR-код содержит информацию о так называемом уникальном ключе устройства (Device Specific Key, DSK), который производители присваивают каждому компоненту умного дома контроллерам, датчикам и актуаторам. После сканирования QR-кода информация об устройствах сохраняется не в мобильном приложении, а в специальном облачном сервисе. Из него контроллер по DSK-ключам получает сведения о конфигурации всех гаджетов, которые нужно зарегистрировать в сети.

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

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

Как подключить пару рольставней по трём проводам и управлять ими голосовым ассистентом

23.03.2021 12:19:49 | Автор: admin

Всем привет!

В этой статье я расскажу, как мне пришлось исправить ошибку строителей, которые заложили в штробу всего один 3-х проводной кабель, идущий к двум рольставням, тогда как нужно было проложить два таких кабеля. А так же про недорогой WiFi + RF433 МГц блок управления рольставнями и подключение его к голосовому ассистенту Яндекс Алиса. Если Вам интересны подробности, то прошу под кат.

Распаковка блока управления рольставнями


Я достраиваю свой дом, и недавно у меня на окнах первого этажа установили моторизированные рольставни. Для управления ими я приобрел на Aliexpress WiFi+RF433 переключатели от компании Moes, на упаковке указано название Smart WiFi + RF Curtain Switch. Обошлись они мне по 900 руб. за 1 шт. В комплекте идет небольшая инструкция по подключению и два болтика для монтажа. Панель сделана из стекла, на ней расположены три сенсорные кнопки с синей подсветкой. Подключается устройство всего 4-мя проводами: L-линия, N-ноль, Open, Close. В инструкции нет упоминаний про работу блока с Яндекс-станцией Алиса, но как потом оказалось, устройство прекрасно сопрягается с умной колонкой через приложение Tuya Smart.



Блок управления изнутри


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

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



Подсветка кнопок


Стоит ещё упомянуть, как работает подсветка в модуле управления. Днем подсветку всех кнопок не заметно. Но на панели всегда ярко светится последняя нажатая кнопка. Если нажать клавишу опустить занавес и не важно по WiFi или кнопкой на пульте, то будет светится кнопка Close до того момента, пока не будет нажата другая кнопка. А у клавиши STOP есть две функции: с её помощью можно остановить ставни в любом положении, и вторая функция это перевод свечения кнопок в ночной режим. В полной темноте свечение всех клавиш очень комфортное и абсолютно не раздражает глаза.



Подключение к WiFi


При первом включении сразу же начнут мигать все три кнопки тем самым блок говорит, что его нужно подключить к WiFi сети. Для этого потребуется установить приложение Tuya Smart. запускаем приложение->нажимаем +(добавить устройство)->мелкая бытовая техника->шторы/карниз WiFi->включаем геолокацию->подтверждаем Имя и ключ WIFI сети после непродолжительной паузы устройство будет добавлено и после чего можно сменить его название. Для удобства управления я у себя все три добавленных устройства назвал окно, только присвоил им всем разные комнаты. В голосовом ассистенте Алиса нажимаем (+) -> другое устройство -> находим Tuya Smart -> обновить список устройств.

Я так же в голосовом ассистенте создал такие сценарии, как: Сим-сим откройся, Открой все окна, Включи кино и т. д.



Подключаем пульт 433МГц


Так же для более широких возможностей управления рольставнями, я приобрел пульт, работающий в радиодиапазоне 433 МГц.
Для того, чтобы модуль переключателей запомнил кодовые команды с радиопульта, нужно нажать и удерживать требуемую кнопку на блоке управления до того момента, пока он не издаст одиночный звуковой сигнал и при этом индикатор начнет быстро мигать, после чего нужно нажать такую же кнопку на пульте дистанционного управления. Если переключатель запомнил код, то он переведет индикатор в постоянно светящийся режим. Для обнуления ранее записанного кода, нужно нажать и удерживать кнопку блока управления в течении 10 секунд до того момента, пока он не издаст три прерывистых звуковых сигнала, после чего код пульта из блока будет стёрт.



Косяки строителей


Теперь о проблеме, с которой я столкнулся при подключении рольствней. Строители, которые занимались отделкой, несмотря на мои неоднократные напоминания, заложили всего один трех проводной кабель для двух окон. А всплыла эта проблема, когда приехали установщики роллетов. Ну ладно, подумал я, подключу их параллельно, но, как оказалось, подключать рольставни параллельно между собой нельзя. Я, конечно, сначала не поверил в это, но потом убедился в этом сам, когда попытался проверить это на практике и чуть было на спалил моторы. Проблема заключается в том, что моторы имеют несколько обмоток и между ними установлен фазосдвигающий конденсатор. И если подать управляющий ток на поднятие занавеса Open, то на открытом конце Close будет напряжение 220В, которое начнет вращать рольставни в противоположную сторону, и они останутся на одном месте в заклиненном состоянии, а ток при этом будет протекать через обмотки двигателей. Получится как в той басне про лебедя, рака и щуку.



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



Но групповой блок GC-2 мне тоже ни как не поможет, так как ему кроме проводов Open, Close и N-ноль требуется ещё и линия-L. Если игнорировать заземление, то в сумме получается 4 провода. А у меня, как вы помните, их всего 3. Перерыв весь интернет, я так и не нашел решения, хотя встретил братьев по несчастью с такой же проблемой, просящих помощи у сообщества. В итоге у меня остался только один вариант штробить стену и прокладывать недостающие провода. Что меня никак не устраивало, так как на первом этаже уже выполнена свежая отделка и смонтированы натяжные потолки. Мне бы не хотелось портить строительной пылью свежий ремонт. Пришлось напрячь мозг и придумать своё решение.

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



Схема подключения реле


Я думаю у многих может возникнуть вопрос: почему именно 3 группы контактов, а не две? Если исключить самую верхнюю группу контактов на схеме, замкнув эти два провода, то через взаимосвязанные обмотки электродвигателей и через обмотку реле будет протекать ток в любом положении переключателя, и реле всегда будет переходить во включенное состояние.



Монтаж реле


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



Ну вот наконец все подключено, можно проверять.

Заключение


Спасибо, что дочитали до конца!

Если Вам понравилась моя статья то поддержите её лайком и подпиской.

Если у Вас есть вопросы, то можете задавать их в комментариях.
Подробнее..

Визуализация голосового помощника Алисы с эффектом голограммы

28.05.2021 12:18:53 | Автор: admin

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

Вступление

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

Например, у меня есть робот голосовой помощник "Vector" от Anki (сейчас им владеет Digital Dream Labs). Он отлично передает эмоции (радость, огорчение, злость и т.д.), когда с ним взаимодействуешь. Но его проблема в том, что программная часть голосового помощника Vector очень слабая по сравнению с такими гигантами как Alexa, Google Assistant, Siri, Алиса.

Робот Vector от AnkiРобот Vector от Anki

Недавно Яндекс выпустил умную колонку Яндекс.Станция Макс с LED-дисплеем. Через дисплей, голосовой помощник "Алиса" дополняет свои ответы анимацией и выражает "эмоции". И это уже хороший шаг в сторону визуализации голосового помощника, но все равно этого недостаточно для меня.

Яндекс.Станция Макс с LED-дисплеемЯндекс.Станция Макс с LED-дисплеем

Бороздя просторы интернета во время всеобщего карантина, я увидел пост о том, как Джарем Арчер сделал рабочий концепт голограммы голосового помощника Cortana от Microsoft. Я вдохновился этой идеей и захотел это повторить, только вместо Кортаны, взять Алису от Яндекса.

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

  • Старый монитор c TFT матрицей (BenQ GW2750HM)

  • Старый ноутбук (core 2 duo p7350, GeForce 9300M, 4Gb RAM)

  • 3D-принтер (Tevo Tarantula 2017)

  • RGB-светодиодная лента

  • Arduino Nano

Дисклеймер по качеству фото

Не сразу додумался фотографировать весь процесс создания, поэтому фото были сделаны на свой старенький Xiaomi

Корпус

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

Модель делал в Autodesk Fusion 360. Сама модель состоит из нескольких частей и ее, в теории, можно сделать под любой размер монитора.

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

Модель корпуса в Autodesk Fusion 360Модель корпуса в Autodesk Fusion 360

3D печать

Для печати корпуса выбрал ABS пластик т.к. он прочный и легко поддается обработке. Но есть и минусы: дико воняет и сильно чувствителен к сквозняку. На печать всех компонентов ушло дней 5 почти непрерывного печатания. Поэтому запах в доме еще долго не мог уйти.

Напечатанный корпусНапечатанный корпус

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

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

Эффект голограммы

Эффект голограммы создается просто: сверху лежит монитор, изображение попадает на стекло, которое стоит под определенным углом.

У стекла есть эффект раздвоения изображения (особенно, если стекло толстое), когда изображение отображается на передней и задней стороне стекла. Чтобы это убрать, с обратной стороны наклеил антибликовую пленку.

Первая проверка работы "голограммы"Первая проверка работы "голограммы"

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

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

Полностью собранный корпусПолностью собранный корпус

Программная часть

Программная часть состоит из четырех частей: официальный, но уже устаревший desktop-клиент Алисы, Python-сервис для обработки сообщений, приложение на Unity для отображения модели и Arduino Nano для управления светодиодной лентой.

Общий принцип работы визуализации следующий: клиент Алисы передает текст команды от пользователя и ответ на Python-сервис. После обработки данных, сервис отправляет команду на вызов той или иной анимации в приложении на Unity и команды для управления светодиодной лентой на Arduino.

Чтобы перехватить запросы в клиенте Алисы, использовал реверс-инжиниринг. Для этого взял старую версию клиента Алисы. Данная версия работает на JS, но исходники были обработаны обфускатором, поэтому пришлось долго искать места, где можно перехватить команды. После этого вставил вызовы API моего сервиса для передачи данных.

После того, как сервис получил данные из клиента, он их обрабатывает. В зависимости от того, какие данные пришли, отправляет по MQTT сообщения: состояние (например, Алиса начала слушать пользователя), текст ответа на запрос и изображение ответа. Если с состоянием и текстом сообщения все легко и в сервис приходит простой JSON, то с изображением не так просто. Внутри клиента Алисы изображения строятся на основе сложного JSON, который приходит от сервиса Яндекса. Его нужно было бы обрабатывать и создавать изображение самому, а т.к. я ленивый человек, решил отправлять то, что клиент Алисы сам формирует (HTML блок + CSS). Далее сервис вставляет HTML блок в запущенный заранее веб-драйвер Chrome, делает скриншот и отправляет в MQTT JSON сообщение с изображением в Base64, высотой и шириной изображения для сохранения пропорций в Unity. Для включения/выключения светодиодной ленты, сервис отправляет по Serial порту сообщение/команду в Arduino, выбирая какую область (светодиод над моделью и/или заднюю и нижнюю светодиодную ленту) включить с каким RGB цветом и яркостью.

Есть еще одна функция. Клиент Алисы периодически опрашивает сервис на наличие новых команд для неё. Если есть новая команда, то клиент выполняет её таким образом, как это сделал бы пользователь через голос или текст. Например, если дать команду: "Алиса, повтори за мной: Перед уходом, не забудь покормить кота", то эту фразу она и повторит. Таким образом можно оповещать состояние датчиков.

Приложение на Unity принимает сообщения с MQTT для запуска анимации и отображения текста/изображения на специальных панелях. Модель отображают три камеры (каждое изображение попадает на свое стекло), на которых применен эффект "зеркала", чтобы после проецирования на стекло пользователь видел корректное изображение модели и текста.

Визуализация в UnityВизуализация в Unity

Т.к. голос Алисы бы сделан на основе голоса Татьяны Шитовой, которая озвучивает большинство героинь Скарлетт Йоханссон, то для модели Алисы я взял образ персонажа из комиксов Marvel "Черная вдова", что дало визуализации свой "шарм". Саму 3D-модель я взял из открытого доступа, а скелет и его анимацию сделал в Blender, визуальный эффект голограммы был применен на модели в самой Unity.

3D-модель Алисы3D-модель Алисы

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

Заключение

Огромное спасибо моей жене! Без её помощи, поддержки и терпения я бы забросил эту идею с самого начала.

Еще есть что доделать. Например, можно было добавить камеру, чтобы отслеживать лицо пользователя и "поворачивать" модель к пользователю для усиления эффекта голограммы, прикрутив к сервису OpenCV и отправку в MQTT значений поворота модели, но USB камеры нет.

Из минусов, найденных при эксплуатации:

  1. У меня настроена система "Умный дом", через Home Assistant. На нем работают как свои устройства (на esp8266/Arduino), так и производителей (в основном от Xiaomi). Когда я начал делать этот проект, то была возможность управлять всеми устройствами через Алису. И можно было бы не использовать Яндекс.Станцию мини, но в какой-то момент Алиса в клиенте перестала находить эти устройства, хотя управлять ими через станцию все еще можно. Скорее всего поменяли API, поэтому перестало работать, но есть идеи как это можно исправить

  2. Плохая идея использовать монитор с TFT матрицей

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

Отсчет до нового годаОтсчет до нового года

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

Подробнее..

Безумный дом

01.01.2021 02:21:21 | Автор: admin

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

Под катом - подробный гайд по настройке системы умного дома: сделаем возможным работу устройств ZWave и кастомных MQTT-устройств на базе ESP8266, настроим управление домом при помощи HomeKit и Яндекс Алисы.

Первоначальная настройка Raspberry PI

Установка системы

На распберри ставим raspberry pi os https://www.raspberrypi.org/downloads/raspberry-pi-os/ Записываем ее на MicroSD от 16 ГБ. Обязательно класса 10 и выше, иначе не хватает скорости доступа для работы операционной системы.

$ sudo dd bs=4M if=raspbian.img of=/dev/sdf status=progress

Headless

Если не хотим подключать монитор

SSH

В boot разделе создаем файл с именем ssh(это одноразовый способ: при наличии файла с именем ssh в разделе при старте raspberry sshd запускается и удаляется этот файл, поэтому не забываем в sudo raspi-config включить ssh насовсем)

# mkdir /mnt/boot_partition# mount /dev/sdf1 /mnt/boot_partition# touch /mnt/boot_partition/ssh# umount /dev/sdf1

Теперь при первом запуске у нас будет возможность подключиться к системе по ssh.

Wi-Fi

Если необходимо подключение к локальной сети посредством wifi, создаем в boot разделе файл wpa_supplicant.conf

# mkdir /mnt/boot_partition# mount /dev/sdf1 /mnt/boot_partition# vim /mnt/boot_partition/wpa_supplicant.conf# umount /dev/sdf1

Содержимое файла wpa_supplicant.conf

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdevupdate_config=1country=RUnetwork={ ssid="your_ssid" psk="your_wifi_password"}

Подробнее об этом конфиге

Первый запуск

Вставляем флешку в малину, подключаем ее по ethernet к сети, если не настроили wifi, подаем питание по microUSB, используя блок питания с предельным током как минимум 2 ампера.

Raspberry PI должна загрузить систему, а также подключиться к сети.

Попробуем получить к ней доступ по ssh.

Для этого нам необходимо узнать, какой ip-адрес получила raspberry pi в нашей локальной сети. Вы можете зайти в веб интерфейс маршрутизатора и посмотреть список активных хостов, но я предпочитаю использовать nmap. Выполняю сканирование сети посредством пингования всех ip адресов подсети.

# nmap -sn 192.168.0.1/24Starting Nmap 7.80 ( https://nmap.org ) at 2020-08-23 23:49 MSKNmap scan report for 192.168.0.1Host is up (0.00033s latency).Nmap scan report for 192.168.0.105Host is up (0.00016s latency).Nmap scan report for 192.168.0.120Host is up (0.00050s latency).Nmap done: 256 IP addresses (3 hosts up) scanned in 2.57 seconds

Здесь можно заметить, что кроме самого роутера(192.168.0.1) и моего ПК(192.168.0.105) появился еще один хост 192.168.0.120 - многовероятно, что это и есть наша малина.

Попробуем подключиться. Стандартная пара логин/пароль: pi/raspberry.

# ssh pi@192.168.0.120Linux raspberrypi 4.19.118-v7+ #1311 SMP Mon Apr 27 14:21:24 BST 2020 armv7lThe programs included with the Debian GNU/Linux system are free software;the exact distribution terms for each program are described in theindividual files in /usr/share/doc/*/copyright.Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extentpermitted by applicable law.Last login: Sun Aug 23 21:54:16 2020 from 192.168.0.105pi@raspberrypi:~ $

Мы успешно вошли по ssh на raspberry pi и теперь можем приступать к дальнейшей настройке системы.

Установка Domoticz

Domoticz - программная система для управления умным домом с открытым исходным кодом. Написана на C++. На хабре я видел статьи про аналоги этой системы, такие как openhub и home assistant, но мой выбор пал на domoticz вследствие того, что эта платформа максимально проста для конфигурирования, а кроме того, написана на C++, что делает ее гораздо менее требовательной к вычислительным мощностям для работы, чем аналоги, использующие java и python. Кроме того, подкупила простая система написания сценариев на Lua или python.

Итак, установим domoticz на наш одноплатник. Установка максимально простая, за что личный респект разработчикам.

pi@raspberrypi:~ $ sudo curl -L install.domoticz.com | sudo bash

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

После окончания установки и, на всякий случай, ребута, проверяем, что демон domoticz поднялся:

pi@raspberrypi:~ $ sudo service domoticz status

Также проверим, что web интерфейс доступен: http://192.168.0.120/

Watchdog

В процессе эксплуатации я заметил, что Domoticz иногда падает с ошибкой. Чтобы поднимать его автоматически, напишу watchdog с помощью cron.

#!/bin/sh# /etc/scripts/check_domoticz_online.sh# check domoticzstatus=`curl -s -i -H "Accept: application/json" "http://localhost:8080/json.htm?type=devices&rid=1" | grep "status"| awk -F: '{print $2}'|sed 's/,//'| sed 's/\"//g'`if [ $status ]then    echo "Domoticz has already been started"else    /home/pi/domoticz/domoticz.sh restart   fi
pi@raspberrypi:~ $ sudo crontab -e -u root*/5 * * * * /etc/scripts/check_domoticz_online.sh > /dev/null 2>&1

Теперь каждые 5 минут будет запускаться скрипт, который проверит, работает ли Domoticz и перезапустит его, если это необходимо

Настройка domoticz для работы с устройствами

Теперь, когда система работает и готова к продолжению конфигурирования, можно настроить какие нибудь устройства.

IP-камера

Самое простое, что можно настроить в Domoticz - это камера. Для этого зайдем в web-интерфейсе в Setup -> More options -> Cameras -> Add camera.

Вводим данные о своей камере. У меня возникли сложности с определением picture url, но они решились вот этим сервисом.

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

Z-Wave USB Stick

Посредством Domoticz, мы можем управлять домашней сетью Z-Wave IoT устройств. Это удобный протокол, позволяющий устройствам взаимодействовать друг с другом так, чтобы некоторые из них являлись, помимо своего основного назначения, Z-Wave ретрансляторами, своей работой расширяя радиус покрытия Z-Wave. Протокол закрытый, проприеритарный, поэтому просто создать свое Z-Wave устройство не выйдет, поэтому обычно, по этому протоколу работают покупные устройства/компоненты умного дома.

По моему опыту, настройка Z-Wave сети в Domoticz оказалась сильно проще и, в отличие от систем Home Assistant и openHub, здесь USB Stick заработал сразу и без проблем.

Для того, чтобы настроить свою сеть Z-Wave, я приобрел Z-Wave USB Stick. Подключив его к Raspberry pi, я добавил его как еще одну Hardware, с Type OpenZWave USB. Путь к Serial Port у меня выглядел примерно так: /dev/serial/by-id/usb-0658_0200-if00

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

ВАЖНО: следите, чтобы рабочая частота Z-Stick соответствовала рабочей частоте Z-Wave устройств

MQTT-брокер

Для создания кастомных IoT устройств я собираюсь использовать Arduino с подключением к локальной сети. В рамках данной сети общепринятым стандартом общения между устройствами является MQTT - протокол, ориентированный для обмена сообщениями по принципу издатель-подписчик. Для передачи сообщений посредством данного протокола нам необходим MQTT-брокер - своеобразный хаб для сообщений. Domoticz и IoT устройства выступят в качестве клиентов сети, подключившись к брокеру.

Установим свободный MQTT-брокер Mosquitto.

pi@raspberrypi:~ $ sudo wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key  pi@raspberrypi:~ $ sudo apt-key add mosquitto-repo.gpg.key  pi@raspberrypi:~ $ cd /etc/apt/sources.list.d/  pi@raspberrypi:/etc/apt/sources.list.d/ $ sudo wget http://repo.mosquitto.org/debian/mosquitto-jessie.listpi@raspberrypi:/etc/apt/sources.list.d/ $ cdpi@raspberrypi:~ $ sudo apt-get install mosquitto mosquitto-clientspi@raspberrypi:~ $ rm mosquitto-repo.gpg.key

Теперь Mosquitto установлен и работает. Мы можем подключиться к нему без аутентификации по адресу 0.0.0.0:1883. Таких настроек нам хватит на первое время.

Domoticz - MQTT клиент

Подключим domoticz к MQTT-брокеру. В web-интерфейсе Domoticz - Setup -> Hardware.

  • Type - MQTT Client Gateway with LAN interface.

  • Remote address - localhost

  • Port - 1883

  • Data Timeout - disabled

  • Username и password - оставляем пустыми до лучших времен

  • Prevent loop - в большинстве случаев эту настройку следует оставить включенной, но в нашем случае мы собираемся подключать собственные устройства по MQTT и управлять ими внешними методами, поэтому мы выключим prevent loop и domoticz будет пересылать все обновления статусов устройств из domoticz/in в domoticz/out. Это нужно, тк внешнее управление осуществляется посредством публикаций в domoticz/in, а наши устройства слушают domoticz/out, и если domoticz не будет пересылать сообщения из in в out, то устройства не смогут узнать об обновлениях их статусов.

  • Publish topic - топик, куда domoticz будет публиковать все обновления статусов. Для себя я оставил стандартно - out, и domoticz публикует в топик domoticz/out.

После нажатия на Add у нас добавился новый hardware. Если все хорошо, то в таблице, в колонке Enabled мы увидим Yes.

Dummy switch

Хотелось бы быстро проверить работу нашей системы. Для этого есть виртуальные устройства - не имеющие физических воплощений(по крайней мере, пока мы их не сделаем), но имеющие статус в системе domoticz и управляемые из нее.

Добавим Dummy hardware. В web-интерфейсе Domoticz - Setup -> Hardware

  • Type - Dummy (Does nothing, use for virtual switches only)

Добавляем. В таблице появилась еще одна запись. Можно увидеть, что в таблице рядом с Type есть кнопка Create virtual sensors. Нажимаем ее, вводим параметры

  • Name - lamp

  • Sensor type - Switch

Сохраняем и переходим в меню Switches. Теперь здесь можно увидеть новый переключатель:

Теперь мы можем посмотреть, как изменение переключателя отражается в топике MQTT.

pi@raspberrypi:~ $ mosquitto_sub -h localhost -v -t "domoticz/out"

Мы использовали клиент MQTT, который установили вместе с брокером, и подписались на топик, куда domoticz публикует свои обновления. Нажмем на лампочку в веб-интерфейсе

Смотрим в терминал и видим сообщение из топика:

domoticz/out {    "Battery" : 255,    "RSSI" : 12,    "description" : "",    "dtype" : "Light/Switch",    "hwid" : "4",    "id" : "00014052",    "idx" : 2,    "name" : "lamp",    "nvalue" : 1,    "stype" : "Switch",    "svalue1" : "0",    "switchType" : "On/Off",    "unit" : 1}

В подобных сообщениях Domoticz сообщает нам об изменении своего состояния. Формат тела сообщения - JSON. В поле name видим название, которое мы ранее установили для switch'а в domoticz. Новое состояние свитча мы можем увидеть в поле nvalue.

Программируем собственные IoT устройства на базе Arduino-like контроллеров.

Теперь, когда MQTT-брокер доступен из сети и Domoticz публикует туда сообщение каждый раз, когда мы переключаем switch, можно заняться программированием микроконтроллера. Задача: подключиться к сети, подключиться к брокеру MQTT, подписаться на нужный топик и парсить сообщения от Domoticz, выделяя те, поле name которых совпадает с названием, захардкоженым в программу, и выполняя переключения встроенного светодиода в зависимости от нового состояния из сообщения. Впоследствии переключаться будет не встроенный светодиод, а реле, управляя каким-либо процессом.

Для реализации данного функционала я использую клон Arduino Uno, Ethernet Shield, а также Arduino-like плату на основе контроллера ESP8266, который способен подключаться к сети по WiFi. Таким образом, у меня будут две версии устройства - с подключением по Ethernet и по WiFi.

Для работы с MQTT я использовал библиотеку MQTT.h. Для парсинга JSON - ArduinoJSON.h.

Изначально, написав скетч для Arduino, я, выставив значение для буферов MQTTClient и ArduinoJSON в 500 байт и использовав преобразование входных данных в класс String, превысил мизерное количество оперативной памяти в 2 килобайта. Уменьшив размер буферов до 300 байт и использовав "сишные" строки, мне удалось уложиться в данный лимит, и даже оставить 300-400 свободных байт, но стало понятно, что модифицировать и усложнять программу, добавлять дополнительную логику в случае этой платы будет затруднительно.

Исходный код скетча Arduino + Ethernet.

Программировать ESP8266 оказалось сильно проще, так как оперативной памяти здесь на порядок больше.

Исходный код скетча для ESP8266(WiFi).

Отлично! Оба устройства отслеживают изменения значения переключателя в интерфейсе Domoticz, и переключают светодиод соответственно значению переключателя!

Для себя в данный момент я сделал вывод, что гораздо разумнее использовать платы на основе ESP8266, потому что:

  • нет давящего ограничения по оперативной памяти

  • цена за комплект Arduino UNO + Ethernet Shield - 1100 руб, а на плату с работающим из коробки WiFi - 400

Таким образом, мы научились управлять собственным WiFi устройством прямо из интерфейса Domoticz, что открывает перед нами гигантские перспективы для автоматизации

Управляем всем через Яндекс Алису

Domoticz как таковой не поддерживает интеграцию с Алисой, потому что для этого необходим работающий навык Алисы и какой-то облачный интерфейс. Поэтому, для работы с Алисой предлагается следующий костыль: к mqtt брокеру, куда domoticz публикует изменения своих статусов, подключить homebridge - средство для подключения умного дома Apple, и передавать команды от Алисе к domoticz через него.

Поставим все необходимое ПО:

pi@raspberrypi:~ $ sudo apt updatepi@raspberrypi:~ $ sudo apt install -y nodejs npm libavahi-compat-libdnssd-devpi@raspberrypi:~ $ sudo npm install -g --unsafe-perm homebridge homebridge-config-ui-xpi@raspberrypi:~ $ sudo npm install -g -g --unsafe-perm homebridge-edomoticz

Запускаем

sudo hb-service install --user homebridge

Теперь заходим на веб-интерфейс homebridge по порту 8581, логинимся admin:admin и видим qr-код устройства, который сканируем приложением Дом на iphone. Homebridge своим плагином для domoticz должен видеть все устройства, зарегистрированные в domoticz, и когда мы добавим homebridge в приложение Дом на iphone, то мы сможем ими управлять. Происходит это посредством отправки сообщений в domoticz/in. Чтобы мое самодельное устройство начало получать эти изменения своего статуса, я отключил в настройках mqtt domoticz prevent loop. Таким образом, теперь, когда domoticz получает обновления статусов устройств через domoticz/in, он дублирует их в domoticz/out и устройства, слушающие domoticz/out, могут их получить. Позаботьтесь о том, чтобы ваши устройства не отвечали в domoticz/in на изменения своего статуса, чтобы не образовывались петли.

Для подключения Homebridge к Алисе я использовал g-on плагин. По ссылке - исчерпывающее описание настройки.

После окончания настройки мы имеем возможность управлять устройствами Domoticz, используя приложение Дом или Алису

Итог

Результатом моей работы стала система, обладающая приемлемой стабильностью, способная управлять IoT устройствами без необходимости подключения к интернету, позволяющая интегрировать собственные IoT устройства, работающие в сети WiFi, а также управлять этими устройствами голосовыми командами через Алису, или же с помощью облачного сервиса Apple

P.S.

Демонстрация работы системы. Торшер подключен к самодельной "умной розетке", состоящей из реле, которым управляет ESP8266. Розетка по MQTT общается с Domoticz

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru