Театр начинается с вешалки. Компьютерный клуб с хаба. А квартира с дверного звонка.
После перехода на самоизоляцию, понял, что без дверного звонка жить никак. Стук курьеров в дверь — это не то, что мне хочется слышать. Посмотрел какие есть звонки в онлайн магазинах и понял, что все это не для меня. При наличии систем умного дома, возможностей автоматизации, голосовых исполнителей в лице колонок Google Home в каждом уголке квартиры, нет ничего проще, чем сделать по настоящему умный звонок.
Приступим.
Для начала, как всегда, стоит определиться с набором требований к звонку и его роли в умном доме.
- Внешне кнопка звонка не должна никак выделяться и отличаться от обыкновенного звонка
- Необходимо реализовать оповещения всеми возможными способами (звонок, звук из колонок Google Home, сообщение в telegram, уведомление от приложения Дом от Apple)
- В свою очередь, необходимо иметь возможность звук выключить
- Нажатие на звонок должно порождать череду событий в системах умного дома, системах видеонаблюдения
Аппаратная часть.
Как то само-собой решилось, что в качестве связующего звена между механическим звонком и умным домом, будет zigbee датчик открытия двери. Выпаяв геркон и запаяв на его место нормально разомкнутый контакт звонка (можно и nc, просто логику надо будет перевернуть) получим беспроводную кнопку с антиванадльным размещением в коридоре (в отличии от варианта с установкой, например, круглой Xiaomi кнопки).
Выбрал на OZON обычную кнопку звонка, заказал ее и датчики открытия двери. Датчики приехали, а кнопку OZON доставить не смог. Даже не извинились. Благо удалось заказать ее в Ситилинк, вместе с IP камерой HIKVISION HiWatch DS-I122, которая тоже в этом проекте примет участие. В качестве кнопки будет использоваться кнопка выхода FALCON EYE FE-100.
Поразмыслив о целостности идеи, понял, что для полноты решения не хватает камеры видеонаблюдения, которая будет в тандеме с кнопкой звонка образовывать весьма интересную пару. И тут Остапа понесло.
Монтаж.
Камеру я и так прикупил, и не одну, с запасом (пришло время обновить на даче камеры). Не долго думая, взял перфоратор и замонтировал камеру в подьезде, проведя ethernet кабель под гипсокартоновым потолком прихожей (камера у меня с PoE).
Не убирая далеко перфоратор приделал и кнопку. Которую сразу же и подключил к датчику открытия двери вместо геркона.
Код и логика.
Первое, что необходимо в звонке — чтобы он звенел.
Вариантов для реализации я увидел два:
- Поставить электромеханический звонок и запитать его, скажем от Shelly 1, Sonoff Basic, DIY реле.
- Использовать вещание на существующие аудиустройства, встроенные в умный дом.
Первый вариант хорош многим. Например, звонок этот можно использовать как часть сигнализации. Его реализацию (даже в расширенном виде) я отложил в виду необходимости докупать некоторые компоненты. Второй же вариант, в моем случае, мог быть реализован «с колес».
У меня почти в каждом помещении квартиры установлены колонки Google Home (кстати, крайне рекомендую прикупить хотя бы классическую Google Home mini для интеграции «говорилки» в системы умного дома). Все они могут воспроизводить тексты, проигрывать .mp3 файлы или даже воспроизводить онлайн поток.
На этом, кстати, можно сделать радио интегрированное в homekit. Готовый пример обсуждался в нашем telegram чате. Заходите.
Итого родился такой замечательный flow обросший множеством выходов.
После импорта flow, в нем необходимо поменять некоторые параметры, свойственные вашей инсталляции. Внутри нод я постарался отметить все необходимые переменные максимально ОЧЕВИДНО.
Это основное flow, его работа дополняется извне.
Работа с GoogleHome для проговаривания текста, воспроизведения mp3.
Чтобы компонент работал с вашими .mp3 необходимо обеспечить их доступность на http ресурсе. Для этого можно использовать web движок самого node-red. Необходимо в файле конфигурации /home/pi/.node-red/settings.js изменить параметр httpStatic: ‘/home/pi/node-red-static/’, после рестарта node-red все файлы находящиеся в директории /home/pi/node-red-static/’ будут доступны по http://IPмалины:1880/filename.qwerty.
Далее выход на telegram. На этом шаге подготавливается текст и номер чата в который отправить. Необходимо зарегистрировать своего бота и произвсти настройку соответствующей ноды.
В будущих статьях более подробно расскажу о настройке telegram в nodered
Ну и последний выход этого flow — генерация внешних событий. Для себя я решил, что наиболее стабильно будет в этот момент, как минимум, дергать внешний sh скрипт, который получит картинку с камеры и отправит ее в telegram, а так же подготовит картинку для вывода на системный дисплей.
Код flow по вызову .sh скрипта в котором заложена логика по получению изображения и его отправке в telegram
А вот сам код этого скрипта.
Итоги.
Что имеем по результату.
- Привычного вида вызывная кнопка звонка
- Видеонаблюдение с использованием картинки в уведомлениях
- Полная интеграция с homekit
- Дополнительный канал уведомления в telegram
Изначально мой звонок проговаривал такую фразу. Теперь он говорит фразой из Простоквашино