Как стать автором
Обновить

Кошерный домофон

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров13K

Для начала давайте познакомимся. Привет, я – Женя. И я у мамы программист.  Не состою в отношениях, регламентируемых ТК РФ, поэтому решил пописать на Хабр статьи разной степени полезности. В процессе работы было не до этого - то работа, то семья, то корпоративные ограничения.

После написания статьи я понял, что вся эта статья в формате саморефлексии очень хорошо ложится ответом на вопрос на собеседованиях: «Расскажите о случае, когда вашу слабость удалось повернуть в сильную сторону».

Предисловие

Я живу в центральном районе города-миллионника, в многоквартирном доме. расположенным в закрытом дворе. Вход защищен домофоном компании «СтройМастерДомофон». Вот такой как на фото.

У меня часто происходила такая ситуация: выскакиваешь из дома, оставив метку для входа в квартире. Чтобы попасть обратно нужно или звонить в трубку, беспокоя семью, или звонить соседям, которые открывают не спрашивая кто там, стучать в калитку (если кто-то есть во дворе) или ждать пока будут выходить. Лезть через забор высотой 2.5 метра тяжело :)

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

Решение не очень удобное и не масштабируемое, так как каждому, кто хотел бы управлять домофоном точно так же, пришлось бы иметь рутованный смартфон на Андроиде. Взламывать свой основной телефон захочется не каждому, я вот не хочу – уже старый для таких движений.

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

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

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

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

Однажды осенью в соседском чате появился запрос с просьбой открыть калитку завтра в 22:30. Серия вопросов участников группы показала, что среди жильцов появились те, кто исповедует иудаизм с соблюдением Шаббата. А завтра будет Рош ха-Шона – аналог Нового года.

Оказывается калитка с домофоном, это большая проблема для соблюдающих Шаббат – нельзя намеренно производить действия, вызывающие электрические импульсы. Проблемой соседи прониклись, и когда видели, что люди мерзнут у калитки, выходили, открывали.

Продолжалось так несколько недель. Однажды, в процессе соседской болтовни (ведь вы же разговариваете с соседями? :) ) – соседом не была озвучена та же проблема: забываешь RFC-метку дома, а войти во двор как-то хочется.

Я рассказал результаты моих поисков и свое видение проблемы. Небольшой пинг-понг идеями после озвучивания вариантов — и вот родилась MVP-схема.

Принципиальная схема решения

Мы знаем, где стоит блок управления домофоном, лезть в  электрическую схему не хочется - а что если его отключать через приложение на смартфоне? Wifi с 2.4Ghz туда добивает, других проблем мы не придумали.

Взяли розетку c поддержкой приложения Smart Life: создали дом, добавили тестовую группу пользователей. Из плюсов, приложение можно подвязать к приложению Умный Дом с Алисой и ваша Яндекс.Станция научится открывать домофон по голосовой команде.

Итак, схема получалась следующей – если вы стоите у калитки без метки, но со смартфоном, нужно просто проделать старый советский трюк: выключить весь домофон через приложение и включить обратно, после того как зашли.

Некрасиво с точки зрения инженерной мысли
Некрасиво с точки зрения инженерной мысли

Там же в приложении нашли вариант создания скрипта автоматизации – Scene. Выглядело это так: выключи розетку, подожди 20 секунд, включи розетку. Так как одновременно больше одного пользователя не может пользоваться панелью вызова, это никому не мешает и незаметно для остальных.

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

Однажды ночью заметил что домофон включается с писком 🙂

Отлично, чтобы получить нужный писк переделываем скрипт автоматизации следующим образом:

  • выключи домофон;

  • жди 1 сек;

  • включи домофон;

  • жди 1 секунду;

  • выключи домофон;

  • жди 20 секунд;

  • включи домофон.

Так стало понятнее: теперь при сценарии когда в квартиру звонит курьер, гость, ктоугодно  —  и вам далеко бежать поднимать трубку и открывать дверь, берешь смартфон и открываешь замок. Дом.ру берет за такой сервис от 200 рублей в месяц с пользователя, а тут почти бесплатно и без бюрократии с голосованием жителей. Да, чуть медленнее – но работает же :)

Приводим к кошерному виду

После следующей серии тестов приступили к поиску вариантов, как и что сделать для иудеев  —  стоять в непогоду и ждать, пока откроют дверь в собственный дом, удовольствие не из приятных. Теперь можно открыть замок, без физического упражнения "сход к калитке", заметив из окон верхних этажей человека у калитки, но всё равно приходится ждать реакции стороннего наблюдателя – этого недостаточно.

Изначально думали использовать голосовой помощник в смартфоне или умной колонке. Схема такая: говоришь в пустоту «Алиса/Сири, открой дверь через 5 минут», выходишь и пока идешь к калитке, выключается замок. Так же с четким временем возвращения, но только открой дверь в 19:00.

Отправили выяснять у Раввина, можно ли так, вернулись с ответом – нет, нельзя. Одна из причин: телефон в это святое время выключен, а умная колонка это электричество и не стоит её беспокоить.

Ушли думать…

В процессе тестирования схема с приложением SmartLife выявила 2 недостатка:

  1. Пользователи выключали домофон на любое время, что вызывает недовольство жителей дома. Намеренно или случайно — разницы нет.

  1. Добавить нового пользователя – квест с неизвестным результатом, так как нужны следующие шаги: установка приложения в смартфон, создание учетной записи сервиса, подключение к дому, краткий инструктаж по тому как это работает. Первое же расширение тестовой группы уперлось в смартфон Huawei, на тот момент SmartLife отказалась в него устанавливаться.

Как альтернативное решение рассматривали замену вызовной панели на модель со встроенной камерой и распознаванием лиц, – на маркетплейсах представлены недорогие решения. После озвучивания идеи в глазах религиозной группы пользователей появился неподдельный страх запрета перемещения по городу в шаббат от Раввина.

Решение пришло со стороны моей подработки (они предоставляют сервис через бота в Telegram). Я и подумал, а что если написать бота, который умеет вызывать действия из IoT-облака Tuya, к которому подключена умная розетка, и приложение Smart Life управляет розеткой через него же.

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

Приложение популярное – установлено у многих, и можно просто добавлять новых пользователей, без плясок с установкой Smart Life, вводом вот этого кода вот сюда и других дополнительных действий.

Но было непонятно, насколько на этот раз решение кошерное?

Нашелся человек, который консультирует по таким тонким вопросам. Мне было интересно узнать, как те, кто соблюдают Шаббат, справляются с проблемой "открыть дверь с электрическим замком" в России. Насколько понимаю, в Израиле она открыта в эти часы.

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

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

Дальше дело техники, погнали.

Пишем бота на Go с ACL, и поддержкой групп

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

Сейчас бы, возможно, реализовал на Python. Недавно на Хабре писали о проекте Django-Telegram – выглядит так что с его использованием было бы проще и быстрее реализовать логику работы с мессенджером.

Хранилище – БД sqlite3, но также присутствует поддержка MySQL и PostgreSQL. Базовая конфигурация через yaml файл, там же указываем какие сценарии можно выполнять через бот, есть возможность указать специальные сценарии для групп.

tuya:
  access_id: ooooyeah
  access_key: superaccessskey
  user_id: useridwashere
telegram:
  token_bot: tgbot-key-botfather-gave-us
db:
  driver: "sqlite3"
  connection: "data.db"
acl:
  actions:
       allow:
          - Открыть домофон
       only:
          shabat:
  	- Выключи замок
stickers:
qr:
  enable: false
  cmd: "Открыть домофон"

В результате родился бот с поддержкой Tuya и Ewelink IoT облаков. О внезапном появлении Ewelink расскажу в одной из следующих статей). Этим решением пользуется 50% жителей дома. Остальные, наверное, не поняли что это и почему, а может и не нужно.

Контроль доступа и регистрация новых пользователей  —  производятся по старым добрым приглашениям.

В секции администрирования пункт “генерация приглашения”, после чего ссылка с уникальным одноразовым кодом уже передается новому пользователю через каналы связи. До тех пор пока человек не пришел с ней к боту, он считается неавторизованным, и вместо меню действий показывает веселые картинки, которые указываются в конфигурации, параметр stickers. Можно было бы и без них, но с картинками веселее.

Я нахожу текущее решение масштабируемым для разных категорий пользователей, при отсутствии необходимости серьезного изменения архитектуры СКУД. После того как монтажники Строймастердомофона украли розетку, мы просто поставили на ее место другую, добавили в Smart Life, переподвязали скрипты к новому устройству и перезапустили бота. На это ушло минут 5, дольше ругались с колл-центром.

Выявленные проблемы:

  • REST API в Tuya Cloud платное, и, насколько понял, минимальный платеж 25000$/год. Я проверил свои депозиты, но потом вспомнил что санкции же – перевод может и не дойти. Пока пользуюсь добротой и возможностью продлевать Trial период на 6 месяцев. Создаваемая нагрузка на системы – микроскопическая, тысячные доли доллара за весь Trial-период;

  • Настройка аккаунта разработчика в Tuya Cloud сложновата для нетехнических специалистов. По этой причине статья публикуется здесь а не в Дзене;

  • У Ewelink клиента для Go нет метода выполнять сценарии  —  это пока не нужно, но полной обратной совместимости функциональности между облаками нет; Так что можно сказать что существует Вендор-лок;

  • Из-за эмуляции звукового сигнала создается ощущение что управление происходит медленно.

На основании вышесказанного, в течение следующих месяцев буду импортозамещаться и переходить на API Умного дома Яндекса: работает бесплатно как Ewelink и нужная функциональность как у Tuya.

Немножко про UX

Использование показало, что я - ленивый: достать телефон, разблокировать, открыть Telegram, выбрать бота, нажать там на кнопку – процесс, который можно сократить и упростить.

В итоге записали в NFС метку ссылку на бота со специальным флагом, приклеили её рядом с домофоном – прикладываешь телефон, открывается URL, бот уже открывает калитку или показывает веселую картинку. Для тех у кого нет NFC, напечатали QR.

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

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

Так что дарю идею продактам Яндекс.Доставки: партнерьтесь через Умный дом с теми, кто массово обслуживает домофоны, создайте возможность входа для курьеров. Самокат и Сбермаркет подтягивайтесь, но вам это будет сложнее. В таких масштабах, как мне кажется, скорость даст экономический эффект и улучшит пользовательский опыт клиентов.

Если бот вам интересен, дайте знать в комментариях  или ЛС – причешу, чтобы было не стыдно, и опубликую проект на Github. На данный момент не выложил потому что статья не о коде, а о том что проблемы допустимо решать и вот такими способами.

Теги:
Хабы:
+17
Комментарии28

Публикации